From bb0c562a80a986218f06cc1c621af37d3ade75b3 Mon Sep 17 00:00:00 2001 From: Andrey Cunha Date: Thu, 12 Mar 2026 11:07:28 -0300 Subject: [PATCH 01/25] att --- Lançamento de documentos/.metadata/.lock | 0 .../org.eclipse.e4.workbench/workbench.xmi | 3286 +++++++++++++++++ .../0.log | 1 + .../.plugins/org.eclipse.rse.core/.log | 0 4 files changed, 3287 insertions(+) create mode 100644 Lançamento de documentos/.metadata/.lock create mode 100644 Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi create mode 100644 Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log create mode 100644 Lançamento de documentos/.metadata/.plugins/org.eclipse.rse.core/.log diff --git a/Lançamento de documentos/.metadata/.lock b/Lançamento de documentos/.metadata/.lock new file mode 100644 index 0000000..e69de29 diff --git a/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi b/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi new file mode 100644 index 0000000..c997dc3 --- /dev/null +++ b/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi @@ -0,0 +1,3286 @@ + + + + activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration + ModelMigrationProcessor.001 + + + + + topLevel + + + + + persp.actionSet:org.eclipse.mylyn.doc.actionSet + persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation + persp.actionSet:org.eclipse.ui.cheatsheets.actionSet + persp.actionSet:org.eclipse.rse.core.search.searchActionSet + persp.actionSet:org.eclipse.search.searchActionSet + persp.actionSet:org.eclipse.text.quicksearch.actionSet + persp.actionSet:org.eclipse.ui.edit.text.actionSet.annotationNavigation + persp.actionSet:org.eclipse.ui.edit.text.actionSet.navigation + persp.actionSet:org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo + persp.actionSet:org.eclipse.ui.externaltools.ExternalToolsSet + persp.actionSet:org.eclipse.ui.actionSet.keyBindings + persp.actionSet:org.eclipse.ui.actionSet.openFiles + persp.actionSet:org.eclipse.wst.jsdt.chromium.debug.ui.actionSets + persp.actionSet:org.eclipse.jst.j2ee.J2eeMainActionSet + persp.actionSet:org.eclipse.jdt.ui.JavaActionSet + persp.actionSet:org.eclipse.debug.ui.launchActionSet + persp.actionSet:org.eclipse.debug.ui.debugActionSet + persp.actionSet:org.eclipse.ui.NavigateActionSet + persp.viewSC:org.eclipse.ui.navigator.ProjectExplorer + persp.viewSC:org.eclipse.wst.server.ui.ServersView + persp.viewSC:org.eclipse.datatools.connectivity.DataSourceExplorerNavigator + persp.viewSC:org.eclipse.ui.views.BookmarkView + persp.viewSC:org.eclipse.ui.views.ContentOutline + persp.viewSC:org.eclipse.ui.views.PropertySheet + persp.viewSC:org.eclipse.ui.views.ResourceNavigator + persp.viewSC:org.eclipse.wst.common.snippets.internal.ui.SnippetsView + persp.viewSC:org.eclipse.ui.views.AllMarkersView + persp.viewSC:org.eclipse.mylyn.tasks.ui.views.tasks + persp.viewSC:org.eclipse.search.ui.views.SearchView + persp.viewSC:org.eclipse.ui.console.ConsoleView + persp.showIn:org.eclipse.ui.navigator.ProjectExplorer + persp.actionSet:org.eclipse.wst.ws.explorer.explorer + persp.newWizSC:org.eclipse.m2e.core.wizards.Maven2ProjectWizard + persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView + persp.perspSC:org.eclipse.debug.ui.DebugPerspective + persp.perspSC:org.eclipse.jdt.ui.JavaPerspective + persp.perspSC:org.eclipse.ui.resourcePerspective + persp.perspSC:org.eclipse.wst.web.ui.webDevPerspective + persp.newWizSC:org.eclipse.jst.j2ee.ui.project.facet.EarProjectWizard + persp.newWizSC:org.eclipse.jst.servlet.ui.project.facet.WebProjectWizard + persp.newWizSC:org.eclipse.jst.ejb.ui.project.facet.EjbProjectWizard + persp.newWizSC:org.eclipse.jst.j2ee.jca.ui.internal.wizard.ConnectorProjectWizard + persp.newWizSC:org.eclipse.jst.j2ee.ui.project.facet.appclient.AppClientProjectWizard + persp.newWizSC:org.eclipse.wst.web.ui.internal.wizards.SimpleWebProjectWizard + persp.newWizSC:org.eclipse.jpt.ui.wizard.newJpaProject + persp.newWizSC:org.eclipse.jst.servlet.ui.internal.wizard.AddServletWizard + persp.newWizSC:org.eclipse.jst.ejb.ui.internal.wizard.AddSessionBeanWizard + persp.newWizSC:org.eclipse.jst.ejb.ui.internal.wizard.AddMessageDrivenBeanWizard + persp.newWizSC:org.eclipse.jpt.ui.wizard.newEntity + persp.newWizSC:org.eclipse.jst.ws.creation.ui.wizard.serverwizard + persp.newWizSC:org.eclipse.ui.wizards.new.folder + persp.newWizSC:org.eclipse.ui.wizards.new.file + persp.actionSet:org.eclipse.wst.server.ui.internal.webbrowser.actionSet + persp.actionSet:org.eclipse.debug.ui.breakpointActionSet + persp.actionSet:org.eclipse.eclemma.ui.CoverageActionSet + persp.showIn:org.eclipse.eclemma.ui.CoverageView + persp.newWizSC:org.eclipse.jpt.jpa.ui.wizard.newJpaProject + persp.perspSC:org.eclipse.jpt.ui.jpaPerspective + + + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:Java + + + View + categoryTag:Java Browsing + + + + + + + + View + categoryTag:General + + + View + categoryTag:Mylyn + + + View + categoryTag:General + + + + + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:Server + + + View + categoryTag:Data Management + + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:General + + + + + + + + persp.actionSet:org.eclipse.mylyn.doc.actionSet + persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation + persp.actionSet:org.eclipse.ui.cheatsheets.actionSet + persp.actionSet:org.eclipse.rse.core.search.searchActionSet + persp.actionSet:org.eclipse.search.searchActionSet + persp.actionSet:org.eclipse.text.quicksearch.actionSet + persp.actionSet:org.eclipse.ui.edit.text.actionSet.annotationNavigation + persp.actionSet:org.eclipse.ui.edit.text.actionSet.navigation + persp.actionSet:org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo + persp.actionSet:org.eclipse.ui.externaltools.ExternalToolsSet + persp.actionSet:org.eclipse.ui.actionSet.keyBindings + persp.actionSet:org.eclipse.ui.actionSet.openFiles + persp.actionSet:org.eclipse.wst.jsdt.chromium.debug.ui.actionSets + persp.newWizSC:org.eclipse.ui.wizards.new.folder + persp.newWizSC:org.eclipse.ui.wizards.new.file + persp.viewSC:org.eclipse.ui.views.BookmarkView + persp.viewSC:org.eclipse.ui.views.PropertySheet + persp.viewSC:org.eclipse.ui.views.ProblemView + persp.viewSC:org.eclipse.ui.views.ProgressView + persp.actionSet:org.eclipse.ui.NavigateActionSet + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateBpmnProjectWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateBpmnDiagramWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateScriptGeneralWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateFormWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateReportWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateDatasetWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateEventWizardID + persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateLayoutWizardID + persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateWidgetWizardID + persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView + + + + + View + categoryTag:Java + + + View + categoryTag:General + + + View + categoryTag:Fluig + + + + + View + categoryTag:General + + + + + + + active + noFocus + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:Fluig + + + View + categoryTag:Fluig + + + View + categoryTag:Fluig + + + + + + + + + View + categoryTag:Help + + + View + categoryTag:General + + + View + categoryTag:Help + + + + + + + View + categoryTag:Help + + + + + + View + categoryTag:General + + ViewMenu + menuContribution:menu + + + + + + + View + categoryTag:Help + + + + org.eclipse.e4.primaryDataStack + EditorStack + + + Editor + removeOnHide + com.totvs.tds.ecm.designer.bpmneditor + + + + + + + View + categoryTag:General + + ViewMenu + menuContribution:menu + + + + + + + View + categoryTag:General + + + + + View + categoryTag:Java + + + + + View + categoryTag:Java Browsing + + + + + View + categoryTag:General + + ViewMenu + menuContribution:menu + + + + + + + + View + categoryTag:General + active + + ViewMenu + menuContribution:menu + + + + + + + View + categoryTag:Server + + + + + View + categoryTag:Data Management + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + + View + categoryTag:General + + ViewMenu + menuContribution:menu + + + + + + + + View + categoryTag:Mylyn + + ViewMenu + menuContribution:menu + + + + + + + View + categoryTag:General + + + + + + View + categoryTag:Java + + ViewMenu + menuContribution:menu + + + + + + + + View + categoryTag:Fluig + + ViewMenu + menuContribution:menu + + + + + + + + View + categoryTag:General + + ViewMenu + menuContribution:menu + + + + + + + View + categoryTag:Fluig + + + + + View + categoryTag:Fluig + + + + + View + categoryTag:Fluig + + + + toolbarSeparator + + + + Draggable + + + + toolbarSeparator + + + + Draggable + + + toolbarSeparator + + + + Draggable + + + Draggable + + + Draggable + + + Draggable + + + Draggable + + + Draggable + + + toolbarSeparator + + + + Draggable + + + + Draggable + + + toolbarSeparator + + + + toolbarSeparator + + + + Draggable + + + stretch + SHOW_RESTORE_MENU + + + Draggable + HIDEABLE + SHOW_RESTORE_MENU + + + + + stretch + + + Draggable + + + Draggable + + + + + Draggable + + + + + TrimStack + Draggable + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + platform:win32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + platform:win32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Editor + removeOnHide + + + + + View + categoryTag:Ant + + + + + View + categoryTag:Gradle + + + + + View + categoryTag:Gradle + + + + + View + categoryTag:Data Management + + + + + View + categoryTag:Data Management + + + + + View + categoryTag:Data Management + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Java + + + + + View + categoryTag:Git + + + + + View + categoryTag:Git + + + + + View + categoryTag:Git + + + + + View + categoryTag:Git + NoRestore + + + + + View + categoryTag:Git + + + + + View + categoryTag:General + + + + + View + categoryTag:Help + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Java + + + + + View + categoryTag:Java + + + + + View + categoryTag:Java + + + + + View + categoryTag:Java Browsing + + + + + View + categoryTag:Java Browsing + + + + + View + categoryTag:Java Browsing + + + + + View + categoryTag:Java Browsing + + + + + View + categoryTag:Java + + + + + View + categoryTag:General + + + + + View + categoryTag:Java + + + + + View + categoryTag:Java + + + + + View + categoryTag:JPA + + + + + View + categoryTag:JPA + + + + + View + categoryTag:JavaServer Faces + + + + + View + categoryTag:JavaServer Faces + + + + + View + categoryTag:Web Services + + + + + View + categoryTag:Maven + + + + + View + categoryTag:Maven + + + + + View + categoryTag:Mylyn + + + + + View + categoryTag:Mylyn + + + + + View + categoryTag:Mylyn + + + + + View + categoryTag:Oomph + + + + + View + categoryTag:API Tools + + + + + View + categoryTag:Plug-in Development + + + + + View + categoryTag:Plug-in Development + + + + + View + categoryTag:Plug-in Development + + + + + View + categoryTag:Plug-in Development + + + + + View + categoryTag:Plug-in Development + + + + + View + categoryTag:Plug-in Development + + + + + View + categoryTag:Remote Systems + + + + + View + categoryTag:Remote Systems + + + + + View + categoryTag:Remote Systems + + + + + View + categoryTag:Remote Systems + + + + + View + categoryTag:Remote Systems + + + + + View + categoryTag:Remote Systems + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:Team + + + + + View + categoryTag:Team + + + View + categoryTag:Help + + + + + View + categoryTag:Terminal + + + + + View + categoryTag:Other + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:Help + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:Debug + + + + + View + categoryTag:JavaScript + + + + + View + categoryTag:JavaScript + + + + + View + categoryTag:JavaScript + + + + + View + categoryTag:JavaScript + + + + + View + categoryTag:JavaScript + + + + + View + categoryTag:Server + + + + + View + categoryTag:XML + + + + + View + categoryTag:XML + + + + + View + categoryTag:XML + + + + + View + categoryTag:XML + + + + + View + categoryTag:XML + + + + + View + categoryTag:Fluig + + + + + View + categoryTag:Fluig + + + + + View + categoryTag:Fluig + + + + + View + categoryTag:Fluig + + + + + View + categoryTag:Fluig + + + + + View + categoryTag:General + + + + glue + move_after:PerspectiveSpacer + SHOW_RESTORE_MENU + + + move_after:Spacer Glue + HIDEABLE + SHOW_RESTORE_MENU + + + glue + move_after:SearchField + SHOW_RESTORE_MENU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log b/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log new file mode 100644 index 0000000..882fc2f --- /dev/null +++ b/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log @@ -0,0 +1 @@ +2026-03-12 10:11:35,412 [Worker-5: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is out-of-date. Trying to update. diff --git a/Lançamento de documentos/.metadata/.plugins/org.eclipse.rse.core/.log b/Lançamento de documentos/.metadata/.plugins/org.eclipse.rse.core/.log new file mode 100644 index 0000000..e69de29 From 7113b026ef74c1b04f05797b7258676c32e5fea1 Mon Sep 17 00:00:00 2001 From: Andrey Cunha Date: Thu, 12 Mar 2026 23:05:52 -0300 Subject: [PATCH 02/25] att --- .../forms/40213 - checklist/.metadata | Bin 578 -> 635 bytes .../assets/js/fluigFormAttachment.js | 15 +- Lançamento de documentos/.gitignore | 1 + .../org.eclipse.e4.workbench/workbench.xmi | 4465 +++++++++-------- Lançamento de documentos/.vscode/launch.json | 18 + Lançamento de documentos/.vscode/servers.json | 17 + Lançamento de documentos/lançamentos/.project | 18 + .../.settings/org.eclipse.core.resources.prefs | 13 + .../datasets/dsPortalFornecedorNF.js | 42 + .../.metadata | Bin 0 -> 623 bytes .../totvsflow_lancamento_documento.html | 1271 +++++ .../src/main/resources/application.info | 19 + .../src/main/resources/edit.ftl | 5 + .../main/resources/portalfornecedor.properties | 2 + .../resources/portalfornecedor_en_US.properties | 2 + .../resources/portalfornecedor_es.properties | 2 + .../resources/portalfornecedor_pt_BR.properties | 2 + .../src/main/resources/view.ftl | 184 + .../src/main/webapp/WEB-INF/jboss-web.xml | 5 + .../src/main/webapp/WEB-INF/web.xml | 7 + .../webapp/resources/css/portalfornecedor.css | 346 ++ .../src/main/webapp/resources/images/icon.png | Bin 0 -> 7845 bytes .../resources/images/logo.ginseng.branca.png | Bin 0 -> 16409 bytes .../webapp/resources/js/portalfornecedor.js | 460 ++ .../target/portalfornecedor.war | Bin 0 -> 31780 bytes ...owEssentials_LancamentodeDocumento.ecm30.xml | 722 +++ .../FlowEssentials_LancamentodeDocumento.png | Bin 0 -> 20989 bytes ...tials_LancamentodeDocumento.processimage.svg | 2 + .../workflow/.resources/Fluig prod.ws.cache | 724 +++ .../workflow/.resources/Fluig prod.ws.cache.bkp | 726 +++ ...FlowEssentials_LancamentodeDocumento.process | 939 ++++ ...ls_LancamentodeDocumento.beforeStateEntry.js | 60 + ...s_LancamentodeDocumento.publicarDocumento.js | 97 + 33 files changed, 7939 insertions(+), 2225 deletions(-) create mode 100644 Lançamento de documentos/.gitignore create mode 100644 Lançamento de documentos/.vscode/launch.json create mode 100644 Lançamento de documentos/.vscode/servers.json create mode 100644 Lançamento de documentos/lançamentos/.project create mode 100644 Lançamento de documentos/lançamentos/.settings/org.eclipse.core.resources.prefs create mode 100644 Lançamento de documentos/lançamentos/datasets/dsPortalFornecedorNF.js create mode 100644 Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/.metadata create mode 100644 Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/totvsflow_lancamento_documento.html create mode 100644 Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/application.info create mode 100644 Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/edit.ftl create mode 100644 Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/portalfornecedor.properties create mode 100644 Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/portalfornecedor_en_US.properties create mode 100644 Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/portalfornecedor_es.properties create mode 100644 Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/portalfornecedor_pt_BR.properties create mode 100644 Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/view.ftl create mode 100644 Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/WEB-INF/jboss-web.xml create mode 100644 Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/WEB-INF/web.xml create mode 100644 Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/css/portalfornecedor.css create mode 100644 Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/images/icon.png create mode 100644 Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/images/logo.ginseng.branca.png create mode 100644 Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/js/portalfornecedor.js create mode 100644 Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/target/portalfornecedor.war create mode 100644 Lançamento de documentos/lançamentos/workflow/.resources/FlowEssentials_LancamentodeDocumento.ecm30.xml create mode 100644 Lançamento de documentos/lançamentos/workflow/.resources/FlowEssentials_LancamentodeDocumento.png create mode 100644 Lançamento de documentos/lançamentos/workflow/.resources/FlowEssentials_LancamentodeDocumento.processimage.svg create mode 100644 Lançamento de documentos/lançamentos/workflow/.resources/Fluig prod.ws.cache create mode 100644 Lançamento de documentos/lançamentos/workflow/.resources/Fluig prod.ws.cache.bkp create mode 100644 Lançamento de documentos/lançamentos/workflow/diagrams/FlowEssentials_LancamentodeDocumento.process create mode 100644 Lançamento de documentos/lançamentos/workflow/scripts/FlowEssentials_LancamentodeDocumento.beforeStateEntry.js create mode 100644 Lançamento de documentos/lançamentos/workflow/scripts/FlowEssentials_LancamentodeDocumento.publicarDocumento.js diff --git a/Auditoria_checklist/forms/40213 - checklist/.metadata b/Auditoria_checklist/forms/40213 - checklist/.metadata index f6e09b61b1c7759ec8f7b57221f5bc67039ae781..06b0502ab915dc76302f138400686bc7a8a8de00 100644 GIT binary patch delta 109 zcmX@a@|$JC6?Ud_76t|erj57V7^8{{8R{6=N*EYQ7&wzNQj@cDGK)*Vg4_%Yb43eE x7`WVWN;A_H3X1YmkkwRxG>VikNFWt8OR000cJBKrUU delta 29 lcmey(a)@QZ6?VpQ76t|e#*Me#7}+Wc8R{7LCMPgS0|1D{2n+xK diff --git a/Auditoria_checklist/forms/40213 - checklist/assets/js/fluigFormAttachment.js b/Auditoria_checklist/forms/40213 - checklist/assets/js/fluigFormAttachment.js index a4763ce..d5cc6dc 100644 --- a/Auditoria_checklist/forms/40213 - checklist/assets/js/fluigFormAttachment.js +++ b/Auditoria_checklist/forms/40213 - checklist/assets/js/fluigFormAttachment.js @@ -195,11 +195,20 @@ #canDisplayActionButton() { const element = this.#input.get(0); + const hasEditPermission = parent.ECM.workflowView.userPermissions.indexOf("P") >= 0; + const isManagerMode = location.href.includes('ManagerMode'); + const isTokenView = location.href.includes('token'); + const hasMobileCameraBridge = ( + (window.JSInterface && typeof window.JSInterface.showCamera === "function") + || (parent && parent.JSInterface && typeof parent.JSInterface.showCamera === "function") + ); + const isMobileUA = /android|iphone|ipad|ipod|mobile/i.test(navigator.userAgent || ""); + const allowByContext = (isManagerMode && !isTokenView) || hasMobileCameraBridge || isMobileUA; + const allowByPermission = hasEditPermission || hasMobileCameraBridge || isMobileUA; return this.#settings.showActionButton - && parent.ECM.workflowView.userPermissions.indexOf("P") >= 0 - && location.href.includes('ManagerMode') - && !location.href.includes('token') + && allowByPermission + && allowByContext && element.nodeName.toLowerCase() === "input" && !element.disabled ; diff --git a/Lançamento de documentos/.gitignore b/Lançamento de documentos/.gitignore new file mode 100644 index 0000000..e10e727 --- /dev/null +++ b/Lançamento de documentos/.gitignore @@ -0,0 +1 @@ +/.metadata/ diff --git a/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi b/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi index c997dc3..1899e3e 100644 --- a/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi +++ b/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi @@ -1,16 +1,16 @@ - - + + activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration ModelMigrationProcessor.001 - + topLevel - - - + + + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -70,85 +70,85 @@ persp.showIn:org.eclipse.eclemma.ui.CoverageView persp.newWizSC:org.eclipse.jpt.jpa.ui.wizard.newJpaProject persp.perspSC:org.eclipse.jpt.ui.jpaPerspective - - - + + + View categoryTag:General - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java Browsing - - - - - + + + + + View categoryTag:General - + View categoryTag:Mylyn - + View categoryTag:General - - + + View categoryTag:General - + View categoryTag:General - + View categoryTag:Server - + View categoryTag:Data Management - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General @@ -156,7 +156,7 @@ - + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -188,55 +188,55 @@ persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateLayoutWizardID persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateWidgetWizardID persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView - - - - + + + + active + noFocus + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Fluig - - + + View categoryTag:General - - - - active - noFocus - + + + + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig @@ -245,3042 +245,3063 @@ - - + + View categoryTag:Help - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:Help - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Help - - + + org.eclipse.e4.primaryDataStack EditorStack - + Editor removeOnHide com.totvs.tds.ecm.designer.bpmneditor + + + Editor + removeOnHide + org.eclipse.wst.jsdt.ui.CompilationUnitEditor + + + + Editor + removeOnHide + org.eclipse.wst.jsdt.ui.CompilationUnitEditor + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java Browsing - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - active - + ViewMenu menuContribution:menu - + - + View categoryTag:Server - + View categoryTag:Data Management - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Mylyn - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:Java - + active + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + + View categoryTag:Fluig + + ViewMenu + menuContribution:menu + + - + View categoryTag:Fluig - + View categoryTag:Fluig - - + + toolbarSeparator - + - + Draggable - + - + toolbarSeparator - + - + Draggable - + toolbarSeparator - + - + Draggable - + Draggable - + Draggable - + Draggable - + Draggable - + Draggable - + toolbarSeparator - + - + Draggable - + - + Draggable - + + Draggable + + toolbarSeparator - + - + toolbarSeparator - + - + Draggable - + stretch SHOW_RESTORE_MENU - + Draggable HIDEABLE SHOW_RESTORE_MENU - - + + stretch - + Draggable - + Draggable - + Draggable - - + + TrimStack Draggable - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - - - + + + + - - - + + + - - - - - + + + + + - - + + - - + + - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + platform:win32 - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - + + + + - - + + - - - - + + + + - - - - - - - - + + + + + + + + - - + + - - - - - - + + + + + + - - - + + + - - - + + + - - - - - - + + + + + + - - - - - - - - - + + + + + + + + + - - + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + - - + + - - + + platform:win32 - - + + - - + + - - - - - - - + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Editor removeOnHide - + View categoryTag:Ant - + View categoryTag:Gradle - + View categoryTag:Gradle - + View categoryTag:Data Management - + View categoryTag:Data Management - + View categoryTag:Data Management - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Java - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git NoRestore - + View categoryTag:Git - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:Debug - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:JPA - + View categoryTag:JPA - + View categoryTag:JavaServer Faces - + View categoryTag:JavaServer Faces - + View categoryTag:Web Services - + View categoryTag:Maven - + View categoryTag:Maven - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Oomph - + View categoryTag:API Tools - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Team - + View categoryTag:Team - + View categoryTag:Help - + View categoryTag:Terminal - + View categoryTag:Other - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Debug - + View categoryTag:JavaScript - + View categoryTag:JavaScript - + View categoryTag:JavaScript - + View categoryTag:JavaScript - + View categoryTag:JavaScript - + View categoryTag:Server - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:General - - + + glue move_after:PerspectiveSpacer SHOW_RESTORE_MENU - + move_after:Spacer Glue HIDEABLE SHOW_RESTORE_MENU - + glue move_after:SearchField SHOW_RESTORE_MENU - - - - - + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lançamento de documentos/.vscode/launch.json b/Lançamento de documentos/.vscode/launch.json new file mode 100644 index 0000000..104d190 --- /dev/null +++ b/Lançamento de documentos/.vscode/launch.json @@ -0,0 +1,18 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "totvs_language_debug", + "request": "launch", + "name": "TOTVS Language Debug", + "program": "${command:AskForProgramName}", + "cwb": "${workspaceFolder}", + "smartclientBin": "../totvs/bin/smartclient/smartclient.exe", + "isMultiSession": true, + "enableTableSync": true, + "extendFeatures": { + "charDetails": false + } + } + ] +} \ No newline at end of file diff --git a/Lançamento de documentos/.vscode/servers.json b/Lançamento de documentos/.vscode/servers.json new file mode 100644 index 0000000..9854b91 --- /dev/null +++ b/Lançamento de documentos/.vscode/servers.json @@ -0,0 +1,17 @@ +{ + "version": "1.0.0", + "configurations": [ + { + "id": "cafi5jey9zammnjzp2n5z2h8lutld7", + "name": "Fluig produção", + "host": "comerciode188006.fluig.cloudtotvs.com.br", + "ssl": true, + "port": 443, + "username": "andrey.cunha", + "password": "eyJpdiI6ImQwNjBhYWU1NzM3ZjVhNzU0ZWExOWYwZGZiNDEzNWI3Iiwic2FsdCI6IjQ0NmVjYTQ4OTY3ZWViOTc3NmRjY2E4M2UyYzc2NGViIiwidGV4dCI6ImNmZWRiYzFlODFjY2EwOTUzOWZlMGVlMTMzZWIwNzA0In0=", + "userCode": "andrey.cunha", + "confirmExporting": false, + "companyId": 1 + } + ] +} \ No newline at end of file diff --git a/Lançamento de documentos/lançamentos/.project b/Lançamento de documentos/lançamentos/.project new file mode 100644 index 0000000..3046dc0 --- /dev/null +++ b/Lançamento de documentos/lançamentos/.project @@ -0,0 +1,18 @@ + + + lançamentos + + + + + + org.eclipse.wst.validation.validationbuilder + + + + + + org.eclipse.wst.jsdt.core.jsNature + com.totvs.tds.ecm.designer.nature + + diff --git a/Lançamento de documentos/lançamentos/.settings/org.eclipse.core.resources.prefs b/Lançamento de documentos/lançamentos/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..3a52e2d --- /dev/null +++ b/Lançamento de documentos/lançamentos/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,13 @@ +eclipse.preferences.version=1 +encoding//wcm/widget/portalfornecedor/src/main/resources/application.info=utf8 +encoding//wcm/widget/portalfornecedor/src/main/resources/edit.ftl=utf8 +encoding//wcm/widget/portalfornecedor/src/main/resources/portalfornecedor.properties=utf8 +encoding//wcm/widget/portalfornecedor/src/main/resources/portalfornecedor_en_US.properties=utf8 +encoding//wcm/widget/portalfornecedor/src/main/resources/portalfornecedor_es.properties=utf8 +encoding//wcm/widget/portalfornecedor/src/main/resources/portalfornecedor_pt_BR.properties=utf8 +encoding//wcm/widget/portalfornecedor/src/main/resources/view.ftl=utf8 +encoding//wcm/widget/portalfornecedor/src/main/webapp/WEB-INF/jboss-web.xml=utf8 +encoding//wcm/widget/portalfornecedor/src/main/webapp/WEB-INF/web.xml=utf8 +encoding//wcm/widget/portalfornecedor/src/main/webapp/resources/css/portalfornecedor.css=utf8 +encoding//wcm/widget/portalfornecedor/src/main/webapp/resources/images/icon.png=utf8 +encoding//wcm/widget/portalfornecedor/src/main/webapp/resources/js/portalfornecedor.js=utf8 diff --git a/Lançamento de documentos/lançamentos/datasets/dsPortalFornecedorNF.js b/Lançamento de documentos/lançamentos/datasets/dsPortalFornecedorNF.js new file mode 100644 index 0000000..407dd52 --- /dev/null +++ b/Lançamento de documentos/lançamentos/datasets/dsPortalFornecedorNF.js @@ -0,0 +1,42 @@ +function createDataset(fields, constraints, sortFields) { + var dataset = DatasetBuilder.newDataset(); + dataset.addColumn("STATUS"); + dataset.addColumn("CAMPO"); + dataset.addColumn("VALOR"); + + try { + dataset.addRow(["DEBUG", "__version__", "dsPortalFornecedorNF_debug_2026_03_12"]); + + if (!constraints || constraints.length === 0) { + dataset.addRow(["DEBUG", "__constraints__", "vazio"]); + return dataset; + } + + for (var i = 0; i < constraints.length; i++) { + var c = constraints[i]; + var fieldName = getFieldNameSafe(c); + var initialValue = getInitialValueSafe(c); + dataset.addRow(["DEBUG", fieldName, initialValue]); + } + + return dataset; + } catch (e) { + var erro = (e && e.message) ? e.message : ("" + e); + dataset.addRow(["ERRO", "__exception__", erro]); + return dataset; + } +} + +function getFieldNameSafe(c) { + if (!c) return ""; + if (typeof c.getFieldName === "function") return (c.getFieldName() || "") + ""; + if (c.fieldName !== undefined && c.fieldName !== null) return (c.fieldName || "") + ""; + return ""; +} + +function getInitialValueSafe(c) { + if (!c) return ""; + if (typeof c.getInitialValue === "function") return (c.getInitialValue() || "") + ""; + if (c.initialValue !== undefined && c.initialValue !== null) return (c.initialValue || "") + ""; + return ""; +} diff --git a/Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/.metadata b/Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9eca6c27a0e91ca776e2fc046a7e6345efa45717 GIT binary patch literal 623 zcma)(Jxc>I7{{N!iL_8{i(^F)+)M`-!AU5E!qKH4pv1fMjN~q7@?3j52wik=)xkkf zaP0SR_Y;V_v#ZHnTPuQ^AtZU;{=a{w?@-bT_FNedlsM7^Jx!P!kfDr2k0O^L8Eev! zDu@MDT=tn7G1W#1*~;ai;6TwssS!4u6FQ=;7`bR2Dn-v6uJOQus-POP${r0ELOn|q zH1u12R6O)eRxL6Imq%1|xL`K%6fPj2L`Gr5HYT<)Su{>2FU`AWdS8HC7mAvnvm`R2 za^s@iP0{ZEvAzMVII!kY<+Yi16_2b5sS*boo^<1Yh4?d6o`<>~LSu=q8zS?WGJvZ( zHLvTHG4 Ia*Toa1lZcr00000 literal 0 HcmV?d00001 diff --git a/Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/totvsflow_lancamento_documento.html b/Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/totvsflow_lancamento_documento.html new file mode 100644 index 0000000..701035a --- /dev/null +++ b/Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/totvsflow_lancamento_documento.html @@ -0,0 +1,1271 @@ + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
+ +

Lançamento de documento

+ +
+ +
+ +
+
+

+  Dados do documento  +

+
Dados referentes ao documento que será lançado.
+
+
+ + +
+
+
+
+ + +
+
+ + + +
+ +
+ + * + + +
+
+ + +
+
+
+

+
+
+
+
+ * + + +
+
+ * + + + +

+ +
+ +
+ + +
+
+
+

+ +
+
+
+
+ * + + + +
+
+ +
+ R$ + +
+
+

+
+
+
+
+
+
+ + * + +

Utilize a aba anexos para anexar o documento ou o botão + abaixo. Anexo obrigatório.

+ +
+
+
+

+ +
+ +

 Descrição dos serviços +   +

+
Descrição detalhada dos serviços prestados e as possíveis informações complementares.
+
+
+
+
+
+ * + + +
+
+
+
+ + + + + + +
+ + + + +
+
+ +
Todos os campos com * são de preenchimento obrigatório.
+ + +
+
+
+ + + + + + diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/application.info b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/application.info new file mode 100644 index 0000000..5259ff2 --- /dev/null +++ b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/application.info @@ -0,0 +1,19 @@ +application.type=widget +application.code=portalfornecedor +application.title=portalfornecedor +application.description=portalfornecedor +application.fluig.version=null +application.category=SYSTEM +application.renderer=freemarker +developer.code=DESKTOP-0E2LAA6 +developer.name=Home +developer.url=http://www.fluig.com +application.uiwidget=true +application.mobileapp=false +application.version=${build.version}-${build.revision} +view.file=view.ftl +edit.file=edit.ftl +locale.file.base.name=portalfornecedor +application.resource.js.1=/resources/js/portalfornecedor.js +application.resource.css.2=/resources/css/portalfornecedor.css +hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2 diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/edit.ftl b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/edit.ftl new file mode 100644 index 0000000..986d9b5 --- /dev/null +++ b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/edit.ftl @@ -0,0 +1,5 @@ +
+ +
+ + diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/portalfornecedor.properties b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/portalfornecedor.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/portalfornecedor.properties @@ -0,0 +1,2 @@ + + diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/portalfornecedor_en_US.properties b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/portalfornecedor_en_US.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/portalfornecedor_en_US.properties @@ -0,0 +1,2 @@ + + diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/portalfornecedor_es.properties b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/portalfornecedor_es.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/portalfornecedor_es.properties @@ -0,0 +1,2 @@ + + diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/portalfornecedor_pt_BR.properties b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/portalfornecedor_pt_BR.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/portalfornecedor_pt_BR.properties @@ -0,0 +1,2 @@ + + diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/view.ftl b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/view.ftl new file mode 100644 index 0000000..2aaf5fe --- /dev/null +++ b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/view.ftl @@ -0,0 +1,184 @@ +
+ + + +
+ + + +
+

Dados do documento

+

Preencha os campos obrigatórios para iniciar a solicitação.

+ +
+ +
+ + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + +
+ + + +
+ +
+ +
+ +
+ + + +
+ +
+ + +
+ R$ + + +
+
+ +
+ +
+ +
+ + + +

+ Utilize o botão abaixo para anexar o documento. +

+ + + + + +
+ +
+ +
+ +
+ +
+ +

Descrição dos serviços

+

Inclua detalhes para facilitar a análise.

+ + + +
+ + + +
+ + + +
+ +
+ +
diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/WEB-INF/jboss-web.xml b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..7aded4b --- /dev/null +++ b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /portalfornecedor + false + diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/WEB-INF/web.xml b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..3cea5b4 --- /dev/null +++ b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,7 @@ + + + + diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/css/portalfornecedor.css b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/css/portalfornecedor.css new file mode 100644 index 0000000..4f902ff --- /dev/null +++ b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/css/portalfornecedor.css @@ -0,0 +1,346 @@ +.wcm-widget-class { + background: + radial-gradient(circle at 2px 2px, rgba(13, 109, 141, 0.06) 1px, transparent 0) 0 0 / 18px 18px, + linear-gradient(180deg, #f8fbfd 0%, #eef3f7 100%); +} + +.portal-shell { + --pf-bg: #f2f5f8; + --pf-card: #ffffff; + --pf-border: #d9e2ec; + --pf-ink: #133045; + --pf-muted: #5f7282; + --pf-primary: #0a6d8d; + --pf-primary-strong: #085a74; + --pf-success: #0f766e; + --pf-success-bg: #ecfdf5; + --pf-danger: #b42318; + + max-width: 980px; + margin: 28px auto; + padding: 0 12px 32px; + color: var(--pf-ink); +} + +.page-header { + position: relative; + margin: 0 0 20px; + padding: 18px 16px 14px; + border: 1px solid #0b4a5f; + border-radius: 12px; + background: #0b556b; + box-shadow: 0 8px 20px rgba(11, 85, 107, 0.24); +} + +.page-header::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 180px; + height: 4px; + border-radius: 99px; + background: rgba(255, 255, 255, 0.75); +} + +.page-brand { + position: absolute; + right: 0; + top: 6px; + width: 188px; + height: 64px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 0; + border: none; + background: transparent; + box-shadow: none; + padding: 0; +} + +.page-brand img { + max-width: 94%; + max-height: 82%; + object-fit: contain; +} + +.brand-fallback-text { + display: none; + font-size: 14px; + font-weight: 700; + color: #ffffff; +} + +.page-brand.brand-fallback .brand-fallback-text { + display: inline-block; +} + +.page-eyebrow { + display: inline-block; + font-size: 11px; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; + color: #d7f0f7; + margin-bottom: 6px; +} + +.page-title { + margin: 0; + font-size: 34px; + line-height: 1.15; + font-weight: 800; + color: #ffffff; +} + +.page-title i { + margin-right: 8px; + color: #d7f0f7; +} + +.page-subtitle { + margin: 8px 0 0; + color: #d5e8ef; + font-size: 15px; + max-width: 70%; +} + +.form-card { + background: var(--pf-card); + border: 1px solid var(--pf-border); + border-radius: 14px; + padding: 22px 20px 16px; + margin-bottom: 16px; + box-shadow: 0 8px 24px rgba(16, 24, 40, 0.06); + transition: transform 0.2s ease, box-shadow 0.2s ease; +} + +.portal-shell .page-header .page-title, +.portal-shell .page-header .page-title i { + color: #ffffff !important; +} + +.portal-shell .page-header .page-subtitle { + color: #e6f2f6 !important; +} + +.portal-shell .page-header .page-eyebrow { + color: #dff6ff !important; +} + +.portal-shell .form-card { + background: #ffffff !important; + border-color: #cfdce8 !important; +} + +.portal-shell .arquivo-nome:empty { + display: none; +} + +.form-card:hover { + transform: translateY(-2px); + box-shadow: 0 12px 30px rgba(16, 24, 40, 0.08); +} + +.titulo-secao { + margin: 0; + font-size: 22px; + line-height: 1.2; + font-weight: 800; + color: #0b3f55; +} + +.sub-secao { + margin: 6px 0 18px; + color: var(--pf-muted); + font-size: 13px; +} + +.form-group { + margin-bottom: 16px; +} + +.form-group > label { + display: block; + margin-bottom: 6px; + font-size: 13px; + font-weight: 700; + color: #324b5d; +} + +.portal-shell .form-control, +.portal-shell .input-group-addon, +.portal-shell select.form-control { + border-radius: 8px; +} + +.portal-shell .form-control { + height: 40px; + border: 1px solid #c9d5e2; + transition: border-color 0.15s ease, box-shadow 0.15s ease; +} + +.portal-shell textarea.form-control { + min-height: 120px; + resize: vertical; +} + +.portal-shell .form-control:hover { + border-color: #8fb5c3; +} + +.portal-shell .form-control:focus { + border-color: #0a6d8d; + box-shadow: 0 0 0 3px rgba(10, 109, 141, 0.12); +} + +.portal-shell .has-error .form-control, +.portal-shell .alertaCampo.has-error .form-control { + border-color: var(--pf-danger); +} + +.btn-anexo { + background: #eef4f7; + border: 1px dashed #9db7c5; + color: #133045; + border-radius: 8px; + padding: 10px 14px; + font-weight: 700; + transition: background 0.15s ease; +} + +.btn-anexo:hover { + background: #e4eef3; +} + +.arquivo-nome { + margin-top: 10px; + padding: 8px 10px; + border-radius: 8px; + background: #f4f8fb; + border: 1px solid #d7e5ef; + color: #365266; + font-size: 13px; +} + +.btn-enviar { + margin-top: 10px; + min-width: 220px; + border-radius: 10px; + background: linear-gradient(135deg, #0a6d8d 0%, #0f8f98 100%); + border: none; + padding: 12px 28px; + font-size: 16px; + font-weight: 700; + color: white; + transition: transform 0.15s ease, box-shadow 0.15s ease; +} + +.btn-enviar:hover { + transform: translateY(-1px); + box-shadow: 0 10px 22px rgba(10, 109, 141, 0.25); +} + +.envio-status { + margin: 0 0 14px; + padding: 12px 14px; + border-radius: 10px; + border: 1px solid transparent; + font-size: 14px; + font-weight: 600; +} + +.envio-status.hidden { + display: none; +} + +.envio-status.success { + color: #065f46; + background: var(--pf-success-bg); + border-color: #a7f3d0; +} + +.envio-status.error { + color: #7a271a; + background: #fef3f2; + border-color: #fecdca; +} + +.portal-success-state { + max-width: 760px; + margin: 32px auto; + padding: 26px 24px; + border: 1px solid #b7ebd8; + border-radius: 12px; + background: linear-gradient(180deg, #f4fffb 0%, #ecfdf5 100%); + animation: fadeIn 0.4s ease; +} + +.portal-success-title { + margin: 0 0 8px; + color: #0f5132; + font-weight: 800; +} + +.portal-success-desc { + margin: 0; + color: #1f5f46; +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +@media (max-width: 991px) { + .portal-shell { + padding: 0 10px 24px; + } + + .page-title { + font-size: 28px; + } + + .page-subtitle { + max-width: 100%; + padding-right: 184px; + } +} + +@media (max-width: 767px) { + .page-title { + font-size: 24px; + } + + .page-header { + padding-top: 76px; + } + + .page-brand { + left: 0; + right: auto; + top: 8px; + width: 164px; + height: 58px; + } + + .page-subtitle { + padding-right: 0; + } + + .form-card { + padding: 16px 14px 10px; + border-radius: 12px; + } + + .btn-enviar { + width: 100%; + } +} diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/images/icon.png b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..102160cdd282b0d62712b3c7e6bef86fcd538496 GIT binary patch literal 7845 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 D*xqLB literal 0 HcmV?d00001 diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/images/logo.ginseng.branca.png b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/images/logo.ginseng.branca.png new file mode 100644 index 0000000000000000000000000000000000000000..6b66c7448bad0ad16bcdfbf0dbd0391bb2659f50 GIT binary patch literal 16409 zcmeHuc{G&$`|vHIo=`pYWap_wQ+Bd%CDq7MMD``wjWt^gQ$#(AVzM;0o-CDRWR1a) zBI}44#xgtzVMeyW7~aqA`Tfp&-ap^>yyv{@nhPNtxW=ht<x{D&C;5BzTniKi-3!KBQv%wTyMN;FRz%8HT!(+D!E zWgQy6m#{$?e^ujyGTIVhW*-uCY6Zc&aSd4hc%8C-w-7cjab9f24#A%+{c$~r4JtK} zM9L&@zuJkBcyfjSeh!TR`+`BIpV>4?s(v{i`Zae?uve4!eom9zEDt^ke{Bj+8ocP- z-fIgUdxV<~LJ&de`f~W`~<&uA& zrT=}#+kuavg@-UOR98~nJ3Clo{MU2l0E{;jtnarEYE({0uEYQP_OHFshF*N|TY@;y zEsjExm50Cs#_snF2r7N%vA7RBIi|u$!IuaOZCJJBUua2t-`5rY&nI}y|GAQCaW{u4 z32h-^MEQ$7VZ?NG4gz(^|HfqxmDvI!dUH81m?-QztnN_p`uJ&PCLy{3S-MUFqr5>-J-zgyO6Ev?u~s?oEU%Z(&Jl15#aR)a75 zut!|7eM~PUbqo?=xLQZRZo=0+Z{EXuH$6xH`3a$9oCM z8TX>Hw3mG6iA3}?gJ=*CNT+vj?bQ7gZFDlMy=po(-+FkPNg>?UZv9fPgAZVcIz+C# z@PBnLaqU<2PWbYcS9efDL&}JFO&x>b!tnotobkc3+D&3~a(KP#dbe-&P=u!4kNI`p z5tX)P@~CfO+teC)l!>C5+lFk8H89bP;YbF)iLqPvmzNxV^}kgFe}2%L&{u@+VJ{6= zW`&O*p6gEwswSpOndkWWq83qf*8Ydj_^;((vIRH$u+DyH+x2Nx+ru${RtOj3Z)Y2b- z?@G@nV_TNDe&yREG%7{iS?d$VB)U<6isg_>2lr%%GE&EW(xZx?S8C#8mXNsCj4=++ zXNaPO--abHUyt2)^f$)~i^>^kv<{g!XyYp*7YpZ9L!z557%3Lb)6}Ol66by5B?PV# z>BE>uFJQhHRz(I-v|@W+gg;x$yxtKJ#rMlnSW@l!^6TJ}CLfL71=`mnklm**h&~*~ zKFC;$-cjowt#o@e_15zOGcd}}pEd3$foLUrBr(j-4~^-!Z+Z(veTN(>};S^Wr;$uo7Lel|(o_(HN@^c`;G6rg?qYZSj=-tUA^A z+L)VI^0qzUKtQI#^YX_DODB!)^tdLIY6xcG=9NiR&n{pI1_y79Oz&1&QM`t^zoFVM z-2NI8+J{}A8SH+-l*^5z!qy2>U}%ddKk#%y`b$UBaxWSb^@a{+^V1z8Q~@@jiMAghhe z5(tswJTuKUDsOE*#&1ZVXtGPrl(`76QbsD|!pN6*FF$k%+bU8Jb4IN1$C?*4gFI5& z^nt$mi86}}WzkF3%2v#x&nKEaH$T>79D71+^rcTul( zvEDe#+W1IygLEr-us>qLtx27Ffz||!JWv6R8&ZG&;`Y0C6}gk?&-+gi7pfDQja#AY zUuZj(^5gvks`LFD;!dY3p5QeZd6L;p}}bV3Y4e1 zfm%t7_;FXl2$4qRnXWRIv9^6i)j{R*#!=4Q(vs z1leKm6=2Yo31={L^-H$Ex?umMWQzV$<~;X|YM|aVp)r@x>&^1q^SBeS?nhbLg9xyn+^{OFjE5ZGFa%m^ z=Q%5wUN;FC5%t6eO%~f3PW0)^gt5GZT~+aNZ1$nSlkgXP{v&f-J%5!~5bu4}bm8P- z1>hzsxU^du9lcI??2fd^b(y793GM>`j_nO^jv_MA*Q4Kky zz-+Fxp8bg@Rh5yW^}eEtzZ_-Z6==2!jI9P@UWaFw%>~7e%uyWRz5Qy%&0Y1=PHISB zhi76iwB-kOj)~}yr4mQkDFubbL=jip|ZzjcDyI_LG z=RkuyT6QY4xswSM)i<~6g4r}Z?ZHyh$ugK?kuUTYk@u6=0Usobi+S>~=}7=yb&?l&3@ajX47u!|Kuu9WcM^@dvW&{Lcf_;~!~kIF-s*T>)uOGEAJsY;y452p>cp%TOqEtCR~*FM1bjS_+!M6q)=%ZOFc|MwQ>evL zgYOs!;_X=+yejt-fRGw{pTG{`!e@fGWMzElLk&Bo*NcBC2^{Qjr+h*5sszf8T$eZw z!DQr4wqzG}ytbu%R-w=iN)-GQa4p%L%-zo%oR5io)h{!iZfyEc)RD9|ww$sbDm5!W zc%?DEiKpE7S!jZ^sEi+c(7+Yv?FQBms(b$R7yvJK0;YK^?062od$Src^t@p}-zwkh zfNSL;NBovBx1x``SZbOQF-8qAFeehE3*5{o6(Zrsz;u2O!J>- zdRKd7h)p;GBzhWPhkh_VWNxPHWFKY!QqIW*RMM)7+}-LeZQU+apezu@c#Z@=U4Vi+ zb&nQCR8FMvKR#sb+Ag`2Id$V9H_SvhF7ogVMSHL!@1AO9Hf{3{5L<7i}3{KgWUy{heAJ#H|t1_Fh(M&x#6>n z4}mbA!xh17;lY_xnt6KFos;a`CTd8J8`-&auFi8C7sc!f>at~5R>vpIBoOqOJ}hJX z2-oqkJZ{dq^$V2B*PN0JyvqE8S9Z9F6-x(Puzb&H)w$|;?Bu+rtVWdt0^cUpEPO=s z+4$6vlE9F9J69F*s7E{9_c3|28lf}u-ba8c@N?7Oh?qFGIh-o%;7JA^{g_o!win+A zu58m3VJq4%wSka8_AZ&`Z?a(rmVEUova=swb^9Zc%C@XBoew z_DJUv8^raGetXW$`%i({_ei66j+{{qQ)_D5VZFG|-kZ$rh52Q+RsLh^NQp)@B3j99 zj%1kSD>5^GF{{;nMO#E@_|+LWu+<27xxBJ4xgCOVS~ zNt&Z_C*mr!#&?TJ2s+FB(aZpS(h81676p6NOR5new@l1@t+!pa0Gq@3eTMpdDPQ*wci3uyH z2!qYc#rf@!OQ>fcG2Z+x#vi4`bJdJXV>rYCz&Eyw1*d zI^^9mRgnv4iw-esJLCRzLaGfQ;kS64NnyN3Bca3h@4N?0|eNG^#7j4O0dh{YLKcN2`Kg zavh?t$yVB{KZz9l^rL>>C5hJq9qFZ|DR9ZXB@>6G&J|D|d3yjW9B$pPQ&P-Cqq7zd zIsl8TO8|5j>_r(A7)%NbR^zZ2S5mn6m~!qQpv6dcdhs=0DL$OxkUOR=GQVQe0R}tD zx_U74AAwcV=JbRdg~&%=_58WFVpH%%zb*L$fA*S4X?5kHu)F~-BhPZ-yTr)b)vj4xTd3%R{f zWi6)k?%j0y6=$G^8c%fhCJJ5b?)8xysb+}}W~R7Zu1D&)T379iZAhoMd*IB8%e1^3oli`Djue3 z1#7H_{>B4_-3PKWHkRLIApZK5ikctyJEA2kD;qX9o>xZLGNj*rL=tfR)e+!Z7mBU& zhr_KdVxFPThG!YyRACCf>*rjZS#=ii!<h12T9$Oya8ht0 zdlugJ;$)zqC*SkPh4N)VH0}kLENtyz<0m-dhtCEPQ`g&`21*>!JzCf{f2D6|Cb~J!9XgjNR*iNjsPBY zkTIkET%5F%!)4r6F`J_kdG(Mri7TwpfK;`S{d3L@w84rpwu$N>;()@mRwbp0;o0R+ z>%Q7YqbFWC5 z*Ld0jQSLN$t7P&*{v3V2ecb{vX;Hl9Y}`Bc(OL{-F`(h!Gge9BF3%ZCvc9t;#Em*4 zV`dn8jOB^@#Cta>AYe48V5yebFyj&4qMLaf0<8m z(J9@D=@P&`F&5N<;wt~J2H^J#Dgx0w52w`#f2zLoeLWI&+c{i*{pp3Zaqh!@y5UN<1-7}NklJ(?|VvrLnt>Dpl{+gDZbDR zY%q^?zYG+7(a)58ikayWkR97M8QHzV;BwL&%OBNsOlgjh@baCkS5dwcfm!V5CB@yB ziAtVgi0>MCWM^0uyJ}i{D^~07W;Y1_yl~e+0$BSz^TmCReBQhcBu&}FMkS^)3c#&U zH1dcTqaK=6ZvLohHxnjFO|FZ`#vT?JFukt1SVNCT+BeMfsB6B{D*g4lWZ2L`;XF3m zf30yQKWsDfZl4$WDT&}oe66(17iLu|j|}56CbXJ4 zwc`;YP1Dy8y+NjiSv7B~hS1+xW$~Jgo{p$jIPoSeAl2%Qw*^Q5J4&{MmN%QPv+M*5}FM4)=GUw@nIm z+_B?Rr4mD$!&8Y^jhBOX9JXnpwa$ddRXdk$C3=`6p=>j>5M_qCJ+$~Vy+g8rinFBM z`KsKt&Yq(M(zmOF!&t46oy=Z_rL36dyW77*Hfg|^sA@K~IiUn|>Wp?%R|S$>+VfKq z=T>x8Sb@o1bgH(P3GUO#rf3#j3P->3M+SGQ(Ji*%g2O7CQowROeuEV%-!WXi-Fb!0 z{o7q}(!r6_s%k|>(FO7Rx6~_)Iu5Ue<=`T%y*EZybuZL?&wu`pI&*j~CAUyyPxDOpde!{?+Fgi-lg#=9#U*p+9E#>EgD&mwYr_zPfmd)4M){9A#=hZ^b46fosGM zB1UJGcX0KC`*W-K?aFxmcMfLjx@yIC2O6O@4`2ClT@J~oqrgmYx97KfU%sIaLAL^u z75sdO$?9X`o44B+#L7*e;F-6g8KjVV>vmZu*jcDP@r!qY}8z;o-m6k@0KVJS9{ zHK$JH;@$AD(sTTOAr0g<)25x;K>_WNep0q4-^CrnO#o$S-@{`q-VGCh9qj#$ex1q@ zw0~f1SHGV6l&rmRWa1#y7=OT+zc4W@BE96Y-=_}4vM{y3R@nR5(5{(5z|vg~?dAG( z3{z!!a6e#`ig|_giO}L??<`cn%d&T8G+X@*zt>Y{WO+y!jn) zOB^{ODlnTe!x#63R^qVF-ii@A&`D&JsLs7U{wddx1T$Aj6lHkIOeqwCx&z54s7fn1 zmNnz3+XawRDJ@cJbUa{82~KWxGd4V}TH~9vY^}BS%J!AQ62PTp}RkiPePHKj!I;@&>m z(eNQ$@xb9Y2ofX0y#U=ep^Al_&Q0okih`$@sjIQ<&lEPO$K>HL>t!#-V5-iYV|4kj z)Ts_p;;wn8vXhSWnD~-7ihQ_{mXTLc&nM5!P0=y)S+*LGX2(2GOAy-Ohj7h$zYvLZ zK6crlOoj9MdK3Pwm4|YEBZfdUo4ii#O++5+^F(Irnm|q>oL75@HslRHax9K?N zA0+tWrc$vFCQf!L`Oi2J?LfNXr7ax_?KEmvC`e9w5a3QXbG^>qC<7M=fx|Gz#g2^& zdD)8)YR{5L){2UX&P*g2)o27Hm05&bw-C~>pb1jK{Cg>+J!5KD30gywb~ZX}kHI3#gzLmqQ76B(x#I zFA1NNyAWJU+M#;HDl(lMWR|zPKKPh&uIl6)YDIl*#j?>;yalDSx^@O6$CQGI{cI!i zbqj0O!D6y~G}3mlOOk`w=7`5SV<*jLV}w8YBl%y#?n_}YNVRrJ#%E@D3r zcm%Wt9JkU(R!?hsRIdk#4CJ#l9hQHF5|dfkShl$8fj27!nw>F3`dwAb%)YQyim{X- z++w6G`|JX>IncN~>|NcoXjb53Yu+?#O~$?+lldbqNmF77X17(hmqvlwg1w|Pm3v>Q zZy`wPOc<>)-7|oNJYf@=MNTI!2cjzshn{ZB$BXDt#c_1*-MYz{$tC5kd(7vfw4i{D zuGU!;ha{=;yLNR6wG$|Qn^$BR zsOluJa2?(a1g2e#B(t=063@hW+sD37JRzjbSbstye)ezA*~%Z1NJ;gg{_}*C?WUrb zo?tc>k4yRHr>O;dpEl}$T~UIV>y+jNq*Uv#16X_ltR)~j6OUd3@8zJF7% zHUrC}67|oD*eT7SxXoBn<$%0uICwM_%t)5ba(<=owcZ1nm+Dhutb?-dmO-$O?6w8d zlan>knr8%W$@XuVit7~Aj|*ayGiQ8|vgJ3k)+Lx$`}mbNr56wX-dr+zcjf(Q>5U5n zyS9D2EkBmxs;>zMkK7}#-4DwMv)7T+3Y*>)dao}UHA>C9$8GJATWm^8V}>=8>*%7{ zrjfLMMIxhuxfMd%plm7~}6gG&F?yFJ0FOu%*OgU31 z6`on9^n90!Bn3y-$?5LZl@XDvg|rn(MD%c9T~T@H(Q>2MyXghZA9J~Tch9?2eNzZ& z?JHw$Z)qwSsbytpyp0mMIN}AOhf?;dh*px4;5X>Ie-_>?HzPQ4fa_h=1+AWyiu){w zFCyO?ouvA9E+C1C5(kZcs+yz=?(7ISFeO5wsopbEd3vii2A59C;?i#p8yWa5--4>w ztHL!;2-kl`QGQDg%}PW(OPh%iA!y5H=8qD1ysTYS=yQ~TjwaUe2U1W_ae#`@v}(x7 zcHq61Dk=GzJFrCB!5z1&98Tm11cMYvLtJf-jINZ6P zGb7OF_1luE-cMPvyb-8~di5BGD&G^_3($Qz+x4<{cV`M{k+U%e0KkJg+Ph4K>I!IW)L8RkH z)|f3-9Flm)#NmCt!m9x~foG#Y03{oGxo=i!-bR^XQ;NX~ZPJ;EsQP&WcU1Q9hArVc#dE(dAw^()td$;EeR$Pt z3oVJ5xy#ZH{^{$`5b@5Aor=rP{aZ3DjD7iB9$VC|csa$+gG;`Hp{OHMKCE>uA0d+A zi|&+jH8%{Xele{?qBm9^FVi9;8xA-7m?nHUxg8N#)?nlOY9>2%ptUcIMq6^M1`f>i zMt$Du6Rc`$l;KWV@IzbtuN^=>Lhw=ijTJ4@WP;h&G2(#C-MGlFJIrKIe{PtW8H}SY z`(-DsOZT~^kv|2gcvRc1RR2ZNLZ(ZzQ7~M0TaY@^D{EhTGGA%0MaABE!NSWEJ4;QJ z3bCc*k&besOKXXF4878GRxN;;J6aMzMc9z0q0*JlMZhOrtX3-Vjg%^>^$0y{R}& zcwEhbD>MO}29jC)FITw3(_LppaLw$x!+VW45pMNL3kB^#-d+Ki8B39Iwe^X!u9;9A zNP9s~pMlyQrOIH4`WrNxZDm`KJqe0#_=*m+Dw}eRp;gHt)gy4G&G#ng2pPXwPT8-N z(~mYbHe26eSLG<=X=DSXrW~|j5476l-!6J&zBP?26&UZLCI`ab&90s;~)Z`Y>6ZE4p!_sF&6oyVsV* z9Zg7t-Y%-PDYV61)!y|=BAQ-`>0|Hz&L_>q9_N=nRRwnM-tmt7eg7`$5m-{JlK^i2 zz8hq#q-xSeEs))pQ~69CNv70$NePhOYy_0F2^G5@%og|Iaio|q+%p#I40pX;@k(lS zd!_l~Y#Rx=lU%m_wUt}N5yX@^Y#qQL&oKZW>O*fzVbVR=`{-zh7~753s*qtKQXmv$ zv4-+rKRR11V-)=LOiKz^LMbpaFLWD91rhyZwVTEVq@Lf4ixj z&!Hz>t2Q2J=gO~w*-j5ojOUqrfVPqiI=JuxhT-zUiCZ1&Nk~L=_$)S8pKRAeEj|fI zGSwlKgFIkD#5Jo(AB$>k$Hwlzsa)Z3;dvq*q<}Ct(?w>(#w0c`goOVsWt!6Xb3T(L zX6A_+`q@Ydi5#C9E_j0-k}SkBt~n%{RVSsMwd%MK{$m*w*-kQX8$xhUn zO<$Vp8^iP8my12xD?<+`8d-2fHmq>_j_#<`9J+C0E@Y5l+lpx2^k`@LWJT679KBB< zW#HoC8pxGGQ1~zTJaz&;&kXu=jx<{08>n*n46?-ZQ+!8wB3d1J@P%<7EmGpJm3e6Q z3igJ#dxB|X$r>s61wQec`OEjB%8S}rxiR9&H2;ic?eMR7kgc&=-;HFaaXST{UWFUr zVm)3eq+N(1*s;wPcx(y%UKEXG%9xfU7LF|D`KPC%Fxv1G+~V2dVT|{`4VS)O%82Jy zRNWjPM4%T&e#q!rfGMV?StOircAMWNxBBmFZP#Jsv|Q7%tn;e1xIk z%Ru~^gHn3^(GE4d05T}8^403xVD&(KK@FlAWA{Q>{NJs2T+){bvtDPbWv^~(8-}%; zH}IY{HjS$KHH@{AbbC3Ekxwt^3>99va46Uqo>2L^0LS~$C!CI!v8sLl7`3Qa5|Lfg zz>gbP2wV+%zB)B0%ND$#G+kFr<R0x4N%@IbG7==~ zVt_N!#ijwgSIh)J+YHDY|5Iek2d*!J(&x1qM(q;6Dm>iFzvcWf^Nk*z3AY-kN+oTZ zf~Gu9Cm^lsv~xkqu|!|{&CQ{N>DrtG{Uj4msy_*r>O(X1PYYregAQ+E6o1oi#X>=%rBbFG+z5dFleVWR=9OEvo$g%G-59>8R%YllvL`|_BhpaLP z$)D%i64sdGf525;d(g4>xak0t)#{z>59$fyLMk8b-j0tc>Jf_<*SSJGY!C0*WN>=G z)p30gj?Y$mBvn_&JJPlDIQ~EfrcAvLK3X>j0{6yUoBRc>Tq+j{?!yEbt}5bZyK9hU zCzv;lEaMmrD!ifcLZ9`BMW$QmbwZ3A+|%a;l5ZoV%0p~9wwkyo>WF{XU)j>kbhS+&LM)dzR6Dd zRITTk9y3rP89&*9?WUQ0d(O#E*vo~w%`v=_na0i@-z*Lo=j?WyxyH>gnp6N48YSYf zv8y_hye60r>L8mE9+auknV;FhE6s-G)ekSqd+iapF;T`9n_I z6%@_L9N*{I=?ap)k6hZvMOkp-W9d{pHj=6X)~S~^5t6xFzI}QNU55d}7W%|IDX|9k zsMq>2$SZtU&@qjSwK6!%(Kx9MHoAWE^qCmN;weVbsC7TV^oGJ$19XZKnV>8ILc zYvvhf!_D;Zp}j`K9IKhpN#}OKfxhs>2C4ag7rnan!HKw6Um&HQQf*9%ere!s1bHc? z%Z&50_IK%M9-zUYswx`e42#B)4kR=B=+0h%QjUBwgjOpC18MN)J}XT;jL#drg!d$2kpsr{nTFZ>ZfO(s$VR1aYDHeRu?c zd%&Nj-qUw=hb6C4<8_?6yRsZ~X5Z32H$?Plo!ceRqiL>|A(P#vk)o|`y9!BVDRE?PYr6H~Jescu!7_PL(tfBDOoA+1H6RHYIOluLmv#=(wbX%#@JvyXC#HGg1Qi)*if2EMqrBehh(qQNo`t1n>j-P5#5{(BI8S`WBU_$5< zoOpq}?&z!6aS~oLh>lOT<|WY@AZ-mbUI!uwI-#GfVA;OuoFg~&wfz37$Syxd()G$( zGn}1b{{Rd}8axd}C6_1iLDfj^g7h!vr1*J2n6vE#Ge+%arVN9#O4{7C+9j; zBYlrDm%jr&F*pWHwKKQ@eGuRdI{XoN@J533LA>4u_V?d1%uC+T2bjy-M{uoTNkjFz zD6syX6F|u1f@v6zK_Vztf6;NqKd~cRTXs&e>Qo4OV&2}FAvT!?qJAKk-*De$9JxTQ zea}6SgKI_$x?L9*@Oy;@L0j)N85S6q^*V3T@ocx*`m2qTE;YFpiF9pCE{VRhu#eAN zXbEj5=H~@U;;~D|bMk?(2RoYo+r0%jtHcOMUf_zd84dlISDX4@m6WUr1r+bd;gd^N zc~YrL$n;0ci1kZh3By?O&$t7I!KjxCUNcc<>pwhxjr3g2Hg#RE$jwv!gf9L*`j3%{ zYaWl@JgeaZRl^8$;Q$Drl$7EbGWEm5x3s+S!lKOxJ|~Y*WfOrWdGVDx&mhuu%a9aC-siew@)qBb+3T3$0tDOh0lOb zY&@s6wE6dr$t;3Sd{57M`Bj9=jlc6f+8bwXPOE24Do^{AgOr!OXUY_bqOWNdkNpx0uxZ1qcUKA~X>_VyK)V%wu zilW?Cp*SgynD`Ew!b0;4v1D@CM^r0v$A<7&nw6p)-RcV18Y8b^w2Y_dd(Wk=P9|(3 z4fJ-DSi*Nd8VGz%FBnarBinng*iW)ljSjvYyInFV&xeQ(MTZi}ei;gWLA~gR+vRCm zmWS2xV$wXAgl}7_nq5l?UuJ3z)Qn{nN1TI`0*r9^*-k@2v=Tz$t4DRcN_lpDN2{MY)ESCxjaTlk#-v)Z&QCPMVnWCghl5T-z!h^4dU5?~AWp0e65* zpvqF+``f%4rM#vCty9lkuN9|ati=in-9w;7HIpd4+L^7BltXZ@Ak^Y{pszA{$`{DO zY`RCg+RoHi>y%$pyE;FT#+jB{BNX8(JkUy2auAC{r@ao?T17tNHfZ(wO&bUAQCfR`L(nfhPgQqWS`Efy_x(*~P6e1LyErSAi?;N#6DZF>qcWv79G6 z97l+xo|>Fv@SIdat}@@t!yhf?@of!bV~4in#aFl`m5@o<3K{QaKyhJSxFF_~><1bn zb9w?zv{nX5U9a7*OOaQNV4ue?Q+$(jVmIpS$#(HGj-j`!pJvt?ZPv6X^@~E##+Xu~ zENNSqj9}HfP{0hit4zT1&Z$y;<}dPUA;*tZqX(AGw#8v91AI*dzm-??`QdVvGIrZb zFD2)0%fx`=2aQ#%22lD?8elc(8xZj?S;r+27j`9^e=|y|iZ1$*?hhQq3#6Tt{91#W z(;lqZjz4$&+h5fK*}7fgk{xLnHVPk|vB@1-syd9OGrAP&a8oqq$u{8EIPXOS)<687 zeVwOm%FwlV``>1bg>%<@t8=YY23uFvIk9!|_GT@qTC-kT`HU?ulH#w+0`jiS+n5pXn z4*+sRz4Z6V(7v^M~XU+@8R z!yAFV9b>eymDu%Z!jISoUFm8|6;HDDF_qK)D*!dcX~9o z(9QBDL-<%x*nwU$^aQim<|*ZX@=wDVRe@L%vfGodi2)N)Q?O@|U=&~tpL)rumg?_s z7#=**P`&pG7@g8eE5m+p1X7ey63pfe8e>5xZfF_|aK;G0Z}&xlP##RXnldD@$UM_l z7JO85FKB>kQ#PB&nJ_JJR#`Qu>^lz0V|xvnFgk^HXErVOU@|&YJ;?eCUcI1T0b)=< z_PTcSB#$CraL!1x>uIvGUEYG%C3YAgDS*(@olAh87^gnE7u=toBl^q@5I+xi=i~aT zOpv<-9i!<3G8nhMP=GeSGOOVV>~!#&ObUQ)7}UN>#9M(K!8C7S%hKPpC;|?bLmLbo zuqWc-rX&6oU}#Fe`669GKQ1Va1%uuRLZZ`y;FDuKY3I|4ih z2gKVPD&xmN4_vun%FB62u1*+_8szea;G+@K=UhBwUW3CrrH2Z|i6COY+vajugGR8@ z^Dx9LeWkyd;J8oEU2_n$f&SQT)AesT4b(fwHkv-%;sf2mQhD;Ip^|2TaTqH#r~{zI z>62CV6B9|Du*+LzE~qK$y27eJ+BE;S-J8`UF>IyygMHvM5q`pPC-w<1HNXitGUFI-Uo;*q=Vy5a=eAui!8B!jC1V> z#>*t^1=MZx^I&L;_aET2L5%@$Tl!`h&tNfVae0Xs>aD&I?*UY1wkhqWI^G5xqy-_1 zKBnyad}Q`?+SL|QJ4nu_718(94Ma`Sc>-iaAC+%!HK8d;gKUz-GO2*75&$UTh#Jru z>z960En_O!6<_ND7FI-?tAQd}-FIhtf^I3p@^?9xl&$_;M*1{+s!86zQv{0Ux3lcS6h9-SK?2xx>yp&`M zEdb0Oo#c_V&3un?YRHRTs*TRL72sA-7c&*?l^lKJE7a*wuy8X#0J!@QhHS}T)@~s47_=Jl;H?2Maw6J@(O~59C-t7#?NR5Nf*E)N32`6+IYeDJ&eG<+1Wey| zzl`2AdyToBMKz02XVj=WVDcQDhDC;v!&203;M<=9QUqVRGf{iT" + + "

" + idText + " enviada com sucesso.

" + + "

Sua Solicitação foi encaminhada para o Grupo Ginseng para análise.

" + + ""; + + this.root.html(html); + console.log("[portalfornecedor] success state renderizado."); + }, + + extractProcessInstanceId: function (response) { + if (!response) return ""; + if (response.processInstanceId) return response.processInstanceId; + if (response.content && response.content.processInstanceId) return response.content.processInstanceId; + if (response.content && response.content.processInstanceid) return response.content.processInstanceid; + if (response.content && response.content.requestNumber) return response.content.requestNumber; + return ""; + }, + + enviarDiretoProcesso: function (payloadProcesso) { + return $.ajax({ + url: "/process-management/api/v2/processes/FlowEssentials_LancamentodeDocumento/start", + type: "POST", + contentType: "application/json", + data: JSON.stringify(payloadProcesso) + }); + }, + + uploadAnexoToECM: function (file) { + var self = this; + var dfd = $.Deferred(); + var fileName = file.name; + var uploadUrl = "/api/public/2.0/contentfiles/upload/?fileName=" + encodeURIComponent(fileName); + + fetch(uploadUrl, { + method: "POST", + headers: { + "Content-Type": "application/octet-stream" + }, + body: file + }) + .then(function (resp) { + if (!resp.ok) throw new Error("Falha no upload binario"); + return resp.text(); + }) + .then(function () { + var companyId = (window.WCMAPI && WCMAPI.organizationId) ? String(WCMAPI.organizationId) : "1"; + var createPayload = { + companyId: companyId, + description: fileName, + parentId: self.gedParentFolderId, + immutable: true, + isPrivate: false, + downloadEnabled: true, + attachments: [{ fileName: fileName }] + }; + + return fetch("/api/public/ecm/document/createDocument", { + method: "POST", + headers: { + "Content-Type": "application/json;charset=utf-8" + }, + body: JSON.stringify(createPayload) + }); + }) + .then(function (resp) { + if (!resp.ok) throw new Error("Falha ao criar documento no GED"); + return resp.json(); + }) + .then(function (data) { + var content = data && data.content ? data.content : {}; + var documentId = content.id || content.documentId; + if (!documentId) throw new Error("GED nao retornou documentId"); + dfd.resolve({ documentId: documentId, raw: data }); + }) + .catch(function (err) { + dfd.reject(err); + }); + + return dfd.promise(); + }, + + setLoading: function (isLoading, message) { + this.isSending = !!isLoading; + var btn = this.root.find("#btnEnviarNota"); + + if (isLoading) { + btn.prop("disabled", true).text("Enviando..."); + this.setStatus("success", message || "Processando..."); + return; + } + + btn.prop("disabled", false).text("Enviar documento"); + }, + + setStatus: function (type, message) { + var box = this.root.find("#envioStatus"); + if (!box.length) return; + + box.removeClass("hidden success error"); + box.addClass(type === "error" ? "error" : "success"); + box.text(message || ""); + }, + + clearStatus: function () { + var box = this.root.find("#envioStatus"); + if (!box.length) return; + box.removeClass("success error").addClass("hidden").text(""); + }, + + validateRequiredFields: function () { + var ok = true; + var tipoCadastro = this.normalizeTipoCadastro(this.value("#tipo_cadastro")); + + if (!this.value("#emitido_por")) ok = this.markRequired("#emitido_por") && ok; + if (!this.value("#entidade_responsavel")) ok = this.markRequired("#entidade_responsavel") && ok; + if (!this.value("#tipo_cadastro")) ok = this.markRequired("#tipo_cadastro") && ok; + if (!this.value("#numero_documento")) ok = this.markRequired("#numero_documento") && ok; + if (!this.value("#justificativa")) ok = this.markRequired("#justificativa") && ok; + + if (tipoCadastro === "cpf") { + if (!this.onlyDigits(this.value("#cpf"))) ok = this.markRequired("#cpf") && ok; + this.clearFieldError("#cnpj"); + } else if (tipoCadastro === "cnpj") { + if (!this.onlyDigits(this.value("#cnpj"))) ok = this.markRequired("#cnpj") && ok; + this.clearFieldError("#cpf"); + } + + return ok; + }, + + markRequired: function (selector) { + var input = this.root.find(selector); + if (!input.length) return false; + + var container = input.closest(".alertaCampo, .form-group"); + if (container.length) container.addClass("has-error"); + + input.one("input change", function () { + if ($.trim($(this).val())) { + $(this).closest(".alertaCampo, .form-group").removeClass("has-error"); + } + }); + + return false; + }, + + clearFieldError: function (selector) { + var input = this.root.find(selector); + if (!input.length) return; + input.closest(".alertaCampo, .form-group").removeClass("has-error"); + }, + + value: function (selector) { + return (this.root.find(selector).val() || "").toString().trim(); + }, + + getCurrentDate: function () { + var now = new Date(); + var yyyy = now.getFullYear(); + var mm = ("0" + (now.getMonth() + 1)).slice(-2); + var dd = ("0" + now.getDate()).slice(-2); + return yyyy + "-" + mm + "-" + dd; + }, + + mascaraCPF: function (value) { + var v = (value || "").replace(/\D/g, "").slice(0, 11); + v = v.replace(/(\d{3})(\d)/, "$1.$2"); + v = v.replace(/(\d{3})(\d)/, "$1.$2"); + v = v.replace(/(\d{3})(\d{1,2})$/, "$1-$2"); + return v; + }, + + mascaraCNPJ: function (value) { + var v = (value || "").replace(/\D/g, "").slice(0, 14); + v = v.replace(/^(\d{2})(\d)/, "$1.$2"); + v = v.replace(/^(\d{2})\.(\d{3})(\d)/, "$1.$2.$3"); + v = v.replace(/\.(\d{3})(\d)/, ".$1/$2"); + v = v.replace(/(\d{4})(\d)/, "$1-$2"); + return v; + }, + + onlyDigits: function (value) { + return (value || "").replace(/\D/g, ""); + }, + + normalizeMoney: function (value) { + var raw = (value || "").toString().trim(); + if (!raw) return "0,00"; + if (raw.indexOf(",") >= 0) return raw; + if (raw.indexOf(".") >= 0) return raw.replace(".", ","); + return raw + ",00"; + }, + + normalizeTipoCadastro: function (value) { + return (value || "").toString().trim().toLowerCase(); + }, + + formatFileSize: function (bytes) { + var b = Number(bytes || 0); + if (b <= 0) return "0 KB"; + if (b < 1024) return b + " B"; + if (b < 1048576) return (b / 1024).toFixed(1) + " KB"; + return (b / 1048576).toFixed(2) + " MB"; + } +}); + diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/target/portalfornecedor.war b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/target/portalfornecedor.war new file mode 100644 index 0000000000000000000000000000000000000000..09757e9fad84af3f8a757c7791a64d671e87a28f GIT binary patch literal 31780 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⪼_6=a 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 O2gD!jGML+6SN{vjbsh!) literal 0 HcmV?d00001 diff --git a/Lançamento de documentos/lançamentos/workflow/.resources/FlowEssentials_LancamentodeDocumento.ecm30.xml b/Lançamento de documentos/lançamentos/workflow/.resources/FlowEssentials_LancamentodeDocumento.ecm30.xml new file mode 100644 index 0000000..912e3ad --- /dev/null +++ b/Lançamento de documentos/lançamentos/workflow/.resources/FlowEssentials_LancamentodeDocumento.ecm30.xml @@ -0,0 +1,722 @@ + + + + 1 + FlowEssentials_LancamentodeDocumento + + Lançamento de documento + Este Flow permite ao colaborador lançar dados referentes a um documento, seja uma nota, recibo, boleto ou outro que a empresa possua, com a obrigatoriedade de anexar o documento citado. Quando aprovada a etapa de Análise do documento, o mesmo será publicado no ECM e herdará as propriedades de validade e notificação. + true + true + Default + Documentos + + 0 + 0 + 0 + Default + false + + 1 + true + false + 86400 + 43200 + true + + + + 1 + Lançamento de documento + 9 + + + 41254 + true + false + false + true + false + false + 0 + 2 + + false + false + true + + + + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 4 + + Lançar documento + Lançar documento + + 0 + false + 0 + + + 1 + true + true + false + 3600 + 3600 + 0 + 0 + false + + 0 + true + true + false + 120 + 100 + 0 + 0 + false + false + 0 + 0 + false + + 0 + 10 + 0 + false + 0 + 0 + 0 + 0 + + false + + + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 5 + + Analisar documento + Analisar documento + + 86400 + + false + 0 + Pool Grupo + <AssignmentController><Group>Fiscal</Group></AssignmentController> + 1 + false + true + false + 3600 + 3600 + 0 + 0 + false + + 0 + true + false + false + 280 + 300 + 0 + 0 + false + false + 0 + 0 + false + Default + 0 + 80 + 0 + false + 0 + 0 + 0 + 0 + + false + 0 + + + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 9 + + Ajustar dados do documento + Ajustar dados do documento + + 86400 + + false + 0 + Executor Atividade + <AssignmentController><BaseActivity>4</BaseActivity><Returns>Last</Returns></AssignmentController> + 1 + false + true + false + 3600 + 3600 + 0 + 0 + false + + 0 + true + false + false + 500 + 77 + 0 + 0 + false + false + 0 + 0 + false + + 0 + 80 + 0 + false + 0 + 0 + 0 + 0 + + false + 0 + + + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 7 + + Finalizar e aprovar solicitação + Finalizar e aprovar solicitação + Atividade final do processo + 0 + false + 0 + + + 0 + false + true + false + 0 + 1 + 0 + 0 + false + + 0 + false + false + false + 800 + 430 + 0 + 0 + false + false + 0 + 0 + false + + 6 + 60 + 0 + false + 0 + + false + + + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 14 + + Cancelar + Cancelar + Atividade final do processo + 0 + false + 0 + + + 0 + false + true + false + 0 + 1 + 0 + 0 + false + + 0 + false + false + false + 800 + 320 + 0 + 0 + false + false + 0 + 0 + false + + 6 + 65 + 0 + false + 0 + + false + + + + + + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 6 + + + false + 4 + 5 + + + false + false + 0 + + + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 8 + + Finalizar e aprovar solicitação + false + 5 + 7 + + Aprovar + false + false + 0 + + + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 10 + + + false + 5 + 9 + + Ajustar + false + false + 0 + + + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 11 + + + false + 9 + 5 + + + false + false + 0 + + + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 13 + + + false + 5 + 14 + + Cancelar + false + false + 0 + + + + + + + 1 + beforeStateEntry + FlowEssentials_LancamentodeDocumento + 1 + + function beforeStateEntry(sequenceId) { + appendDebugPublicacao("beforeStateEntry sequenceId=" + sequenceId); + + if (sequenceId == 7) { + anexarDocumentoDoCardSeNecessario(); + publicarDocumento(); + } + + if (sequenceId == 7) { + var attachments = hAPI.listAttachments(); + var hasAttachment = attachments && attachments.size() > 0; + appendDebugPublicacao("validacao anexos: total=" + (attachments ? attachments.size() : 0)); + + if (!hasAttachment) { + appendDebugPublicacao("validacao anexos: nenhum anexo encontrado apos processamento."); + throw "\n\nNao identificamos nenhum documento anexado, volte ao formulario e anexe pelo menos um documento para avancar a solicitacao.\n\n"; + } + } +} + +function anexarDocumentoDoCardSeNecessario() { + try { + var attachments = hAPI.listAttachments(); + if (attachments && attachments.size() > 0) { + appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: solicitacao ja possui " + attachments.size() + " anexo(s)."); + return; + } + + var anexoIdStr = (hAPI.getCardValue("anexo_documento_id") || "") + ""; + anexoIdStr = anexoIdStr.replace(/^\s+|\s+$/g, ""); + if (!anexoIdStr) { + appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: campo anexo_documento_id vazio."); + return; + } + + var anexoId = parseInt(anexoIdStr, 10); + if (isNaN(anexoId) || anexoId <= 0) { + appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: anexo_documento_id invalido: " + anexoIdStr); + return; + } + + hAPI.attachDocument(anexoId); + appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: hAPI.attachDocument OK documentId=" + anexoId); + + var attachmentsDepois = hAPI.listAttachments(); + appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: total anexos apos attachDocument = " + (attachmentsDepois ? attachmentsDepois.size() : 0)); + } catch (e) { + appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: ERRO " + e); + } +} + +function appendDebugPublicacao(msg) { + try { + var atual = (hAPI.getCardValue("debug_publicacao") || "") + ""; + var prefix = atual ? atual + "\n" : ""; + hAPI.setCardValue("debug_publicacao", prefix + msg); + } catch (e) { + log.warn("appendDebugPublicacao falhou: " + e); + } +} + + + + + 1 + publicarDocumento + FlowEssentials_LancamentodeDocumento + 1 + + function publicarDocumento() { + var radioGed = (hAPI.getCardValue("radio_ged") || "") + ""; + var idPastaSelecionadaRaw = (hAPI.getCardValue("idPastaSelecionada") || "") + ""; + log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## radio_ged=" + radioGed + " idPastaSelecionada=" + idPastaSelecionadaRaw); + appendDebugPublicacao("publicarDocumento: radio_ged=" + radioGed + " idPastaSelecionada=" + idPastaSelecionadaRaw); + + if (radioGed != "publica_ged") { + log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## Nao publicar no ECM (radio_ged diferente de publica_ged)."); + appendDebugPublicacao("publicarDocumento: radio_ged diferente de publica_ged."); + return; + } + + var attachments = hAPI.listAttachments(); + log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## attachments.size=" + (attachments ? attachments.size() : 0)); + appendDebugPublicacao("publicarDocumento: attachments.size=" + (attachments ? attachments.size() : 0)); + + for (var i = 0; i < attachments.size(); i++) { + var docDto = attachments.get(i); + log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## analisando anexo documentId=" + docDto.getDocumentId() + " version=" + docDto.getVersion() + " documentType=" + docDto.getDocumentType()); + appendDebugPublicacao("publicarDocumento: analisando documentId=" + docDto.getDocumentId() + " version=" + docDto.getVersion() + " type=" + docDto.getDocumentType()); + + try { + docAPI.copyDocumentToUploadArea(docDto.getDocumentId(), docDto.getVersion()); + + docDto.setDocumentId(0); + + var idPastaSelecionada = parseInt((hAPI.getCardValue("idPastaSelecionada") || "") + "", 10); + if (isNaN(idPastaSelecionada) || idPastaSelecionada <= 0) { + log.warn("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## idPastaSelecionada invalido. Documento nao sera publicado no ECM."); + appendDebugPublicacao("publicarDocumento: idPastaSelecionada invalido."); + continue; + } + + docDto.setParentDocumentId(idPastaSelecionada); + + var attachArray = new java.util.ArrayList(); + var mainAttach = docAPI.newAttachment(); + mainAttach.setFileName(docDto.getPhisicalFile()); + mainAttach.setPrincipal(true); + mainAttach.setAttach(false); + attachArray.add(mainAttach); + + docDto.setActiveVersion(true); + docDto.setColleagueId(getValue("WKUser")); + docDto.setPublisherId(getValue("WKUser")); + + if (hAPI.getCardValue("radio_data_validade") == "com_data_validade") { + docDto.setExpires(true); + + if (hAPI.getCardValue("inicio_validade") != "") { + var inicioValidade = (hAPI.getCardValue("inicio_validade") || "") + ""; + var dataInicioSplit = inicioValidade.split("-"); + var anoInicio = dataInicioSplit[0]; + var mesInicio = parseFloat(dataInicioSplit[1]) - 1; + var diaInicio = dataInicioSplit[2]; + var dInicio = new Date(anoInicio, mesInicio, diaInicio); + docDto.setValidationStartDate(dInicio); + } + + if (hAPI.getCardValue("expiracao_validade") != "") { + var dataVencimento = (hAPI.getCardValue("expiracao_validade") || "") + ""; + var dataSplit = dataVencimento.split("-"); + var ano = dataSplit[0]; + var mes = parseFloat(dataSplit[1]) - 1; + var dia = dataSplit[2]; + var d = new Date(ano, mes, dia); + docDto.setExpirationDate(d); + } + + if (hAPI.getCardValue("dias_antes_expiracao") != "") { + var diasAntesExpiracao = parseInt(hAPI.getCardValue("dias_antes_expiracao"), 10); + docDto.setNotificationDays(diasAntesExpiracao); + } + } else { + docDto.setExpires(false); + } + + log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## before create document"); + var doc = docAPI.createDocument(docDto, attachArray, null, null, null); + log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## DOCUMENTO CRIADO COM O ID: " + doc.getDocumentId()); + appendDebugPublicacao("publicarDocumento: documento publicado no ECM com id=" + doc.getDocumentId()); + } catch (e) { + log.error("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## falha ao publicar anexo documentId=" + docDto.getDocumentId() + " erro=" + e); + appendDebugPublicacao("publicarDocumento: ERRO ao publicar documentId=" + docDto.getDocumentId() + " erro=" + e); + } + } +} + +function appendDebugPublicacao(msg) { + try { + var atual = (hAPI.getCardValue("debug_publicacao") || "") + ""; + var prefix = atual ? atual + "\n" : ""; + hAPI.setCardValue("debug_publicacao", prefix + msg); + } catch (e) { + log.warn("appendDebugPublicacao falhou: " + e); + } +} + + + + + + + FFFFFF + 511 + 1031 + 10 + 10 + Lançamento de documento + 1 + 0 + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 1 + + + + DBE8FF + 255 + 1001 + 40 + 10 + Solicitante + 2 + 1 + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 2 + + + + E2E2E2 + 256 + 1001 + 40 + 265 + Responsável por documentos + 2 + 1 + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 3 + + + + + + + + + 1 + FlowEssentials_LancamentodeDocumento + 9 + 6 + 1 + + 137 + 335 + + + + 1 + FlowEssentials_LancamentodeDocumento + 9 + 8 + 1 + + 333 + 447 + + + + 1 + FlowEssentials_LancamentodeDocumento + 9 + 10 + 1 + + 552 + 335 + + + + 1 + FlowEssentials_LancamentodeDocumento + 9 + 11 + 1 + + 333 + 112 + + + + + + + + + + 0 + 0 + FlowEssentials_LancamentodeDocumento + 9 + 5 + approval + title + Analisar documento + + + 0 + 0 + FlowEssentials_LancamentodeDocumento + 9 + 5 + approval + description + + + + 0 + 0 + FlowEssentials_LancamentodeDocumento + 9 + 5 + approval + highlight + Documento aprovado? + + + 0 + 0 + FlowEssentials_LancamentodeDocumento + 9 + 5 + approval + approve + 7 + + + 0 + 0 + FlowEssentials_LancamentodeDocumento + 9 + 5 + approval + reject + 9 + + + + + \ No newline at end of file diff --git a/Lançamento de documentos/lançamentos/workflow/.resources/FlowEssentials_LancamentodeDocumento.png b/Lançamento de documentos/lançamentos/workflow/.resources/FlowEssentials_LancamentodeDocumento.png new file mode 100644 index 0000000000000000000000000000000000000000..5cb9992f704ec6bf0e20222c952179c774d546b9 GIT binary patch literal 20989 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 literal 0 HcmV?d00001 diff --git a/Lançamento de documentos/lançamentos/workflow/.resources/FlowEssentials_LancamentodeDocumento.processimage.svg b/Lançamento de documentos/lançamentos/workflow/.resources/FlowEssentials_LancamentodeDocumento.processimage.svg new file mode 100644 index 0000000..5561a3b --- /dev/null +++ b/Lançamento de documentos/lançamentos/workflow/.resources/FlowEssentials_LancamentodeDocumento.processimage.svg @@ -0,0 +1,2 @@ + +Responsável por documentosSolicitanteLançamento de documentoAnalisardocumentoAjustar dadosdo documentoAprovarAjustarCancelar diff --git a/Lançamento de documentos/lançamentos/workflow/.resources/Fluig prod.ws.cache b/Lançamento de documentos/lançamentos/workflow/.resources/Fluig prod.ws.cache new file mode 100644 index 0000000..9da72e7 --- /dev/null +++ b/Lançamento de documentos/lançamentos/workflow/.resources/Fluig prod.ws.cache @@ -0,0 +1,724 @@ + + + + + volume + + + Default + + + + + camposFormulario, documentoId = 41254 + + + activity + + + cnpj + + + cpf + + + currentUserId + + + currentUsermail + + + currentUserName + + + data_abertura + + + data_validacao_gestor + + + dias_antes_expiracao + + + emailSolicitante + + + emitido_por + + + empresa + + + entidade_responsavel + + + expiracao_validade + + + formMode + + + gestor_cc + + + idPasta + + + idPastaSelecionada + + + inicio_validade + + + justificativa + + + justi_decisao_gestor + + + moreInfo + + + numero_documento + + + pasta_ged + + + radio_data_validade + + + radio_ged + + + requesterId + + + requesterMail + + + tipo_cadastro + + + tipo_documento + + + user_validacao_gestor + + + valor + + + WKNumProces + + + + + mecanismoGrupo + + + + + Tecnologia e Comunicação + + + TIC + + + + + + + Compras Indiretos + + + ComprasIndiretos + + + + + + + Obras e manutenção + + + Manutencao + + + + + + + Aprovadores Compras Nvl 3 + + + AprovadoresComprasNvl3 + + + + + + + Motoristas + + + Motoristas + + + + + + + Requisitantes de Vaga + + + Requisitantesdevaga + + + + + + + Recrutamento + + + Recrutamento + + + + + + + TODOS-TODOS-DIADMISSAO + + + TODOS-TODOS-DIADMISSAO + + + + + + + ResponsavelDesligamento + + + ResponsavelDesligamento + + + + + + + GENTE & CULTURA + + + GENTE_CULTURA + + + + + + + LOJA AL + + + LOJA_AL + + + + + + + CD + + + CD + + + + + + + ESPAÇO DO REVENDEDOR AL + + + ESPACO_DO_REVENDEDOR_AL + + + + + + + FINANCEIRO + + + FINANCEIRO + + + + + + + OPERAÇÕES + + + OPERACOES + + + + + + + AMG AL + + + AMG_AL + + + + + + + REGIONAL ALAGOAS + + + REGIONAL_ALAGOAS + + + + + + + PREVENÇÃO DE PERDA + + + PREVENCAO_DE_PERDA + + + + + + + MARKETING, TREINAMENTO + + + MARKETING_TREINAMENTO + + + + + + + SECRETARIA EXECUTIVA + + + SECRETARIA_EXECUTIVA + + + + + + + DIRETORIA EXECUTIVA + + + DIRETORIA_EXECUTIVA + + + + + + + INFRAESTRUTURA + + + INFRAESTRUTURA + + + + + + + ESPAÇO DO REVENDEDOR BA + + + ESPACO_DO_REVENDEDOR_BA + + + + + + + BUSINESS INTELLIGENCE + + + BUSINESS_INTELLIGENCE + + + + + + + DEPARTAMENTO PESSOAL + + + DEPARTAMENTO_PESSOAL + + + + + + + LOJA BA + + + LOJA_BA + + + + + + + TREINAMENTO + + + TREINAMENTO + + + + + + + AMG BA + + + AMG_BA + + + + + + + MARKETING + + + MARKETING + + + + + + + COMPRAS + + + COMPRAS + + + + + + + AMG SE + + + AMG_SE + + + + + + + LOJA SE + + + LOJA_SE + + + + + + + ESPAÇO DO REVENDEDOR SE + + + ESPACO_DO_REVENDEDOR_SE + + + + + + + VENDAS IN COMPANY + + + VENDAS_IN_COMPANY + + + + + + + REGIONAL BAHIA + + + REGIONAL_BAHIA + + + + + + + CANAL LOJA 01 + + + CANAL_LOJA_01 + + + + + + + AUDITORIA + + + AUDITORIA + + + + + + + CANAL LOJA 02 + + + CANAL_LOJA_02 + + + + + + + PLANEJAMENTO DE DEMANDAS + + + PLANEJAMENTO_DE_DEMANDAS + + + + + + + PROJETOS + + + PROJETOS + + + + + + + COMPLIANCE + + + COMPLIANCE + + + + + + + ESCRITÓRIO - MATRIZ + + + ESCRITORIO_MATRIZ + + + + + + + ESCRITÓRIO - CONQUISTA + + + ESCRITORIO_CONQUISTA + + + + + + + REGIONAL SERGIPE + + + REGIONAL_SERGIPE + + + + + + + Transferencia + + + Transferencia + + + + + + + Fiscal + + + Fiscal + + + + + + + expediente + + + Default + + + Expediente BackOffice, Logística e Motorista + + + Expediente Escritório Matriz + + + Expediente Lojas + + + + + mecanismo + + + + + Atribuição por Associação + + + Associado + + + + + + + Atribuição por Campo de Formulário + + + Campo Formulário + + + + + + + dpf_di_emp_filial_filtro + + + dpf_di_emp_filial_filtro + + + + + + + dpf_di_inicio_diadmissao + + + dpf_di_inicio_diadmissao + + + + + + + Atribuição por Executor de Atividade + + + Executor Atividade + + + + + + + Atribuição por Grupo + + + Grupo + + + + + + + Atribuição por Grupos do Colaborador + + + Grupos Colaborador + + + + + + + mecCustomAprov + + + mecCustomAprov + + + + + + + Atribuição por Papel + + + Papel + + + + + + + Atribuição para um Grupo + + + Pool Grupo + + + + + + + Atribuição para um Papel + + + Pool Papel + + + + + + + Atribuição por Usuário + + + Usuário + + + + + + + diff --git a/Lançamento de documentos/lançamentos/workflow/.resources/Fluig prod.ws.cache.bkp b/Lançamento de documentos/lançamentos/workflow/.resources/Fluig prod.ws.cache.bkp new file mode 100644 index 0000000..40d1d6e --- /dev/null +++ b/Lançamento de documentos/lançamentos/workflow/.resources/Fluig prod.ws.cache.bkp @@ -0,0 +1,726 @@ + + + + + volume + + + Default + + + + + camposFormulario, documentoId = 41254 + + + activity + + + centro_custo + + + cnpj + + + cpf + + + currentUserId + + + currentUsermail + + + currentUserName + + + data_abertura + + + data_validacao_gestor + + + dias_antes_expiracao + + + emailSolicitante + + + emitido_por + + + empresa + + + entidade_responsavel + + + estabelecimento_filial + + + expiracao_validade + + + formMode + + + gestor_cc + + + idPasta + + + idPastaSelecionada + + + inicio_validade + + + justi_decisao_gestor + + + justificativa + + + moreInfo + + + numero_documento + + + pasta_ged + + + radio_data_validade + + + radio_ged + + + requesterId + + + requesterMail + + + tipo_cadastro + + + tipo_documento + + + user_validacao_gestor + + + usuario_abertura + + + usuarioSolicitante + + + valor + + + WKNumProces + + + + + mecanismoGrupo + + + + + Tecnologia e Comunicação + + + TIC + + + + + + + Compras Indiretos + + + ComprasIndiretos + + + + + + + Obras e manutenção + + + Manutencao + + + + + + + Aprovadores Compras Nvl 3 + + + AprovadoresComprasNvl3 + + + + + + + Motoristas + + + Motoristas + + + + + + + Requisitantes de Vaga + + + Requisitantesdevaga + + + + + + + Recrutamento + + + Recrutamento + + + + + + + TODOS-TODOS-DIADMISSAO + + + TODOS-TODOS-DIADMISSAO + + + + + + + ResponsavelDesligamento + + + ResponsavelDesligamento + + + + + + + GENTE & CULTURA + + + GENTE_CULTURA + + + + + + + LOJA AL + + + LOJA_AL + + + + + + + CD + + + CD + + + + + + + ESPAÇO DO REVENDEDOR AL + + + ESPACO_DO_REVENDEDOR_AL + + + + + + + FINANCEIRO + + + FINANCEIRO + + + + + + + OPERAÇÕES + + + OPERACOES + + + + + + + AMG AL + + + AMG_AL + + + + + + + REGIONAL ALAGOAS + + + REGIONAL_ALAGOAS + + + + + + + PREVENÇÃO DE PERDA + + + PREVENCAO_DE_PERDA + + + + + + + MARKETING, TREINAMENTO + + + MARKETING_TREINAMENTO + + + + + + + SECRETARIA EXECUTIVA + + + SECRETARIA_EXECUTIVA + + + + + + + DIRETORIA EXECUTIVA + + + DIRETORIA_EXECUTIVA + + + + + + + INFRAESTRUTURA + + + INFRAESTRUTURA + + + + + + + ESPAÇO DO REVENDEDOR BA + + + ESPACO_DO_REVENDEDOR_BA + + + + + + + BUSINESS INTELLIGENCE + + + BUSINESS_INTELLIGENCE + + + + + + + DEPARTAMENTO PESSOAL + + + DEPARTAMENTO_PESSOAL + + + + + + + LOJA BA + + + LOJA_BA + + + + + + + TREINAMENTO + + + TREINAMENTO + + + + + + + AMG BA + + + AMG_BA + + + + + + + MARKETING + + + MARKETING + + + + + + + COMPRAS + + + COMPRAS + + + + + + + AMG SE + + + AMG_SE + + + + + + + LOJA SE + + + LOJA_SE + + + + + + + ESPAÇO DO REVENDEDOR SE + + + ESPACO_DO_REVENDEDOR_SE + + + + + + + VENDAS IN COMPANY + + + VENDAS_IN_COMPANY + + + + + + + REGIONAL BAHIA + + + REGIONAL_BAHIA + + + + + + + CANAL LOJA 01 + + + CANAL_LOJA_01 + + + + + + + AUDITORIA + + + AUDITORIA + + + + + + + CANAL LOJA 02 + + + CANAL_LOJA_02 + + + + + + + PLANEJAMENTO DE DEMANDAS + + + PLANEJAMENTO_DE_DEMANDAS + + + + + + + PROJETOS + + + PROJETOS + + + + + + + COMPLIANCE + + + COMPLIANCE + + + + + + + ESCRITÓRIO - MATRIZ + + + ESCRITORIO_MATRIZ + + + + + + + ESCRITÓRIO - CONQUISTA + + + ESCRITORIO_CONQUISTA + + + + + + + REGIONAL SERGIPE + + + REGIONAL_SERGIPE + + + + + + + Transferencia + + + Transferencia + + + + + + + expediente + + + Default + + + Expediente BackOffice, Logística e Motorista + + + Expediente Escritório Matriz + + + Expediente Lojas + + + + + mecanismo + + + + + Atribuição por Associação + + + Associado + + + + + + + Atribuição por Campo de Formulário + + + Campo Formulário + + + + + + + dpf_di_emp_filial_filtro + + + dpf_di_emp_filial_filtro + + + + + + + dpf_di_inicio_diadmissao + + + dpf_di_inicio_diadmissao + + + + + + + Atribuição por Executor de Atividade + + + Executor Atividade + + + + + + + Atribuição por Grupo + + + Grupo + + + + + + + Atribuição por Grupos do Colaborador + + + Grupos Colaborador + + + + + + + mecCustomAprov + + + mecCustomAprov + + + + + + + Atribuição por Papel + + + Papel + + + + + + + Atribuição para um Grupo + + + Pool Grupo + + + + + + + Atribuição para um Papel + + + Pool Papel + + + + + + + Atribuição por Usuário + + + Usuário + + + + + + + diff --git a/Lançamento de documentos/lançamentos/workflow/diagrams/FlowEssentials_LancamentodeDocumento.process b/Lançamento de documentos/lançamentos/workflow/diagrams/FlowEssentials_LancamentodeDocumento.process new file mode 100644 index 0000000..4241570 --- /dev/null +++ b/Lançamento de documentos/lançamentos/workflow/diagrams/FlowEssentials_LancamentodeDocumento.process @@ -0,0 +1,939 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Lançamento de documentos/lançamentos/workflow/scripts/FlowEssentials_LancamentodeDocumento.beforeStateEntry.js b/Lançamento de documentos/lançamentos/workflow/scripts/FlowEssentials_LancamentodeDocumento.beforeStateEntry.js new file mode 100644 index 0000000..3243ece --- /dev/null +++ b/Lançamento de documentos/lançamentos/workflow/scripts/FlowEssentials_LancamentodeDocumento.beforeStateEntry.js @@ -0,0 +1,60 @@ +function beforeStateEntry(sequenceId) { + appendDebugPublicacao("beforeStateEntry sequenceId=" + sequenceId); + + if (sequenceId == 7) { + anexarDocumentoDoCardSeNecessario(); + publicarDocumento(); + } + + if (sequenceId == 7) { + var attachments = hAPI.listAttachments(); + var hasAttachment = attachments && attachments.size() > 0; + appendDebugPublicacao("validacao anexos: total=" + (attachments ? attachments.size() : 0)); + + if (!hasAttachment) { + appendDebugPublicacao("validacao anexos: nenhum anexo encontrado apos processamento."); + throw "\n\nNao identificamos nenhum documento anexado, volte ao formulario e anexe pelo menos um documento para avancar a solicitacao.\n\n"; + } + } +} + +function anexarDocumentoDoCardSeNecessario() { + try { + var attachments = hAPI.listAttachments(); + if (attachments && attachments.size() > 0) { + appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: solicitacao ja possui " + attachments.size() + " anexo(s)."); + return; + } + + var anexoIdStr = (hAPI.getCardValue("anexo_documento_id") || "") + ""; + anexoIdStr = anexoIdStr.replace(/^\s+|\s+$/g, ""); + if (!anexoIdStr) { + appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: campo anexo_documento_id vazio."); + return; + } + + var anexoId = parseInt(anexoIdStr, 10); + if (isNaN(anexoId) || anexoId <= 0) { + appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: anexo_documento_id invalido: " + anexoIdStr); + return; + } + + hAPI.attachDocument(anexoId); + appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: hAPI.attachDocument OK documentId=" + anexoId); + + var attachmentsDepois = hAPI.listAttachments(); + appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: total anexos apos attachDocument = " + (attachmentsDepois ? attachmentsDepois.size() : 0)); + } catch (e) { + appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: ERRO " + e); + } +} + +function appendDebugPublicacao(msg) { + try { + var atual = (hAPI.getCardValue("debug_publicacao") || "") + ""; + var prefix = atual ? atual + "\n" : ""; + hAPI.setCardValue("debug_publicacao", prefix + msg); + } catch (e) { + log.warn("appendDebugPublicacao falhou: " + e); + } +} diff --git a/Lançamento de documentos/lançamentos/workflow/scripts/FlowEssentials_LancamentodeDocumento.publicarDocumento.js b/Lançamento de documentos/lançamentos/workflow/scripts/FlowEssentials_LancamentodeDocumento.publicarDocumento.js new file mode 100644 index 0000000..3ff165b --- /dev/null +++ b/Lançamento de documentos/lançamentos/workflow/scripts/FlowEssentials_LancamentodeDocumento.publicarDocumento.js @@ -0,0 +1,97 @@ +function publicarDocumento() { + var radioGed = (hAPI.getCardValue("radio_ged") || "") + ""; + var idPastaSelecionadaRaw = (hAPI.getCardValue("idPastaSelecionada") || "") + ""; + log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## radio_ged=" + radioGed + " idPastaSelecionada=" + idPastaSelecionadaRaw); + appendDebugPublicacao("publicarDocumento: radio_ged=" + radioGed + " idPastaSelecionada=" + idPastaSelecionadaRaw); + + if (radioGed != "publica_ged") { + log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## Nao publicar no ECM (radio_ged diferente de publica_ged)."); + appendDebugPublicacao("publicarDocumento: radio_ged diferente de publica_ged."); + return; + } + + var attachments = hAPI.listAttachments(); + log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## attachments.size=" + (attachments ? attachments.size() : 0)); + appendDebugPublicacao("publicarDocumento: attachments.size=" + (attachments ? attachments.size() : 0)); + + for (var i = 0; i < attachments.size(); i++) { + var docDto = attachments.get(i); + log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## analisando anexo documentId=" + docDto.getDocumentId() + " version=" + docDto.getVersion() + " documentType=" + docDto.getDocumentType()); + appendDebugPublicacao("publicarDocumento: analisando documentId=" + docDto.getDocumentId() + " version=" + docDto.getVersion() + " type=" + docDto.getDocumentType()); + + try { + docAPI.copyDocumentToUploadArea(docDto.getDocumentId(), docDto.getVersion()); + + docDto.setDocumentId(0); + + var idPastaSelecionada = parseInt((hAPI.getCardValue("idPastaSelecionada") || "") + "", 10); + if (isNaN(idPastaSelecionada) || idPastaSelecionada <= 0) { + log.warn("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## idPastaSelecionada invalido. Documento nao sera publicado no ECM."); + appendDebugPublicacao("publicarDocumento: idPastaSelecionada invalido."); + continue; + } + + docDto.setParentDocumentId(idPastaSelecionada); + + var attachArray = new java.util.ArrayList(); + var mainAttach = docAPI.newAttachment(); + mainAttach.setFileName(docDto.getPhisicalFile()); + mainAttach.setPrincipal(true); + mainAttach.setAttach(false); + attachArray.add(mainAttach); + + docDto.setActiveVersion(true); + docDto.setColleagueId(getValue("WKUser")); + docDto.setPublisherId(getValue("WKUser")); + + if (hAPI.getCardValue("radio_data_validade") == "com_data_validade") { + docDto.setExpires(true); + + if (hAPI.getCardValue("inicio_validade") != "") { + var inicioValidade = (hAPI.getCardValue("inicio_validade") || "") + ""; + var dataInicioSplit = inicioValidade.split("-"); + var anoInicio = dataInicioSplit[0]; + var mesInicio = parseFloat(dataInicioSplit[1]) - 1; + var diaInicio = dataInicioSplit[2]; + var dInicio = new Date(anoInicio, mesInicio, diaInicio); + docDto.setValidationStartDate(dInicio); + } + + if (hAPI.getCardValue("expiracao_validade") != "") { + var dataVencimento = (hAPI.getCardValue("expiracao_validade") || "") + ""; + var dataSplit = dataVencimento.split("-"); + var ano = dataSplit[0]; + var mes = parseFloat(dataSplit[1]) - 1; + var dia = dataSplit[2]; + var d = new Date(ano, mes, dia); + docDto.setExpirationDate(d); + } + + if (hAPI.getCardValue("dias_antes_expiracao") != "") { + var diasAntesExpiracao = parseInt(hAPI.getCardValue("dias_antes_expiracao"), 10); + docDto.setNotificationDays(diasAntesExpiracao); + } + } else { + docDto.setExpires(false); + } + + log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## before create document"); + var doc = docAPI.createDocument(docDto, attachArray, null, null, null); + log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## DOCUMENTO CRIADO COM O ID: " + doc.getDocumentId()); + appendDebugPublicacao("publicarDocumento: documento publicado no ECM com id=" + doc.getDocumentId()); + } catch (e) { + log.error("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## falha ao publicar anexo documentId=" + docDto.getDocumentId() + " erro=" + e); + appendDebugPublicacao("publicarDocumento: ERRO ao publicar documentId=" + docDto.getDocumentId() + " erro=" + e); + } + } +} + +function appendDebugPublicacao(msg) { + try { + var atual = (hAPI.getCardValue("debug_publicacao") || "") + ""; + var prefix = atual ? atual + "\n" : ""; + hAPI.setCardValue("debug_publicacao", prefix + msg); + } catch (e) { + log.warn("appendDebugPublicacao falhou: " + e); + } +} From e712c300c67c5ff3846ac79fd734d5a9a02ef62e Mon Sep 17 00:00:00 2001 From: "Andrey Cunh@" Date: Fri, 13 Mar 2026 16:54:09 -0300 Subject: [PATCH 03/25] att --- Lançamento de documentos/.project | 11 + ...rtalfornecedor_proxy_example.cpython-313.pyc | Bin 0 -> 8941 bytes .../datasets/dsPortalFornecedorNF.js | 42 --- .../datasets/dsPortalFornecedorStartProcess.js | 174 +++++++++++++ .../.metadata | Bin 623 -> 730 bytes .../totvsflow_lancamento_documento.html | 92 +++---- .../portalfornecedor_endpoint_contract.md | 117 +++++++++ .../portalfornecedor_proxy.env.example | 9 + .../portalfornecedor_proxy_example.py | 214 ++++++++++++++++ .../portalfornecedor_proxy_requirements.txt | 5 + .../src/main/resources/view.ftl | 51 ++-- .../webapp/resources/js/portalfornecedor.js | 242 +++++++----------- .../target/portalfornecedor.war | Bin 31780 -> 31285 bytes 13 files changed, 693 insertions(+), 264 deletions(-) create mode 100644 Lançamento de documentos/.project create mode 100644 Lançamento de documentos/lançamentos/__pycache__/portalfornecedor_proxy_example.cpython-313.pyc delete mode 100644 Lançamento de documentos/lançamentos/datasets/dsPortalFornecedorNF.js create mode 100644 Lançamento de documentos/lançamentos/datasets/dsPortalFornecedorStartProcess.js create mode 100644 Lançamento de documentos/lançamentos/portalfornecedor_endpoint_contract.md create mode 100644 Lançamento de documentos/lançamentos/portalfornecedor_proxy.env.example create mode 100644 Lançamento de documentos/lançamentos/portalfornecedor_proxy_example.py create mode 100644 Lançamento de documentos/lançamentos/portalfornecedor_proxy_requirements.txt diff --git a/Lançamento de documentos/.project b/Lançamento de documentos/.project new file mode 100644 index 0000000..95f01ce --- /dev/null +++ b/Lançamento de documentos/.project @@ -0,0 +1,11 @@ + + + Lançamento de documentos + + + + + + + + diff --git a/Lançamento de documentos/lançamentos/__pycache__/portalfornecedor_proxy_example.cpython-313.pyc b/Lançamento de documentos/lançamentos/__pycache__/portalfornecedor_proxy_example.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..09d9e40a076979255e233df6c74c44e27b1c2a72 GIT binary patch literal 8941 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 literal 0 HcmV?d00001 diff --git a/Lançamento de documentos/lançamentos/datasets/dsPortalFornecedorNF.js b/Lançamento de documentos/lançamentos/datasets/dsPortalFornecedorNF.js deleted file mode 100644 index 407dd52..0000000 --- a/Lançamento de documentos/lançamentos/datasets/dsPortalFornecedorNF.js +++ /dev/null @@ -1,42 +0,0 @@ -function createDataset(fields, constraints, sortFields) { - var dataset = DatasetBuilder.newDataset(); - dataset.addColumn("STATUS"); - dataset.addColumn("CAMPO"); - dataset.addColumn("VALOR"); - - try { - dataset.addRow(["DEBUG", "__version__", "dsPortalFornecedorNF_debug_2026_03_12"]); - - if (!constraints || constraints.length === 0) { - dataset.addRow(["DEBUG", "__constraints__", "vazio"]); - return dataset; - } - - for (var i = 0; i < constraints.length; i++) { - var c = constraints[i]; - var fieldName = getFieldNameSafe(c); - var initialValue = getInitialValueSafe(c); - dataset.addRow(["DEBUG", fieldName, initialValue]); - } - - return dataset; - } catch (e) { - var erro = (e && e.message) ? e.message : ("" + e); - dataset.addRow(["ERRO", "__exception__", erro]); - return dataset; - } -} - -function getFieldNameSafe(c) { - if (!c) return ""; - if (typeof c.getFieldName === "function") return (c.getFieldName() || "") + ""; - if (c.fieldName !== undefined && c.fieldName !== null) return (c.fieldName || "") + ""; - return ""; -} - -function getInitialValueSafe(c) { - if (!c) return ""; - if (typeof c.getInitialValue === "function") return (c.getInitialValue() || "") + ""; - if (c.initialValue !== undefined && c.initialValue !== null) return (c.initialValue || "") + ""; - return ""; -} diff --git a/Lançamento de documentos/lançamentos/datasets/dsPortalFornecedorStartProcess.js b/Lançamento de documentos/lançamentos/datasets/dsPortalFornecedorStartProcess.js new file mode 100644 index 0000000..30fa6e9 --- /dev/null +++ b/Lançamento de documentos/lançamentos/datasets/dsPortalFornecedorStartProcess.js @@ -0,0 +1,174 @@ +function createDataset(fields, constraints, sortFields) { + var dataset = DatasetBuilder.newDataset(); + dataset.addColumn("STATUS"); + dataset.addColumn("MESSAGE"); + dataset.addColumn("PROCESS_INSTANCE_ID"); + dataset.addColumn("RAW_RESPONSE"); + + try { + var params = constraintsToMap(constraints); + validateRequired(params); + + var payload = { + targetState: parseInt(params.targetState || "5", 10), + comment: params.comment || "Envio via portal fornecedor", + formFields: { + data_abertura: valueOrEmpty(params.data_abertura), + emitido_por: valueOrEmpty(params.emitido_por), + entidade_responsavel: valueOrEmpty(params.entidade_responsavel), + tipo_cadastro: valueOrEmpty(params.tipo_cadastro), + emailSolicitante: valueOrEmpty(params.emailSolicitante), + cpf: valueOrEmpty(params.cpf), + tipo_documento: valueOrEmpty(params.tipo_documento), + numero_documento: valueOrEmpty(params.numero_documento), + valor: valueOrEmpty(params.valor), + justificativa: valueOrEmpty(params.justificativa) + } + }; + + var clientService = fluigAPI.getAuthorizeClientService(); + var requestData = { + companyId: getCompanyId(), + serviceCode: "fluig_rest", + endpoint: "/process-management/api/v2/processes/FlowEssentials_LancamentodeDocumento/start", + method: "post", + timeoutService: "100", + headers: { + "Content-Type": "application/json", + "Accept": "application/json" + }, + options: { + encoding: "UTF-8", + mediaType: "application/json", + useSSL: true + }, + params: payload + }; + + var vo = clientService.invoke(JSON.stringify(requestData)); + var raw = vo ? String(vo.getResult() || "") : ""; + if (!raw) { + throw "fluig_rest retornou vazio."; + } + + var response = parseJsonSafe(raw); + var processInstanceId = extractProcessInstanceId(response); + var responseMessage = extractResponseMessage(response); + + if (isErrorResponse(response, raw)) { + dataset.addRow(["ERROR", responseMessage || "Falha ao iniciar processo.", processInstanceId, raw]); + return dataset; + } + + dataset.addRow(["OK", responseMessage || "Solicitação enviada com sucesso.", processInstanceId, raw]); + return dataset; + } catch (e) { + dataset.addRow(["ERROR", errorMessage(e), "", ""]); + return dataset; + } +} + +function constraintsToMap(constraints) { + var map = {}; + if (!constraints) { + return map; + } + + for (var i = 0; i < constraints.length; i++) { + var c = constraints[i]; + var fieldName = getFieldNameSafe(c); + if (!fieldName) { + continue; + } + map[fieldName] = getInitialValueSafe(c); + } + + return map; +} + +function validateRequired(params) { + var requiredFields = [ + "data_abertura", + "emitido_por", + "entidade_responsavel", + "tipo_cadastro", + "cpf", + "numero_documento", + "justificativa" + ]; + + for (var i = 0; i < requiredFields.length; i++) { + var fieldName = requiredFields[i]; + if (!valueOrEmpty(params[fieldName])) { + throw "Campo obrigatório não informado: " + fieldName; + } + } +} + +function extractProcessInstanceId(response) { + if (!response) return ""; + if (response.processInstanceId) return String(response.processInstanceId); + if (response.content && response.content.processInstanceId) return String(response.content.processInstanceId); + if (response.content && response.content.processInstanceid) return String(response.content.processInstanceid); + if (response.content && response.content.requestNumber) return String(response.content.requestNumber); + return ""; +} + +function extractResponseMessage(response) { + if (!response) return ""; + if (response.message) return String(response.message); + if (response.detailedMessage) return String(response.detailedMessage); + if (response.content && response.content.message) return String(response.content.message); + return ""; +} + +function isErrorResponse(response, raw) { + if (!response) return false; + if (response.code && !extractProcessInstanceId(response)) return true; + if (response.message && String(response.message).toLowerCase().indexOf("erro") >= 0 && !extractProcessInstanceId(response)) return true; + if (raw && raw.indexOf("\"code\"") >= 0 && !extractProcessInstanceId(response)) return true; + return false; +} + +function parseJsonSafe(value) { + try { + return JSON.parse(value); + } catch (e) { + return { raw: value }; + } +} + +function getCompanyId() { + try { + if (typeof getValue === "function") { + return String(getValue("WKCompany") || "1"); + } + } catch (e) { + // ignore + } + + return "1"; +} + +function valueOrEmpty(value) { + return value == null ? "" : String(value); +} + +function errorMessage(e) { + if (e && e.message) return String(e.message); + return String(e); +} + +function getFieldNameSafe(c) { + if (!c) return ""; + if (typeof c.getFieldName === "function") return String(c.getFieldName() || ""); + if (c.fieldName !== undefined && c.fieldName !== null) return String(c.fieldName || ""); + return ""; +} + +function getInitialValueSafe(c) { + if (!c) return ""; + if (typeof c.getInitialValue === "function") return String(c.getInitialValue() || ""); + if (c.initialValue !== undefined && c.initialValue !== null) return String(c.initialValue || ""); + return ""; +} diff --git a/Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/.metadata b/Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/.metadata index 9eca6c27a0e91ca776e2fc046a7e6345efa45717..ab065a3796ca7b1c09e8a57a09c94f9c167f3531 100644 GIT binary patch delta 86 zcmaFQa*K7s6?Ud_76t|erj55V7e-6EDG=d diff --git a/Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/totvsflow_lancamento_documento.html b/Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/totvsflow_lancamento_documento.html index 701035a..62ad23e 100644 --- a/Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/totvsflow_lancamento_documento.html +++ b/Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/totvsflow_lancamento_documento.html @@ -1,4 +1,4 @@ - + @@ -79,7 +79,7 @@ -

Lançamento de documento

+

Lançamento de documento

@@ -90,7 +90,7 @@

 Dados do documento 

-
Dados referentes ao documento que será lançado.
+
Dados referentes ao documento que será lançado.

@@ -117,7 +117,7 @@
- + *
- + Tipo de cadastro * + obrigatório

* @@ -176,7 +176,7 @@ mask="00.000.000/0000-00" class="form-control" readonly /> + obrigatório

@@ -199,7 +199,7 @@ />

@@ -208,7 +208,7 @@ @@ -219,13 +219,13 @@
- * + * + placeholder="Inserir número do documento" class="form-control" /> + obrigatório

@@ -245,8 +245,8 @@ * -

Utilize a aba anexos para anexar o documento ou o botão - abaixo. Anexo obrigatório.

+

Utilize a aba anexos para anexar o documento ou o botão + abaixo. Anexo obrigatório.

@@ -258,21 +258,21 @@

 Descrição dos serviços +  Descrição dos serviços  

-
Descrição detalhada dos serviços prestados e as possíveis informações complementares.
+
Descrição detalhada dos serviços prestados e as possíveis informações complementares.

- Descrição dos serviços * + placeholder="Descreva os serviços prestados."> + obrigatório

@@ -288,9 +288,9 @@ @@ -416,17 +416,17 @@
@@ -436,12 +436,12 @@ -
-
-
-
-
-
- - + obrigatório

@@ -479,7 +469,7 @@

-
Todos os campos com * são de preenchimento obrigatório.
+
Todos os campos com * são de preenchimento obrigatório.
@@ -1131,8 +1121,8 @@ function msgModal(size) { FLUIGC.modal({ - title: "Atenção", - content: "Existem campos que estão preenchidos incorretamente e/ou não foram preenchidos. Confira e realize as correções nos campos indicados.", + title: "Atenção", + content: "Existem campos que estão preenchidos incorretamente e/ou não foram preenchidos. Confira e realize as correções nos campos indicados.", id: 'fluig-modal', size: size, actions: [{ @@ -1156,7 +1146,7 @@ document.getElementById("mensagemErroDiasExpiracao").textContent = ""; } else { // O valor não é um número positivo, exibe mensagem de erro - document.getElementById("mensagemErroDiasExpiracao").textContent = "Digite um número positivo válido."; + document.getElementById("mensagemErroDiasExpiracao").textContent = "Digite um número positivo válido."; } } diff --git a/Lançamento de documentos/lançamentos/portalfornecedor_endpoint_contract.md b/Lançamento de documentos/lançamentos/portalfornecedor_endpoint_contract.md new file mode 100644 index 0000000..f6bd8d9 --- /dev/null +++ b/Lançamento de documentos/lançamentos/portalfornecedor_endpoint_contract.md @@ -0,0 +1,117 @@ +# Portal Fornecedor - contrato do endpoint intermediario + +## Objetivo + +A widget publica nao deve chamar diretamente: + +- `/process-management/api/v2/processes/FlowEssentials_LancamentodeDocumento/start` +- `/api/public/ecm/dataset/datasets` + +Ela deve chamar um endpoint intermediario no servidor, por exemplo: + +- `POST /api/public/portalfornecedor/enviar` + +Esse endpoint e quem usa `fluig_rest` no backend. + +## Request esperado da widget + +```json +{ + "targetState": 5, + "comment": "Envio via portal fornecedor", + "formFields": { + "data_abertura": "2026-03-13", + "emitido_por": "fornecedor", + "entidade_responsavel": "Empresa X", + "tipo_cadastro": "cpf", + "emailSolicitante": "email@empresa.com.br", + "cpf": "12345678900", + "tipo_documento": "danfe", + "numero_documento": "123456", + "valor": "10,00", + "justificativa": "Descricao do servico" + } +} +``` + +## Response de sucesso + +```json +{ + "success": true, + "message": "Solicitacao enviada com sucesso.", + "processInstanceId": "12345", + "content": { + "processInstanceId": "12345" + } +} +``` + +## Response de erro + +```json +{ + "success": false, + "message": "Descricao do erro" +} +``` + +## Logica esperada no backend + +1. Receber o JSON da widget. +2. Validar os campos obrigatorios. +3. Usar `fluigAPI.getAuthorizeClientService()`. +4. Invocar o servico `fluig_rest`. +5. Chamar o endpoint final: + `/process-management/api/v2/processes/FlowEssentials_LancamentodeDocumento/start` +6. Retornar para a widget somente o resultado final. + +## Exemplo de chamada server-side + +```javascript +var clientService = fluigAPI.getAuthorizeClientService(); + +var requestData = { + companyId: String(getValue("WKCompany") || "1"), + serviceCode: "fluig_rest", + endpoint: "/process-management/api/v2/processes/FlowEssentials_LancamentodeDocumento/start", + method: "post", + timeoutService: "100", + headers: { + "Content-Type": "application/json", + "Accept": "application/json" + }, + options: { + encoding: "UTF-8", + mediaType: "application/json", + useSSL: true + }, + params: payloadRecebidoDaWidget +}; + +var vo = clientService.invoke(JSON.stringify(requestData)); +var raw = String(vo.getResult() || ""); +var response = JSON.parse(raw); +``` + +## Configuracao da widget + +Por padrao a widget usa: + +- `https://api.grupoginseng.com.br/v2/portalfornecedor/enviar_api_public_portalfornecedor_enviar_post` + +Se necessario, sobrescreva antes de carregar a widget: + +```html + +``` + +## Observacao importante + +`apiKey` no front nao substitui OAuth 1.0 do Fluig. Se existir um header como `apiKey`, +ele deve ser validado apenas no endpoint intermediario. O endpoint intermediario continua +sendo o responsavel por usar `fluig_rest` no servidor. diff --git a/Lançamento de documentos/lançamentos/portalfornecedor_proxy.env.example b/Lançamento de documentos/lançamentos/portalfornecedor_proxy.env.example new file mode 100644 index 0000000..1929f22 --- /dev/null +++ b/Lançamento de documentos/lançamentos/portalfornecedor_proxy.env.example @@ -0,0 +1,9 @@ +PORTAL_FORNECEDOR_BASE_URL=https://comerciode188006.fluig.cloudtotvs.com.br +PORTAL_FORNECEDOR_PROCESS_ID=FlowEssentials_LancamentodeDocumento +PORTAL_FORNECEDOR_CLIENT_KEY=your_consumer_key +PORTAL_FORNECEDOR_CLIENT_SECRET=your_consumer_secret +PORTAL_FORNECEDOR_RESOURCE_OWNER_KEY=your_access_token +PORTAL_FORNECEDOR_RESOURCE_OWNER_SECRET=your_token_secret +PORTAL_FORNECEDOR_COMPANY_ID=1 +PORTAL_FORNECEDOR_PARENT_FOLDER_ID=10 +PORTAL_FORNECEDOR_CORS_ORIGINS=https://comerciode188006.fluig.cloudtotvs.com.br diff --git a/Lançamento de documentos/lançamentos/portalfornecedor_proxy_example.py b/Lançamento de documentos/lançamentos/portalfornecedor_proxy_example.py new file mode 100644 index 0000000..025c31f --- /dev/null +++ b/Lançamento de documentos/lançamentos/portalfornecedor_proxy_example.py @@ -0,0 +1,214 @@ +from __future__ import annotations + +import os +from typing import Any + +import requests +from fastapi import FastAPI, File, Form, HTTPException, UploadFile +from fastapi.middleware.cors import CORSMiddleware +from pydantic import BaseModel +from requests_oauthlib import OAuth1 + + +class PortalFornecedorSuccessResponse(BaseModel): + success: bool = True + message: str + processInstanceId: str = "" + content: dict[str, Any] + + +class PortalFornecedorErrorDetail(BaseModel): + message: str | None = None + + +def env(name: str, default: str = "") -> str: + value = os.getenv(name, default).strip() + if not value: + raise RuntimeError(f"Missing environment variable: {name}") + return value + + +app = FastAPI(title="Portal Fornecedor Proxy") + +app.add_middleware( + CORSMiddleware, + allow_origins=os.getenv("PORTAL_FORNECEDOR_CORS_ORIGINS", "*").split(","), + allow_credentials=False, + allow_methods=["POST", "OPTIONS", "GET"], + allow_headers=["*"], +) + + +@app.get("/health") +def health() -> dict[str, str]: + return {"status": "ok"} + + +@app.post( + "/api/public/portalfornecedor/enviar", + response_model=PortalFornecedorSuccessResponse, + responses={ + 400: {"model": PortalFornecedorErrorDetail}, + 401: {"model": PortalFornecedorErrorDetail}, + 500: {"model": PortalFornecedorErrorDetail}, + }, +) +async def enviar( + arquivo: UploadFile = File(...), + targetState: int = Form(5), + comment: str = Form("Envio via portal fornecedor"), + data_abertura: str = Form(...), + emitido_por: str = Form(...), + entidade_responsavel: str = Form(...), + tipo_cadastro: str = Form(...), + emailSolicitante: str = Form(""), + cpf: str = Form(...), + tipo_documento: str = Form(""), + numero_documento: str = Form(...), + valor: str = Form(""), + justificativa: str = Form(...), +) -> PortalFornecedorSuccessResponse: + file_name = arquivo.filename or "anexo" + file_mime = arquivo.content_type or "application/octet-stream" + file_bytes = await arquivo.read() + + if not file_bytes: + raise HTTPException(status_code=400, detail={"message": "Arquivo obrigatorio."}) + + auth = build_auth() + upload_binary(file_name, file_bytes, auth) + document_id = create_document(file_name, file_mime, auth) + + process_payload = { + "targetState": targetState, + "comment": comment, + "formFields": { + "data_abertura": data_abertura, + "emitido_por": emitido_por, + "entidade_responsavel": entidade_responsavel, + "tipo_cadastro": tipo_cadastro, + "emailSolicitante": emailSolicitante, + "cpf": cpf, + "tipo_documento": tipo_documento, + "numero_documento": numero_documento, + "valor": valor, + "justificativa": justificativa, + "anexo_documento_id": str(document_id), + "anexo_documento_nome": file_name, + "anexo_documento_mime": file_mime, + }, + } + + response = requests.post( + process_start_endpoint(), + json=process_payload, + auth=auth, + headers={"Accept": "application/json"}, + timeout=30, + ) + + if not response.ok: + raise HTTPException(status_code=response.status_code, detail=safe_json(response)) + + data = safe_json(response) + + return PortalFornecedorSuccessResponse( + success=True, + message="Solicitacao enviada com sucesso.", + processInstanceId=extract_process_instance_id(data), + content=data, + ) + + +def build_auth() -> OAuth1: + return OAuth1( + client_key=env("PORTAL_FORNECEDOR_CLIENT_KEY"), + client_secret=env("PORTAL_FORNECEDOR_CLIENT_SECRET"), + resource_owner_key=env("PORTAL_FORNECEDOR_RESOURCE_OWNER_KEY"), + resource_owner_secret=env("PORTAL_FORNECEDOR_RESOURCE_OWNER_SECRET"), + signature_method="HMAC-SHA1", + ) + + +def base_url() -> str: + return env("PORTAL_FORNECEDOR_BASE_URL").rstrip("/") + + +def process_start_endpoint() -> str: + process_id = env("PORTAL_FORNECEDOR_PROCESS_ID", "FlowEssentials_LancamentodeDocumento") + return f"{base_url()}/process-management/api/v2/processes/{process_id}/start" + + +def upload_binary(file_name: str, file_bytes: bytes, auth: OAuth1) -> None: + response = requests.post( + f"{base_url()}/api/public/2.0/contentfiles/upload/", + params={"fileName": file_name}, + data=file_bytes, + auth=auth, + headers={ + "Content-Type": "application/octet-stream", + "Accept": "application/json", + }, + timeout=30, + ) + + if not response.ok: + raise HTTPException(status_code=response.status_code, detail=safe_json(response)) + + +def create_document(file_name: str, mime_type: str, auth: OAuth1) -> str: + payload = { + "companyId": env("PORTAL_FORNECEDOR_COMPANY_ID", "1"), + "description": file_name, + "parentId": int(env("PORTAL_FORNECEDOR_PARENT_FOLDER_ID", "10")), + "immutable": True, + "isPrivate": False, + "downloadEnabled": True, + "attachments": [{"fileName": file_name}], + "additionalComments": mime_type, + } + + response = requests.post( + f"{base_url()}/api/public/ecm/document/createDocument", + json=payload, + auth=auth, + headers={"Accept": "application/json"}, + timeout=30, + ) + + if not response.ok: + raise HTTPException(status_code=response.status_code, detail=safe_json(response)) + + data = safe_json(response) + content = data.get("content", {}) if isinstance(data, dict) else {} + document_id = content.get("id") or content.get("documentId") + + if not document_id: + raise HTTPException(status_code=500, detail={"message": "Fluig nao retornou documentId do anexo."}) + + return str(document_id) + + +def safe_json(response: requests.Response) -> Any: + try: + return response.json() + except Exception: + return {"message": response.text} + + +def extract_process_instance_id(data: Any) -> str: + if not isinstance(data, dict): + return "" + if data.get("processInstanceId"): + return str(data["processInstanceId"]) + + content = data.get("content") + if isinstance(content, dict): + if content.get("processInstanceId"): + return str(content["processInstanceId"]) + if content.get("processInstanceid"): + return str(content["processInstanceid"]) + if content.get("requestNumber"): + return str(content["requestNumber"]) + + return "" diff --git a/Lançamento de documentos/lançamentos/portalfornecedor_proxy_requirements.txt b/Lançamento de documentos/lançamentos/portalfornecedor_proxy_requirements.txt new file mode 100644 index 0000000..30f7c4e --- /dev/null +++ b/Lançamento de documentos/lançamentos/portalfornecedor_proxy_requirements.txt @@ -0,0 +1,5 @@ +fastapi==0.115.12 +uvicorn==0.34.0 +requests==2.32.3 +requests-oauthlib==2.0.0 +python-multipart==0.0.20 diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/view.ftl b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/view.ftl index 2aaf5fe..2288fc2 100644 --- a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/view.ftl +++ b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/view.ftl @@ -1,4 +1,4 @@ -
@@ -102,6 +102,32 @@ data-params="MyWidget.instance()">
+
+ +
+ + + +

+ Selecione o arquivo ou use a camera do celular para capturar o documento. +

+ + + + + +
+ +
+ +
+
@@ -131,29 +157,6 @@ data-params="MyWidget.instance()">
-
- -
- - - -

- Utilize o botão abaixo para anexar o documento. -

- - - - - -
- -
- -
-
diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/js/portalfornecedor.js b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/js/portalfornecedor.js index 79fddb5..44b7a37 100644 --- a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/js/portalfornecedor.js +++ b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/js/portalfornecedor.js @@ -1,9 +1,10 @@ -if (typeof window !== "undefined") { +if (typeof window !== "undefined") { window.WCMAPI = window.WCMAPI || {}; if (typeof window.WCMAPI.isMobileAppMode !== "function") { window.WCMAPI.isMobileAppMode = function () { return false; }; } } + function showCamera(param) { if (typeof JSInterface !== "undefined" && JSInterface && typeof JSInterface.showCamera === "function") { JSInterface.showCamera(param); @@ -16,7 +17,6 @@ var MyWidget = SuperWidget.extend({ init: function () { this.root = $("#MyWidget_" + this.instanceId); this.anexoInfo = null; - this.gedParentFolderId = 10; this.isSending = false; this.bindEvents(); this.setupInitialValues(); @@ -29,11 +29,11 @@ var MyWidget = SuperWidget.extend({ self.enviarDocumento(); }); - this.root.find("#anexaDocumento").off("click").on("click", function () { + this.root.find("#anexaDocumento_" + this.instanceId + ", #anexaDocumento").off("click").on("click", function () { self.handleAnexo(); }); - this.root.find("#arquivoLocal").off("change").on("change", function () { + this.root.find("#arquivoLocal_" + this.instanceId + ", #arquivoLocal").off("change").on("change", function () { self.onArquivoSelecionado(this); }); @@ -57,6 +57,7 @@ var MyWidget = SuperWidget.extend({ this.root.find("#tipo_cadastro").val("cpf").trigger("change"); this.root.find("#emitido_por").val("fornecedor"); this.root.find("#tipo_documento").val("danfe"); + this.root.find("#arquivoLocalNome").text(""); this.clearStatus(); }, @@ -78,48 +79,10 @@ var MyWidget = SuperWidget.extend({ this.root.find("#arquivoLocalNome").text("Arquivo selecionado: " + file.name + " (" + this.formatFileSize(file.size || 0) + ")"); this.clearStatus(); - - console.log("[portalfornecedor] anexo preparado para envio:", { - fileName: this.anexoInfo.fileName, - mimeType: this.anexoInfo.mimeType, - fileSize: this.anexoInfo.fileSize - }); }, handleAnexo: function () { - if (showCamera("anexo_documento")) { - return; - } - - if (this.openAttachmentTab()) { - return; - } - - this.root.find("#arquivoLocal").trigger("click"); - }, - - openAttachmentTab: function () { - try { - var parentDoc = window.parent && window.parent.document ? window.parent.document : document; - var selectors = [ - "#tab-attachments", - "a[href*='attachments']", - "a[aria-controls*='attachments']", - "[data-tab*='attachments']" - ]; - - for (var i = 0; i < selectors.length; i++) { - var el = parentDoc.querySelector(selectors[i]); - if (el) { - el.click(); - return true; - } - } - } catch (e) { - // ignore - } - - return false; + this.root.find("#arquivoLocal_" + this.instanceId + ", #arquivoLocal").trigger("click"); }, toggleTipoCadastro: function (tipo) { @@ -188,61 +151,44 @@ var MyWidget = SuperWidget.extend({ this.setLoading(true, "Enviando documento, aguarde..."); - this.uploadAnexoToECM(this.anexoInfo.file) - .done(function (docData) { - var payloadProcesso = { - targetState: 0, - subProcessTargetState: 0, - comment: "Solicitacao criada via widget", - formFields: { - data_abertura: self.value("#data_abertura"), - emitido_por: self.value("#emitido_por"), - entidade_responsavel: self.value("#entidade_responsavel"), - tipo_cadastro: tipoCadastro, - emailSolicitante: self.value("#emailSolicitante"), - cpf: cpfField || documentoPessoa, - tipo_documento: self.value("#tipo_documento"), - numero_documento: numeroDocumento, - valor: valor, - justificativa: self.value("#justificativa"), - anexo_documento_id: String(docData.documentId || ""), - anexo_documento_nome: self.anexoInfo.fileName, - anexo_documento_mime: self.anexoInfo.mimeType - } - }; + var payloadProcesso = { + targetState: 5, + comment: "Envio via portal fornecedor", + formFields: { + data_abertura: self.value("#data_abertura"), + emitido_por: self.value("#emitido_por"), + entidade_responsavel: self.value("#entidade_responsavel"), + tipo_cadastro: tipoCadastro, + emailSolicitante: self.value("#emailSolicitante"), + cpf: cpfField || documentoPessoa, + tipo_documento: self.value("#tipo_documento"), + numero_documento: numeroDocumento, + valor: valor, + justificativa: self.value("#justificativa") + } + }; - window.__portalfornecedor_lastProcessPayload = payloadProcesso; - console.log("[portalfornecedor] payload direto processo:", payloadProcesso); + window.__portalfornecedor_lastProcessPayload = payloadProcesso; + console.log("[portalfornecedor] payload endpoint:", payloadProcesso); - self.enviarDiretoProcesso(payloadProcesso) - .done(function (response) { - console.log("[portalfornecedor] response processo direto:", response); - self.setLoading(false); - self.renderSuccessState(response); - }) - .fail(function (xhrDireto) { - self.setLoading(false); - console.warn("[portalfornecedor] falha no envio direto:", xhrDireto); - console.error("[portalfornecedor] detalhe erro processo direto:", { - status: xhrDireto.status, - statusText: xhrDireto.statusText, - responseText: xhrDireto.responseText - }); - self.setStatus("error", "Falha ao iniciar processo. Veja o console para detalhes."); - FLUIGC.toast({ - title: "Erro", - message: "Falha ao iniciar processo. Veja o console para detalhes.", - type: "danger" - }); - }); - }) - .fail(function (uploadErr) { + this.enviarViaEndpoint(payloadProcesso, this.anexoInfo.file) + .done(function (response) { + console.log("[portalfornecedor] response endpoint:", response); self.setLoading(false); - console.error("[portalfornecedor] falha upload documento ECM:", uploadErr); - self.setStatus("error", "Falha ao enviar anexo para o GED."); + self.renderSuccessState(response); + }) + .fail(function (xhr) { + self.setLoading(false); + console.warn("[portalfornecedor] falha no envio via endpoint:", xhr); + console.error("[portalfornecedor] detalhe erro endpoint:", { + status: xhr.status, + statusText: xhr.statusText, + responseText: xhr.responseText + }); + self.setStatus("error", self.extractEndpointErrorMessage(xhr)); FLUIGC.toast({ title: "Erro", - message: "Falha ao enviar anexo para o GED.", + message: "Falha ao enviar pelo endpoint do portal.", type: "danger" }); }); @@ -270,67 +216,68 @@ var MyWidget = SuperWidget.extend({ return ""; }, - enviarDiretoProcesso: function (payloadProcesso) { + enviarViaEndpoint: function (payloadProcesso, file) { return $.ajax({ - url: "/process-management/api/v2/processes/FlowEssentials_LancamentodeDocumento/start", + url: this.getPublicEndpointUrl(), type: "POST", - contentType: "application/json", - data: JSON.stringify(payloadProcesso) + data: this.buildMultipartData(payloadProcesso, file), + processData: false, + contentType: false }); }, - uploadAnexoToECM: function (file) { - var self = this; - var dfd = $.Deferred(); - var fileName = file.name; - var uploadUrl = "/api/public/2.0/contentfiles/upload/?fileName=" + encodeURIComponent(fileName); + getPublicEndpointUrl: function () { + if (window.portalfornecedorConfig && window.portalfornecedorConfig.publicEndpointUrl) { + return window.portalfornecedorConfig.publicEndpointUrl; + } - fetch(uploadUrl, { - method: "POST", - headers: { - "Content-Type": "application/octet-stream" - }, - body: file - }) - .then(function (resp) { - if (!resp.ok) throw new Error("Falha no upload binario"); - return resp.text(); - }) - .then(function () { - var companyId = (window.WCMAPI && WCMAPI.organizationId) ? String(WCMAPI.organizationId) : "1"; - var createPayload = { - companyId: companyId, - description: fileName, - parentId: self.gedParentFolderId, - immutable: true, - isPrivate: false, - downloadEnabled: true, - attachments: [{ fileName: fileName }] - }; + return "https://api.grupoginseng.com.br/v2/api/public/portalfornecedor/enviar"; + }, - return fetch("/api/public/ecm/document/createDocument", { - method: "POST", - headers: { - "Content-Type": "application/json;charset=utf-8" - }, - body: JSON.stringify(createPayload) - }); - }) - .then(function (resp) { - if (!resp.ok) throw new Error("Falha ao criar documento no GED"); - return resp.json(); - }) - .then(function (data) { - var content = data && data.content ? data.content : {}; - var documentId = content.id || content.documentId; - if (!documentId) throw new Error("GED nao retornou documentId"); - dfd.resolve({ documentId: documentId, raw: data }); - }) - .catch(function (err) { - dfd.reject(err); - }); + buildMultipartData: function (payloadProcesso, file) { + var formData = new FormData(); + var formFields = payloadProcesso && payloadProcesso.formFields ? payloadProcesso.formFields : {}; + var keys = Object.keys(formFields); - return dfd.promise(); + formData.append("targetState", String(payloadProcesso.targetState || 5)); + formData.append("comment", payloadProcesso.comment || ""); + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + formData.append(key, formFields[key] == null ? "" : String(formFields[key])); + } + + if (file) { + formData.append("arquivo", file, file.name || "anexo"); + } + + return formData; + }, + + extractEndpointErrorMessage: function (xhr) { + if (!xhr || !xhr.responseText) { + return "Falha ao enviar pelo endpoint do portal. Veja o console para detalhes."; + } + + try { + var payload = JSON.parse(xhr.responseText); + if (payload && payload.message) { + return String(payload.message); + } + if (payload && payload.detail && typeof payload.detail === "string") { + return String(payload.detail); + } + if (payload && payload.detail && payload.detail.message) { + return String(payload.detail.message); + } + if (payload && payload.detailedMessage) { + return String(payload.detailedMessage); + } + } catch (e) { + // ignore + } + + return xhr.responseText; }, setLoading: function (isLoading, message) { @@ -379,6 +326,8 @@ var MyWidget = SuperWidget.extend({ this.clearFieldError("#cpf"); } + if (!this.anexoInfo || !this.anexoInfo.file) ok = this.markRequired("#arquivoLocal") && ok; + return ok; }, @@ -457,4 +406,3 @@ var MyWidget = SuperWidget.extend({ return (b / 1048576).toFixed(2) + " MB"; } }); - diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/target/portalfornecedor.war b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/target/portalfornecedor.war index 09757e9fad84af3f8a757c7791a64d671e87a28f..8d016e370c225a51d70a601885a1dab1bd095b72 100644 GIT binary patch delta 8211 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 From b8a84962ce0cabaacd7dc60c79453a8ae53dce35 Mon Sep 17 00:00:00 2001 From: Andrey Cunha Date: Mon, 16 Mar 2026 18:24:24 -0300 Subject: [PATCH 04/25] att --- .../org.eclipse.e4.workbench/workbench.xmi | 20 +- .../0.log | 1 + .../FlowEssentials_LancamentodeDocumento.png | Bin 20989 -> 17244 bytes Transferência Ginseng/.metadata/.log | 49 + .../.root/{1.tree => 2.tree} | Bin .../.safetable/org.eclipse.core.resources | Bin 444 -> 730 bytes .../.settings/org.eclipse.core.resources.prefs | 1 + .../.settings/org.eclipse.debug.ui.prefs | 2 + .../.settings/org.eclipse.rse.core.prefs | 2 +- .../.settings/org.eclipse.ui.ide.prefs | 2 +- .../org.eclipse.e4.workbench/workbench.xmi | 171 ++- .../org.eclipse.jdt.ui/dialog_settings.xml | 10 + .../0.log | 1 + .../.cache/clean-cache.properties | 2 + .../.executables/data.properties | 6 + .../org.eclipse.ui.ide/dialog_settings.xml | 7 +- Transferência Ginseng/.metadata/version.ini | 2 +- Transferência Ginseng/.vscode/servers.json | 18 + .../com.totvs.tds.ecm.dataservers | Bin 0 -> 556 bytes Transferência Ginseng/datasets/dsFiliais.js | 104 -- .../datasets/ds_LojasTransf.js | 113 -- .../datasets/ds_LojasTransfteste.js | 209 +++ .../datasets/ds_rgb_products.js | 267 ++++ Transferência Ginseng/datasets/revenda.js | 61 - .../events/displayFields.js | 3 +- .../excel.js | 168 ++- .../script.js | 27 +- .../totvsflow_solicitacao_transferencia.html | 1228 +++++------------ 28 files changed, 1278 insertions(+), 1196 deletions(-) rename Transferência Ginseng/.metadata/.plugins/org.eclipse.core.resources/.root/{1.tree => 2.tree} (100%) create mode 100644 Transferência Ginseng/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs create mode 100644 Transferência Ginseng/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml create mode 100644 Transferência Ginseng/.metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties create mode 100644 Transferência Ginseng/.metadata/.plugins/org.eclipse.tm.terminal.view.ui/.executables/data.properties create mode 100644 Transferência Ginseng/.vscode/servers.json create mode 100644 Transferência Ginseng/com.totvs.tds.ecm.dataservers delete mode 100644 Transferência Ginseng/datasets/dsFiliais.js delete mode 100644 Transferência Ginseng/datasets/ds_LojasTransf.js create mode 100644 Transferência Ginseng/datasets/ds_LojasTransfteste.js create mode 100644 Transferência Ginseng/datasets/ds_rgb_products.js delete mode 100644 Transferência Ginseng/datasets/revenda.js diff --git a/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi b/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi index 1899e3e..1c35dce 100644 --- a/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi +++ b/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi @@ -7,6 +7,9 @@ + + + topLevel @@ -192,7 +195,6 @@ active - noFocus View categoryTag:Java @@ -451,6 +453,7 @@ View categoryTag:Java active + activeOnClose ViewMenu menuContribution:menu @@ -512,7 +515,7 @@ Draggable - + toolbarSeparator @@ -549,10 +552,7 @@ Draggable - - - - Draggable + Draggable @@ -1918,18 +1918,18 @@ View categoryTag:General - - + + glue move_after:PerspectiveSpacer SHOW_RESTORE_MENU - + move_after:Spacer Glue HIDEABLE SHOW_RESTORE_MENU - + glue move_after:SearchField SHOW_RESTORE_MENU diff --git a/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log b/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log index 882fc2f..43fd93d 100644 --- a/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log +++ b/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log @@ -1 +1,2 @@ 2026-03-12 10:11:35,412 [Worker-5: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is out-of-date. Trying to update. +2026-03-16 18:19:59,450 [Worker-2: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is out-of-date. Trying to update. diff --git a/Lançamento de documentos/lançamentos/workflow/.resources/FlowEssentials_LancamentodeDocumento.png b/Lançamento de documentos/lançamentos/workflow/.resources/FlowEssentials_LancamentodeDocumento.png index 5cb9992f704ec6bf0e20222c952179c774d546b9..0241398041f63f03a07a0fb2c62fac442c9305d0 100644 GIT binary patch literal 17244 zcmeIaXIN9~8Ymdc)(9$zf}qp@B8Y&1NE2{}CeoxRN|h!}dXsJm5CH+{C}o56D$=_& z=^(uaY0^8PCz&sxUft)+oqM18GtbQYT9B;uesAw9ukR^HpCP$K0)arz$lQ@ohCq&A zfIyC(g&qZ;yrQ_s4S|R=$w>UI`YdX3B%ya-pT+bg$whh?N7E}s^evgcR9=0) zjXr+aLE_q}9>^DTkiaps=+gF@C_!5qk=YcQ;@p|J0^a!~8b4mhA{8ydzg%hc`eI5-X{`>AWig@{Y zobfogJZBM*LT!IODQZPS{I6_n$+5Du7z#J%O+ndoi#V36GspxnM;e}FISPNtEE6;d zr$F2ZVwSlX2mKpdKAn<;f=iG*D>4vVo+1x!GC1!81OG9EqO+D=Eyd^PX=I+r1HsykX>D1)5vpa6aUIJ)=H35K z$LwzPUt9aOdxPC#qCqVoK+NB(E2(TJn&`{+JIzF%Hf3^Eu1a5Nzk{1#YLsI`1{!eQ zTCJ5WEML2+PZeGA+fym@`@`&(yj}oA@46c053S!@i%zj7OsWa-vF{A(JlN z#|L%LRdxP9DOocc@gv%sy$>vMb0^lmT_^Xu*WR?IT~~;$Wzoll1Zpn-u;KOECi=zU zSZ7ihuXrc|a6;J!c9HMyStV7fo|{4>WJ-^>hr`^kwtd7_Y^5=cc@8)8obJ zTQMq+imuHiag|NgiW z$!C5ZC}$F*1dHEV4N++A=h?H_GqrOZN|TYy$`M zA-jC5bo81lFB{i@O`{~gybP}B&XcAuOcKSp+KUETo+vy#zMGG$-GQ}ysPOt=P1*~1 zd`WC4KHvhvbW3M2t!Pd6rr5A4?tPBc?N??)EI`%dB+(&SfNm`kkS+p{Ck+fMQSoVClnuw;l?ZhVx zTQd`-!kb<$t|%?-TwDEAdY$1Ozxz{XaZ4B|_s28TF4HoK(MqRImy+e~j6Gn#`N2{M z+ih6hDxf)ZN%fG(kT+{J`K4LW_aj0x_$#a@A};D{wn=<41^jK-**x6@0QKWgNkpgM zMTu~?QXA@LTqMgjrgs_f>Tdt`II8kVD_~2cR>TNNyN(r}gNz_MSAU0x33xVYkyR~i z8eb|W2czl74(F1HKKG(J3auyZsf?l$-b|yIjjipEajEg-)rlBTnlbh)EVFLbk;D0R z2fQ_q0-iLxtfPjCs0c=n;qd~;m1vy$t?rW}v^j3Mj`VX4Q_P)_^T@L$n1uTkr(3Db z@7MB+=49BK%}FlGgu zAce)y7#?rQDe>0In}IRAXd>29=hJpYwOi&oHJ9teFg2$f?oOmzpSfG&t#4LCBV@@K zs)7a(0OqJg4xQ|Y3kYW}gR6w1y-m`ibe<7*6LtJgOUGVRAIr3Ds}S@MnaEZVQ+_fm zJk3R@#P89MZhd{%tx+AO?g!g*d1otWO@hs%;J_r*S!j0%nk)1@-ee#;vMOn`)k#KC z7c5G{aik>WV~V}#*Y(fd6>D+b0U?hz3rgulu{HWPD_5N7ICRs28x|WK?TRXQ`X~Q= zUav@Q8>i@y#dTpg;?AcwE5_RAk6>{+%{Ls@Mu+#ll#@}=nWi#v(M0aP<;l%j9NxJ? z*g84s9R;*@Yhl@>mc#Zz^nK^!LwTL+gYmcSX;#FqXXLU6Jb7QBr??>R+!tlr>zBpR z5i~8-KBwg&GrQ9zn?`D++P6@azt3E1EN1IWn4<`F+;h+#oXfbFo)oP$K#0M)SY+P# z=b7*zN4<~_(}A-dlR$Sy)IfZ;4DaHYzpSgM;c?N~!#l=f9bs3IE3EF1CsQN?#Dbl9 z1#SR6d@oY(U}#M>ma)7zu>L*fvf2fgp{@s;3r-c?!d#pS18e1;p`P3~*|LgPdZ*1W z9ObObnR$z8mn|P)Xq^oE!Z7B|dyj0Uss|~OGOsO`5k$=ju5!5MhA?I=46c9A@gHwE zP|@4)cw+)-Wc4PHeH6AjBhfQ4a~={)u7L$FJF2C!(Djb*uO_9S@qApod9_g8n|sYe?0CG}06GKCpTL5@5E}H$OwItH$XQ+;O8iRv`miHr+d%tY@btt8s=Etm$oR6|~+;H80si=qvJ?S0Y!-;7U9oiEsRtkg! zG)S)L8)NNCajIDl*YKvNpvLzMt_;N{X&t8x-afbQvoXmkVmF@jZsB_OL_<!8tnk zIflao@`WT?*8!n20P;eyCF%(}m#LgKp8t*mCN7_4lf6%aeHXPV?ZU z0SCo7=~_Q_1#;4Ok*w)O1-T`%G0q*=uhc|WmaG8jcyf9RB?E6tZL$$ z)>yrVOBXTS0iFYDsD?O@1{1Q+@*L#=#m=rGMsgw!`c~W*KHm33E&vHtPJ^`le(EcoqOVWw z?zfi^rh^DOjp?ET6(w%6?P2Dg=Jgw!^uu(S9#b#b`RV#2ocAvJFiM;S&esyZ`-6wT zZ|mA3R5F1u_mWG82;-fVMJolQ)BBIxnzYypDGT~8aTL2ujOfg6-_2_?wB^#+3f6sg zu3uRaO>_0I#sF@yDO47Fx*4kUBYl4Y0-Nh*NxOfUl|g1lP_~0BHs;C$yzw-?d#Djc zfv_>|CUc)({GpUy=Mkn!_xir#tp<&(SaA#6>nfJVyuAUY9Fl19ABszk@Y$>kWOJO` zilzZ*Scl-XM0Y6vhz;W5T z>C8K?fe%yuJ0^*k6KBZ)K0j0$7^eaqhhvB$JNBm4vy?C*p-W4GwLh~7y>G|9`ym6l z!NGY{h_iHhhX#`eRiZ;TOf5!~*zH9`nX-A~J(#lHOr~REUU~P2SXN*+>G!LqQaxOm zBiU+vVNShlddg{uG|p2kQ{nPE;aa60ZAoQ2!tA0R__D*Qvq}Qm?m5%BsBe>&=qiM5 zO1u*DjP3ne+3Qgki@vIEF=1joD{<$5o9B3^jOt@!ovH5xy`h#vJq`yPQ{mti=F~1g zTy1FODvNQJy%Tiik{pUk0RNc$rC+AHp2MxxExd+m;IzW7=^O__=4J{M9#rBccQ?P* zZyP&rA(~aYyib3H^HKR_>}DV{HFpHGiW9IjSzYhK@P74tJv|}I2DSZWbh}jrKl(P6 z|26Xf`iK;oo&%3GJRZNeNuTI(!h5^xZuuD+y0ptrssf_jzgY9_$5w8Q;`=xplQCC= zCb`dWAUCGGZzVwwgrzrU;Xa0)II&WC#lIiqVG8Bu%#9zYAEH=W(Z(J{YZG4SEuIYe zsbLW%eT9x8`ZbLnYXnuMS`V=u#bp;``8jhY89FUEBeVTpM2P9@RAIu~Wr8JP&&7Rt zi?HHWiN&WdC~ilOzS+;N#0i63?8)e7MignJGErMiUq7;HoZ~PPc67jAFxVKBkG#VJ z759a`WgkpGGEU4ns}T6SAGby-{~cuT@B|gYCPSq*K~=UTgd~W$h9?246m<}3x^F$< zR6CC-ac$-i>^aAq_>#Ht0dW6HMdsRPXufzvtAomLz3$h!7Hd(NzcJ{DSQRDG9 zeSL@&Fvi0?x5*Bz#!iNA=#fBkj((C;_z6?o2WIC(*#J}|^AIWWl|Sdt@jGRf#)cqam#QGf&M#h9j*f6bz z?r`c|0yFaT(l2X0kiDP;yjl~T@Y5y#5UPwc`rUl^yXezn>+lbmv;WNp@JEIIcy(qaUfgjzktotaa=*>P5z0~z$a+O*RDwkbduPQ zNbv(Lj?zFGlyU2yjO+B2`=2TIKs;&W__zNc<6m0c{6G?oF^e4Je`;*G!fpFsNMJ#3 zh&;+7M|`&!`C(B{2khqbj8jhEmLPCP3;mnQbZJD|D|kJoLG2FHza;aZ z-P3r(KZ{Y~)t_I;IvSAtZiR-vj1st-sTR*WbAK{xcDDNu@}JJqM!u{0&x3k38^{gO zC#LWD!sOl6Qwv|zi2tHOIY%oe@bJ{Lh2=?a%zd*mOn- zd%XCo^9Tv_iJ$s5{?_&JU{qx+*0J0A^g5xYq7)hk`8!Mi^#!yEg;#Fo=7 zZ>2j!vLiOsbL#O|N;3Bj_ulx;)+tKR^t`5iDSrl+lc%2Ny{5sGT;5$8+!KC5O~6$^ ziRgDZXgrM_MDw!)rGDD(_?YW#rwwJL!>zG9@bQkG&}Y}J(knvEFqa;krSm>S+musc zQ9crA(aKLPI=hkj$TuyQp{WL5*C!1^k?K9(ww1Z(-;~@P4VIgv%fHAF2`*t$`Qhh} zRM?p$c8!`X1|ln8c)nXjVN&k3Q1{r=X^ps4DK9sHkb9O(;{syW3vr1C1^n38pZ1zj zxLlp^iSNUiDQE{FC}I4mHwMejZ=LoAHdW~Jh?uqO8k+$%&z-t-7yi2m+S7gKl$&Dy zI||RwnO|R@-Ucb+>9>y-T`}aiyVnE{>8Dw zpgEhA^@rWb2_U<5s=8Z3<$lNfzlL9;v#9v`b@?P*FYr&RZw?#j&euU*CwbfdlWB)p z2jCivuTbA~Kk2`KFPQU}%MWI}RN@D`z3;nlW?puL|uen@@60*Fjs?_GS3#!t+4%lyl3MWTiN$R}bHXn(ik|L}v= z@OX!nxC`KzU#4_;%oA2*83DH}b{5PKZx=X?T9%77LOa5lf#p@w`&XY7U3rn$eu6k) z)DLz=vHDAH_`=?3H{_8@*Rdg$Q!X2j{B;VV+YtnX?jGCy?CqR3!56qqiUCT}9S@R%_t?{WCNSG4|V&Fa)ytH~0u73Z;Td zxF_2{PI3-X9d8KwgrfGZa#JPI`u{pG#p8~>I9v6i-;c zHHeG9BVr7+ZoFUIbM6@m%6%t_k=aunnRG7@0=odhYAP5120;czbzA`+gycY|u-<_{ zeGxve??~pCzoE-G3sthkDdz?wTs>*dCqrf8!UEaInIS02-?D5=0IEEt( z*Sx+VlcZKDY~=np5x5f^R*uu)?(yG&9ApE`0lytcCIR*HMnv6%e@#lo_+Y^d{Qz0{Tr>;c7a64cG?b7;= z&xHSsQ#}_yV8*`_1pn76sH(3W9oEATsQ@}!4#iTF24VN&BS0zsOcjWHdKH(RKF{y5 z&TqC}6N{gXjj^geHB?|O`#+v}DrC=nL-hnhJRw3M8Vb;ARI6AEC9LV-W%-a%E=$Gc z=H@2+BrDBlAV)v+e1P>-q4g~%*@?WSx>boAs?=&Di{0%`mhz+O=;;Y{@P$+kLl~~B zi%`aQ2!o>H%{Ox0m22vGGyLuo{PF6Sc%S$^f;B)75H13~9WV<;=CNHf1%2xv{+#5H z5LRTjm}Z+MS^{ty`kvp?-?Xt@^DXVZ&9UbnSM25je-}XBhQD0v*a1SiIghKh#C94t ze@<|REHq*^r@hFD*jLB%QSwM$jIR>xW|ZI+kUV0&T&^fZJ5Hfku`>8V{OQ*jJGZfy zE)_ei(w+E?>)qQ^Cm_1IoJ4URSq=BtX=nFXS(DAieq<}G*#AP0>!2|4aHcXn!09^3 zRHEXa3;Z_T%@Y$j&38ae1St@=(rpRcw`pys_uS+N8?=rE(0-84pj60VVB|SB1lkyH z#ScJPflvTWgda?N7i)IAl4J2>eQiU}mS(9%-PJdYHiXn|5<+cLem-zu=Okz*Ni-{m zMB~_$$M&#UpZ5B^)2J`rPg`0x0SaeqKOm+f{vabFdX1xub0;kcJ45zi>owVgKCDs| zVQ$c@NhDqc}<-haWjwF)A-0C39Bbp-O-Cn=9;?(II|KaqwdH0*`f^rkjsT2&`CiOlpbs@3P7VBo z8K=SESMA2L<}v}ukocMwe^zN#^tgok3I{a|ba6(v?D`(jcv3my@rqF@6@hGw&RRFs z>B@!w;KdEf_^mOUP(k<^5$5=}*@0_RwMoh^Spy^|O=+qNpWY@1lk+7Zo&B{*T7A*` zZDf{m5vp$RivStgA{o#H`XTwak+-QfM^r}dp_HHo!722^`Guuz1kH_YGQ!L&rTk@r zw{O#f@Aq|_uw(=S)s3ak@;1N3ZG0bUn&KL>JNxyYeiN-ah#i!wXh2gRBkMQ^) zM*MbnxajIuol_6LE7PuR{b)3s7#b#c=u5&{JySHxRU^-KU@-12&5;L=iIpMVeZ|+M zl*}yTf;K?iNZRcw?zP7y+{JQEPQmJ?-v#3@$0tUyUgM=d9Ff`q#L`pTUHtB(QZ1kz z=r`>iagBh{`%v4emC){>$nYJn@v3_j0CU?x1h5gAga(7EOFw)Yz{jmb^Cbx2r{aZ< z#0wM(sa+)A1Av8Z+Jg;-AF9OoQJ81y7Lvwee^pCM%cSt=8DJoeOTY0!?bs@cG_M z*-{E)v>xhN=Am6ek4Q8ke9nL*_*ThQtkd@{T3V&fJEi3f!W{1vM&bd-H#=ZXrOESI zDhh&zJ8M%vFwt>80I>Gud+U2efiYB`#*u_CVTR2YVr<*EYs53x6~sh*XiWHNijzQG zsX7IdmqO#)Up9;cBY+Pte_Zu4PveCb3^crNG?duS17G^qf&Dr8GpBn0dag>>Zvr)5 ziXP6>)1rkgyE;nw-Vd~U}})MMfkSy4&%yp&Myj+UqN*$ z9z&?sqeA!6=#W6_EIRKzLV-!|-)#^WA2b;LnQe&AvGN40hKrS|yq58W|6H-?hx%h7 zS}(usx>6rnndn}#X4+M%?x<-fiPju*ytF1Y9WUuNK{g$&R)pWJDw-enO?TPDXBH;8 zSvA0qXf>!Be5;dl@`VBGW0LagFLSaTJX6Ju21x7~Dw<_%Zo5Qx+}EtgJcsbfZiee= zw0m`0)pi@Y+}!Ybvu29ZCf~Z4`Bl)~)zH0ejQ<+0JQP=`3}+PE_Vl8$Aw(KIm=+@k zk@p3DvRTJ{HC>0c$aSkbwL{}rxaB*6oU)o?{d#BZ<6eGYlIYDdJuan7+QXQJ#mGx< zU{0iGjy?SNxN4^3Lzl&0{(sLiN)+4DW7nF+z{BJbfB0U}Y?6@2T2HprG6u+dsdO%FaB45RbZM#cO+-A!+)cr5 zjQg^*s4`};$t+7|5B8Q)-4@a1wRzXUSoRrt{4<2g5>stf=NY-vIHMPja-Y!7I*oy$ z&K8%8`k3Pv%51&Chg!;)E~A|{OI?C*FIRhx4)m&MKh)Iyl4i}9F8TJKUNs7w^c^!bjj;*6k4Mh?@dU`vW^(;XGB+SzsQ2B)gbBawz5$LaC9X051McQ(Db?m?0Lq2lSVa4~BfR@|eZ z0U-`UI44Um!x8tSH{56>(KCC`fO&WL{zZBrVI5KnpyHACNzId7Ko^REsm2a`T7Ebp5 zy#II!mus8@S!s4@mJQ#W;BXBQ1GiCBa;TK%C(!5_ zH5CmF4QXj_GcN80!6pb+oKo}N($sRv=3uqRR(J7wTKW=x#hdyRnWO8BI2V3Gtk=AP zP&%3^`h;_Y_j#0+rWHJXOFb!4HoUE6NB?`E(6ZaIOL}xdKsdVOu32x!fFZe_6`XPR zi`I2!IY7y$US5;VgbwlQJMmR_1NNf3AL!4{ z{8&P;!n^Cb$c<@G%A_rW>8si(5T;f`h;@9-*RLDJLqkK}EXdRHj6Uv?r~m%!D=-zJ z;`Pl+6u%lk)|z}Cr%n6LS$1W#Ar?0f+vCotR3Nr98T=vmrsG1t4W$PmO3?Epoj}Hj z?R3_yy#=Nz@A@_YCiSs9Ll~Dq6Gq?;P)xO-y_+r*jEjHtKpWTXOcRMa%Yz`X>KC>I`Ah8bvdk9@^lksylk+i;j40_}kHq7AVGUI6qn$3&t!!j0 zB@$^)8?z!eDznoOP=heA{b%IS{&<+jsOM2)shQmSoR2gJpJp|?nEMyUwFS)U zV(?~df@V^EVaAQN(MH&;%7l%;*~>kiylG|*81+GOYcboadjq-gYZjwzvKrBR`aOBM z?0ciR9_^Vu+?%<=g*0(8uar=?!&tw2TNmEaaW1!RYS<}c?w_JWcrgJBao=BSZmwjH z1%9*oLqKmaA;#qbVPuq#C)&BHUJSn*?bvHh$H7+V0z7@vv+V}5F-a%`)CWG^8nc~s z&Hq*uwp_#oGn|`XNB!A^-DUHZ&fHf@%FU-cnChnL@pq(_ZWZ50I(^4AEH^_6wDKog zn@X9o7X~{^&7H(#vos%;R_BE#MsJN8wLVDnvEG~18X>kbJ>~i zv((ht)x~kFvyT+BQM0GZKjKMrka5yYY%WaTabEovw3~TXSgZx}g(H$D>xuaBy0<4% z`Y^7x#SFdftG=FzvSuS9X1ycyJ9j1=?cO}V>||Q@Ea^5=sHvtc2FWT5nohp?cF-w5 zEy3^}h#xG{_?f2)(_t56#lpsGDcJY8Tyy7r^hVt*!4iw?$gVMN#@-S&Q~0r@22;sO za$<@SSCQbuu6nK-gUR$UTXM6t6hw9x<`&Al5?r|hKYEdIZbOaf@6Za(9P7Kq;W~1p zQ%mm4LGKX0dPuZ`azJIv4O{XyzQ#ld_o)j`kqtG=~;{Aqh`4M zS>AR{H~fyb8~b2_16cqTvt%+dTx>$mYV-GFcy(7QoCL(JQH_)OrHLQ<`8+cA_4$z9 zoUZBpI`pGCg@o#$A>sP)-T-YeuwfH`)pZr5H-ez9FxnhRTP~D?^$j5>3_@w2E zLh@sG%L(t!y6FT|@;~0delsiJ*u+x%!a_6WURLEW){ebrMn3Mh>c_ZppWdK1HNKAQ zPJFv2Bt1m!MXjjm;a2>CKJleE`vdX^*;)3B;T5X#M;)V_=PF#5Ik-kEt;R+?@Y8NP zW3oDFLsnBx)1jlz37H&=;u6}>Ye;fll=Vr}ZBXnkX1;p0I^chQLe@4UnKGHZC9>jE zo|WPBHm10_OKoYf@(DRaD3*ick@}#))_W)8iP-Ajyf;qcWBs?Zi(%$l z`D=OT=;xIuV}jEm!Z@X655k9l3o-6OG2XpdTKlt#;f{PD0%T=sbcymzq9IJgCtrXk zcMleojy!(0UY#WG7~`ORS#rNeXHg?B<)ejGF5SbN_;>U|Qf~%7fh5G+(-r;@b)E8P z90S-xfmkue(|Ihm%uZXB<$QE^o2YOm;FLB~md5r9G4D2yARLchKxj6g?tzT9a{piz z2oiWwh>|1CUy^*eVd+r=_7$?VHwmi%m*Lt#Ri%89zdgpk9Jqb;xIK zC!o%tbj{K4PN@-nx%<|7Vo3noT~m=i86?{hE9C=_^FuO_gE}3rLrYwvf;cge91GBK z-_iY0eVbA-YJ1_lV#0{QBrW`?@hQ+znkO#L9AStpE7Py{+FAc_%^JAg-a0QQ&`r9d zF$C&bDY`)TQC}F&+J(g+9PsvgHW_gN2?DuzWd@pKHY@i5*1!tZWR5^STV4JL9YeC9 zkiXV)jzDgIIVFO8rpm{2mkmin+*5%-coZJPj}j&9`p+J5V+H~Vw66Ar_3V(bAQ_s8 zRX+q$6AIFZ5bCSz^jG_C6bGFeUJuAXv{B`&z zw)Xei<&-+Zk(<)Q@1%ft^_08K=ts@ZxyS-$0ryUEAQ$GgjG<(nknyn-#(|h0Gp_8;fs%e@6fQ@ zbgS)Wz++M<$Qs%MyjaC>lks?<^uFye;)&OgA>WnXOPo1<;TPopU)EC!-Bp4%y|5{#L59|7NQu==^j6deocH;OYgioDy1?=#s@M^d{^sv zKhSc}26C288efbwfHIsQ$`1VodSnv*^HiXP4Dds^Um0t&*80W&B8xmWPLw-%oC*Os zeTgtkN5~!6A-)n&hJfv9 zFeK7DuZ@~1k2m?=naKM=Ox^9}bKPIe`mv+VE&;J7zVdb`bp-m?`2Q06P*u)9M5SEx zOgSr+hi5)gbM}yVd0_Opl;y?n{Mn&|KnezVRez{!z_gZOsIile?;U>kLJG=@c>eb< z7MQZtpPGQ*KK+w*pl$h647Zt3Gmz6HKLvDz0scc}I6(_vqfPUt808t@dMeWOoogO@ z?ViAIK0G|BN&+pD`0?KUa!VqgSX&6gbE+R0NT9Xq*du)6bZ1*kL#~q?Au1+OMqte; z#ZP>r?R6l-bAcZ)041ls#Zv!NmP3xd1W}(fQnUW}=@UO0pyYFwS9o`6aZa%3f6yY~ zbUNNuENSf_%K8vjgTQddg&EDfnMP_$*Mv;-)!NsF^d;Y38aIM+w6wrNzVyXyPr$L( znpAdixD?_5hmfTRIPN2$1(;(oQUV%@kmB!Cw8C_i`)e;IPE(8GW}{>GhL>KS zPqz@7@G}G{(#X4jy!>(y^9N79h&rc`HynA7#_T)*Q|S`Ua3dost5JOlsGM zTOg2Gnz75pxH6YkZst$3$Q3zm%nXj9%@svLH{%!rfDPWnj`+x+AmhBw8#4!mGYO=D zjqB+kIToKT^DT~)v!9TkO_5a;4=+uY8@OSiX+Pwz^dZJ={B<4~w3z8L6mbLc>dCJr zBxJ3jS=gc5U+k&ibX0X;B_@MQ;hkOmNwJ5tzE-&`r@4WH9S38z^fyYuM=V;{Xc7A z0cWPtl5*mC+%%rIJ)_No)ph;-E61+d*Hg4@w8FjXjMohS=@90+9yJ{iP&N}8FQ`|u zztbc5^`u2noK=_ntF3!3d*z@2a4KZaE@nAM`>rE5-bhfrfQ)zb^zeaB2k3VskH8=e zq`ofFr+cFvwRL+l682@5Cw+t!g%2}D4lu57WR`@iKKj+Q0@ZbRfn|1^h5$Imb0GJ; z9X^6PbcdojEYat)merZ07ec2V{W(hV64b(3rp_DvFG9P2goIvBRXyH?{+#BF* z?d(N(YU2PW8wSROpnCJ1!?uEM%#pLafHF0B50XQwhA?BqTIAG(@&%jLzpD)m)m&#*I^w%7(Mdhp}g| zF1rHLIgL|d@&-T-V;96AQksta?BBQ6`cXqM*_=bqhW1bK(!IY|;w0y^!^Hc&J%Za~ z5>)i&*UWExurZ4qFQx92i}?6Ne-Yzj*OoHul5|dCZWCeW%cho+GaR`YNv!((@on!dIWyElL-r`IrC>U+iHk#BqIV}>g3JNJKxKLYmga`j zno>ez{(ikSKj=8GExo*%HOl3^L7h5NNfG!c26U`##yIhlSI9CSDm^S0f~&5ijXIHQ7tp@+nz=Qr?#GU&azST4;SWq~wY&3|RUPj~!4XJ?YX^nWk~^4elrEQ~uXL-tvL@7!jS4@JbMkJ^F5_8zCGHR9 zI2=b-u)$+Uk3a?z97ycnVsue8^2tk-kU37}w5J-;sw4arK>8hP%J<+17>u-CFj;f_ zUv<;)UQr2XlRKD?yxV+>kOtCk(uYmS^i1VICtzUQoNtSGPP6vES~#UR3E3O6f^-ss z@&r>c5&Yb7FJT1{Y%#UvwG5rnqHK(ZM~Fz8%l5&H;C2IT9N1$VDp8p0SB<0q$sO!c zwC{!c^^87S#=9*>4z1A|GYhv$PU5jTY96z)e1&X*^nquqh-Jg`vCo@EF~!+idI@&} z1t$FD`!v^gCjuyMT4rHCzvF9n+Z$?TQOM8|yvvZKgH$KRe8}tyXh|z#p6LVD+U|}V zEgol@_%dQWmkK-~Q2z+AH{_rS*bx24nV3guHGo7CdF8(rOvL!yYB!fSMO{V$2VTMz z3=;K$+gA!JBDC<%>(!KXDS9MiF3$R&Wg=^U0#}S->kd5v<+msP3V~MyF%e)zNjC$M zA#5;p)XaNQrILIzkRgE&9z##DAyuUr?lO_Nk)f%A&J&;c=Z*k8e)C+C46l)b&BgQJ zlfa`O4eIL6@PFgC6aL@%=nYx~hJfFq2Spo%A-fFp*v&XWc>&UG k4&X?DFj)RO-7AD+vGYu8X_=J^EvA_Zxq*s6n^`$(TE@7N zrCGUagE9E<%wEzbxd+c-x`i8 zpeU>vhqSV_HP?;Sd-|TFqT8_IPo+>QDw~Xd8Cy8{lS+9GLsj|HE=Nz%?PEZ6Oe zSzFdVMqUGEj(mYI0KYzQFF>iN%qsowFaOoSfBoS9C>FS_Nuoh%hQ`L~o{=cj92 z=a{x& zQ+dw;tnT_rxsO-AMN&glSnNu$)>fBKcIfe)a1*KP{wI4?v{Swm9%yy~{c8Vhptxl- zR=Y))>3;bxkYO(2$IlmAGw?(+jNeu=F+dO{A-Pu!v(1R@Qjc1Lc3--=7G+c_@1PyF zJ@))F<(u8&wUq?PxAs9;hLREwO-Gr466G!FKVglxj!$UTCvYSVW#l^j*!^gSz)Qk`TdQ@*o-Oe{rVGz{N&F_t5^g8r_ z_!d47{_^U2hMvt#Pf#Vg(;M6z(Y&A*{q3lVR?P@!{||CuD^5gQ&>!R#_#fqO z*OfWClOXQo3h$G3O-(IL`CY|a%VC>^ZGMarN_LrfB_w5YRk}aXVy07SwD#FEM>?y` ze0dFh&O3vBIOq#4=}fwW8BQIswkB_1F15P7$gRi`(~_}9&nWMH2Ek*vyc9-)GmjMc zaLco^7q?*HE-j)TNF?!+Og&~Gt&5VK9U;2Q8yc_CB8B^5VJ#&QWh8QOpExLuwFJI2 zq$IF!1gp`{adwn?P2~C;=wpxe{Emn~JzhL_Kg3q%s1Cu5lei~M-aAc{=q|}*>iI^KvtVl~s0Ox0T{Iu}0;N(N05Jp}75}oA7(Z$+dgl*LjINjP9imiQO?V zT#EnMpne19cEU~qu2)iK9;;!%I*v*l!LEATo;#e2)4pKM9=5`JbcI2L-T~I#!wL2W zN^*EbKvU~ae{_AwedU_ms$4kg{HvaaIP0{z$>jS(+Z`~^Ovdfkt}g)2rU6^wp40Y1 z_Nv~Da?y(|95^q3RlmrYl2gD?3^k>MI>qKPNSYeVQSyknU4dlel^F$bv9oJ&&nU|Z z;w-*BfN$R5#p|h9F8Xenne-V_3wf433{>6lp(sCohQ~`(k`!s{h^Bd+PwO%sF&{XE zA0mx-YSN+`59{Nw!#ZoS>>P?S^py(W0F`Hg4I*<3OlmHf1J|-d7q(;;{AEvTHhyigp0lcYphcn)teHUZ_bg zZ>#fY;O1e?xR07Lu3!UVy4K^W`SQxWx@aHg;VZ`0jowe3k5R_L7sJ|ZN`@)xbgQ7E z{IMgajhObueG5G@pc(}pWu>LEY9pp2rLSXQ+Bf9!!&ckw;l>zETuhf=-~+Mwc}@K% z8wDhd(atcE!?63Gvdp$nj|}VXi?pmVWg5Bt5j1J%A(X*2_JhS|TKk{-lX~+#dN;;( zR~g4#01>a4xD&nJj=@V8Z$DA}H}>9mPn1|vn+=JNMHB(qkFb1}y!qS)Mt;yJi0i_j zv0irnV2>LN%Yv#YmaW@k>qEkNtqtPba$_Nrwr$@Yt5)gyN%ybG3<5vN!KRJZS4;Ls zk0T9knsg8N;mpW+*gWixVtGDC;oph>VR9zm672l>Gt$6~$3#ijK2ez;S4}^Oj$&0m z6ge4-x?%JcQij!YB?JN-8_lmH9E4$ItyE`|Lep{kr=I!UEG(vvoIryGwvt$e>Fsbu zEq{f%u$AWp40f#Iy)yq@19KOT@^qi0m@@n3EK2{QYPc5JOS}Win6PgjPV0a@d0w9+ z^2V@k>OfF~gc6CVUo9-~L?^LFTRX&T+^?Z=X5O=Cr_0_8c;U}c_2?8OBpGEn2lVwP zHMF?l<%3J@@mf+{JE>Qz+;(D-L!TIjir2`UB#x|Dj_iQc?xNiq6LUJPkvxa)?%VWw#KqW+(k=w z%EQD%UE=A*n2R>7cSp5fezNVKUZPf0fm{j3*PVl9?bIZ1@bX+<}J@ zp?W>h;-(IoMT3(*PEjY1eweZ2wKYHN033BMsktTJ<@^SXGk=!`7MXO}HC=|A?76X@ zfjHd6nbgg!L#5|u`;o2yNejZ%@Cs{%$V6SV!d4&0%EhL}76`m{=4TKxJjxyb?>7$_ z77DJWCm$=!@t25AZ$eXpX_O#;Kc&vum5~=%n*A3nxwLgA=n-9O9I6^IPqg^)5Fj!yP9=`3* z!JwyG!ZqQ`TZKJ~W3?8B>>Wv$mrC3O&g_Ym{wvc%mWO>Ux14v_QH&!{CGs zHf)d9ehoAECXU%t|L)86A=t`y$*OnIi)(WKu2xpJaVhV|J$hY8AjKnF8>*ZC%#Ne* z-XkkexDq4a(A!DF_asbYSLI9mb=OQseX8ii%YC{LZCds?ti!S%1Lkk?a#eFpP0b>WMB08-aHl*JW>1v(7&U7@6W=`6K6G?K6D?TGKOEO9ItG0jNF%EW?-3>Cea4*` z+joBoSPL>kgS_*iJIT?o??Hk-b)YVzIU+lOLXi&QtmT1S3mpci23J9m>=+j-> zrn5m_EDT34)P6ehy4>snKO&7w84fx$z9Di(#bg5)m5uV~=SWmJ1xqU zG+0nXOjZWeH4sqsKGX>ZrDmQl0TKOu2;BXEfmeS(?)YiMXfrgmcrfZj% z>h(PKL+S(C%IlMive&mCU)EZ!F|yx1l$fgW$Ct*}l zZn=IcdgcoduoBlpBu|lf8pIwYvO;40#u6Ip%A+H&F^W4N%g>Xa+fZ6-W~30=J8A*n z{YBSXM1UN<@+kw{2qwYPJ$iqP)lcxN8wuB5igwvie5PS>sG5d+>xNpUEZG>zBpCx! z9stEPRx18|2K>&V%iana!(U;G`c*m34kB(HJe~e(jfSEuhWc}eD{P2h<0Gui?zT4@ zKR%S661NdoO%;DOgA%}noPw}zi4EA=dv$tjMAM^;CHk|}Rnq2dm{G0+PbRi*^{YbnO~@E{E~X<*?FUP>bmkfYbOcP3hhd33V7N2c zh6=d;3TKdexNd4QPXP~DJi_vy#kEhPXxt*UNhnLWM7~VQsBT2LRE&ZNna|*_n(MNT zuwl*$+=Njr)vLnmC3W?lWG+SZv&_&)m%S4+i~2Hy$9fn>NeyOw3>-a=%f3U{Ig#wf zZ{1d`cY@=5vPIU)GeNY^mwMPp!B60@MOAz*Q5TbEl_5*xSgpa>SfdhwdQ511#d*FZ z!4cilO@LC+{wR*uidON&K|EBDo9-RxZazfV9rp&ox(w0-{-2&fa5PLGp$|kt#0;xj zrh={^tb>eosCX=ud5}#1qk#J}W0Sj)Y4DLwIc_8M!_5}_EV(o`)>E|NxIPX#G*<^z;2VC6XtI^td^5u=%O3l_IuzP0?{fNK*j>2PU zv1gx5#<>Q>c4ip)lMD#LGAiQjR=;_YZR^MV4x>ICA9yj-YfqD+j8GZ%RXL55;;8>~ zf|lE4J9ZCv2-M#+%X#Z(xaw;PgM~cT<0xq}*rD@j4x>LlAEm6NvYd6?Lxh@_P~Uyw8?fwWY6OKuNRwm$9zKe;ObUj>?M@os+X0*ky3_Zw%`3+-(WZS2 ztJ%IA15TB3O>yIEuhNk$@u`d03{U^;~xYy@Ey zP+xUUYT(Iy#QlrACgFi*5z}~P%D3u4{k&9EOTsPaJ8rwP2P1(ln)k-A7rSHJFnVqN zUmuI+iUhKqd(Uy(wX#>SEh~i=@VnO?@}6 zzphN`6^#>6Ac$1NfzOs_uHARXb+QQog1zFpdz<1 z?sNd(8g?3QN(pm`-(io%r0$y%$p zs-<%SL*jRoSO9~AcGWlQ_q9&-tX`8Cng$4L?Ndu#d$Pg6<8X#X9PzI6Kb{RB5ga$9 zizvgm68_`r-oJ=;<1xBwPpQf*(8(gd{XkFcp#9E`KD*DR=hEF&&yPOO;K8)X z{Hmf@E2bvKp?Cmo=`@IWQ<63Y4E=QZ?U=h$4Kj-oI{C{@zvp$=Sf%EDKJ*&bjQQW8 z|KDgJHIKn}ZZafhx;62d&2qSpLW%oc;;*)?`8+;Sa~M(TBFjxIy7$STzoBHNhs~j* z-HZ7v9!tIN6Z40eh=!`KdMp6a-gW;Bh|;ZoU0-^l#eQf;L0|!T5BEpuK8W$Sprm%d>r^Mx{ML|T zbn>e!>}8jr=(4ergL9O{!auM898qHPF{S^uIoo2_NG>M$tDEbLH~yNk5fJ#7O0q3- zJ@mlZljPnxo!V0$`|jFrTkx@sED8LI?rRY+vgaZGi(T+e13mN^`oXzh-``mhq(95K zpOVL*dAXB`jJ%QQYR2}c@yd1U9VYwlH|}DNdHG}!5`AIg33$7N=C3+Xy(yo95Tobf z-y<4IzdnM@MBC`CfN(}##Jv=Kz)ZqtD^h9j0nM3v6;iDNWkq? zmI*WTHmd~`fs=*LXC})=e$CE~hC2T#yjv`5dAm<|)5}QjtDadJ^wm)Qx_41sYk792 zSqDS~3HQG0tI=`+Pc1kJiEsO=O}{SofeHl6H47?! z^E@_`ddz#H!N^&XGzw+y)Jn>ihJ!nUGijq^8B{$+*3hgT=)lP_N5Svgdcu+0rP#$6 zKZWU&BqTNun%O)PeZx3KAwdoV=v7K90;_mbr4Jo`Sk7}4SvvKUDTZc*pMN$IR&?yp zO%5Y{d|I3JueDDUJV&HSMrMzf!Hnp4v|2q>Zp9iGkrKpH$9 zxKDC&JUZ@Xm{2Jtj3}!3;P5SBlY~Wn>|ZGnb172GviU5~Y4n;ZqxYUA5vXSlRgZoa zy2}Pk14^x<^{j`QT4lUFJ$HtUdUQc<3AWx2Bl)>z+J7Ib2Sr_+X?#w8fCQ}+g z7TDIMk?nP^7&`^Rc_x(vI&&U$< zp@VO}n)XE{XaV*=JSg#@lSg?+z7C|z`WPBx+rWt)c|Y{u0oC18)NK&Ls$cBqDas;$ zHOnP&%_{#jPG`~4C11kmSGV=QF!Tn9env)c?-IehAIFx+>+An@{To{fB$t^*i_^Fm zZ!6Act~K)vk@}3GXnBn~UX~$VZL*yH422NSKL?@;}iU+nG;!9D9dn3DU{` zhSF|;G$cr;xA^^A=`-JxgylG}f&o3}Cn8ZQc8KDw_(4VG_Vq2lGR(@ zvR9n%1Xa;5-CvGCK;@+(J*Q0o!M`<_@9wj4{$jPYy9y?6NtBjZ3-Y_+(tm!UG;fJT zYFUoO(dD;QTF-pEIUgQb5WS>gfsN0uZ(YKt&(qab7AKcmS(JS<`?lWHu?yI5Fs!Ly z{NV*J(VfwMJ_4`QB-NoI=+kWrHE!71p z9X^r}%$%K9*LNLXy6?J7&K9#8o+83d4>! zK6_O*&RQ`XZBA9cne@-qUgvp=vXS^XUrheQOB8^sGH#m-s?}e5{;Bv)ptY@qJ>bQ$ z2XOY4Z3;Yk^Q0i<-x>ZwJ*P?dK=yJ_5`_L!7K{CTfDe#<`OEj|Xk8E4HOqOjZEF!< z=w`i>VFd!J{)Ih3uK!Yz1(Lv^n|s60-h8}${MtvcI08hMDGvN?lhJEQzZ2WC^1dIL>R6&n15u`mMvq|RB5%~ zl?)<%30aP8_c1{X&icnvY`3N*E#j*6qEPC@iTo!+3pVY+iyPB1!SiNq{ax5A-2nTJ|upMeJK5d*4{^kj1T z)4Jd|3}n2)Wg@IOpG1!?-|80w&QmomB^FC#s(X;~es$0uWnG>zqzVCj$0?DxcdVL0<%Vm}?t-^GTP)nPtuQ?Aj8a zmZtdSH>#r29SdJDfArY(_uvXUuhz(D8r0k!4c+b&H@AsW(M+^^F073Or3U|@sNdS4 z;H_QOo268vqQFf_jzX@S;by*MNmZPviNhprW)SljI9f6G`4;dWh5y))U*oXUww))M z_m5rNI9edFz!&z6@~U;(MfRG~+S5$shM{?rQqxBQIgY1S=fjA ziZbljQ^2!oKyz1%${>z(n{M*d)P7%1{qg*Ye+!V!WXqOC;uG&;fDcF~ z8DXr;o}$CT(p=iSY{!WjkL-y*tZ7ekYd0YI#(j&tTYWiM=5%5h=E~vIli3r5ww6JB zL)8;ecAVjp6S=Nlt*iHm`|Fr4|1BSnNeEWg9$p1>B$dDLRyt@t3A?c^-vAsYhfIvT zqg}Z->6GWI@9E{b*36M@TzN?|87+KC3vum=6R1L@9itFgKQFiTso+DU4gt+aY4Ii^ zl9T%oydPzI-la@6)c3c%jeEkSJk*bGU@#bTy4FWU@}b(v%c6qLL zrlc&-jP{U*V7Yr!WkO@W-fNg8zcpMhfWx;lFx6pZdDL{bu?OMtTct>>NEQ|HA+j}> zWBr0P{ANuGb~WJFWBkxyggPY_z9h zxB@Fm3EPeR-GBL{66bRe(9ViRM8{&j5u7P4Ad>Ya4f~C_DcarR{O@3QT@j&F1gj+7 zw;OQO=2G?Aw-XBc{0+1>urRc)kt$f>xuM|!#*)k|Nm<64C{{@hspQ)ldZ0}7$2`U5 zH0zUr(t1-PrlA)siA!mC8)w)jq{B628&CC?3=QTA+}hzLvavesc-TX3+{7q##1ebd zM1nal5x#>hNt&6&#~*`}`b}wJTjpO(E(S2?>IZ=U#Y@R~Wk@~k;F7{JLjS-?8^_MM zqD1?X%y5Wp@wqMpOj~B9P`^KZDPLj~a%uwl^IdpiEx0N?2htO8i)G7}&5>E0>dmBd zTxq+gkOuWdIAemI3!VJy^eP}QOro7z(qeJ-gWRdA^Dd~TNC zqkS~6oxdCb?006YX*lY2T5;O_HLS3}9~E##ak@v?)!{rY==M<4)OWTq%c2C*>KWy- zF2H7so$tO!)b$cYv7gu&0Xa^gccri;#Z|zbxA^Y<@h@X_D{2d&qi^dnvg7xYYN1r& zc~)`f^>?u4D_&3Cd!T9(AKYxIVdrr%=g*&S&OG5j^j4Qy{ADr4Vrw|!b%9Xe@;Fcu zS%rW}1A<7bO`8wz_y*hAW~$m0OAR6VP=7UZ?VNXYZl7It3U*v$Bbr&&ZS7VdsqNHS zwxXYto@h%dm-Y9V8RbAiM()r;#0?AKEb_(Eol(Cq)t9OO|9iXYQ;&X4Ey zoY5lB8?!lBASu>ZURX4t*2dfCfJ7qUaCpDlH->H<*`y25Q$j%oL7OaWyN(%RTWiY4 zbg^TW5`A)>Tqv`54yqn(4TWxKPw6zDClE4$uRCJitK(qWVyo06Qw9VF7sGcBOSvdp zGd?A-CNYx5o2y?kwA()J#!FBM7I?P$zK2%zjF7OKH?R1c7q>o1lZ75lW;D&F1b5#u z;QhRwb-d(NOavnU=}?Gp8PtR>4Lai`aBD(j9Y2n_b`x?Okk{Cpr{_rgpKwly)(SIW z&O6$-u8mIzj7J=5cl!CaKEIARj9eil^}byyFV(CfLW<>LJ3b1=jhch>5MG9vc3yi2 zTRpANnQ4*aT3g3vv*QfiY9m*e?1o0y3Wi>3K#q)LP{kQWtPsCf_})nloszM}5?;T4 zy_iH&7x~8nV9Vt42{075zs9IVbTwRm8Fp)4w%VZ`Po$O!#Uw5H%NtK1qJ9GYgzb2+rvuadkAgebZ%eZg?RE-Kq z+S?w0Du(_Z2&hjQd|qm#kE=?F*eapAcohknM@lFInYn*RBpk`h(ol6yNY9v5A%+oK zWLw&NMrEa;f~X+_w?rF?ECqP}ghAZADgLu9i zyas0}aG3!(M_c2q@&>%NtgU4LHF5{Pb8r{-T0w}kTM+e3Ql+b_X$GL`FwA7d6fC{x z<+=d{063!#mCkjeC8K}zdB(6lM}m(>t#)zhbU0#dZH>iJt3&F9kwe(ZVo{=B)u=dI zH~VKYx8Qm*b*$b2RMN+eNeCqzCz@2oG71@&8=#*^(~0=NGw*Bm48jG`=}cjCR7mPj z%em@%P4X>(b0clLvEW0zakSR5W$|%2Bq9;%S|Ev=u$~_ZpKmw>J2ppI0la;I8wJ+D zy2{y$D1_R#!}q$VYd|`{9#>d@(1Qn6(^+z1X*hz@Uex1-#==2Gp)T>CnWyf=QlcKE<~R-3d>U=3bcX0qTJYa4(){ z?B`k&-_+31aB4&^>RHpXk=c5(V~fN|1j~m8%yl?{OcJg_^O)-^NKB_OEM5Hf4{?l>N;)3RBnMCR$!k6y5Bu~tRe#@yYMPZ(|f%FJZrqJ z183d$Y_e~X0~g(%4JyzVdq=h{qUA#c)hOZe_qpPju9dmxU%g3A-)|K>TpsNObG9kU z38XDH+G!_BPlGK|^uO5qzrcw+m|TC9GNf97IQ1N+k<>=yFzfl*Wj z#IB@|sfwzmqq|2l&C;HPbcTA0EIuSRoplJQd4FH=`pQU&b0WLi1SPmvd}l1YA*A#7 z0lDD|)4BU`to1D4aZ4+~ci66Hqd659aQVh#FH|3Lnwx^h6aD5XUb$NvpKEA!g9xMM zKx`GWLQ(hNEO3ZOp&s6GWvZqHbU#OMM0~vgP|hXnm#+aY)4NN_%cS!rd6~cBTc}7t z!bHrg)n!nJIBNUpGSzPQM$?X4TF7QIo8gvx*kHoY;ZWLU`9mS|cpFa(?xV<2&Z7>+jIJATPPAqtsu&qfnq+@22&_NyHA^D{4$Puo@KC`gL zTJGXmsCccj%el5`Op<3(+omQzqq^LGeXD&Ef>OxJo$5QB2A7{4O3w?d( z7z%v&dVPe}4}Esn-v+zXQ5CFQICI@qmLB8zqp?*^>0TQdLEZ7C5oyt6=}N-gW8(>k zdr(B#dxFtX?Q}%7Zj-zGBE(L5BA?|oa`#aTH~FtEARg-p9=ahu2so(K6sPE=jH;IM zC+)T&Z*x3)m$U268_~G!K}wwF|3#M%Lo7iL?Yg!Zzhne&HX3Ts$fA&_)XnX9r1Pt= zl8|b>{1e!UHBr~(3)qXM+?~e-$J@#qT?oY_S<~7j`S@XMN`ly7KNOGf3^kD3c#+^T zw4Mtl;kt*QUgAS|3xMP*rL?9Y_W8ih7J9-s2AlwnX487q{@obD zKW@Q&_@n6BbO-$Q6>$D9XvtR!KEHJhM(r`VT&KM0uA%Lga#dJ}`K6G0$f9%Dj)fEfXtTf(Q|h@$mL3grOLbPsbYPQZtAjI9|zGkPMxU-F}T`zjY?-M zBy=ILL${UQbLq_#s{(K-#k#$J@o&Dz%4s+=ku*8_YMB4g72|9z&_bANu4qtIiTrrv zBr|Z2ByCaYdh(8w-KIXpWA#0n`s000By8%#0dTbi&Z`MC9{?6zp$QAI*T=Qk1oWPO zVS3~G%oPu3PDpZ{m->K2G8sFfqVoJB*^bQMZ@^DpdqTEv$dYq@Q2FihluKbqYLDJh zy;XMo&7D-)k)D!&6eJtg301IO*F1r1j*>-H{`a%VTE3v^U)r4aM6pq6D{g0 zd*4pRIbasIz_wN__FK91)9g1;Bm(JFWOeVPrl)NOVq_;9Gw1>cT&gFP9Mq3f0;QD| zVLY>7xsCoBH)qHIY$_|`apHzLAAfrH8dtjw4;<*@`hYR2`ecZpHLVBb#zz0sUvK!6 zL`N>H+Vjc5PLslfZl6Sp_7?5BB?Ugac8W9WDS9WL@hhMqXK2z+6uZ{cm%<)Nl4j?v z`%DQ+)R??8Y6;fZ_h}0jN@q=#be)75_fUq6pczYM7++~L@U<~;|6{EnEj(}XNw)bS zV0W@)wGP94^Ne>T2#o_tScb|cZ$k@GQ9A9f?#@{8mjaYMDQvwm`+V}e;GPw%rQ^3R zeWpzlzP7CrjXxSE4rDgrZ|i2PCqQVVmd*&<5iX{t-bb^>hm6{*Y#V)4)q{2(evl74 zBA1MFz>VQd=L2fT!%nipv9RJtJfhV>(PttQ0l;wHm|oaSIB}9bl!Vk!3Ov2JOgef` z&s)hr03SRBTtVpu3I!3Vmg3VCq*4(+OK`ud%)$G61MREvE3fTca_@z$>Dp5pwuO1x z{Lr!hw>p}U-Qi*5Yt@WXvakevADSRXIjTdU$@TN`bE+Bs`?irVjg z)qFVkOT+v0ZA(WL6{3kD%k4}VN@m<-B%Buwar)@$ zD#s0{;H`v#bL;&%PL-1almv@IDLNH$~J1u*u_Den7Cx+Og0(?rq9H2QWW~q;}zc zcD6pA7DkzK=>VzZ*~JUAWC$-);UWF;of$=r!*Oo)%}8sg?1W{-aC!NF z`nX?TZ75~&^S#si?73;&W}0bz_H6gi(8c}?l{b$KTwQ-~aL}DC|B&rukH-{`59UJM z(4q=xZ649yj7UxCY%p}&&H5?s;iMRKL{z?Za~7FQCJ+q9>{MLpdO|}7R){o_gTKnz z)DgUg=>H!4YbzbA^#>U11FZyoS_q%!zME#jLSjZ~MErhdz zn`5EU6yE|3jTLjyel9mYdeZIL+V*pw4Ij$Ow{vX=N!Lf_@hI2OxO10PHIVn6$nqF) zk4dM|ejM9}$5Jvfbd@5#(J?oVReS4<>J06=tjdA0M1mFAp_d=>6z@q!V|p=*r)-HP z!CFypnrWs}%HhWu8KjGyyZh&U^X67vkLk!nl1aFlM)L(3GU$>#=h35g#JwLEYv*DF z@0L$!H+u&L7Utw^QZ87UHZf7CCf!1YZ zC95rG%^UKaty9|#AQ>5|VP;>wdNm**09^i*vs5!rq#Q2nx#tiQg5_ipnSM0WCe)BM zuPye2Ko=|X80KRM++uN+Ze^vKgM%vO`#1BZf||sD?L*LUc8CsD&K4u176!w~-oB;1 zy=44MVBq$##ou_EAz5hAy$wVLg8ned?BuVDmS`lM_pllf8vz}$0w4BfY(4-TYq@mb zo$^blvz$s!^m98|!a+P!Qw*!{r0U}^8@=Mxb!;(a&GjRvgqh|f<2!KBe}hr@|1Qi z<-)1R9AlMTJ9~S3V=hp==mn9Hk!1?)oq^AM{qu4S-8rxo+Yj#ydS1XGrKEiLP!S*h z?Wc_wGjQ7&1kVDh+*;*zpR_YYoXmb_|BcovJPi&2q^PI}U<0nYrl!UYVw&$}9n%7p zRKsrZOODV5+?=zOmDYLrp~dLUd!|D<&5>%$(FsmNU3!eh6rL?fcMI7#7Vx56*;M0j zs{2NvJN<<{xH}~np@?d5=s+XFDMZ-%;RBz?Bo8AG{xFT2l;HR1t+OF3|2W&7c2IP- zdqo(OP=b^X9k!$eTCO+LKFEY{mJYC&J|#eQgkacrf@5YC`HxADT7uT{KyK^-QKJsz zh&=1XQ^Q@?dZF^d&CR`%;o&ZJ!&b*`FR#kVQB~Cx_}wXM&EjfbYWtb9?~K^rT2|F8 zsb7@j8wm@cj(wAM92S>hxD6w#qiG;Bx5$!n8a00z{fYXrxjFS2c4DNu3@gt)#u*s8 zI3aQp2qvL%T^s;wkQ8i)D3xsyPxVG)-(c3YBB>?n&>$zYe-o$dVKoHHFi^>+Ctzi6 zzvtBs(s9zV6*2~&g5{IDB>WZ^+1b9@4|!*c9Qz&C>P`aAZj##lANET)oT%)~o=EDr z{Ar|O4VN;uV`9aNsuzjA4KTrOk`4w)pmy?P4E$y|R_-@^Ril|o!N>$v#MbsAzZ7_M z=9G870Yv``hxiukP5G`pDz7tx6QuR#9@P)w-rEh`(n<))ak*p8w8NH`J!dzhZ#YP9 z;k7!N?ezbZJt$LGhmnORhuez;nHg{@x}?b1xRc$NJoj&udkv5w9t~Giy_Ya=!sO`- zRlJ=AqwZGsjA~i^C-PfjMRubXtMCp%XSh|7^5L8^5e{R1pOJgBB>$}Ch`lt>Z?p-? zT#p&6Yiky{(IUNB$%z;4r==-VW9^%trsB1jp+n-`(P{pL#OIc%y?1=t$1wi^y~)ro z^U0G$J|wt5Av*eu88(;GhT_|mqOs<$$|@`05%&~K<0~fUSZ!4=O2YeQnQ6Z;^eBsVI#r?5PA$olrCO zX74$XtZNy1yi-?IwT#V%z*^)2f(Re@U|{LHQq$8@D}DfSceI?6cSo^~C!>z&k4Np? zoQvcW(+@2+aD43C^5~Hnik((jTRWg(*4*fFbY9Bja{wk)p3T>8SfV+gu z9HG!264-G)jL9I=U%Aho%A#lBqMj6EJ@UeZWY=CGnA2&5urb-x$a4(p_%JC6pKQEP z988zxplKRDi$|r8`pPXL##LC!@=^O~VVNwQVR9!my--$s->Hj)aK!-Jk zNxWi@xxj{YNM=x9xzq*xxxAyfHvv-?yt)8mPR8R@ diff --git a/Transferência Ginseng/.metadata/.log b/Transferência Ginseng/.metadata/.log index 2da9964..0c5d3fa 100644 --- a/Transferência Ginseng/.metadata/.log +++ b/Transferência Ginseng/.metadata/.log @@ -12,3 +12,52 @@ user global configuration and to define the default location to store repositori not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and EGit might behave differently since they see different configuration options. This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2026-03-16 18:19:56.660 ----------------------------------------------- +eclipse.buildId=4.13.0.I20190916-1045 +java.version=1.8.0_481 +java.vendor=Oracle Corporation +BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=pt_BR +Framework arguments: -product org.eclipse.epp.package.jee.product +Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product + +!ENTRY org.eclipse.egit.ui 2 0 2026-03-16 18:20:21.188 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Home'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. + +!ENTRY org.eclipse.ui.navigator.resources 4 0 2026-03-16 18:20:36.243 +!MESSAGE Could not acquire INavigatorContentService: Project Explorer not found. + +!ENTRY org.eclipse.ui.ide 4 0 2026-03-16 18:22:29.402 +!MESSAGE Could not import project located at C:\Python\Fluig Ginseng\fluig\checklist\fluig\Transferência Ginseng +!STACK 0 +org.eclipse.ui.internal.wizards.datatransfer.CouldNotImportProjectException: Could not import project located at C:\Python\Fluig Ginseng\fluig\checklist\fluig\Transferência Ginseng + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:565) + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.run(SmartImportJob.java:252) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +Caused by: org.eclipse.core.internal.resources.ResourceException: Invalid project description. + at org.eclipse.core.internal.resources.Project.checkDescription(Project.java:173) + at org.eclipse.core.internal.resources.Project.assertCreateRequirements(Project.java:57) + at org.eclipse.core.internal.resources.Project.create(Project.java:267) + at org.eclipse.core.internal.resources.Project.create(Project.java:251) + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.createOrImportProject(SmartImportJob.java:604) + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:552) + ... 2 more + +!ENTRY org.eclipse.ui.ide 4 0 2026-03-16 18:22:41.890 +!MESSAGE Could not import project located at C:\Python\Fluig Ginseng\fluig\checklist\fluig\Transferência Ginseng +!STACK 0 +org.eclipse.ui.internal.wizards.datatransfer.CouldNotImportProjectException: Could not import project located at C:\Python\Fluig Ginseng\fluig\checklist\fluig\Transferência Ginseng + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:565) + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.run(SmartImportJob.java:252) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +Caused by: org.eclipse.core.internal.resources.ResourceException: Invalid project description. + at org.eclipse.core.internal.resources.Project.checkDescription(Project.java:173) + at org.eclipse.core.internal.resources.Project.assertCreateRequirements(Project.java:57) + at org.eclipse.core.internal.resources.Project.create(Project.java:267) + at org.eclipse.core.internal.resources.Project.create(Project.java:251) + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.createOrImportProject(SmartImportJob.java:604) + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:552) + ... 2 more diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.resources/.root/1.tree b/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree similarity index 100% rename from Transferência Ginseng/.metadata/.plugins/org.eclipse.core.resources/.root/1.tree rename to Transferência Ginseng/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources index a38923ed4b733f33978d3175a0adbd0d1170d50f..a8bce7e54f5a91b185e6343d949c8ea1f34f896e 100644 GIT binary patch delta 199 zcmdnPe2aC0nply7p_ziAg_V)9m9e>kyIY8Yk%5ufL>oNlhwE*DKAmO-sxvPUYp&*DEPXO|>h#7GP4I#3(Cl$jfyg;`e9e QJq#jJfuDP-cb6Xn0NLawIsgCw diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs b/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs index dffc6b5..a7fb09f 100644 --- a/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs +++ b/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs @@ -1,2 +1,3 @@ +description.autobuilding=false eclipse.preferences.version=1 version=1 diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs b/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs new file mode 100644 index 0000000..98d8634 --- /dev/null +++ b/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.debug.ui.PREF_LAUNCH_PERSPECTIVES=\r\n\r\n diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.rse.core.prefs b/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.rse.core.prefs index e1b93a4..f04b0bd 100644 --- a/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.rse.core.prefs +++ b/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.rse.core.prefs @@ -1,2 +1,2 @@ -activeuserprofiles=G-ALES1NT-TEC06;Team +activeuserprofiles=DESKTOP-0E2LAA6;G-ALES1NT-TEC06;Team eclipse.preferences.version=1 diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs b/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs index cfde2cb..c39ff58 100644 --- a/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs +++ b/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs @@ -1,5 +1,5 @@ PROBLEMS_FILTERS_MIGRATE=true eclipse.preferences.version=1 -platformState=1741352421205 +platformState=1772394940336 quickStart=false tipsAndTricks=true diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi b/Transferência Ginseng/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi index 405ecfd..cf9a66e 100644 --- a/Transferência Ginseng/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi +++ b/Transferência Ginseng/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi @@ -13,7 +13,7 @@ topLevel shellMaximized - + persp.actionSet:org.eclipse.mylyn.doc.actionSet @@ -76,7 +76,6 @@ persp.perspSC:org.eclipse.jpt.ui.jpaPerspective - active View categoryTag:General @@ -161,6 +160,93 @@ + + + persp.actionSet:org.eclipse.mylyn.doc.actionSet + persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation + persp.actionSet:org.eclipse.ui.cheatsheets.actionSet + persp.actionSet:org.eclipse.rse.core.search.searchActionSet + persp.actionSet:org.eclipse.search.searchActionSet + persp.actionSet:org.eclipse.text.quicksearch.actionSet + persp.actionSet:org.eclipse.ui.edit.text.actionSet.annotationNavigation + persp.actionSet:org.eclipse.ui.edit.text.actionSet.navigation + persp.actionSet:org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo + persp.actionSet:org.eclipse.ui.externaltools.ExternalToolsSet + persp.actionSet:org.eclipse.ui.actionSet.keyBindings + persp.actionSet:org.eclipse.ui.actionSet.openFiles + persp.actionSet:org.eclipse.wst.jsdt.chromium.debug.ui.actionSets + persp.newWizSC:org.eclipse.ui.wizards.new.folder + persp.newWizSC:org.eclipse.ui.wizards.new.file + persp.viewSC:org.eclipse.ui.views.BookmarkView + persp.viewSC:org.eclipse.ui.views.PropertySheet + persp.viewSC:org.eclipse.ui.views.ProblemView + persp.viewSC:org.eclipse.ui.views.ProgressView + persp.actionSet:org.eclipse.ui.NavigateActionSet + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateBpmnProjectWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateBpmnDiagramWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateScriptGeneralWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateFormWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateReportWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateDatasetWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateEventWizardID + persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateLayoutWizardID + persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateWidgetWizardID + persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView + + + + active + + View + categoryTag:Java + + + View + categoryTag:General + + + View + categoryTag:Fluig + + + + + View + categoryTag:General + + + + + + + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:Fluig + + + View + categoryTag:Fluig + + + View + categoryTag:Fluig + + + + + @@ -213,8 +299,6 @@ View categoryTag:General - active - activeOnClose ViewMenu menuContribution:menu @@ -254,8 +338,14 @@ + View categoryTag:General + + ViewMenu + menuContribution:menu + + @@ -335,6 +425,62 @@ View categoryTag:General + + + + + View + categoryTag:Java + active + activeOnClose + + ViewMenu + menuContribution:menu + + + + + + + + View + categoryTag:Fluig + + ViewMenu + menuContribution:menu + + + + + + + + View + categoryTag:General + + ViewMenu + menuContribution:menu + + + + + + + View + categoryTag:Fluig + + + + + View + categoryTag:Fluig + + + + + View + categoryTag:Fluig + toolbarSeparator @@ -342,7 +488,7 @@ Draggable - + toolbarSeparator @@ -358,16 +504,16 @@ Draggable - + Draggable Draggable - + Draggable - + Draggable @@ -376,7 +522,7 @@ Draggable - + toolbarSeparator @@ -409,11 +555,6 @@ Draggable - - - - Draggable - @@ -3067,7 +3208,7 @@ - + diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml b/Transferência Ginseng/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml new file mode 100644 index 0000000..3fcc57a --- /dev/null +++ b/Transferência Ginseng/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml @@ -0,0 +1,10 @@ + +
+
+ + + + + +
+
diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log b/Transferência Ginseng/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log index a89757c..74a8a76 100644 --- a/Transferência Ginseng/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log +++ b/Transferência Ginseng/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log @@ -1 +1,2 @@ 2025-05-26 12:44:36,966 [Worker-5: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. +2026-03-16 18:20:20,734 [Worker-2: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties b/Transferência Ginseng/.metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties new file mode 100644 index 0000000..866b111 --- /dev/null +++ b/Transferência Ginseng/.metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties @@ -0,0 +1,2 @@ +#Cached timestamps +#Mon Mar 16 18:23:37 GFT 2026 diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.tm.terminal.view.ui/.executables/data.properties b/Transferência Ginseng/.metadata/.plugins/org.eclipse.tm.terminal.view.ui/.executables/data.properties new file mode 100644 index 0000000..90344df --- /dev/null +++ b/Transferência Ginseng/.metadata/.plugins/org.eclipse.tm.terminal.view.ui/.executables/data.properties @@ -0,0 +1,6 @@ +#Mon Mar 16 18:20:15 GFT 2026 +0.Path=C\:\\Program Files\\Git\\bin\\sh.exe +0.Name=Git Bash +0.Args=--login -i +0.Translate=true +0.Icon=C\:\\Program Files\\Git\\mingw64\\share\\git\\git-for-windows.ico diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml b/Transferência Ginseng/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml index 89a7168..628f10d 100644 --- a/Transferência Ginseng/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml +++ b/Transferência Ginseng/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml @@ -3,10 +3,13 @@
- - + + +
+
+
diff --git a/Transferência Ginseng/.metadata/version.ini b/Transferência Ginseng/.metadata/version.ini index 597b8a5..26d6c14 100644 --- a/Transferência Ginseng/.metadata/version.ini +++ b/Transferência Ginseng/.metadata/version.ini @@ -1,3 +1,3 @@ -#Mon May 26 12:44:22 BRT 2025 +#Mon Mar 16 18:20:13 GFT 2026 org.eclipse.core.runtime=2 org.eclipse.platform=4.13.0.v20190916-1045 diff --git a/Transferência Ginseng/.vscode/servers.json b/Transferência Ginseng/.vscode/servers.json new file mode 100644 index 0000000..e88a557 --- /dev/null +++ b/Transferência Ginseng/.vscode/servers.json @@ -0,0 +1,18 @@ +{ + "version": "1.0.0", + "configurations": [ + { + "id": "edmoa4q9botmmtlvdz4bafosc5mqmr", + "name": "teste", + "host": "comerciode188007.fluig.cloudtotvs.com.br", + "ssl": true, + "port": 443, + "username": "andrey.cunha", + "password": "eyJpdiI6ImRjNGY4YzFkZmNiM2FhNDJiMGE3NDlmYjI5YjFkZjBhIiwic2FsdCI6IjU2MzUzZTcxOGZjZGRjZmUwZDI4MWYxZTllOWFlMDM3IiwidGV4dCI6IjU1NWQxZTE3YzUwYTQwYjNjMzAwYTc3M2VmNWQwODU1In0=", + "userCode": "andrey.cunha", + "confirmExporting": false, + "hasBrowser": false, + "companyId": 1 + } + ] +} \ No newline at end of file diff --git a/Transferência Ginseng/com.totvs.tds.ecm.dataservers b/Transferência Ginseng/com.totvs.tds.ecm.dataservers new file mode 100644 index 0000000000000000000000000000000000000000..55d4f3cc71eea19aef926915fd741b6af7594dd1 GIT binary patch literal 556 zcmb7Bze~eF6n?3#77Z2r8ys{w+ePc-+J$v(v5Dm&N5-sWokdKEV*%f}kx3 zwR|EdZ&OaJkW;eiMXsaw9-coA&Rd72C+Q|(aWR7k1=MsyV{u-(dq9|yij-S!Xwyoy zS}xC#om7NaUKrW^N$JdOj-Z->&1r{NQLt+w6xZB9(7;(hP%5#a{Ah?3NTlQPpB)>V z(hZXh(o+V;Gsqb0a+v?G+T^DEn9*T$paT;!k8CHN88}1>BL6$d5b}+B-ADtH``d>u ojK;;x2Es@`U%^;Pm40taseF1VteX}UVOZB1Ev?b(ha^cp0huYL2><{9 literal 0 HcmV?d00001 diff --git a/Transferência Ginseng/datasets/dsFiliais.js b/Transferência Ginseng/datasets/dsFiliais.js deleted file mode 100644 index 6857774..0000000 --- a/Transferência Ginseng/datasets/dsFiliais.js +++ /dev/null @@ -1,104 +0,0 @@ -function defineStructure() { - -} -function onSync(lastSyncDate) { - -} -function createDataset(fields, constraints, sortFields) { - - var ds = DatasetBuilder.newDataset(); - - ds.addColumn("codigo"); - ds.addColumn("filial"); - ds.addColumn("estabelecimento"); - ds.addColumn("cep"); - ds.addColumn("logradouro"); - ds.addColumn("numero"); - ds.addColumn("bairro"); - ds.addColumn("cidade"); - ds.addColumn("estado"); - - - - ds.addRow(new Array("010101","4494", "ESCRITÓRIO MATRIZ","57035-030","RUA DESPORTISTA HUMBERTO GUIMARAES","343","PONTA VERDE","MACEIÓ","AL")); - ds.addRow(new Array("010102","3546", "LJ BIG BOMPREÇO GRUTA","57052-000","AVENIDA FERNANDES LIMA","3700","GRUTA DE LOURDES","MACEIÓ","AL")); - ds.addRow(new Array("010103","4560", "LJ MACEIÓ SHOPPING TERREO","57031-532","AVENIDA GUSTAVO PAIVA","2900","MANGABEIRAS","MACEIÓ","AL")); - ds.addRow(new Array("010104","5699", "LJ MOREIRA LIMA","57020-000","RUA MOREIRA LIMA","93","CENTRO","MACEIÓ","AL")); - ds.addRow(new Array("010106","12522", "LJ MACEIÓ SHOPPING EXPANSÃO","57031-530","AVENIDA GUSTAVO PAIVA","2990","MANGABEIRAS","MACEIÓ","AL")); - ds.addRow(new Array("010107","12828", "LJ GBARBOSA S.MARIS","57036-550","AV ENG. PAULO BRANDÃO NOGUEIRA","S/N","JATIÚCA","MACEIÓ","AL")); - ds.addRow(new Array("010108","12838", "LJ RIO LARGO","57100-000","AV PRES GETULIO VARGAS","148","CENTRO","RIO LARGO","AL")); - ds.addRow(new Array("010109","21647", "QUIOSQUE CARAJÁS MANGABEIRAS","57037-901","AV COMENDADOR GUSTAVO PAIVA","S/N","MANGABEIRAS","MACEIÓ","AL")); - ds.addRow(new Array("010110","12817", "LJ SHOPPING PÁTIO","57073-470","AV MENINO MARCELO","3800","CIDADE UNIVERSITÁRIA","MACEIÓ","AL")); - ds.addRow(new Array("010111","12824", "QUIOSQUE GBARBOSA TABULEIRO","57061-110","AVENIDA MACEIÓ","S/N","TABULEIRO","MACEIÓ","AL")); - ds.addRow(new Array("010112","12823", "LJ PONTA VERDE","57035-330","RUA DEPUTADO JOSÉ LAGES","431","PONTA VERDE","MACEIÓ","AL")); - ds.addRow(new Array("010113","20858", "QUIOSQUE SUPER GIRO","57010-003","AVENIDA SIQUEIRA CAMPOS","1368","PRADO","MACEIÓ","AL")); - ds.addRow(new Array("010114","12820", "LJ ATACADÃO TABULEIRO","57082-160","AV DOUTOR DURVAL DE GOIS MONTEIRO","12650","TABULEIRO","MACEIÓ","AL")); - ds.addRow(new Array("010115","12830", "LJ LIVRAMENTO","57020-030","RUA DO LIVRAMENTO","24","CENTRO","MACEIÓ","AL")); - ds.addRow(new Array("010117","19103", "LJ UNICOMPRA PONTA VERDE","57035-060","RUA DURVAL GUIMARÃES","S/N","PONTA VERDE","MACEIÓ","AL")); - ds.addRow(new Array("010118","12826", "LJ ASSAÍ MANGABEIRAS","57037-532","AV COMENDADOR GUSTAVO PAIVA","3261","MANGABEIRAS","MACEIÓ","AL")); - ds.addRow(new Array("010119","12829", "LJ JACINTINHO","57041-000","RUA CLETO CAMPELO","2394","JACINTINHO","MACEIÓ","AL")); - ds.addRow(new Array("010120","12818", "LJ GBARBOSA SERRARIA","57046-000","AVENIDA MENINO MARCELO","9730","SERRARIA","MACEIÓ","AL")); - ds.addRow(new Array("010121","13427", "LJ SHOPPING CIDADE","57055-000","AVENIDA FERNANDES LIMA","679","FAROL","MACEIÓ","AL")); - ds.addRow(new Array("010124","14617", "LJ PARQUE SHOPPING","57038-000","AVENIDA GUSTAVO PAIVA","5945","CRUZ DAS ALMAS",",MACEIÓ","AL")); - ds.addRow(new Array("010126","14668", "LJ MIX MATHEUS ANTARES","57038-410","AVENIDA MENINO MARCELO","5300","ANTARES","MACEIÓ","AL")); - ds.addRow(new Array("010128","20006", "LJ SÃO SEBASTIÃO","43850-000","PRAÇA DOZE DE OUTUBRO","65","CENTRO","SÃO SEBASTIÃO DO PASSÉ","BA")); - ds.addRow(new Array("010130","20009", "LJ CANDEIAS BAIXO","43815-050","AVENIDA ANTONIO PATTERSON","196","TRIÂNGULO","CANDEIAS","BA")); - ds.addRow(new Array("010131","20005", "LJ CANDEIAS CIMA","43805-000","RUA 13 DE MAIO","147","CENTRO","CANDEIAS","BA")); - ds.addRow(new Array("010132","20056", "LJ SIMÕES FILHO","43700-000","AV LUÍS EDUARDO MAGALHÃES","109","CENTRO","SIMÕES FILHO","BA")); - ds.addRow(new Array("010133","20057", "LJ CONCEIÇÃO COITÉ","48730-000","RUA DR AMÂNCIO MOTA","30","CENTRO","CONCEIÃO DO COITÉ","BA")); - ds.addRow(new Array("010134","20441", "LJ LAGARTO","49400-000","AVENIDA LEANDRO MACIEL","36","CENTRO","LAGARTO","SE")); - ds.addRow(new Array("010135","20968", "HIB ITABAIANINHA","49290-000","PRAÇA OLÍMPIO CAMPOS","154","CENTRO","ITABAIANINHA","SE")); - ds.addRow(new Array("010136","20969", "HIB MARECHAL DEODORO","57160-000","RUA DR TAVARES BASTOS","03","CENTRO","MARECHAL DEODORO","AL")); - ds.addRow(new Array("010137","20970", "VD SÃO SEBASTIÃO","43850-000","PRAÇA DOZE DE OUTUBRO","116","CENTRO","SÃO SEBASTIÃO DO PASSÉ","BA")); - ds.addRow(new Array("010138","20986", "HIB OLINDINA","48470-000","AVENIDA ANTONIO MANGABEIRA","84","CENTRO","OLINDINA","BA")); - ds.addRow(new Array("010139","20989", "HIB QUEIMADAS","48860-000","PRAÇA CORONEL FRANCISCO LANTYER","21","CENTRO","QUEIMADAS","BA")); - ds.addRow(new Array("010140","20989", "HIB ENTRE RIOS","48180-000","AVENIDA JURACY MAGALHÃES","320","CENTRO","ENTRE RIOS","BA")); - ds.addRow(new Array("010141","20991", "HIB CAMPO ALEGRE","57250-000","RUA DO COMÉRCIO","49","CENTRO","CAMPO ALEGRE","AL")); - ds.addRow(new Array("010142","20992", "ER CONCEIÇÃO COITÉ","48730-000","RUA DR AMANCIO MOTA","35","CENTRO","CONCEIÇÃO DO COITÉ","BA")); - ds.addRow(new Array("010143","20993", "ER CANDEIAS","43815-010","AV ANTONIO PATTERSON","213","TRIANGULO","CANDEIAS","BA")); - ds.addRow(new Array("010144","20994", "ER SIMÕES FILHO","43700-000","AV LUÍS EDUARDO MAGALHÃES","109","CENTRO","SIMÕES FILHO","BA")); - ds.addRow(new Array("010145","20995", "ER LAGARTO","49400-000","AVENIDA LEANDRO MACIEL","36","CENTRO","LAGARTO","SE")); - ds.addRow(new Array("010146","20996", "ER ANTARES","57083-048","AV ANTONIO LISBOA DE AMORIM","220","ANTARES","MACEIÓ","AL")); - ds.addRow(new Array("010147","20997", "ER PITANGUINHA","57052-050","AVENIDA FERNANDES LIMA","840","PITANGUINHA","MACEIÓ","AL")); - ds.addRow(new Array("010148","20998", "CD TABULEIRO","57073-482","ESTRADA DA CODEAL","770","TABULEIRO","MACEIÓ","AL")); - ds.addRow(new Array("010149","20999", "HIB ESPLANADA","48370-000","PRAÇA LADISLAU CAVALCANTE","31","CENTRO","ESPLANADA","BA")); - ds.addRow(new Array("010150","21000", "HIB SANTALUZ","48880-000","RUA RIO BRANCO","96","CENTRO","SANTALUZ","BA")); - ds.addRow(new Array("010151","21001", "HIB RIO REAL","48330-000","PC SEN ANTONIO CARLOS MAGALHÃES","146","CENTRO","RIO REAL","BA")); - ds.addRow(new Array("010152","21007", "TÔ QUE TÔ MACEIÓ CENTRO","57020-220","AVENIDA MOREIRA LIMA","293","CENTRO","MACEIÓ","AL")); - ds.addRow(new Array("010153","21068", "LJ ATAKAREJO SIMÕES FILHO","43700-000","AV ENG ELMO SEREJO DE FARIAS","2073","CONJ HAB VIDA NOVA","SIMÕES FILHO","BA")); - ds.addRow(new Array("010154","21277", "LJ GBARBOSA SOCORRO","49160-000","AVENIDA 1","13","CONJ JOAO ALVES FILHO","NOSSA SENHORA DO SOCORRO","SE")); - ds.addRow(new Array("010155","21278", "ER SOCORRO","49140-000","AVENIDA COLETORA A","597","CONJ MARCOS FREIRE I","NOSSA SENHORA DO SOCORRO","SE")); - ds.addRow(new Array("010156","21495", "HIB BARRA DOS COQUEIROS","49140-000","AVENIDA OCEANICA","506","ANTONIO PEDRO","BARRA DOS COQUEIROS","SE")); - ds.addRow(new Array("010157","21296", "LJ SHOPPING PRÊMIO SOCORRO","49160-000","AVENIDA COLETORA A","S/N","CONJ MARCOS FREIRE I","NOSSA SENHORA DO SOCRRO","SE")); - ds.addRow(new Array("010159","21381", "LJ CAPIM GROSSO","44695-000","AV ACM","121","CENTRO","CAPIM-GROSSO","BA")); - ds.addRow(new Array("010160","21383", "ER CAPIM GROSSO","44695-000","AV ACM","121","CENTRO","CAPIM-GROSSO","BA")); - ds.addRow(new Array("010161","21375", "HIB IPIRÁ","44600-000","AVENIDA CESÁR CABRAL","15","CENTRO","IPIRÁ","BA")); - ds.addRow(new Array("010162","21624", "MIX MATEUS TRAPICHE","57010-000","AVENIDA SIQUEIRA CAMPOS","1295","PRADO","MACEIÓ","AL")); - ds.addRow(new Array("010163","22448", "ER CAMPO ALEGRE","57250-000","RUA DO COMÉRCIO","49","CENTRO","CAMPO ALEGRE","AL")); - ds.addRow(new Array("010164","23475", "MIX MATEUS TABULEIRO","57082-160","AV DOUTOR DURVAL DE GOIS MONTEIRO","9207","TABULEIRO","MACEIÓ","AL")); - ds.addRow(new Array("010165","22541", "ER RIO LARGO","57100-000","RUA JUDITH PAIVA","445","CENTRO","RIO LARGO","AL")); - ds.addRow(new Array("010166","AMG", "AMG SERRARIA","57046-000","AVENIDA MENINO MARCELO","S/N","SERRARIA","MACEIÓ","AL")); - ds.addRow(new Array("010167","23156", "SHOPPING CENTRO SUL","49400-000","AV CONTORNO BR","3795","SÃO JOSE","LAGARTO","SE")); - ds.addRow(new Array("030101","910173", "QDB PARQUE SHOPPING","57038-000","AVENIDA COMENDADOR GUSTAVO PAIVA","5945","CRUZ DAS ALMAS","MACEIÓ","AL")); - ds.addRow(new Array("030102","910291", "QDB MACEIO SHOPPING","57037-532","AVENIDA COMENDADOR GUSTAVO PAIVA","2900","MANGABEIRAS","MACEIÓ","AL")); - ds.addRow(new Array("070101","24452", "MATRIZ - ZEFERINO CORREIA","45000-520","RUA ZEFERINO CORREIA","17","CENTRO","VITORIA DA CONQUISTA","BA")); - ds.addRow(new Array("070102","24457", "HIB LIMA GUERRA","45000-390","AL. LIMA GUERRA","04","CENTRO","VITORIA DA CONQUISTA","BA")); - ds.addRow(new Array("070103","24451", "HIB CANDIDO SALES","24157-000","AL. RIO BRANCO","373","CENTRO","CÂNDIDO SALES","BA")); - ds.addRow(new Array("070104","24455", "LOJA SHOPPING CONQUISTA SUL","45055-900","AVENIDA JURACY MAGALHAES","3340","FELICIA","VITORIA DA CONQUISTA","BA")); - ds.addRow(new Array("070105","24447", " VD BARRA CHOCA","45120-000","AV GETULIO VARGAS","98","CENTRO","CHOCA","BA")); - ds.addRow(new Array("070106","24449", "LOJA BRASIL","45051-070","AV ITABUNA","2724","BRASIL","VITORIA DA CONQUISTA","BA")); - ds.addRow(new Array("070107","24450", "LOJA ASSAI FELICIA","45055-686","AV ANEL DE CONTORNO","S/N","FELICIA","VITORIA DA CONQUISTA","BA")); - ds.addRow(new Array("070108","24448", "LOJA SHOPPING CONQUISTA","45055-900","AV JURACY MAGALHAES","3340","FELICIA","VITORIA DA CONQUISTA","BA")); - ds.addRow(new Array("070109","24458", "VD CONDEUBA","46200-000","PC NOSSA SENHORA APARECIDA","08","CENTRO","CONDEÚBA","BA")); - ds.addRow(new Array("070111","24456", "LOJA PANVICON CENTER","45000-230","AVENIDA LAURO DE FREITAS","142","CENTRO","VITORIA DA CONQUISTA","BA")); - ds.addRow(new Array("070112","24454", "LOJA NOVE DE NOVEMBRO","45000-370","PC NOVE DE NOVEMBRO","10","CENTRO","VITORIA DA CONQUISTA","BA")); - ds.addRow(new Array("070113","24453", "LOJA UNIVERSIDADE","45031-000","AV OLIVIA FLORES","2500","UNIVERSIDADE","VITORIA DA CONQUISTA","BA")); - - - - return ds; - -} -function onMobileSync(user) { - -} \ No newline at end of file diff --git a/Transferência Ginseng/datasets/ds_LojasTransf.js b/Transferência Ginseng/datasets/ds_LojasTransf.js deleted file mode 100644 index 7b292c4..0000000 --- a/Transferência Ginseng/datasets/ds_LojasTransf.js +++ /dev/null @@ -1,113 +0,0 @@ -function defineStructure() { - -} -function onSync(lastSyncDate) { - -} -function createDataset(fields, constraints, sortFields) { - var dataset = DatasetBuilder.newDataset(); - - // Definir as colunas - dataset.addColumn("codigoCentroCusto"); - dataset.addColumn("centroCusto"); - dataset.addColumn("gestorCentroCusto"); - dataset.addColumn("emailGestor"); - dataset.addColumn("id"); - dataset.addColumn("idGestor"); // Aqui será armazenada a matrícula do gestor - - // Lista dos centros de custo - var dados = [ - ["3546", "LJ HIPER FAROL - (CARREFOUR)", "3546 Ginseng", "3546@grupoginseng.com.br", "1"], - ["4560", "LJ MACEIÓ SHOPPING TERREO", "4560 Ginseng", "4560@grupoginseng.com.br", "2"], - ["5699", "LJ MOREIRA LIMA", "5699 Ginseng", "5699@grupoginseng.com.br", "3", "5699"], - ["12522", "LJ MACEIÓ SHOPPING EXPANSÃO", "12522 Ginseng", "12522@grupoginseng.com.br", "4"], - ["12817", "LJ SHOPPING PÁTIO", "12817 Ginseng", "12817@grupoginseng.com.br", "5"], - ["12818", "LJ GBARBOSA SERRARIA", "12818 Ginseng", "12818@grupoginseng.com.br", "6"], - ["12820", "LJ MÁRIO DE GUSMÃO(ATACADAO)", "12820 Ginseng", "12820@grupoginseng.com.br", "7"], - ["12823", "LJ PONTA VERDE", "12823 Ginseng", "12823@grupoginseng.com.br", "8"], - ["12824", "LJ GBARBOSA TABULEIRO", "12824 Ginseng", "12824@grupoginseng.com.br", "9"], - ["12826", "LJ HIPER JATIÚCA (ASSAÍ)", "12826 Ginseng", "12826@grupoginseng.com.br", "10"], - ["12828", "LJ GBARBOSA S.MARIS", "12828 Ginseng", "12828@grupoginseng.com.br", "11"], - ["12829", "LJ JACINTINHO", "12829 Ginseng", "12829@grupoginseng.com.br", "12"], - ["12830", "LJ LIVRAMENTO", "12830 Ginseng", "12830@grupoginseng.com.br", "13"], - ["12838", "LJ RIO LARGO", "12838 Ginseng", "12838@grupoginseng.com.br", "14"], - ["13427", "LJ SHOPPING CIDADE", "13427 Ginseng", "13427@grupoginseng.com.br", "15"], - ["14617", "LJ PARQUE SHOPPING", "14617 Ginseng", "14617@grupoginseng.com.br", "16"], - ["14668", "LJ HIPER ANTARES", "14668 Ginseng", "14668@grupoginseng.com.br", "17"], - ["19103", "LJ UNICOMPRA PONTA VERDE", "19103 Ginseng", "19103@grupoginseng.com.br", "18"], - ["20858", "LJ SUPER GIRO", "20858 Ginseng", "20858@grupoginseng.com.br", "19"], - ["20969", "HIB MARECHAL DEODORO", "20969 Ginseng", "20969@grupoginseng.com.br", "20"], - ["20991", "HIB CAMPO ALEGRE", "20991 Ginseng", "20991@grupoginseng.com.br", "21"], - ["20996", "ER ANTARES", "20996 Ginseng", "20996@grupoginseng.com.br", "22"], - ["20997", "ER PITANGUINHA", "20997 Ginseng", "20997@grupoginseng.com.br", "23"], - ["20998", "CD SERRARIA", "20998 Ginseng", "20998@grupoginseng.com.br", "24"], - ["21007", "TÔ QUE TÔ MACEIÓ CENTRO", "21007 Ginseng", "21007@grupoginseng.com.br", "25"], - ["21624", "LJ MIX MATEUS", "21624 Ginseng", "21624@grupoginseng.com.br", "27"], - ["21647", "LJ CARAJÁS", "21647 Ginseng", "21647@grupoginseng.com.br", "28"], - ["22541", "ER RIO LARGO", "22541 Ginseng", "22541@grupoginseng.com.br", "29"], - ["910173", "QDB PARQUE SHOPPING", "910173 Ginseng", "910173@grupoginseng.com.br", "30"], - ["20441", "LJ LAGARTO", "20441 Ginseng", "20441@grupoginseng.com.br", "31"], - ["20968", "HIB ITABAIANINHA", "20968 Ginseng", "20968@grupoginseng.com.br", "32"], - ["20995", "ER LAGARTO", "20995 Ginseng", "20995@grupoginseng.com.br", "33"], - ["21277", "LJ GBARBOSA SOCORRO", "21277 Ginseng", "21277@grupoginseng.com.br", "34"], - ["21278", "ER SOCORRO", "21278 Ginseng", "21278@grupoginseng.com.br", "35"], - ["21495", "HIB BARRA DOS COQUEIROS", "21495 Ginseng", "21495@grupoginseng.com.br", "36"], - ["21296", "LJ SHOPPING PREMIO SOCORRO", "21296 Ginseng", "21296@grupoginseng.com.br", "37"], - ["23475", "LJ MIX MATEUS TABULEIRO", "23475 Ginseng", "23475@grupoginseng.com.br", "38"], - ["910291", "QDB MACEIO SHOPPING", "910291 Ginseng", "910291@grupoginseng.com.br", "39"], - ["24711", "LJ GBARBOSA TABULEIRO", "24711 Ginseng", "24711@grupoginseng.com.br", "40"], - ["23665", "LJ BOULEVARD SHOPPING", "23665 Ginseng", "23665@grupoginseng.com.br", "41"], - ["23701", "LJ PRACA 9 DE NOVEMBRO", "23701 Ginseng", "23701@grupoginseng.com.br", "42"], - ["23702", "LJ GALERIA PANVICON", "23702 Ginseng", "23702@grupoginseng.com.br", "43"], - ["23704", "ER CONDEUBA", "23704 Ginseng", "23704@grupoginseng.com.br", "44"], - ["23705", "QQ SHOPPING CONQUISTA", "23705 Ginseng", "23705@grupoginseng.com.br", "45"], - ["23706", "LJ ASSAI VITORIA DA CONQUISTA", "23706 Ginseng", "23706@grupoginseng.com.br", "46"], - ["23707", "LJ BAIRRO BRASIL", "23707 Ginseng", "23707@grupoginseng.com.br", "47"], - ["23708", "HIB BARRA DO CHOCA", "23708 Ginseng", "23708@grupoginseng.com.br", "48"], - ["23709", "LJ SHOPPING CONQUISTA SUL", "23709 Ginseng", "23709@grupoginseng.com.br", "49"], - ["23711", "ER VITORIA DA CONQUISTA", "23711 Ginseng", "23711@grupoginseng.com.br", "50"], - ["23712", "HIB CANDIDO SALES", "23712 Ginseng", "23712@grupoginseng.com.br", "51"], - ["23713", "LJ RUA ZEFERINO CORREIA", "23713 Ginseng", "23713@grupoginseng.com.br", "52"] - - - - - - ]; - - // Buscar matrícula do gestor no dataset "colleague" - function getMatricula(gestorNome) { - var c1 = DatasetFactory.createConstraint("colleagueName", gestorNome, gestorNome, ConstraintType.MUST); - var dsUser = DatasetFactory.getDataset("colleague", ["colleagueId"], [c1], null); - return dsUser.rowsCount > 0 ? dsUser.getValue(0, "colleagueId") : ""; - } - - // Percorrer a lista e adicionar ao dataset - for (var i = 0; i < dados.length; i++) { - - var matricula = ""; - - // 🔴 EXCEÇÃO MANUAL – SOMENTE ESTE USUÁRIO - if (dados[i][2] === "23665 Ginseng") { - matricula = "23665"; - } else { - // fluxo normal - matricula = getMatricula(dados[i][2]); - } - - dataset.addRow([ - dados[i][0], // codigoCentroCusto - dados[i][1], // centroCusto - dados[i][2], // gestorCentroCusto - dados[i][3], // emailGestor - dados[i][4], // id - matricula // idGestor - ]); - } - - return dataset; -} - -function onMobileSync(user) { - -} \ No newline at end of file diff --git a/Transferência Ginseng/datasets/ds_LojasTransfteste.js b/Transferência Ginseng/datasets/ds_LojasTransfteste.js new file mode 100644 index 0000000..d6c4ad9 --- /dev/null +++ b/Transferência Ginseng/datasets/ds_LojasTransfteste.js @@ -0,0 +1,209 @@ +function createDataset(fields, constraints, sortFields) { + var dataset = DatasetBuilder.newDataset(); + + dataset.addColumn("PDV"); + dataset.addColumn("LOJA"); + dataset.addColumn("RESPONSAVEL_LOJA"); + dataset.addColumn("REGIONAL"); + dataset.addColumn("UF"); + dataset.addColumn("CIDADE"); + dataset.addColumn("STATUS"); + dataset.addColumn("CANAL"); + dataset.addColumn("ID"); + dataset.addColumn("LOGIN_LOJA"); + dataset.addColumn("COLLEAGUE_ID"); + dataset.addColumn("USER_CREATE"); + + try { + var clientService = fluigAPI.getAuthorizeClientService(); + var data = { + companyId: String(getValue("WKCompany") || "1"), + serviceCode: "GINSENG APITESTE", // ajuste para o codigo do servico cadastrado no Fluig + endpoint: "/base_pdvs", + method: "get", + timeoutService: "60000", + params: {} + }; + + var vo = clientService.invoke(JSON.stringify(data)); + var statusHttp = vo ? String(vo.getHttpStatusResult() || "") : ""; + var retorno = vo ? String(vo.getResult() || "") : ""; + + if (!retorno) { + dataset.addRow(["", "Sem resposta da API (HTTP " + statusHttp + ")", "", "", "", "", "", "", "", "", "", ""]); + return dataset; + } + + var objData = JSON.parse(retorno); + var success = !!objData.success; + var itens = objData.data || []; + + if (!success || !itens.length) { + var msg = trim(objData.message) || trim(objData.error) || "Sem lojas retornadas"; + dataset.addRow(["", msg + " (HTTP " + statusHttp + ")", "", "", "", "", "", "", "", "", "", ""]); + return dataset; + } + + var filtros = parseConstraints(constraints); + var colleagueCache = {}; + + for (var i = 0; i < itens.length; i++) { + var item = itens[i] || {}; + + var pdv = trim(item["PDV"]); + var loja = trim(item["PDV DESC"]); + var responsavel = trim(item["GESTAO"]) || trim(item["GESTAO"]); + var regional = trim(item["SUPERVISOR"]) || trim(item["SUPERVISOR"]); + var uf = trim(item["UF"]); + var cidade = trim(item["CIDADE"]); + var status = trim(item["STATUS"]); + var canal = trim(item["CANAL"]); + var id = trim(item["id"]); + var loginLoja = pdv ? (pdv + ".ginseng") : ""; + var colleagueId = resolveColleagueIdByLogin(loginLoja); + var userCreate = getUserCreateStatus(loginLoja, colleagueCache); + + if (filtros.onlyAtivo && status.toUpperCase() !== "ATIVO") { + continue; + } + if (filtros.pdv && pdv !== filtros.pdv) { + continue; + } + if (filtros.loja && normalize(loja).indexOf(normalize(filtros.loja)) === -1) { + continue; + } + if (filtros.termoLivre) { + var blob = normalize([ + pdv, + loja, + responsavel, + regional, + uf, + cidade + ].join(" ")); + if (blob.indexOf(normalize(filtros.termoLivre)) === -1) { + continue; + } + } + + dataset.addRow([ + pdv, + loja, + responsavel, + regional, + uf, + cidade, + status, + canal, + id, + loginLoja, + colleagueId, + userCreate + ]); + } + + if (dataset.rowsCount === 0) { + dataset.addRow(["", "Sem lojas apos filtros (HTTP " + statusHttp + ")", "", "", "", "", "", "", "", "", "", ""]); + } + + } catch (e) { + dataset = DatasetBuilder.newDataset(); + dataset.addColumn("ERRO"); + dataset.addRow([String(e)]); + } + + return dataset; +} + +function parseConstraints(constraints) { + var out = { + pdv: "", + loja: "", + onlyAtivo: true, + termoLivre: "" + }; + + if (!constraints) return out; + + for (var i = 0; i < constraints.length; i++) { + var c = constraints[i]; + if (!c || !c.fieldName) continue; + + var name = String(c.fieldName); + var value = trim(c.initialValue); + + if (name === "PDV" && value) out.pdv = value; + if (name === "LOJA" && value) out.loja = value; + if (name === "onlyAtivo" && value.toLowerCase() === "false") out.onlyAtivo = false; + + // Zoom costuma enviar constraints variadas de busca; capturamos termo livre. + if ( + value && + name !== "onlyAtivo" && + name !== "metadata#id" && + name !== "metadata#active" && + name !== "sqlLimit" + ) { + var cleaned = cleanSearchValue(value); + if (cleaned && (!out.termoLivre || cleaned.length > out.termoLivre.length)) { + out.termoLivre = cleaned; + } + } + } + + return out; +} + +function trim(v) { + return String(v == null ? "" : v).trim(); +} + +function normalize(v) { + return trim(v).toLowerCase(); +} + +function cleanSearchValue(v) { + var s = trim(v); + // remove curingas comuns de busca do Zoom/like + s = s.replace(/[%*_]/g, ""); + return trim(s); +} + +function getUserCreateStatus(loginLoja, cache) { + var login = trim(loginLoja); + if (!login) return "NAO"; + if (cache.hasOwnProperty(login)) return cache[login]; + try { + var cLogin = DatasetFactory.createConstraint("login", login, login, ConstraintType.MUST); + var cActive = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST); + var ds = DatasetFactory.getDataset("colleague", null, [cLogin, cActive], null); + var exists = !!(ds && ds.rowsCount > 0); + + // fallback para ambientes onde o identificador esta em colleagueId + if (!exists) { + var cId = DatasetFactory.createConstraint("colleaguePK.colleagueId", login, login, ConstraintType.MUST); + ds = DatasetFactory.getDataset("colleague", null, [cId, cActive], null); + exists = !!(ds && ds.rowsCount > 0); + } + + cache[login] = exists ? "OK" : "NAO"; + return cache[login]; + } catch (e) { + cache[login] = "NAO"; + return "NAO"; + } +} + +function resolveColleagueIdByLogin(loginLoja) { + var login = trim(loginLoja); + if (!login) return ""; + try { + var cLogin = DatasetFactory.createConstraint("login", login, login, ConstraintType.MUST); + var cActive = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST); + var ds = DatasetFactory.getDataset("colleague", null, [cLogin, cActive], null); + if (ds && ds.rowsCount > 0) { + return trim(ds.getValue(0, "colleaguePK.colleagueId")); + } + } catch (e) {} + return ""; +} diff --git a/Transferência Ginseng/datasets/ds_rgb_products.js b/Transferência Ginseng/datasets/ds_rgb_products.js new file mode 100644 index 0000000..de0d1d8 --- /dev/null +++ b/Transferência Ginseng/datasets/ds_rgb_products.js @@ -0,0 +1,267 @@ +function defineStructure() { + addColumn("Code"); + addColumn("Description"); + addColumn("codigoDescricao"); + addColumn("descricao"); + addColumn("sku"); + addColumn("id"); + addColumn("brand"); + addColumn("ncmId"); +} + +function onSync(lastSyncDate) {} + +function createDataset(fields, constraints, sortFields) { + var dataset = DatasetBuilder.newDataset(); + dataset.addColumn("Code"); + dataset.addColumn("Description"); + dataset.addColumn("codigoDescricao"); + dataset.addColumn("descricao"); + dataset.addColumn("sku"); + dataset.addColumn("id"); + dataset.addColumn("brand"); + dataset.addColumn("ncmId"); + + try { + var filtro = parseConstraints(constraints); + var clientService = fluigAPI.getAuthorizeClientService(); + var data = { + companyId: String(getValue("WKCompany") || "1"), + serviceCode: "GINSENG APITESTE", + endpoint: "/dados_rgb_products", + method: "get", + timeoutService: "60000", + params: {} + }; + + var vo = clientService.invoke(JSON.stringify(data)); + var statusHttp = vo ? String(vo.getHttpStatusResult() || "") : ""; + var retorno = vo ? String(vo.getResult() || "") : ""; + + // Fallback: se o servico integrado estiver com endpoint/base incorreto, chama URL direta. + if (statusHttp !== "200" || !retorno) { + var direct = fetchDirect("https://api.grupoginseng.com.br/dados_rgb_products", 60000); + statusHttp = String(direct.status || statusHttp); + retorno = direct.body || retorno; + } + + if (!retorno) { + addDiagRow(dataset, "Sem retorno da API (HTTP " + statusHttp + ")"); + return dataset; + } + + var obj = parseJsonSafe(retorno); + if (!obj) { + addDiagRow(dataset, "Falha no JSON da API (HTTP " + statusHttp + ")"); + return dataset; + } + + var itens = extractItems(obj); + if (!itens || !itens.length) { + addDiagRow(dataset, "API sem itens (HTTP " + statusHttp + ")"); + return dataset; + } + + var searchNorm = normalize(filtro.search); + var maxRows = filtro.maxRows; + + for (var i = 0; i < itens.length; i++) { + var item = itens[i] || {}; + + if (item.discontinued === true) { + continue; + } + if (item.purchaseBlocked === true) { + continue; + } + + var code = trim(item.sku); + var desc = trim(item.description); + var codigoDescricao = code + " - " + desc; + var brand = trim(item.brand); + var blob = normalize([code, desc, brand, trim(item.id)].join(" ")); + + if (searchNorm && searchNorm.length >= 2 && blob.indexOf(searchNorm) === -1) { + continue; + } + + dataset.addRow([ + code, + desc, + codigoDescricao, + desc, + code, + trim(item.id), + brand, + trim(item.ncmId) + ]); + + if (dataset.rowsCount >= maxRows) { + break; + } + } + + if (dataset.rowsCount === 0) { + addDiagRow(dataset, "Sem produtos apos filtros (busca: " + filtro.search + ")"); + } + + } catch (e) { + addDiagRow(dataset, "Erro ao consultar API: " + e); + } + + return dataset; +} + +function onMobileSync(user) {} + +function parseConstraints(constraints) { + var out = { + search: "", + maxRows: 200 + }; + + if (!constraints) { + return out; + } + + for (var i = 0; i < constraints.length; i++) { + var c = constraints[i]; + if (!c || !c.fieldName) continue; + + var name = String(c.fieldName); + var value = cleanSearchValue(c.initialValue); + + if (name === "sqlLimit") { + var n = parseInt(value, 10); + if (!isNaN(n) && n > 0 && n <= 1000) { + out.maxRows = n; + } + continue; + } + + if ( + value && + name !== "metadata#id" && + name !== "metadata#active" && + name !== "sqlLimit" + ) { + if (!out.search || value.length > out.search.length) { + out.search = value; + } + } + } + + return out; +} + +function cleanSearchValue(v) { + var s = trim(v); + s = s.replace(/[%*_]/g, ""); + // Evita que flags comuns do Fluig virem termo de busca + if (s === "true" || s === "false" || s === "on" || s === "off" || s === "1") { + return ""; + } + return trim(s); +} + +function normalize(v) { + return trim(v).toLowerCase(); +} + +function trim(v) { + return String(v == null ? "" : v).trim(); +} + +function parseJsonSafe(text) { + try { + return JSON.parse(text); + } catch (e) { + return null; + } +} + +function extractItems(obj) { + if (!obj) return []; + if (obj instanceof Array) return obj; + if (obj.data && obj.data instanceof Array) return obj.data; + + if (obj.content) { + if (obj.content instanceof Array) return obj.content; + if (typeof obj.content === "string") { + var parsedContent = parseJsonSafe(obj.content); + if (parsedContent && parsedContent.data && parsedContent.data instanceof Array) { + return parsedContent.data; + } + if (parsedContent && parsedContent instanceof Array) { + return parsedContent; + } + } + if (obj.content.data && obj.content.data instanceof Array) return obj.content.data; + } + + if (obj.result) { + if (obj.result instanceof Array) return obj.result; + if (typeof obj.result === "string") { + var parsedResult = parseJsonSafe(obj.result); + if (parsedResult && parsedResult.data && parsedResult.data instanceof Array) { + return parsedResult.data; + } + } + } + + return []; +} + +function addDiagRow(dataset, msg) { + dataset.addRow([ + "DEBUG", + String(msg), + String(msg), + String(msg), + "", + "", + "", + "" + ]); +} + +function fetchDirect(url, timeoutMs) { + var conn = null; + var reader = null; + try { + var URL = java.net.URL; + var HttpURLConnection = java.net.HttpURLConnection; + var InputStreamReader = java.io.InputStreamReader; + var BufferedReader = java.io.BufferedReader; + var StringBuilder = java.lang.StringBuilder; + + conn = new URL(url).openConnection(); + conn.setRequestMethod("GET"); + conn.setConnectTimeout(timeoutMs || 30000); + conn.setReadTimeout(timeoutMs || 30000); + conn.setRequestProperty("Accept", "application/json"); + + var status = conn.getResponseCode(); + var stream = (status >= 200 && status < 300) ? conn.getInputStream() : conn.getErrorStream(); + if (stream == null) { + return { status: status, body: "" }; + } + + reader = new BufferedReader(new InputStreamReader(stream, "UTF-8")); + var sb = new StringBuilder(); + var line = null; + while ((line = reader.readLine()) != null) { + sb.append(line); + } + + return { + status: status, + body: String(sb.toString()) + }; + } catch (e) { + return { status: 0, body: "" }; + } finally { + try { if (reader) reader.close(); } catch (e1) {} + try { if (conn) conn.disconnect(); } catch (e2) {} + } +} diff --git a/Transferência Ginseng/datasets/revenda.js b/Transferência Ginseng/datasets/revenda.js deleted file mode 100644 index 1fb3bc8..0000000 --- a/Transferência Ginseng/datasets/revenda.js +++ /dev/null @@ -1,61 +0,0 @@ -function defineStructure() { - addColumn("codigo"); - addColumn("descricao"); -} - -function onSync(lastSyncDate) {} - -function createDataset(fields, constraints, sortFields) { - var dataset = DatasetBuilder.newDataset(); - var dataSource = "/jdbc/ProtheusDS"; // Nome da conexão cadastrada no Fluig - var ic = new javax.naming.InitialContext(); - var ds = ic.lookup(dataSource); - var conn = ds.getConnection(); - var stmt = null; - var rs = null; - - try { - log.info("Iniciando execução do dataset..."); - - var sql = "SELECT b1_cod, b1_desc FROM sb1010 WHERE LEN(b1_cod) = 5 "; - log.info("Query SQL: " + sql); - - stmt = conn.prepareStatement(sql); - rs = stmt.executeQuery(); - - dataset.addColumn("codigo"); - dataset.addColumn("descricao"); - - var encontrados = {}; // Usando um objeto para evitar duplicação - - while (rs.next()) { - var codigo = rs.getString("b1_cod"); - var descricao = rs.getString("b1_desc"); - - if (!encontrados[codigo]) { // Verifica se já foi adicionado - encontrados[codigo] = true; // Marca como processado - log.info("Registro encontrado: " + codigo + " - " + descricao); - dataset.addRow([codigo, descricao]); - } - } - - if (Object.keys(encontrados).length === 0) { - log.info("Nenhum registro encontrado para a consulta."); - } - - } catch (e) { - log.error("Erro ao executar dataset: " + e.message); - } finally { - try { - if (rs) rs.close(); - if (stmt) stmt.close(); - if (conn) conn.close(); - } catch (e) { - log.error("Erro ao fechar recursos: " + e.message); - } - } - - return dataset; -} - -function onMobileSync(user) {} diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/displayFields.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/displayFields.js index 58779b3..8507a4f 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/displayFields.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/displayFields.js @@ -11,13 +11,14 @@ function displayFields(form, customHTML) { var c1 = DatasetFactory.createConstraint("colleagueId", userId, userId, ConstraintType.MUST); var filter = new Array(c1); - var fields = new Array("colleagueName"); + var fields = new Array("colleagueName", "mail"); var retorno = DatasetFactory.getDataset("colleague", fields, filter, null); //requester if (activity == 0) { form.setValue("requesterName", retorno.getValue(0, "colleagueName")); form.setValue("requesterMail", retorno.getValue(0, "mail")); + form.setValue("emailSolicitante", retorno.getValue(0, "mail")); form.setValue("requesterId", userId); } else { form.setValue("currentUserName", retorno.getValue(0, "colleagueName")); diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/excel.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/excel.js index 745bfb6..4645a51 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/excel.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/excel.js @@ -1,35 +1,163 @@ function carregarItensDoExcel(fileInputId) { - const file = document.getElementById(fileInputId).files[0]; + const fileInput = document.getElementById(fileInputId); + const file = fileInput ? fileInput.files[0] : null; if (!file) { FLUIGC.toast({ title: 'Erro', message: 'Nenhum arquivo selecionado.', type: 'danger' }); return; } + if (typeof XLSX === "undefined") { + FLUIGC.toast({ title: 'Erro', message: 'Biblioteca XLSX nao carregada.', type: 'danger' }); + return; + } + + showExcelLoading(); const reader = new FileReader(); - reader.onload = function(e) { - const data = new Uint8Array(e.target.result); - const workbook = XLSX.read(data, { type: 'array' }); - const sheet = workbook.Sheets[workbook.SheetNames[0]]; - const linhas = XLSX.utils.sheet_to_json(sheet); + reader.onload = function (e) { + // Permite o navegador renderizar o overlay antes de processar. + setTimeout(function () { + try { + const data = new Uint8Array(e.target.result); + const workbook = XLSX.read(data, { type: 'array' }); + const sheetName = workbook.SheetNames[0]; + const sheet = workbook.Sheets[sheetName]; + const linhas = XLSX.utils.sheet_to_json(sheet, { defval: "" }); - // Limpa a tabela (sem usar form) - const indices = $("input[id^='codigoItem___']").map(function() { - return $(this).attr("id").split("___")[1]; - }).get(); - indices.forEach(idx => fnWdkRemoveChild(idx)); + // Limpa a tabela (sem usar form) + const indices = $("input[id^='codigoItem___']").map(function () { + return $(this).attr("id").split("___")[1]; + }).get(); + $.each(indices, function (_, idx) { + fnWdkRemoveChild(idx); + }); - // Adiciona os itens da planilha - linhas.forEach(item => { - const idx = wdkAddChild('tabelaItens'); - window[`descricao___${idx}`].setValue(item.codigoItem); + const linhasValidas = []; + $.each(linhas, function (_, item) { + const codigo = getCellByAliases(item, ["codigoItem", "codigo", "codItem", "sku", "code", "item"]); + const quantidade = getCellByAliases(item, ["quantidadeItem", "quantidade", "qtd", "qtde"]); + const descricao = getCellByAliases(item, ["descricao", "description", "desc"]); - // $(`#codigoItem___${idx}`).val(item.codigoItem); - $(`#quantidadeItem___${idx}`).val(item.quantidadeItem); - $(`#codigoItem___${idx}`).val(item.descricao); - }); + if (!codigo || !quantidade) { + return; + } - FLUIGC.toast({ title: 'Sucesso', message: 'Itens carregados com sucesso!', type: 'success' }); + linhasValidas.push({ + codigo: String(codigo).trim(), + quantidade: String(quantidade).trim(), + descricao: String(descricao || "").trim() + }); + }); + + if (!linhasValidas.length) { + FLUIGC.toast({ + title: "Atencao", + message: "Nenhuma linha valida encontrada. Use colunas de codigo e quantidade.", + type: "warning" + }); + return; + } + + // Adiciona os itens da planilha + $.each(linhasValidas, function (_, item) { + const idx = wdkAddChild('tabelaItens'); + const zoomObj = window[`descricao___${idx}`]; + if (zoomObj && typeof zoomObj.setValue === "function") { + zoomObj.setValue(item.codigo); + } else { + // Fallback visual caso o objeto zoom ainda nao esteja pronto no momento. + $(`#descricao___${idx}`).val(item.codigo); + } + + $(`#quantidadeItem___${idx}`).val(item.quantidade); + + var descricaoFinal = item.descricao || buscarDescricaoProduto(item.codigo); + if (descricaoFinal) { + $(`#codigoItem___${idx}`).val(descricaoFinal); + } + }); + + FLUIGC.toast({ title: 'Sucesso', message: linhasValidas.length + ' itens carregados com sucesso!', type: 'success' }); + } catch (err) { + FLUIGC.toast({ title: 'Erro', message: 'Falha ao processar Excel: ' + err.message, type: 'danger' }); + console.error("Erro em carregarItensDoExcel:", err); + } finally { + hideExcelLoading(); + } + }, 30); + }; + + reader.onerror = function () { + FLUIGC.toast({ title: 'Erro', message: 'Nao foi possivel ler o arquivo Excel.', type: 'danger' }); + hideExcelLoading(); }; reader.readAsArrayBuffer(file); } + +function getCellByAliases(row, aliases) { + if (!row) return ""; + const keys = Object.keys(row); + for (let i = 0; i < aliases.length; i++) { + const alias = normalizeHeader(aliases[i]); + for (let k = 0; k < keys.length; k++) { + const originalKey = keys[k]; + if (normalizeHeader(originalKey) === alias) { + return row[originalKey]; + } + } + } + return ""; +} + +function normalizeHeader(text) { + return String(text || "") + .normalize("NFD") + .replace(/[\u0300-\u036f]/g, "") + .replace(/\s+/g, "") + .replace(/[^a-zA-Z0-9]/g, "") + .toLowerCase(); +} + +function buscarDescricaoProduto(codigo) { + try { + if (typeof DatasetFactory === "undefined" || typeof ConstraintType === "undefined") { + return ""; + } + + var codigoTxt = String(codigo || "").trim(); + if (!codigoTxt) return ""; + + var cCodigo = DatasetFactory.createConstraint("Code", codigoTxt, codigoTxt, ConstraintType.MUST); + var ds = DatasetFactory.getDataset("ds_rgb_products", null, [cCodigo], null); + if (!ds || !ds.values || !ds.values.length) { + return ""; + } + + for (var i = 0; i < ds.values.length; i++) { + var row = ds.values[i] || {}; + if (String(row.Code || "").trim() === codigoTxt) { + return String(row.descricao || row.Description || "").trim(); + } + } + + var first = ds.values[0] || {}; + return String(first.descricao || first.Description || "").trim(); + } catch (e) { + console.error("Erro ao buscar descricao por codigo:", e); + return ""; + } +} + +function showExcelLoading() { + var overlay = document.getElementById("excelLoadingOverlay"); + if (overlay) { + overlay.style.display = "flex"; + } +} + +function hideExcelLoading() { + var overlay = document.getElementById("excelLoadingOverlay"); + if (overlay) { + overlay.style.display = "none"; + } +} diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js index ecf3aec..ab886ab 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js @@ -141,11 +141,32 @@ $(document).ready(function () { //formatarMoedasTabela("precoIndica___"); formatarMoedasTabela("ValorTotal"); + displayBtnFiles(); + invisibleBtnUpload("fnAnexo_Nfe"); + invisibleBtnUpload("fdAnexo_Coleta"); + invisibleBtnUpload("fdAnexo_Entrega"); + invisibleBtnUpload("fdAnexo_recebimento"); + // gerarTabelaCotacaoIndica("tabelaCotacaoIndica", "tabelaItens"); }); +function resolveFormModeFallback() { + var mode = ($("#formMode").val() || "").toUpperCase(); + if (mode) return mode; + try { + if (window.parent && window.parent.WCMAPI && typeof window.parent.WCMAPI.getFormMode === "function") { + return String(window.parent.WCMAPI.getFormMode() || "").toUpperCase(); + } + } catch (e) {} + return "ADD"; +} + +if (typeof window.getFormMode !== "function") { + window.getFormMode = resolveFormModeFallback; +} + function formatarMoedasTabela(ids) { $(document).on('input', `[id^="${ids}"]`, function() { let valor = $(this).val(); @@ -353,7 +374,8 @@ function setSelectedZoomItem(selectedItem) { } if (name_item == "descricao") { - $("#codigoItem" + "___" + indice).val(selectedItem["descricao"]); + var itemDescricao = selectedItem["descricao"] || selectedItem["Description"] || ""; + $("#codigoItem" + "___" + indice).val(itemDescricao); } } @@ -747,14 +769,13 @@ function displayBtnFiles(){ try{ $('.componentAnexo').each(function(i, element) { let inputFile = $(element).find(".inputAnexo") - let inputFileVew = $(element).find(".componentAnexo") let btnUpFile = $(element).find(".btnUpFile"); let btnViewerFile = $(element).find(".btnViewerFile"); let btnDownloadFile = $(element).find(".btnDownloadFile"); if(getFormMode() == "VIEW"){ btnUpFile.remove(); - if(inputFileVew.val() != ""){ + if(inputFile.val() != ""){ btnViewerFile.prop("disabled", false); btnViewerFile.show() } diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html index 84f5f96..11ae815 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html @@ -1,902 +1,402 @@ - - - - - - - + + + + + - - - - - - - -
-
-
- - - +
+
+ + Importando planilha... +
+
- - - - - - - - - - - -
- -

Solicitao de Transferncia

- -
-
-
-
-

- -  Dados gerais   -

-
- Dados referentes aos responsveis pela abertura e pela - solicitao do atual processo. -
-
-
- -
-
-
-
- - -
-
- - -
-
-
-
-
-
-
-
- - -
-
- - -
-
-
-
-
-
-
-
- - * - -

- Preenchimento obrigatrio. -

- -
-
- - -
-
-
-
-
-
-
-
- - -
-
- - -
-
-
-
-
-
-
-
- - -
-
- - -
-
-
-
- -
-
-

- -  Itens   -

-
- Dados referentes ao itens de Transferncia necessrios para o - solicitante. -
-
-
- -
-
- - -
- - - - - - - - - - - - - - - -
- - - - - -
-
- -
-
-
-
- - - - - - - - - - - - - - - - - - -
#Cdigo do ItemQuantidadeDescrio
-
- -
-
-
- -

- Preenchimento obrigatrio. -

-
-
-
- -

- Preenchimento obrigatrio. -

-
-
-
- -
-
- -
-
-
- -    - -
-
-
-
-
-
-
-
- -
-
-

- -  Justificativa   -

-
- Motivos para a transferncia dos itens e as possíveis informaes - complementares. -
-
-
- -
-
-
-
- - * - -

- Preenchimento obrigatrio. -

-
-
-
-
-
-
+
+ +
+
+ Solicitação + Coleta + Entrega + Recebimento
-
-
-
-

- -  Validao dos Itens   -

-
- Informaaees complementares sobre a validao dos - da solicitao. -
-
+

Formulário de Transferência de Mercadorias

+ +
+

Dados da Transferência

+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+ +
+

Itens da Transferência

+
+ + Colunas esperadas: codigo/codigoItem e quantidade/quantidadeItem. +
+ + + Nenhum arquivo selecionado +
+ +
+ + + + + + + + + + + + + + + + + + + +
#Código do itemQuantidadeDescrição
1 + + + + + + + +
+ +
+ +
+

Justificativa

+ +
+ +
+

Anexos por Etapa

+ +
+ + + + +
-
-
-
-
- - -
-
- - -
-
-
-
-
-
-
-
- - -
-
-
-
-
-
- -
- - -
- - - -
-
-
-
-
- -
-
-
-

- -  Emisso da NFE de transferncia   -

-
- Informaes complementares sobre a emisso da NFE. -
-
-
- -
-
-
-
- - -
-
- - -
-
-
-
-
-
-
-
-
- - -
-
-
-
-
-
- -
- - -
- - - -
-
-
-
-
- -
-
-
-

- -  Motorista Responsvel pela coleta   -

-
- Consideraes sobre a coleta -
-
-
-
-
-
-
- - -
-
- - -
-
-
-
-
-
-
-
- - -
-
-
-
-
-
- -
- - -
- - - -
-
-
-
-
- -
-
-
-

- -  Motorista responsvel pela entrega   -

-
- Consideraes sobre a entrega. -
-
-
-
-
-
-
- - -
-
- - -
-
-
-
-
-
-
-
- - -
-
-
-
-
-
- -
- - -
- - - -
-
-
-
-
- -
-
-
-

- -  Validao dos Itens entregues   -

-
+
+ + + + +
-
-
-
-
- - -
-
- - -
-
-
+
+ + + + +
-
-
-
-
- - *
-
- -
-
- -
-
- -
-
-
-
-
-
-
-
-
- - * - -

- Preenchimento obrigatrio. -

-
-
-
-
-
-
- -
- - -
- - - -
-
-
-
-
-
-
-
-

- -  Validar problema de transferncia   -

-
Dados referentes as implicaes desta transferncia.
-
+
+ + + + +
-
-
- - * - -

- Preenchimento obrigatrio. -

-
-
-
-
- Todos os campos com * so de preenchimento obrigatrio. -
+ + + + + + + + + + + + + + + +
- - \ No newline at end of file + + + + + + From e8445fcf2f205ea2b6fe49d14e276f588a055bdb Mon Sep 17 00:00:00 2001 From: "Andrey Cunh@" Date: Tue, 17 Mar 2026 17:58:40 -0300 Subject: [PATCH 05/25] att --- Transferência Ginseng/.vscode/servers.json | 6 +- .../datasets/ds_fiscal_invoice_by_keys.js | 428 +++ .../datasets/ds_motoristas_grupo.js | 301 ++ .../events/validateForm.js | 129 +- .../excel.js | 139 +- .../script.js | 827 ++++- .../totvsflow_solicitacao_transferencia.html | 228 +- .../Solicitação de transferência.ecm30.xml | 1784 +--------- .../Solicitação de transferência.png | Bin 45263 -> 40397 bytes ...licitação de transferência.processimage.svg | 2 +- .../workflow/.resources/teste3.ws.cache | 792 +++++ .../workflow/.resources/teste3.ws.cache.bkp | 0 .../workflow/diagrams/.project | 11 + .../Solicitação de transferência.process | 219 +- .../Solicitação de transferência.ecm30.xml | 2967 +++++++++++++++++ .../Solicitação de transferência.png | Bin 0 -> 45262 bytes workflow/.resources/teste3.ws.cache | 711 ++++ workflow/.resources/teste3.ws.cache.bkp | 155 + 18 files changed, 6689 insertions(+), 2010 deletions(-) create mode 100644 Transferência Ginseng/datasets/ds_fiscal_invoice_by_keys.js create mode 100644 Transferência Ginseng/datasets/ds_motoristas_grupo.js create mode 100644 Transferência Ginseng/workflow/.resources/teste3.ws.cache create mode 100644 Transferência Ginseng/workflow/.resources/teste3.ws.cache.bkp create mode 100644 Transferência Ginseng/workflow/diagrams/.project create mode 100644 workflow/.resources/Solicitação de transferência.ecm30.xml create mode 100644 workflow/.resources/Solicitação de transferência.png create mode 100644 workflow/.resources/teste3.ws.cache create mode 100644 workflow/.resources/teste3.ws.cache.bkp diff --git a/Transferência Ginseng/.vscode/servers.json b/Transferência Ginseng/.vscode/servers.json index e88a557..d5fb634 100644 --- a/Transferência Ginseng/.vscode/servers.json +++ b/Transferência Ginseng/.vscode/servers.json @@ -2,13 +2,13 @@ "version": "1.0.0", "configurations": [ { - "id": "edmoa4q9botmmtlvdz4bafosc5mqmr", - "name": "teste", + "id": "mkjw3cu0krommujt2hvyinvbjsfeaj", + "name": "Teste", "host": "comerciode188007.fluig.cloudtotvs.com.br", "ssl": true, "port": 443, "username": "andrey.cunha", - "password": "eyJpdiI6ImRjNGY4YzFkZmNiM2FhNDJiMGE3NDlmYjI5YjFkZjBhIiwic2FsdCI6IjU2MzUzZTcxOGZjZGRjZmUwZDI4MWYxZTllOWFlMDM3IiwidGV4dCI6IjU1NWQxZTE3YzUwYTQwYjNjMzAwYTc3M2VmNWQwODU1In0=", + "password": "eyJpdiI6ImNlN2IyOTIzNjljNDZmZDQwMTM5Njg2MTEyNjNlM2IyIiwic2FsdCI6ImM1ZDFjYzhiMTFiZGNjNDBhOTQzMGUwZGU0OWY5NmZmIiwidGV4dCI6ImY4M2FmZTUzNTkzYTBjNDc2OTQ3NDQ4NDc0ZGVlNmRiIn0=", "userCode": "andrey.cunha", "confirmExporting": false, "hasBrowser": false, diff --git a/Transferência Ginseng/datasets/ds_fiscal_invoice_by_keys.js b/Transferência Ginseng/datasets/ds_fiscal_invoice_by_keys.js new file mode 100644 index 0000000..ad4ffc2 --- /dev/null +++ b/Transferência Ginseng/datasets/ds_fiscal_invoice_by_keys.js @@ -0,0 +1,428 @@ +function defineStructure() { + addColumn("success"); + addColumn("message"); + addColumn("key"); + addColumn("invoiceNumber"); + addColumn("serie"); + addColumn("emissionDate"); + addColumn("operationDate"); + addColumn("supplierName"); + addColumn("documentValue"); + addColumn("totalItemsValue"); + addColumn("situation"); + addColumn("fiscalOperationDescription"); + addColumn("itemCount"); + addColumn("itensJson"); + addColumn("storeId"); + addColumn("invoiceId"); + addColumn("emitterEmployeeId"); + addColumn("updatedAt"); +} + +function onSync(lastSyncDate) {} + +function createDataset(fields, constraints, sortFields) { + var dataset = DatasetBuilder.newDataset(); + addDefaultColumns(dataset); + + try { + var key = normalizeDigits(getConstraintValue(constraints, "key")); + if (!key) { + addErrorRow(dataset, "Informe a chave da NFe."); + return dataset; + } + + if (!/^\d{44}$/.test(key)) { + addErrorRow(dataset, "A chave da NFe deve conter 44 digitos."); + return dataset; + } + + var auth = resolveAuth(constraints); + var diagnostics = []; + + var endpoints = [ + "/fiscal-invoices?key=" + key, + "fiscal-invoices?key=" + key, + "/fiscal/invoices?key=" + key, + "/fiscal/invoice?key=" + key, + "/invoice?key=" + key + ]; + + var apiObj = null; + var hitInfo = ""; + var lastApiMessage = ""; + + try { + var clientService = fluigAPI.getAuthorizeClientService(); + for (var i = 0; i < endpoints.length; i++) { + var endpoint = endpoints[i]; + var resp = invokeAuthorizedGet(clientService, endpoint, auth); + diagnostics.push(endpoint + " => HTTP " + trim(resp.status)); + var parsed = parseApiPayload(resp.body); + if (parsed && trim(parsed.message)) { + lastApiMessage = trim(parsed.message); + } + if (String(resp.status) === "200" && isApiSuccess(parsed)) { + apiObj = parsed; + hitInfo = endpoint; + break; + } + } + } catch (eService) { + diagnostics.push("authorizeClientService exception: " + eService); + } + + if (!apiObj) { + var directUrls = [ + "https://api.grupoginseng.com.br/fiscal-invoices?key=" + key, + "https://api.grupoginseng.com.br/fiscal/invoice?key=" + key + ]; + + for (var d = 0; d < directUrls.length; d++) { + var url = directUrls[d]; + var directResp = fetchDirect(url, 30000, auth); + diagnostics.push(url + " => HTTP " + trim(directResp.status)); + var parsedDirect = parseApiPayload(directResp.body); + if (parsedDirect && trim(parsedDirect.message)) { + lastApiMessage = trim(parsedDirect.message); + } + if (String(directResp.status) === "200" && isApiSuccess(parsedDirect)) { + apiObj = parsedDirect; + hitInfo = url; + break; + } + } + } + + if (!apiObj) { + var msg = "Falha ao consultar API da NFe. Tentativas: " + diagnostics.join(" | "); + if (lastApiMessage) { + msg += " | Ultima mensagem da API: " + lastApiMessage; + } + addErrorRow(dataset, msg); + return dataset; + } + + if (!apiObj.success || !apiObj.data) { + addErrorRow(dataset, trim(apiObj.message) || "NFe nao encontrada. Fonte: " + hitInfo); + return dataset; + } + + var dataNfe = apiObj.data || {}; + var itens = dataNfe.itens || []; + var itensJson = JSON.stringify(buildNfeItems(itens)); + + dataset.addRow([ + "true", + "OK (" + hitInfo + ")", + trim(dataNfe.key), + trim(dataNfe.invoiceNumber), + trim(dataNfe.serie), + formatIsoDate(dataNfe.emissionDate), + formatIsoDate(dataNfe.operationDate), + trim(dataNfe.supplierName), + trim(dataNfe.documentValue), + trim(dataNfe.totalItemsValue), + trim(dataNfe.situation), + trim(dataNfe.fiscalOperationDescription), + String(itens.length), + itensJson, + trim(dataNfe.storeId), + trim(dataNfe.invoiceId), + trim(dataNfe.emitterEmployeeId), + formatIsoDateTime(dataNfe.updatedAt) + ]); + } catch (e) { + addErrorRow(dataset, "Erro ao consultar a NFe: " + e); + } + + return dataset; +} + +function onMobileSync(user) {} + +function addDefaultColumns(dataset) { + dataset.addColumn("success"); + dataset.addColumn("message"); + dataset.addColumn("key"); + dataset.addColumn("invoiceNumber"); + dataset.addColumn("serie"); + dataset.addColumn("emissionDate"); + dataset.addColumn("operationDate"); + dataset.addColumn("supplierName"); + dataset.addColumn("documentValue"); + dataset.addColumn("totalItemsValue"); + dataset.addColumn("situation"); + dataset.addColumn("fiscalOperationDescription"); + dataset.addColumn("itemCount"); + dataset.addColumn("itensJson"); + dataset.addColumn("storeId"); + dataset.addColumn("invoiceId"); + dataset.addColumn("emitterEmployeeId"); + dataset.addColumn("updatedAt"); +} + +function addErrorRow(dataset, message) { + dataset.addRow([ + "false", + String(message || "Erro ao consultar NFe."), + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "0", + "[]", + "", + "", + "", + "" + ]); +} + +function getConstraintValue(constraints, fieldName) { + if (!constraints || !fieldName) return ""; + + for (var i = 0; i < constraints.length; i++) { + var c = constraints[i]; + if (!c || !c.fieldName) continue; + if (String(c.fieldName) === String(fieldName)) { + return c.initialValue; + } + } + return ""; +} + +function resolveAuth(constraints) { + var token = trim(getConstraintValue(constraints, "token")); + if (!token) { + try { + token = trim(java.lang.System.getenv("GINSENG_FISCAL_TOKEN")); + } catch (e1) {} + } + if (!token) { + // fallback informado durante homologacao + token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhcGlnaW5zZW5nIiwiZXhwIjoxNzg3NDQ4MDY3fQ.GJqcIJBkMIfp_q_KRzgGuAHWWo93j3FWo3TObKqlAwA"; + } + + var basicUser = trim(getConstraintValue(constraints, "basicUser")); + var basicPass = trim(getConstraintValue(constraints, "basicPass")); + + // Fallback operacional para homologacao, conforme credenciais validadas em teste manual. + if (!basicUser) basicUser = "fluig"; + if (!basicPass) basicPass = "Ginseng@"; + + return { + token: token, + basicUser: basicUser, + basicPass: basicPass + }; +} + +function invokeAuthorizedGet(clientService, endpoint, auth) { + var authHeader = resolveAuthHeader(auth); + var headers = { "Accept": "application/json" }; + if (authHeader) { + headers.Authorization = authHeader; + if (auth && auth.token) { + headers["x-access-token"] = auth.token; + } + } + + var data = { + companyId: String(getValue("WKCompany") || "1"), + serviceCode: "GINSENG APITESTE", + endpoint: endpoint, + method: "get", + timeoutService: "30000", + params: {}, + headers: headers + }; + + var vo = clientService.invoke(JSON.stringify(data)); + return { + status: vo ? String(vo.getHttpStatusResult() || "") : "", + body: vo ? String(vo.getResult() || "") : "" + }; +} + +function parseApiPayload(bodyText) { + var raw = trim(bodyText); + if (!raw) return null; + + var obj = parseJsonSafe(raw); + if (!obj) return null; + + if (typeof obj.success !== "undefined" || typeof obj.data !== "undefined") { + return obj; + } + + if (obj.content) { + if (typeof obj.content === "string") { + var c = parseJsonSafe(obj.content); + if (c) return c; + } else { + return obj.content; + } + } + + if (obj.result) { + if (typeof obj.result === "string") { + var r = parseJsonSafe(obj.result); + if (r) return r; + } else { + return obj.result; + } + } + + return obj; +} + +function isApiSuccess(obj) { + if (!obj || !obj.data) return false; + if (obj.success === true) return true; + if (String(obj.success).toLowerCase() === "true") return true; + return false; +} + +function fetchDirect(url, timeoutMs, auth) { + var conn = null; + var reader = null; + try { + var URL = java.net.URL; + var InputStreamReader = java.io.InputStreamReader; + var BufferedReader = java.io.BufferedReader; + var StringBuilder = java.lang.StringBuilder; + + conn = new URL(url).openConnection(); + conn.setRequestMethod("GET"); + conn.setConnectTimeout(timeoutMs || 30000); + conn.setReadTimeout(timeoutMs || 30000); + conn.setRequestProperty("Accept", "application/json"); + + var authHeader = resolveAuthHeader(auth); + if (authHeader) { + conn.setRequestProperty("Authorization", authHeader); + if (auth.token) conn.setRequestProperty("x-access-token", auth.token); + } + + var status = conn.getResponseCode(); + var stream = (status >= 200 && status < 300) ? conn.getInputStream() : conn.getErrorStream(); + if (stream == null) return { status: status, body: "" }; + + reader = new BufferedReader(new InputStreamReader(stream, "UTF-8")); + var sb = new StringBuilder(); + var line = null; + while ((line = reader.readLine()) != null) { + sb.append(line); + } + + return { status: String(status), body: String(sb.toString()) }; + } catch (e) { + return { status: "", body: "" }; + } finally { + try { if (reader) reader.close(); } catch (e1) {} + try { if (conn) conn.disconnect(); } catch (e2) {} + } +} + +function resolveAuthHeader(auth) { + auth = auth || {}; + if (auth.basicUser && auth.basicPass) { + var raw = String(auth.basicUser) + ":" + String(auth.basicPass); + var bytes = new java.lang.String(raw).getBytes("UTF-8"); + var encoded = java.util.Base64.getEncoder().encodeToString(bytes); + return "Basic " + String(encoded); + } + if (auth.token) { + return "Bearer " + String(auth.token); + } + return ""; +} + +function buildNfeItems(items) { + var out = []; + if (!items || !(items instanceof Array)) return out; + + for (var i = 0; i < items.length; i++) { + var item = items[i] || {}; + out.push({ + productId: trim(item.productId), + quantity: toNumber(item.quantity || item.completeQuantity), + code: trim(item.code || item.sku || item.productCode || item.codigo) + }); + } + + return out; +} + +function toNumber(value) { + var text = trim(value).replace(",", "."); + var n = parseFloat(text); + return isNaN(n) ? 0 : n; +} + +function normalizeDigits(value) { + return String(value == null ? "" : value).replace(/\D/g, ""); +} + +function parseJsonSafe(text) { + try { + return JSON.parse(text); + } catch (e) { + return null; + } +} + +function trim(value) { + return String(value == null ? "" : value).trim(); +} + +function formatIsoDate(value) { + var text = trim(value); + if (!text) return ""; + + try { + var datePart = text.split("T")[0].split("-"); + if (datePart.length !== 3) { + return text; + } + return datePart[2] + "/" + datePart[1] + "/" + datePart[0]; + } catch (e) { + return text; + } +} + +function formatIsoDateTime(value) { + var text = trim(value); + if (!text) return ""; + + try { + var dt = text.split("T"); + if (dt.length < 1) return text; + + var datePart = dt[0].split("-"); + if (datePart.length !== 3) return text; + + var timePart = ""; + if (dt.length > 1) { + timePart = dt[1].replace("Z", ""); + var dotIndex = timePart.indexOf("."); + if (dotIndex >= 0) { + timePart = timePart.substring(0, dotIndex); + } + } + + var dateStr = datePart[2] + "/" + datePart[1] + "/" + datePart[0]; + if (!timePart) return dateStr; + + return dateStr + " " + timePart; + } catch (e) { + return text; + } +} diff --git a/Transferência Ginseng/datasets/ds_motoristas_grupo.js b/Transferência Ginseng/datasets/ds_motoristas_grupo.js new file mode 100644 index 0000000..4af247b --- /dev/null +++ b/Transferência Ginseng/datasets/ds_motoristas_grupo.js @@ -0,0 +1,301 @@ +function defineStructure() { + addColumn("LOGIN"); + addColumn("NOME"); + addColumn("EMAIL"); + addColumn("COLLEAGUE_ID"); + addColumn("GROUP_ID"); +} + +function onSync(lastSyncDate) {} +function onMobileSync(user) {} + +function createDataset(fields, constraints, sortFields) { + var dataset = DatasetBuilder.newDataset(); + dataset.addColumn("LOGIN"); + dataset.addColumn("NOME"); + dataset.addColumn("EMAIL"); + dataset.addColumn("COLLEAGUE_ID"); + dataset.addColumn("GROUP_ID"); + + try { + var cfg = parseConstraints(constraints); + var members = getMembersFromGroup(cfg.groupId); + var termo = normalize(cfg.termoLivre); + var added = 0; + + for (var i = 0; i < members.length; i++) { + var memberId = trim(members[i]); + if (!memberId) continue; + + var col = getColleagueById(memberId); + if (!col) continue; + + if (termo) { + var blob = normalize([ + col.LOGIN, + col.NOME, + col.EMAIL, + col.COLLEAGUE_ID + ].join(" ")); + if (blob.indexOf(termo) === -1) { + continue; + } + } + + dataset.addRow([ + col.LOGIN, + col.NOME, + col.EMAIL, + col.COLLEAGUE_ID, + cfg.groupId + ]); + added++; + } + + if (added === 0) { + // Mantem dataset vazio para o zoom nao exibir usuarios fora do grupo. + } + } catch (e) { + safeLogError("[ds_motoristas_grupo] Erro no createDataset: " + e); + dataset = DatasetBuilder.newDataset(); + dataset.addColumn("LOGIN"); + dataset.addColumn("NOME"); + dataset.addColumn("EMAIL"); + dataset.addColumn("COLLEAGUE_ID"); + dataset.addColumn("GROUP_ID"); + } + + return dataset; +} + +function parseConstraints(constraints) { + var out = { + groupId: "Motoristas", + termoLivre: "" + }; + + if (!constraints) return out; + + for (var i = 0; i < constraints.length; i++) { + var c = constraints[i]; + if (!c) continue; + + var field = getConstraintFieldName(c); + var value = getConstraintInitialValue(c); + if (!field) continue; + if (!value) continue; + + if ( + field === "GROUP_ID" || + field === "groupId" || + field === "group_id" || + field === "colleagueGroupPK.groupId" + ) { + out.groupId = value; + continue; + } + + if ( + field !== "metadata#id" && + field !== "metadata#active" && + field !== "sqlLimit" + ) { + var cleaned = cleanSearchValue(value); + if (cleaned && (!out.termoLivre || cleaned.length > out.termoLivre.length)) { + out.termoLivre = cleaned; + } + } + } + + return out; +} + +function getMembersFromGroup(groupId) { + var members = {}; + var out = []; + var gId = trim(groupId); + if (!gId) return out; + + var fieldOptions = [ + "colleagueGroupPK.groupId", + "groupId", + "group" + ]; + + var groupCandidates = [gId]; + var upper = gId.toUpperCase(); + var lower = gId.toLowerCase(); + if (groupCandidates.indexOf(upper) < 0) groupCandidates.push(upper); + if (groupCandidates.indexOf(lower) < 0) groupCandidates.push(lower); + + var ds = null; + for (var g = 0; g < groupCandidates.length; g++) { + for (var i = 0; i < fieldOptions.length; i++) { + try { + var cGroup = DatasetFactory.createConstraint(fieldOptions[i], groupCandidates[g], groupCandidates[g], ConstraintType.MUST); + ds = DatasetFactory.getDataset("colleagueGroup", null, [cGroup], null); + if (ds && ds.rowsCount > 0) { + break; + } + } catch (e) { + safeLogError("[ds_motoristas_grupo] Erro consultando colleagueGroup (" + fieldOptions[i] + "=" + groupCandidates[g] + "): " + e); + ds = null; + } + } + if (ds && ds.rowsCount > 0) { + break; + } + } + + if (!ds || ds.rowsCount === 0) { + // Fallback: alguns ambientes permitem filtrar direto no dataset colleague por groupId. + try { + var cGroupCol = DatasetFactory.createConstraint("groupId", gId, gId, ConstraintType.MUST); + ds = DatasetFactory.getDataset("colleague", null, [cGroupCol], null); + if (ds && ds.rowsCount > 0) { + for (var x = 0; x < ds.rowsCount; x++) { + var fallbackId = trim( + ds.getValue(x, "colleaguePK.colleagueId") || + ds.getValue(x, "colleagueId") || + ds.getValue(x, "login") + ); + if (!fallbackId) continue; + if (members[fallbackId]) continue; + members[fallbackId] = true; + out.push(fallbackId); + } + } + } catch (eFallback) { + safeLogError("[ds_motoristas_grupo] Erro no fallback por groupId no colleague: " + eFallback); + } + return out; + } + + for (var r = 0; r < ds.rowsCount; r++) { + var colleagueId = trim( + ds.getValue(r, "colleagueGroupPK.colleagueId") || + ds.getValue(r, "colleagueId") || + ds.getValue(r, "login") + ); + if (!colleagueId) continue; + if (members[colleagueId]) continue; + members[colleagueId] = true; + out.push(colleagueId); + } + + return out; +} + +function getColleagueById(colleagueId) { + var id = trim(colleagueId); + if (!id) return null; + + var fieldsToTry = ["colleaguePK.colleagueId", "colleagueId", "login"]; + var ds = null; + + // 1) Tenta buscando somente ativos com diferentes campos. + for (var i = 0; i < fieldsToTry.length; i++) { + ds = getColleagueDataset(id, fieldsToTry[i], true); + if (ds && ds.rowsCount > 0) { + break; + } + } + + // 2) Fallback sem constraint de ativo (alguns ambientes tratam "active" de forma diferente). + if (!ds || ds.rowsCount === 0) { + for (var j = 0; j < fieldsToTry.length; j++) { + ds = getColleagueDataset(id, fieldsToTry[j], false); + if (ds && ds.rowsCount > 0) { + break; + } + } + } + + if (!ds || ds.rowsCount === 0) return null; + + var row = pickActiveRow(ds); + if (row < 0) row = 0; + + var colleaguePkId = trim( + ds.getValue(row, "colleaguePK.colleagueId") || + ds.getValue(row, "colleagueId") || + ds.getValue(row, "login") + ); + if (!colleaguePkId) return null; + + return { + LOGIN: trim(ds.getValue(row, "login")), + NOME: trim(ds.getValue(row, "colleagueName")), + EMAIL: trim(ds.getValue(row, "mail")), + COLLEAGUE_ID: colleaguePkId + }; +} + +function getColleagueDataset(id, fieldName, onlyActive) { + try { + var constraints = [ + DatasetFactory.createConstraint(fieldName, id, id, ConstraintType.MUST) + ]; + + if (onlyActive) { + constraints.push(DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST)); + } + + return DatasetFactory.getDataset("colleague", null, constraints, null); + } catch (e) { + safeLogError("[ds_motoristas_grupo] Erro consultando colleague (" + fieldName + "=" + id + ", active=" + onlyActive + "): " + e); + return null; + } +} + +function pickActiveRow(ds) { + if (!ds || ds.rowsCount <= 0) return -1; + + for (var i = 0; i < ds.rowsCount; i++) { + var activeValue = trim(ds.getValue(i, "active") || ds.getValue(i, "colleaguePK.active")); + if (!activeValue) return i; + + var n = normalize(activeValue); + if (n === "true" || n === "1" || n === "yes" || n === "sim" || n === "y" || n === "s" || n === "t") { + return i; + } + } + + return -1; +} + +function getConstraintFieldName(constraint) { + try { + if (constraint.fieldName) return String(constraint.fieldName); + if (constraint._field) return String(constraint._field); + if (typeof constraint.getFieldName === "function") return String(constraint.getFieldName()); + } catch (e) {} + return ""; +} + +function getConstraintInitialValue(constraint) { + try { + if (constraint.initialValue != null) return trim(constraint.initialValue); + if (constraint._initialValue != null) return trim(constraint._initialValue); + if (typeof constraint.getInitialValue === "function") return trim(constraint.getInitialValue()); + } catch (e) {} + return ""; +} + +function trim(v) { + return String(v == null ? "" : v).trim(); +} + +function normalize(v) { + return trim(v).toLowerCase(); +} + +function cleanSearchValue(v) { + return trim(v).replace(/[%*_]/g, ""); +} + +function safeLogError(message) { + try { + log.error(String(message)); + } catch (e) {} +} diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js index 8367d3a..9c04ff5 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js @@ -13,61 +13,91 @@ function validateForm(form) { switch (atividade) { case EMISSAO: - - // log.info("Abertura de Chamado CAERN - Área do Solicitante: " + form.getValue("areaSolicitante")); - // if (form.getValue("areaSolicitante") == "") { - // message += getMessage("Área do Solicitante", 2, form); - // hasErros = true; - // } - - log.info("Por favor, anexar a nota fiscal" + form.getValue("fnAnexo_Nfe")); - if (form.getValue("fnAnexo_Nfe") == "") { - message += getMessage("Nota Fiscal", 3, form); + log.info("Validando rastreabilidade da emissao da NFe"); + var chaveNfe = String(form.getValue("chaveNfe") || "").replace(/\D/g, ""); + if (chaveNfe == "") { + message += getMessage("Chave de acesso da NFe", 1, form); hasErros = true; } - - // var tabelaAnexos = form.getChildrenIndexes("tabelaAnexoOcorrencia") - - // if (tabelaAnexos.length > 0) { - - // for (var i = 0; i < tabelaAnexos.length; i++) { - - // if (form.getValue("fnAnexoOcorrencia" + "" + tabelaAnexos[i]) == null || form.getValue("fnAnexoOcorrencia" + "" + tabelaAnexos[i]) == "") { - // message += getMessage("Anexo " + tabelaAnexos[i], 1, form) - // hasErros = true; - // } - - // } - - // } else { - - // message += getMessage("A tabela de Anexos esta vazia", 0, form) - // hasErros = true; - - // } - - break; - + if (chaveNfe != "" && chaveNfe.length != 44) { + message += "Campo \"Chave de acesso da NFe\" deve conter 44 digitos.
"; + hasErros = true; + } + if (form.getValue("invoiceIdNfeConsulta") == "") { + message += "Consulte a chave da NFe antes de enviar esta etapa.
"; + hasErros = true; + } + var qtdDivergenciasNfe = parseInt(String(form.getValue("qtdDivergenciasNfe") || "0"), 10); + if (!isNaN(qtdDivergenciasNfe) && qtdDivergenciasNfe > 0) { + message += "Existem " + qtdDivergenciasNfe + " divergencia(s) entre a solicitacao e a NFe.
"; + hasErros = true; + } + if (form.getValue("usuarioEmissorNfe") == "") { + message += getMessage("Usuário emissor da NFe", 1, form); + hasErros = true; + } + if (form.getValue("dataEmissaoNfe") == "") { + message += getMessage("Data da emissão", 1, form); + hasErros = true; + } + break; + case COLETA: - log.info("Por favor, registre o momento da coleta" + form.getValue("fdAnexo_Coleta")); - if (form.getValue("fdAnexo_Coleta") == "") { - message += getMessage("Coleta", 3, form); - hasErros = true; - } + log.info("Validando dados da coleta"); + if (form.getValue("motoristaColetaNome") == "") { + message += getMessage("Motorista responsável pela coleta", 1, form); + hasErros = true; + } + if (form.getValue("dataColeta") == "") { + message += getMessage("Data da coleta", 1, form); + hasErros = true; + } + var tipoMotoristaEntregaColeta = String(form.getValue("tipoMotoristaEntrega") || ""); + if (tipoMotoristaEntregaColeta == "") { + message += getMessage("Quem vai fazer a entrega", 2, form); + hasErros = true; + } + if (tipoMotoristaEntregaColeta == "outro" && form.getValue("motoristaEntregaLogin") == "") { + message += getMessage("Selecionar outro motorista", 1, form); + hasErros = true; + } + if (tipoMotoristaEntregaColeta == "mesmo" && form.getValue("motoristaColetaLogin") == "") { + message += getMessage("Login do motorista da coleta", 1, form); + hasErros = true; + } + break; case ENTREGA: - log.info("Por favor, registre o momento da entrega" + form.getValue("fdAnexo_Entrega")); - if (form.getValue("fdAnexo_Entrega") == "") { - message += getMessage("Entrega", 3, form); - hasErros = true; - } + log.info("Validando dados da entrega"); + if (form.getValue("motoristaEntregaLogin") == "") { + message += getMessage("Motorista da entrega definido na coleta", 1, form); + hasErros = true; + } + if (form.getValue("motoristaEntregaNome") == "") { + message += getMessage("Motorista responsável pela entrega", 1, form); + hasErros = true; + } + if (form.getValue("dataEntrega") == "") { + message += getMessage("Data da entrega", 1, form); + hasErros = true; + } + break; case RECEBIMENTO: - log.info("Por favor, registre o recebimento do material" + form.getValue("fdAnexo_recebimento")); - if (form.getValue("fdAnexo_recebimento") == "") { - message += getMessage("Recebimento", 3, form); - hasErros = true; - } + log.info("Validando recebimento e conferencia dos itens"); + var validacaoItens = String(form.getValue("validacaoItens") || ""); + if (validacaoItens == "") { + message += getMessage("Validação do recebimento", 2, form); + hasErros = true; + } + if ( + (validacaoItens == "divergencia" || validacaoItens == "naoEntregue" || validacaoItens == "incorreto") && + form.getValue("justificativaDecisaoItens") == "" + ) { + message += getMessage("Descreva a divergência encontrada", 1, form); + hasErros = true; + } + break; default: break; } @@ -99,4 +129,5 @@ function getMessage(texto, tipo, form) { } else { return 'A quantidade existente de campos "' + texto + '" deve ser maior do que 0.' } -} \ No newline at end of file +} + diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/excel.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/excel.js index 4645a51..e1d8155 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/excel.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/excel.js @@ -1,41 +1,102 @@ +var xlsxLoader = { + loading: false, + callbacks: [] +}; + function carregarItensDoExcel(fileInputId) { - const fileInput = document.getElementById(fileInputId); - const file = fileInput ? fileInput.files[0] : null; + var fileInput = document.getElementById(fileInputId); + var file = fileInput ? fileInput.files[0] : null; if (!file) { FLUIGC.toast({ title: 'Erro', message: 'Nenhum arquivo selecionado.', type: 'danger' }); return; } - if (typeof XLSX === "undefined") { - FLUIGC.toast({ title: 'Erro', message: 'Biblioteca XLSX nao carregada.', type: 'danger' }); + + showExcelLoading(); + ensureXlsxLibrary(function (err) { + if (err) { + hideExcelLoading(); + FLUIGC.toast({ title: 'Erro', message: 'Biblioteca XLSX indisponivel.', type: 'danger' }); + console.error("Erro ao carregar XLSX:", err); + return; + } + + processarArquivoExcel(file); + }); +} + +function ensureXlsxLibrary(callback) { + if (typeof XLSX !== "undefined") { + callback(); return; } - showExcelLoading(); + xlsxLoader.callbacks.push(callback); + if (xlsxLoader.loading) { + return; + } - const reader = new FileReader(); + xlsxLoader.loading = true; + loadXlsxScript(0); +} + +function loadXlsxScript(index) { + var urls = [ + "/portal/resources/js/xlsx.full.min.js", + "https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js" + ]; + + if (index >= urls.length) { + flushXlsxCallbacks(new Error("Biblioteca XLSX nao encontrada.")); + return; + } + + $.getScript(urls[index]) + .done(function () { + if (typeof XLSX === "undefined") { + loadXlsxScript(index + 1); + return; + } + flushXlsxCallbacks(); + }) + .fail(function () { + loadXlsxScript(index + 1); + }); +} + +function flushXlsxCallbacks(err) { + var callbacks = xlsxLoader.callbacks.splice(0, xlsxLoader.callbacks.length); + xlsxLoader.loading = false; + + for (var i = 0; i < callbacks.length; i++) { + callbacks[i](err); + } +} + +function processarArquivoExcel(file) { + var reader = new FileReader(); reader.onload = function (e) { // Permite o navegador renderizar o overlay antes de processar. setTimeout(function () { try { - const data = new Uint8Array(e.target.result); - const workbook = XLSX.read(data, { type: 'array' }); - const sheetName = workbook.SheetNames[0]; - const sheet = workbook.Sheets[sheetName]; - const linhas = XLSX.utils.sheet_to_json(sheet, { defval: "" }); + var data = new Uint8Array(e.target.result); + var workbook = XLSX.read(data, { type: 'array' }); + var sheetName = workbook.SheetNames[0]; + var sheet = workbook.Sheets[sheetName]; + var linhas = XLSX.utils.sheet_to_json(sheet, { defval: "" }); // Limpa a tabela (sem usar form) - const indices = $("input[id^='codigoItem___']").map(function () { + var indices = $("input[id^='codigoItem___']").map(function () { return $(this).attr("id").split("___")[1]; }).get(); $.each(indices, function (_, idx) { fnWdkRemoveChild(idx); }); - const linhasValidas = []; + var linhasValidas = []; $.each(linhas, function (_, item) { - const codigo = getCellByAliases(item, ["codigoItem", "codigo", "codItem", "sku", "code", "item"]); - const quantidade = getCellByAliases(item, ["quantidadeItem", "quantidade", "qtd", "qtde"]); - const descricao = getCellByAliases(item, ["descricao", "description", "desc"]); + var codigo = getCellByAliases(item, ["codigoItem", "codigo", "codItem", "sku", "code", "item"]); + var quantidade = getCellByAliases(item, ["quantidadeItem", "quantidade", "qtd", "qtde"]); + var descricao = getCellByAliases(item, ["descricao", "description", "desc"]); if (!codigo || !quantidade) { return; @@ -59,23 +120,33 @@ function carregarItensDoExcel(fileInputId) { // Adiciona os itens da planilha $.each(linhasValidas, function (_, item) { - const idx = wdkAddChild('tabelaItens'); - const zoomObj = window[`descricao___${idx}`]; + var idx = wdkAddChild('tabelaItens'); + var zoomObj = window["descricao___" + idx]; if (zoomObj && typeof zoomObj.setValue === "function") { zoomObj.setValue(item.codigo); } else { // Fallback visual caso o objeto zoom ainda nao esteja pronto no momento. - $(`#descricao___${idx}`).val(item.codigo); + $("#descricao___" + idx).val(item.codigo); } - $(`#quantidadeItem___${idx}`).val(item.quantidade); + $("#quantidadeItem___" + idx).val(item.quantidade); + $("#codigoProdutoItem___" + idx).val(item.codigo); - var descricaoFinal = item.descricao || buscarDescricaoProduto(item.codigo); + var produtoInfo = buscarProdutoPorCodigo(item.codigo); + if (produtoInfo.id) { + $("#productIdItem___" + idx).val(produtoInfo.id); + } + + var descricaoFinal = item.descricao || produtoInfo.descricao; if (descricaoFinal) { - $(`#codigoItem___${idx}`).val(descricaoFinal); + $("#codigoItem___" + idx).val(descricaoFinal); } }); + if (typeof processarConferenciaNfe === "function") { + processarConferenciaNfe(); + } + FLUIGC.toast({ title: 'Sucesso', message: linhasValidas.length + ' itens carregados com sucesso!', type: 'success' }); } catch (err) { FLUIGC.toast({ title: 'Erro', message: 'Falha ao processar Excel: ' + err.message, type: 'danger' }); @@ -118,36 +189,46 @@ function normalizeHeader(text) { .toLowerCase(); } -function buscarDescricaoProduto(codigo) { +function buscarProdutoPorCodigo(codigo) { try { if (typeof DatasetFactory === "undefined" || typeof ConstraintType === "undefined") { - return ""; + return { descricao: "", id: "" }; } var codigoTxt = String(codigo || "").trim(); - if (!codigoTxt) return ""; + if (!codigoTxt) return { descricao: "", id: "" }; var cCodigo = DatasetFactory.createConstraint("Code", codigoTxt, codigoTxt, ConstraintType.MUST); var ds = DatasetFactory.getDataset("ds_rgb_products", null, [cCodigo], null); if (!ds || !ds.values || !ds.values.length) { - return ""; + return { descricao: "", id: "" }; } for (var i = 0; i < ds.values.length; i++) { var row = ds.values[i] || {}; if (String(row.Code || "").trim() === codigoTxt) { - return String(row.descricao || row.Description || "").trim(); + return { + descricao: String(row.descricao || row.Description || "").trim(), + id: String(row.id || "").trim() + }; } } var first = ds.values[0] || {}; - return String(first.descricao || first.Description || "").trim(); + return { + descricao: String(first.descricao || first.Description || "").trim(), + id: String(first.id || "").trim() + }; } catch (e) { console.error("Erro ao buscar descricao por codigo:", e); - return ""; + return { descricao: "", id: "" }; } } +function buscarDescricaoProduto(codigo) { + return buscarProdutoPorCodigo(codigo).descricao; +} + function showExcelLoading() { var overlay = document.getElementById("excelLoadingOverlay"); if (overlay) { diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js index ab886ab..519e775 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js @@ -26,13 +26,41 @@ $(document).ready(function () { $('#btnRemoverExcel').hide(); }); + $('#chaveNfe').on('input', function () { + var key = normalizeNfeKey($(this).val()); + $(this).val(key); + clearNfeConsultaFields(); + setNfeFeedback("", "hidden"); + }); + + $('#btnConsultarChaveNfe').on('click', function () { + consultarChaveNfe(); + }); + + $(document).on("change", "input[name='tipoMotoristaEntrega']", function () { + applyMotoristaEntregaMode($(this).val(), false); + }); + + $(document).on("change", "#motoristaEntregaSelecionado", function () { + applySelectedMotoristaEntregaOption(); + }); + + $(document).on("input", "input[name^='quantidadeItem___']", function () { + processarConferenciaNfe(); + }); + if ($("#formMode").val() == "VIEW") { showAndBlock(["all"]); + $("#btnConsultarChaveNfe").prop("disabled", true).hide(); } else { //show the right fields var activity = $("#activity").val(); var requestDate = getCurrentDate(); + if (String(activity) !== "6") { + $("#btnConsultarChaveNfe").prop("disabled", true).hide(); + } + $(".activity").hide(); $(".activity-" + activity).show(); @@ -51,10 +79,14 @@ $(document).ready(function () { updt_line(); } else if (activity == 6) { showAndBlock([0, 4]); - $("#userValidacaoCompras").val($("#currentUserName").val()); - $("#dataValidacaoCompras").val( - requestDate[0] + " - " + requestDate[1] - ); + if ($("#usuarioEmissorNfe").val() == "") { + $("#usuarioEmissorNfe").val($("#currentUserName").val()); + } + if ($("#dataEmissaoNfe").val() == "") { + $("#dataEmissaoNfe").val( + requestDate[0] + " - " + requestDate[1] + ); + } if ($("#justificativaDecisaoGestor").val() == "") { $(".justificativa-activity-4").hide(); @@ -66,6 +98,9 @@ $(document).ready(function () { $("#dataAprovCompras").val( requestDate[0] + " - " + requestDate[1] ); + $("#blocoTipoMotoristaEntrega, #blocoOutroMotoristaEntrega").hide(); + $("input[name='tipoMotoristaEntrega']").prop("disabled", true); + $("#motoristaEntregaSelecionado").prop("disabled", true); showAndBlock([0, 4, 6]); if ($("#justificativaDecisaoGestor").val() == "") { @@ -81,7 +116,21 @@ $(document).ready(function () { $("#dataRealizacaoCompras").val( requestDate[0] + " - " + requestDate[1] ); - showAndBlock([0, 4, 6, 57]); + if ($("#motoristaColetaNome").val() == "") { + $("#motoristaColetaNome").val($("#currentUserName").val()); + } + if ($("#motoristaColetaLogin").val() == "") { + $("#motoristaColetaLogin").val($("#currentUserId").val()); + } + if ($("#dataColeta").val() == "") { + $("#dataColeta").val(requestDate[0] + " " + requestDate[1]); + } + initMotoristaEntregaEscolha(); + $("#blocoTipoMotoristaEntrega").show(); + $("input[name='tipoMotoristaEntrega']").prop("disabled", false); + $("#motoristaEntregaSelecionado").prop("disabled", false); + // Mantem apenas etapas anteriores bloqueadas; card de coleta e entrega estao separados. + showAndBlock([0, 4, 6]); if ($("#justificativaDecisaoGestor").val() == "") { $(".justificativa-activity-4").hide(); @@ -111,9 +160,11 @@ $(document).ready(function () { $("input[name=validacaoItens]").on("change", function () { $(".justificativaDecisaoItens").hide(); + var validacaoItensSelecionada = $("input[name=validacaoItens]:checked").val(); if ( - $("input[name=validacaoItens]:checked").val() == "incorreto" || - $("input[name=validacaoItens]:checked").val() == "naoEntregue" + validacaoItensSelecionada == "divergencia" || + validacaoItensSelecionada == "incorreto" || + validacaoItensSelecionada == "naoEntregue" ) { $(".justificativaDecisaoItens").show(); } @@ -146,6 +197,7 @@ $(document).ready(function () { invisibleBtnUpload("fdAnexo_Coleta"); invisibleBtnUpload("fdAnexo_Entrega"); invisibleBtnUpload("fdAnexo_recebimento"); + processarConferenciaNfe(); // gerarTabelaCotacaoIndica("tabelaCotacaoIndica", "tabelaItens"); @@ -238,6 +290,589 @@ function getCurrentDate() { return currentDate; } +function initMotoristaEntregaEscolha() { + var escolha = String($("input[name='tipoMotoristaEntrega']:checked").val() || ""); + if (!escolha) { + var coletaLogin = String($("#motoristaColetaLogin").val() || "").trim(); + var entregaLogin = String($("#motoristaEntregaLogin").val() || "").trim(); + if (entregaLogin && coletaLogin && entregaLogin !== coletaLogin) { + escolha = "outro"; + } else { + escolha = $("#motoristaColetaNome").val() ? "mesmo" : "outro"; + } + $("input[name='tipoMotoristaEntrega'][value='" + escolha + "']").prop("checked", true); + } + applyMotoristaEntregaMode(escolha, true); +} + +function applyMotoristaEntregaMode(mode, keepValues) { + var escolha = String(mode || ""); + var blocoOutro = $("#blocoOutroMotoristaEntrega"); + if (!blocoOutro.length) return; + + if (escolha === "outro") { + blocoOutro.show(); + loadMotoristasEntregaSelect(false); + if (!keepValues) { + $("#motoristaEntregaNome").val(""); + $("#motoristaEntregaLogin").val(""); + clearZoomField("motoristaEntregaSelecionado"); + } else { + syncMotoristaEntregaSelectFromHidden(); + } + return; + } + + blocoOutro.hide(); + if (escolha === "mesmo") { + var coletaNome = String($("#motoristaColetaNome").val() || "").trim(); + var coletaLogin = String($("#motoristaColetaLogin").val() || "").trim(); + if (coletaNome) $("#motoristaEntregaNome").val(coletaNome); + if (coletaLogin) $("#motoristaEntregaLogin").val(coletaLogin); + } +} + +function clearZoomField(fieldId) { + try { + if (window[fieldId] && typeof window[fieldId].clear === "function") { + window[fieldId].clear(); + } + } catch (e) {} + + try { + if (window[fieldId] && typeof window[fieldId].setValue === "function") { + window[fieldId].setValue(""); + } + } catch (e2) {} + + $("#" + fieldId).val(""); +} + +var MOTORISTAS_GROUP_ID = "Motoristas"; +var motoristasEntregaCache = null; +var motoristasEntregaLoading = false; + +function loadMotoristasEntregaSelect(forceReload) { + var select = $("#motoristaEntregaSelecionado"); + if (!select.length) return; + + if (!forceReload && motoristasEntregaCache && motoristasEntregaCache.length) { + renderMotoristasEntregaOptions(motoristasEntregaCache); + return; + } + + if (motoristasEntregaLoading) return; + + motoristasEntregaLoading = true; + + var requestPayload = { + name: "ds_motoristas_grupo", + fields: null, + constraints: [{ + _field: "GROUP_ID", + _initialValue: MOTORISTAS_GROUP_ID, + _finalValue: MOTORISTAS_GROUP_ID, + _type: 1 + }], + order: null + }; + + $.ajax({ + type: "POST", + url: "/api/public/ecm/dataset/datasets/", + contentType: "application/json", + dataType: "json", + data: JSON.stringify(requestPayload) + }).done(function (response) { + var values = ((((response || {}).content || {}).values) || []); + motoristasEntregaCache = normalizeMotoristasEntregaRows(values); + renderMotoristasEntregaOptions(motoristasEntregaCache); + }).fail(function (xhr) { + console.error("Falha ao carregar motoristas do dataset:", xhr); + motoristasEntregaCache = []; + renderMotoristasEntregaOptions([]); + }).always(function () { + motoristasEntregaLoading = false; + }); +} + +function normalizeMotoristasEntregaRows(values) { + var out = []; + var map = {}; + + for (var i = 0; i < values.length; i++) { + var row = values[i] || {}; + var colleagueId = String(row.COLLEAGUE_ID || row.colleagueId || row.colleagueid || "").trim(); + if (!colleagueId) continue; + if (map[colleagueId]) continue; + map[colleagueId] = true; + + out.push({ + COLLEAGUE_ID: colleagueId, + NOME: String(row.NOME || row.colleagueName || row.nome || "").trim(), + LOGIN: String(row.LOGIN || row.login || "").trim(), + EMAIL: String(row.EMAIL || row.mail || row.email || "").trim() + }); + } + + out.sort(function (a, b) { + var aNome = (a.NOME || a.LOGIN || a.COLLEAGUE_ID).toLowerCase(); + var bNome = (b.NOME || b.LOGIN || b.COLLEAGUE_ID).toLowerCase(); + return aNome < bNome ? -1 : (aNome > bNome ? 1 : 0); + }); + + return out; +} + +function renderMotoristasEntregaOptions(rows) { + var select = $("#motoristaEntregaSelecionado"); + if (!select.length) return; + + var selectedValue = String($("#motoristaEntregaLogin").val() || select.val() || "").trim(); + + select.empty(); + select.append($("").val("").text("Selecione o motorista")); + + for (var i = 0; i < rows.length; i++) { + var row = rows[i]; + var nome = String(row.NOME || row.LOGIN || row.COLLEAGUE_ID); + var label = row.LOGIN ? (nome + " (" + row.LOGIN + ")") : nome; + var option = $("") + .val(row.COLLEAGUE_ID) + .text(label) + .attr("data-nome", nome) + .attr("data-login", String(row.LOGIN || "")); + select.append(option); + } + + if (selectedValue) { + select.val(selectedValue); + } + + if (!select.val()) { + // Limpa selecao visual quando o valor salvo nao existe mais no dataset. + select.val(""); + } + + applySelectedMotoristaEntregaOption(); +} + +function syncMotoristaEntregaSelectFromHidden() { + var select = $("#motoristaEntregaSelecionado"); + if (!select.length) return; + + var storedId = String($("#motoristaEntregaLogin").val() || "").trim(); + if (!storedId) { + select.val(""); + return; + } + + select.val(storedId); + if (select.val()) { + applySelectedMotoristaEntregaOption(); + } +} + +function applySelectedMotoristaEntregaOption() { + var select = $("#motoristaEntregaSelecionado"); + if (!select.length) return; + + var selectedId = String(select.val() || "").trim(); + if (!selectedId) { + if (String($("input[name='tipoMotoristaEntrega']:checked").val() || "") === "outro") { + $("#motoristaEntregaNome").val(""); + $("#motoristaEntregaLogin").val(""); + } + return; + } + + var option = select.find("option:selected"); + var nome = String(option.attr("data-nome") || option.text() || "").trim(); + + $("#motoristaEntregaLogin").val(selectedId); + $("#motoristaEntregaNome").val(nome); + $("#tipoMotoristaEntregaOutro").prop("checked", true); +} + +function normalizeNfeKey(value) { + return String(value == null ? "" : value).replace(/\D/g, "").substring(0, 44); +} + +function clearNfeConsultaFields() { + $("#numeroNfeConsulta").val(""); + $("#serieNfeConsulta").val(""); + $("#dataEmissaoApiNfe").val(""); + $("#situacaoNfeConsulta").val(""); + $("#fornecedorNfeConsulta").val(""); + $("#valorNfeConsulta").val(""); + $("#dataEntradaNfeConsulta").val(""); + $("#itensNfeConsulta").val(""); + $("#operacaoNfeConsulta").val(""); + $("#lojaNfeConsulta").val(""); + $("#invoiceIdNfeConsulta").val(""); + $("#storeIdNfeConsulta").val(""); + $("#itensNfeJson").val("[]"); + $("#qtdDivergenciasNfe").val("0"); + renderTabelaConferencia([], 0, 0, "Consulte a chave da NFe para gerar o confronto dos itens.", "info"); +} + +function setNfeFeedback(message, type) { + var feedback = $("#consultaNfeFeedback"); + if (!feedback.length) { + return; + } + + feedback.removeClass("alert-success alert-danger alert-info alert-warning"); + + if (!message || type === "hidden") { + feedback.hide().text(""); + return; + } + + if (type === "success") { + feedback.addClass("alert-success"); + } else if (type === "warning") { + feedback.addClass("alert-warning"); + } else if (type === "info") { + feedback.addClass("alert-info"); + } else { + feedback.addClass("alert-danger"); + } + + feedback.text(message).show(); +} + +function formatNfeCurrency(value) { + var textValue = String(value == null ? "" : value).trim(); + if (textValue === "") { + return ""; + } + + var numberValue = parseFloat(textValue.replace(",", ".")); + if (isNaN(numberValue)) { + return textValue; + } + + try { + return numberValue.toLocaleString("pt-BR", { style: "currency", currency: "BRL" }); + } catch (e) { + return textValue; + } +} + +function fillNfeConsultaFields(row) { + var emissionDate = String(row.emissionDate || ""); + + $("#numeroNfeConsulta").val(String(row.invoiceNumber || "")); + $("#serieNfeConsulta").val(String(row.serie || "")); + $("#dataEmissaoApiNfe").val(emissionDate); + $("#situacaoNfeConsulta").val(String(row.situation || "")); + $("#fornecedorNfeConsulta").val(String(row.supplierName || "")); + $("#valorNfeConsulta").val(formatNfeCurrency(row.documentValue)); + $("#dataEntradaNfeConsulta").val(String(row.updatedAt || "")); + $("#itensNfeConsulta").val(String(row.itemCount || "")); + $("#operacaoNfeConsulta").val(String(row.fiscalOperationDescription || "")); + $("#lojaNfeConsulta").val(String(row.storeId || "")); + $("#invoiceIdNfeConsulta").val(String(row.invoiceId || "")); + $("#storeIdNfeConsulta").val(String(row.storeId || "")); + $("#itensNfeJson").val(String(row.itensJson || "[]")); + + if (emissionDate) { + $("#dataEmissaoNfe").val(emissionDate); + } + + processarConferenciaNfe(); +} + +function processarConferenciaNfe() { + var nfeItems = parseItensNfeJson(); + if (nfeItems.length === 0) { + $("#qtdDivergenciasNfe").val("0"); + renderTabelaConferencia([], 0, 0, "Consulte a chave da NFe para gerar o confronto dos itens.", "info"); + return; + } + + var solicitacaoMap = buildSolicitacaoMap(); + var nfeMap = buildNfeMap(nfeItems); + var allKeys = mergeKeys(solicitacaoMap, nfeMap); + var rows = []; + var divergencias = 0; + + for (var i = 0; i < allKeys.length; i++) { + var key = allKeys[i]; + var req = solicitacaoMap[key] || { qty: 0, label: key }; + var nfe = nfeMap[key] || { qty: 0, label: key }; + + var status = "OK"; + if (req.qty === 0 && nfe.qty > 0) { + status = "Somente NFe"; + } else if (nfe.qty === 0 && req.qty > 0) { + status = "Somente solicitacao"; + } else if (Math.abs(req.qty - nfe.qty) > 0.00001) { + status = "Quantidade divergente"; + } + + if (status !== "OK") { + divergencias++; + } + + rows.push({ + key: req.label || nfe.label || key, + requestedQty: req.qty, + nfeQty: nfe.qty, + status: status + }); + } + + $("#qtdDivergenciasNfe").val(String(divergencias)); + + var resumo = "Conferencia finalizada: " + rows.length + " item(ns), " + divergencias + " divergencia(s)."; + var resumoType = divergencias > 0 ? "warning" : "success"; + renderTabelaConferencia(rows, rows.length, divergencias, resumo, resumoType); +} + +function parseItensNfeJson() { + var raw = String($("#itensNfeJson").val() || "[]"); + try { + var parsed = JSON.parse(raw); + return parsed instanceof Array ? parsed : []; + } catch (e) { + return []; + } +} + +function buildSolicitacaoMap() { + var out = {}; + $("input[name^='quantidadeItem___']").each(function () { + var name = $(this).attr("name") || ""; + var indice = name.split("___")[1]; + if (!indice) return; + + var qty = toFloatSafe($(this).val()); + if (qty <= 0) return; + + var productId = String($("#productIdItem___" + indice).val() || "").trim(); + var code = resolveSolicitacaoItemCode(indice, $(this)); + var descricao = String($("#codigoItem___" + indice).val() || "").trim(); + + var key = resolveConferenciaKey(productId, code, "ROW:" + indice); + var label = productId ? ("PID " + productId) : (code || descricao || ("Linha " + indice)); + + if (!out[key]) { + out[key] = { qty: 0, label: label }; + } + out[key].qty += qty; + }); + return out; +} + +function resolveSolicitacaoItemCode(indice, qtyInput) { + var code = String($("#codigoProdutoItem___" + indice).val() || "").trim(); + if (code) return normalizeCodigoComparacao(code); + + code = String($("#descricao___" + indice).val() || "").trim(); + if (code) return normalizeCodigoComparacao(code); + + var row = qtyInput && qtyInput.length ? qtyInput.closest("tr") : $(); + if (row.length) { + var byName = findFirstFilledValue(row.find("input[name='descricao___" + indice + "']")); + if (byName) return normalizeCodigoComparacao(byName); + + var anyDescricao = findFirstFilledValue(row.find("input[name^='descricao']")); + if (anyDescricao) return normalizeCodigoComparacao(anyDescricao); + + var byIdLike = findFirstFilledValue(row.find("input[id*='descricao']")); + if (byIdLike) return normalizeCodigoComparacao(byIdLike); + + var codigoCellInputs = row.find("td").eq(1).find("input,select,textarea"); + var fromCodigoCell = findFirstFilledValue(codigoCellInputs); + if (fromCodigoCell) return normalizeCodigoComparacao(fromCodigoCell); + + // Em modo bloqueado/view, o Zoom pode renderizar apenas texto em span/div. + var codigoCell = row.find("td").eq(1); + var zoomRendered = findFirstFilledText(codigoCell.find( + ".select2-selection__rendered, .select2-chosen, .zoom-value, .zoom-span, span, div" + )); + if (zoomRendered) return normalizeCodigoComparacao(zoomRendered); + + // Fallback final: texto bruto da célula. + var rawCellText = String(codigoCell.text() || "").trim(); + if (rawCellText) return normalizeCodigoComparacao(rawCellText); + } + + return ""; +} + +function findFirstFilledValue(elements) { + if (!elements || !elements.length) return ""; + + for (var i = 0; i < elements.length; i++) { + var $el = $(elements[i]); + var val = String($el.val() || "").trim(); + if (!val) { + val = String($el.attr("value") || "").trim(); + } + if (!val) { + val = String($el.attr("data-value") || "").trim(); + } + if (val) return val; + } + return ""; +} + +function findFirstFilledText(elements) { + if (!elements || !elements.length) return ""; + + for (var i = 0; i < elements.length; i++) { + var txt = String($(elements[i]).text() || "").trim(); + if (txt) return txt; + } + return ""; +} + +function normalizeCodigoComparacao(value) { + var raw = String(value || "").trim(); + if (!raw) return ""; + + // Zoom pode trazer "75655 - DESCRICAO"; para conferencia usamos o primeiro token. + var firstToken = raw.split(" - ")[0].split(" | ")[0].trim(); + return firstToken || raw; +} + +function buildNfeMap(items) { + var out = {}; + for (var i = 0; i < items.length; i++) { + var item = items[i] || {}; + var qty = toFloatSafe(item.quantity); + if (qty <= 0) continue; + + var productId = String(item.productId || "").trim(); + var code = String(item.code || "").trim(); + var key = resolveConferenciaKey(productId, code, "NFE:" + i); + var label = productId ? ("PID " + productId) : (code || ("Item NFe " + (i + 1))); + + if (!out[key]) { + out[key] = { qty: 0, label: label }; + } + out[key].qty += qty; + } + return out; +} + +function resolveConferenciaKey(productId, code, fallback) { + var pid = String(productId || "").trim(); + if (pid) { + return "ITEM:" + pid; + } + + var cod = String(code || "").trim(); + if (cod) { + return "ITEM:" + cod; + } + + return String(fallback || ""); +} + +function mergeKeys(a, b) { + var obj = {}; + for (var ka in a) obj[ka] = true; + for (var kb in b) obj[kb] = true; + return Object.keys(obj); +} + +function renderTabelaConferencia(rows, totalItens, divergencias, mensagem, tipo) { + var tbody = $("#tabelaConferenciaNfeBody"); + var resumo = $("#resumoConferenciaNfe"); + if (!tbody.length || !resumo.length) return; + + var html = ""; + if (!rows || rows.length === 0) { + html = "Sem conferencia."; + } else { + for (var i = 0; i < rows.length; i++) { + var row = rows[i]; + var rowClass = row.status === "OK" ? "" : " class='danger'"; + html += "" + + "" + escapeHtml(row.key) + "" + + "" + formatConferenciaNumero(row.requestedQty) + "" + + "" + formatConferenciaNumero(row.nfeQty) + "" + + "" + escapeHtml(row.status) + "" + + ""; + } + } + tbody.html(html); + + var typeClass = "alert-info"; + if (tipo === "success") typeClass = "alert-success"; + if (tipo === "warning") typeClass = "alert-warning"; + if (tipo === "danger" || tipo === "error") typeClass = "alert-danger"; + + resumo.removeClass("alert-info alert-success alert-warning alert-danger"); + resumo.addClass(typeClass); + resumo.text(mensagem || ("Conferencia: " + totalItens + " item(ns), " + divergencias + " divergencia(s).")); +} + +function toFloatSafe(value) { + var text = String(value == null ? "" : value).replace(",", ".").trim(); + var n = parseFloat(text); + return isNaN(n) ? 0 : n; +} + +function formatConferenciaNumero(value) { + var n = toFloatSafe(value); + return String(n).indexOf(".") >= 0 ? n.toFixed(2) : String(n); +} + +function escapeHtml(value) { + return String(value == null ? "" : value) + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/\"/g, """) + .replace(/'/g, "'"); +} + +function consultarChaveNfe() { + var key = normalizeNfeKey($("#chaveNfe").val()); + $("#chaveNfe").val(key); + clearNfeConsultaFields(); + + if (key.length !== 44) { + setNfeFeedback("Informe uma chave com 44 digitos para consultar.", "warning"); + return; + } + + setNfeFeedback("Consultando chave da NFe...", "info"); + + try { + var constraint = DatasetFactory.createConstraint("key", key, key, ConstraintType.MUST); + var dataset = DatasetFactory.getDataset("ds_fiscal_invoice_by_keys", null, [constraint], null); + + if (!dataset || !dataset.values || dataset.values.length === 0) { + setNfeFeedback("Nao foi possivel consultar a NFe no momento.", "error"); + return; + } + + var row = dataset.values[0] || {}; + var success = String(row.success || "").toLowerCase() === "true"; + + if (!success) { + setNfeFeedback(String(row.message || "NFe nao encontrada para a chave informada."), "error"); + return; + } + + fillNfeConsultaFields(row); + + if ($("#invoiceIdNfeConsulta").val() === "") { + setNfeFeedback("A consulta retornou sem identificador tecnico da NFe.", "error"); + return; + } + + setNfeFeedback("NFe localizada e vinculada a solicitacao.", "success"); + } catch (e) { + setNfeFeedback("Erro ao consultar chave da NFe: " + e, "error"); + } +} var beforeSendValidate = function (numState, nextState) { $(".errorValidate").removeClass("errorValidate"); if (numState == 0 || numState == 1) { @@ -288,16 +923,71 @@ var beforeSendValidate = function (numState, nextState) { } else if (numState == 4) { // } else if (numState == 6) { - // + var chaveNfe = normalizeNfeKey($("#chaveNfe").val()); + $("#chaveNfe").val(chaveNfe); + + if (chaveNfe == "") { + $("#chaveNfe").parent("div").addClass("errorValidate"); + throw "'Chave de acesso da NFe' e obrigatoria."; + } + + if (chaveNfe.length !== 44) { + $("#chaveNfe").parent("div").addClass("errorValidate"); + throw "'Chave de acesso da NFe' deve conter 44 digitos."; + } + + if ($("#invoiceIdNfeConsulta").val() == "") { + $("#chaveNfe").parent("div").addClass("errorValidate"); + throw "Consulte a chave da NFe antes de enviar a etapa."; + } + + var qtdDivergencias = parseInt($("#qtdDivergenciasNfe").val() || "0", 10); + if (!isNaN(qtdDivergencias) && qtdDivergencias > 0) { + throw "Existem " + qtdDivergencias + " divergencia(s) entre itens solicitados e itens da NFe."; + } + } else if (numState == 31) { + if ($("#motoristaColetaNome").val() == "") { + throw "'Motorista responsável pela coleta' é obrigatório."; + } + if ($("#dataColeta").val() == "") { + throw "'Data da coleta' é obrigatória."; + } + var tipoMotoristaEntrega31 = $("input[name='tipoMotoristaEntrega']:checked").val(); + if (!tipoMotoristaEntrega31) { + throw "Informe quem vai fazer a entrega (mesmo motorista da coleta ou outro)."; + } + if (tipoMotoristaEntrega31 === "mesmo") { + if ($("#motoristaColetaLogin").val() == "") { + throw "Nao foi encontrado login do motorista da coleta para enviar a etapa de entrega."; + } + $("#motoristaEntregaNome").val($("#motoristaColetaNome").val()); + $("#motoristaEntregaLogin").val($("#motoristaColetaLogin").val()); + } else if ($("#motoristaEntregaLogin").val() == "") { + throw "Selecione o outro motorista responsavel pela entrega."; + } + } else if (numState == 57) { + if ($("#motoristaEntregaLogin").val() == "") { + throw "Motorista da entrega nao definido. Configure na etapa de coleta."; + } + + if ($("#motoristaEntregaNome").val() == "") { + throw "'Motorista responsável pela entrega' é obrigatório."; + } + if ($("#dataEntrega").val() == "") { + var entregaNow = getCurrentDate(); + $("#dataEntrega").val(entregaNow[0] + " " + entregaNow[1]); + } + if ($("#dataEntrega").val() == "") { + throw "'Data da entrega' é obrigatória."; + } } else if (numState == 18) { - if ( - $("input[name='validacaoItens']:checked").val() == "" || - $("input[name='validacaoItens']:checked").val() == undefined - ) { - throw "'Consegue resolver?' é obrigatório."; + var validacaoItens = $("input[name='validacaoItens']:checked").val(); + if (validacaoItens == "" || validacaoItens == undefined) { + throw "'Validação do recebimento' é obrigatória."; } else if ( - $("input[name='validacaoItens']:checked").val() == "naoEntregue" || - $("input[name='validacaoItens']:checked").val() == "incorreto" + validacaoItens == "divergencia" || + validacaoItens == "naoEntregue" || + validacaoItens == "incorreto" ) { if ($("#justificativaDecisaoItens").val() == "") { $("#justificativaDecisaoItens") @@ -358,24 +1048,38 @@ function setSelectedZoomItem(selectedItem) { // } if (name_item == "centroCusto") { - $("#gestorNome").val(selectedItem["gestorCentroCusto"]); - $("#gestorEmail").val(selectedItem["emailGestor"]); - $("#gestor_cc").val(selectedItem["idGestor"]); + $("#gestorNome").val(selectedItem["RESPONSAVEL_LOJA"] || ""); + $("#gestorEmail").val(selectedItem["emailGestor"] || ""); + $("#gestor_cc").val(selectedItem["COLLEAGUE_ID"] || ""); } if (name_item == "estabelecimento") { - $("#gestorNomeE").val(selectedItem["gestorCentroCusto"]); - $("#gestorEmailE").val(selectedItem["emailGestor"]); - $("#gestor_cce").val(selectedItem["idGestor"]); + $("#gestorNomeE").val(selectedItem["RESPONSAVEL_LOJA"] || ""); + $("#gestorEmailE").val(selectedItem["emailGestor"] || ""); + $("#gestor_cce").val(selectedItem["COLLEAGUE_ID"] || ""); } if (name_item == "userSolicitante") { $("#emailSolicitante").val(selectedItem.mail); } + + if (name_item == "motoristaEntregaSelecionado") { + var motoristaNome = selectedItem["NOME"] || selectedItem["colleagueName"] || selectedItem["LOGIN"] || selectedItem["login"] || ""; + var motoristaColleagueId = selectedItem["COLLEAGUE_ID"] || selectedItem["colleaguePK.colleagueId"] || ""; + $("#motoristaEntregaNome").val(String(motoristaNome || "")); + $("#motoristaEntregaLogin").val(String(motoristaColleagueId || "")); + $("#tipoMotoristaEntregaOutro").prop("checked", true); + applyMotoristaEntregaMode("outro", true); + } if (name_item == "descricao") { var itemDescricao = selectedItem["descricao"] || selectedItem["Description"] || ""; + var itemCode = selectedItem["Code"] || selectedItem["sku"] || ""; + var itemProductId = selectedItem["id"] || selectedItem["productId"] || ""; $("#codigoItem" + "___" + indice).val(itemDescricao); + $("#codigoProdutoItem" + "___" + indice).val(itemCode); + $("#productIdItem" + "___" + indice).val(itemProductId); + processarConferenciaNfe(); } } @@ -396,17 +1100,32 @@ function removedZoomItem(removedItem) { $("#gestorNome").val(""); $("#gestorEmail").val(""); $("#gestor_cc").val(""); + } else if (name_item == "estabelecimento") { + $("#gestorNomeE").val(""); + $("#gestorEmailE").val(""); + $("#gestor_cce").val(""); + } else if (name_item == "motoristaEntregaSelecionado") { + if ($("input[name='tipoMotoristaEntrega']:checked").val() === "outro") { + $("#motoristaEntregaNome").val(""); + $("#motoristaEntregaLogin").val(""); + } } else if (~name_item.indexOf("___")) { var linha = name_item.split("___"); if (linha[0] == "descricao") { $("#codigoItem___" + linha[1]).val(""); + $("#codigoProdutoItem___" + linha[1]).val(""); + $("#productIdItem___" + linha[1]).val(""); $("#quantidadeItem___" + linha[1]).val(""); + processarConferenciaNfe(); } } if (name_item == "descricao") { $("#codigoItem" + "___" + indice).val(""); + $("#codigoProdutoItem" + "___" + indice).val(""); + $("#productIdItem" + "___" + indice).val(""); + processarConferenciaNfe(); } } @@ -425,6 +1144,7 @@ function updt_line() { function remove_row(element) { fnWdkRemoveChild(element); updt_line(); + processarConferenciaNfe(); } @@ -767,26 +1487,40 @@ function btnState(idInput, acao, btn){ */ function displayBtnFiles(){ try{ + var mode = getFormMode(); + var allowedInputs = getAllowedAttachmentInputs(); $('.componentAnexo').each(function(i, element) { let inputFile = $(element).find(".inputAnexo") + let inputId = inputFile.attr("id") || ""; + let normalizedInputId = inputId.indexOf("_") === 0 ? inputId.substring(1) : inputId; let btnUpFile = $(element).find(".btnUpFile"); let btnViewerFile = $(element).find(".btnViewerFile"); let btnDownloadFile = $(element).find(".btnDownloadFile"); + let canUploadHere = allowedInputs.indexOf(normalizedInputId) >= 0; - if(getFormMode() == "VIEW"){ + if(mode == "VIEW"){ btnUpFile.remove(); if(inputFile.val() != ""){ btnViewerFile.prop("disabled", false); btnViewerFile.show() + btnDownloadFile.prop("disabled", false); + btnDownloadFile.show() } } - if(getFormMode() == "MOD" && inputFile.val() != ""){ - btnUpFile.remove(); - // btnState(inputFile[0].id, "delete", "viewer") - btnViewerFile.prop("disabled", false); - btnViewerFile.show() - btnDownloadFile.prop("disabled", false); - btnDownloadFile.show() + if(mode == "MOD"){ + if(inputFile.val() != ""){ + if(canUploadHere){ + btnState(inputId, "delete", "viewer"); + } else { + btnUpFile.remove(); + btnViewerFile.prop("disabled", false); + btnViewerFile.show() + btnDownloadFile.prop("disabled", false); + btnDownloadFile.show() + } + } else if(!canUploadHere){ + btnUpFile.remove(); + } } }); }catch(e){ @@ -795,7 +1529,35 @@ function displayBtnFiles(){ } } +function getAllowedAttachmentInputs() { + var mode = getFormMode(); + var activity = String($("#activity").val() || ""); + + if (mode === "VIEW") { + return []; + } + + if (mode !== "MOD" && mode !== "ADD") { + return []; + } + + if (activity === "6") { + return ["fnAnexo_Nfe"]; + } + if (activity === "31") { + return ["fdAnexo_Coleta"]; + } + if (activity === "57") { + return ["fdAnexo_Entrega"]; + } + if (activity === "18") { + return ["fdAnexo_recebimento"]; + } + + return []; +} + /** * Remove o botão de upload/delete * @param {String} inputFile Parâmetro obrigatório, Id do campo @@ -804,7 +1566,11 @@ function displayBtnFiles(){ */ function invisibleBtnUpload(inputFile){ try{ - if(getFormMode() == "MOD" || getFormMode() == "VIEW"){ + var mode = getFormMode(); + var allowedInputs = getAllowedAttachmentInputs(); + var canUploadHere = allowedInputs.indexOf(inputFile) >= 0; + + if(mode == "VIEW" || ((mode == "MOD" || mode == "ADD") && !canUploadHere)){ if($(`#_${inputFile}`).length){ let btnUpFile = $(`#_${inputFile}`).parent().parent().find(".btnUpFile"); btnUpFile.remove(); @@ -925,3 +1691,4 @@ window.parent.$("#ecm-navigation-inputFile-clone").on('change', function () { carregarItensDoExcel("excelUpload"); } }); + diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html index 11ae815..d1d5740 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html @@ -251,7 +251,9 @@ 'placeholder':'Selecione a filial de origem', 'fields':[ {'field':'PDV','label':'Loja'}, - {'field':'RESPONSAVEL_LOJA','label':'Gestor'} + {'field':'RESPONSAVEL_LOJA','label':'Gestor'}, + {'field':'LOGIN_LOJA','label':'Login','visible':'false'}, + {'field':'COLLEAGUE_ID','label':'Colleague','visible':'false'} ] }" />
@@ -264,7 +266,9 @@ 'placeholder':'Selecione a filial de destino', 'fields':[ {'field':'PDV','label':'Loja'}, - {'field':'RESPONSAVEL_LOJA','label':'Gestor'} + {'field':'RESPONSAVEL_LOJA','label':'Gestor'}, + {'field':'LOGIN_LOJA','label':'Login','visible':'false'}, + {'field':'COLLEAGUE_ID','label':'Colleague','visible':'false'} ] }" />
@@ -308,7 +312,8 @@ 'fields':[ {'field':'Code','label':'Codigo'}, {'field':'Description','label':'Descricao'}, - {'field':'descricao','label':'Descricao item'} + {'field':'descricao','label':'Descricao item'}, + {'field':'id','label':'ID','visible':'false'} ] }" /> @@ -317,6 +322,8 @@ + + +
+
+
+
+ +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+

Conferência da NFe x Solicitação

+
+ Consulte a chave da NFe para gerar o confronto dos itens. +
+
+ + + + + + + + + + + + + + +
Chave de comparaçãoQtd. solicitadaQtd. NFeStatus
Sem conferência.
+
+
+
+ -
- - - - - +
+

Validação do Recebimento

+
+
+ +
+ + +
+
+
+ +
+ +
+

Rastreabilidade de Motorista - Coleta

+
+
+ + +
+
+ + +
+
+
+
+ +
+ + +
+
+
+ +
+ +
+

Rastreabilidade de Motorista - Entrega

+
+
+ + +
+
+ + +
-
- - - - - -
- -
- - - - - -
- -
- - - - - -
@@ -386,17 +535,18 @@ + + + + + +
- - + diff --git a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml index 340a6d9..1be2345 100644 --- a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml +++ b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml @@ -29,7 +29,7 @@ 1 Transferência Ginseng - 42 + 46 590 @@ -230,7 +230,7 @@ true true false - 1370 + 1170 270 0 0 @@ -282,8 +282,8 @@ true true false - 1520 - 490 + 1410 + 479 0 0 false @@ -318,7 +318,8 @@ false 0 - + Pool Grupo + <AssignmentController><Group>Motoristas</Group></AssignmentController> 1 false false @@ -333,7 +334,7 @@ true true false - 870 + 850 679 0 0 @@ -369,7 +370,8 @@ false 0 - + Campo Formulário + <AssignmentController><FormField>motoristaEntregaLogin</FormField></AssignmentController> 1 false true @@ -384,7 +386,7 @@ true false false - 1280 + 1100 679 0 0 @@ -446,7 +448,7 @@ 0 true - 1540 + 1430 250 false 1 @@ -456,56 +458,6 @@ false - - - 1 - Transferência Ginseng - 1 - 62 - - Validar Coleta - Validar Coleta - false - false - false - - 0 - true - 760 - 470 - false - 1 - 120 - 0 - 0 - - false - - - - 1 - Transferência Ginseng - 1 - 90 - - Validar Entrega - Validar Entrega - false - false - false - - 0 - true - 1040 - 655 - false - 1 - 120 - 0 - 0 - - false - 1 @@ -582,7 +534,7 @@ false false false - 1700 + 1610 284 0 0 @@ -652,7 +604,7 @@ 1 Transferência Ginseng 1 - 86 + 96 Fim Fim @@ -676,7 +628,7 @@ false false false - 980 + 770 510 0 0 @@ -694,53 +646,6 @@ false - - - 1 - Transferência Ginseng - 1 - 93 - - Fim - Fim - Atividade final do processo - 0 - false - 0 - - - 0 - false - true - false - 0 - 1 - 0 - 0 - false - - 0 - false - false - false - 1180 - 610 - 0 - 0 - false - false - 0 - 0 - false - - 6 - 60 - 0 - false - 0 - - false - @@ -748,10 +653,10 @@ 1 Transferência Ginseng 1 - 42 + 46 2 - true + hAPI.getCardValue("gestor_cce") != "" 4 <AssignmentController><FormField>gestor_cce</FormField></AssignmentController> Campo Formulário @@ -762,10 +667,10 @@ 1 Transferência Ginseng 2 - 42 + 46 2 - hAPI.getCardValue("estabelecimento") == "" + true 6 <AssignmentController><User>logistica</User></AssignmentController> Usuário @@ -776,7 +681,7 @@ 1 Transferência Ginseng 1 - 42 + 46 46 hAPI.getCardValue("validacaoItens") == "entregue" @@ -788,1496 +693,13 @@ 1 Transferência Ginseng 2 - 42 + 46 46 true 24 0 - - - 1 - Transferência Ginseng - 1 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "" - 86 - 0 - - - - 1 - Transferência Ginseng - 2 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ HIPER FAROL - (CARREFOUR)" - 31 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 3 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ MOREIRA LIMA" - 31 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 4 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ SHOPPING PÁTIO" - 31 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 5 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ MÁRIO DE GUSMÃO(ATACADAO)"|| hAPI.getCardValue("estabelecimento") == "LJ MÁRIO DE GUSMÃO(ATACADO)" - 31 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 6 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ GBARBOSA TABULEIRO" - 31 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 7 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ LIVRAMENTO" - 31 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 8 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ RIO LARGO" - 31 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 9 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ SHOPPING CIDADE" - 31 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 10 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ SUPER GIRO" - 31 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 11 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "HIB CAMPO ALEGRE" - 31 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 12 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "ER PITANGUINHA" - 31 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 13 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "TÔ QUE TÔ MACEIÓ CENTRO" - 31 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 14 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ MIX MATEUS" - 31 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 15 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "ER RIO LARGO" - 31 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 16 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "CD SERRARIA" - 31 - <AssignmentController><Group>Motoristas</Group></AssignmentController> - Pool Grupo - 0 - - - - 1 - Transferência Ginseng - 17 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "ESCRITÓRIO MATRIZ" - 31 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 18 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ MACEIÓ SHOPPING TERREO" - 31 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 19 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ MACEIÓ SHOPPING EXPANSÃO" - 31 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 20 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ GBARBOSA SERRARIA" - 31 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 21 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ PONTA VERDE" - 31 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 22 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ HIPER JATIÚCA (ASSAÍ)" - 31 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 23 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ GBARBOSA S.MARIS" - 31 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 24 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ JACINTINHO" - 31 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 25 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ PARQUE SHOPPING" - 31 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 26 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ HIPER ANTARES" - 31 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 27 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ UNICOMPRA PONTA VERDE" - 31 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 28 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "HIB MARECHAL DEODORO" - 31 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 29 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "ER ANTARES" - 31 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 30 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ CARAJÁS" - 31 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 31 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "QDB PARQUE SHOPPING" - 31 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 32 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "QDB MACEIO SHOPPING" - 31 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 33 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ LAGARTO" - 31 - <AssignmentController><User>001217</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 34 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "HIB ITABAIANINHA" - 31 - <AssignmentController><User>001217</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 35 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "ER LAGARTO" - 31 - <AssignmentController><User>001217</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 36 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ GBARBOSA SOCORRO" - 31 - <AssignmentController><User>001217</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 37 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "ER SOCORRO" - 31 - <AssignmentController><User>001217</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 38 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "HIB BARRA DOS COQUEIROS" - 31 - <AssignmentController><User>001217</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 39 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ SHOPPING PREMIO SOCORRO" - 31 - <AssignmentController><User>001217</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 40 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ BOULEVARD SHOPPING" - 31 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 41 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ PRACA 9 DE NOVEMBRO" - - 31 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 42 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ GALERIA PANVICON" - 31 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 43 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "ER CONDEUBA" - 31 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 44 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "QQ SHOPPING CONQUISTA" - 31 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 45 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ ASSAI VITORIA DA CONQUISTA" - 31 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 46 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ BAIRRO BRASIL" - 31 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 47 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "HIB BARRA DO CHOCA" - 31 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 48 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ SHOPPING CONQUISTA SUL" - 31 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 49 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "ER VITORIA DA CONQUISTA" - 31 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 50 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "HIB CANDIDO SALES" - 31 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 51 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ RUA ZEFERINO CORREIA" - 31 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 52 - 42 - 62 - - hAPI.getCardValue("estabelecimento") == "LJ MIX MATEUS TABULEIRO" - 31 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 1 - 42 - 90 - - hAPI.getCardValue("centroCusto") =="" - 93 - 0 - - - - 1 - Transferência Ginseng - 2 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ HIPER FAROL - (CARREFOUR)" - 57 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 3 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ MOREIRA LIMA" - 57 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 4 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ SHOPPING PÁTIO" - 57 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 5 - 42 - 90 - - hAPI.getCardValue("estabelecimento") == "LJ MÁRIO DE GUSMÃO(ATACADAO)"|| hAPI.getCardValue("estabelecimento") == "LJ MÁRIO DE GUSMÃO(ATACADO)" - 57 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 6 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ GBARBOSA TABULEIRO" - 57 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 7 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ LIVRAMENTO" - 57 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 8 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ RIO LARGO" - 57 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 9 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ SHOPPING CIDADE" - 57 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 10 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ SUPER GIRO" - 57 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 11 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "HIB CAMPO ALEGRE" - 57 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 12 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "ER PITANGUINHA" - 57 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 13 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "TÔ QUE TÔ MACEIÓ CENTRO" - 57 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 14 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ MIX MATEUS" - 57 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 15 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "ER RIO LARGO" - 57 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 16 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "CD SERRARIA" - 57 - <AssignmentController><Group>Motoristas</Group></AssignmentController> - Pool Grupo - 0 - - - - 1 - Transferência Ginseng - 17 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "ESCRITÓRIO MATRIZ" - 57 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 18 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ MACEIÓ SHOPPING TERREO" - 57 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 19 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ MACEIÓ SHOPPING EXPANSÃO" - 57 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 20 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ GBARBOSA SERRARIA" - 57 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 21 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ PONTA VERDE" - 57 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 22 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ HIPER JATIÚCA (ASSAÍ)" - 57 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 23 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ GBARBOSA S.MARIS" - 57 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 24 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ JACINTINHO" - 57 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 25 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ PARQUE SHOPPING" - 57 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 26 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ HIPER ANTARES" - 57 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 27 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ UNICOMPRA PONTA VERDE" - 57 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 28 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "HIB MARECHAL DEODORO" - 57 - <AssignmentController><User>001025</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 29 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "ER ANTARES" - 57 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 30 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ CARAJÁS" - 57 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 31 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "QDB PARQUE SHOPPING" - 57 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 32 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "QDB MACEIO SHOPPING" - 57 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 33 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ LAGARTO" - 57 - <AssignmentController><User>001217</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 34 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "HIB ITABAIANINHA" - 57 - <AssignmentController><User>001217</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 35 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "ER LAGARTO" - 57 - <AssignmentController><User>001217</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 36 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "HIB ITABAIANINHA" - 57 - <AssignmentController><User>001217</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 37 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "ER LAGARTO" - 57 - <AssignmentController><User>001217</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 38 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ GBARBOSA SOCORRO" - 57 - <AssignmentController><User>001217</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 39 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "ER SOCORRO" - 57 - <AssignmentController><User>001217</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 40 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "HIB BARRA DOS COQUEIROS" - 57 - <AssignmentController><User>001217</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 41 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ SHOPPING PREMIO SOCORRO" - 57 - <AssignmentController><User>001217</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 42 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ BOULEVARD SHOPPING" - 57 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 43 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ PRACA 9 DE NOVEMBRO" - 57 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 44 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ GALERIA PANVICON" - 57 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 45 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "ER CONDEUBA" - 57 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 46 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "QQ SHOPPING CONQUISTA" - 57 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 47 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ ASSAI VITORIA DA CONQUISTA" - 57 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 48 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ BAIRRO BRASIL" - 57 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 49 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "HIB BARRA DO CHOCA" - 57 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 50 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ SHOPPING CONQUISTA SUL" - 57 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 51 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "ER VITORIA DA CONQUISTA" - 57 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 52 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "HIB CANDIDO SALES" - 57 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 53 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ RUA ZEFERINO CORREIA" - - 57 - <AssignmentController><User>motorista.ginseng</User></AssignmentController> - Usuário - 0 - - - - 1 - Transferência Ginseng - 54 - 42 - 90 - - hAPI.getCardValue("centroCusto") == "LJ MIX MATEUS TABULEIRO" - - 57 - <AssignmentController><User>001509</User></AssignmentController> - Usuário - 0 - @@ -2358,7 +780,7 @@ 1 41 - + Aprovado e emitir NFE false 4 6 @@ -2453,23 +875,6 @@ false 0 - - - 1 - Transferência Ginseng - 1 - 84 - - - false - 62 - 31 - - Alocar motorista - false - false - 0 - 1 @@ -2492,31 +897,14 @@ 1 Transferência Ginseng 1 - 87 + 95 - - false - 62 - 86 - - Processo finalizado - false - false - 0 - - - - 1 - Transferência Ginseng - 1 - 88 - - + Enviar para coleta false 6 - 62 + 31 - Emitida + Enviar para coleta false false 0 @@ -2526,28 +914,28 @@ 1 Transferência Ginseng 1 - 91 + 97 + + Cancelar Transferência + false + 6 + 96 + + Finalizar + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 98 false 31 - 90 - - - false - false - 0 - - - - 1 - Transferência Ginseng - 1 - 92 - - - false - 90 57 @@ -2555,23 +943,6 @@ false 0 - - - 1 - Transferência Ginseng - 1 - 94 - - - false - 90 - 93 - - Filial nao identificada - false - false - 0 - @@ -2665,7 +1036,7 @@ 1 Transferência Ginseng - 42 + 46 5 1 @@ -2676,7 +1047,7 @@ 1 Transferência Ginseng - 42 + 46 5 2 @@ -2687,7 +1058,7 @@ 1 Transferência Ginseng - 42 + 46 7 1 @@ -2698,18 +1069,18 @@ 1 Transferência Ginseng - 42 + 46 26 1 - 1422 - 528 + 1223 + 517 1 Transferência Ginseng - 42 + 46 61 1 @@ -2720,34 +1091,23 @@ 1 Transferência Ginseng - 42 - 84 - 1 - - 789 - 717 - - - - 1 - Transferência Ginseng - 42 + 46 85 1 - 1332 - 316 + 1149 + 308 1 Transferência Ginseng - 42 - 94 + 46 + 95 1 - 1068 - 627 + 543 + 717 @@ -2815,7 +1175,7 @@ 0 0 Transferência Ginseng - 42 + 46 4 approval title @@ -2825,7 +1185,7 @@ 0 0 Transferência Ginseng - 42 + 46 4 approval description @@ -2835,7 +1195,7 @@ 0 0 Transferência Ginseng - 42 + 46 4 approval highlight @@ -2845,7 +1205,7 @@ 0 0 Transferência Ginseng - 42 + 46 4 approval approve @@ -2855,7 +1215,7 @@ 0 0 Transferência Ginseng - 42 + 46 4 approval reject @@ -2865,7 +1225,7 @@ 0 0 Transferência Ginseng - 42 + 46 6 approval title @@ -2875,7 +1235,7 @@ 0 0 Transferência Ginseng - 42 + 46 6 approval description @@ -2885,7 +1245,7 @@ 0 0 Transferência Ginseng - 42 + 46 6 approval highlight @@ -2895,7 +1255,7 @@ 0 0 Transferência Ginseng - 42 + 46 6 approval approve @@ -2905,7 +1265,7 @@ 0 0 Transferência Ginseng - 42 + 46 6 approval reject @@ -2915,7 +1275,7 @@ 0 0 Transferência Ginseng - 42 + 46 24 approval title @@ -2925,7 +1285,7 @@ 0 0 Transferência Ginseng - 42 + 46 24 approval description @@ -2935,7 +1295,7 @@ 0 0 Transferência Ginseng - 42 + 46 24 approval highlight @@ -2945,7 +1305,7 @@ 0 0 Transferência Ginseng - 42 + 46 24 approval approve @@ -2955,7 +1315,7 @@ 0 0 Transferência Ginseng - 42 + 46 24 approval reject diff --git a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.png b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.png index 9b162210ca761c327123989fba5a2b538d4ff39c..b1b8e7b2ae993aa9a01ad6f8bbc16d1a76c8d05b 100644 GIT binary patch literal 40397 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[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

% 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 Q8!@0EBe)hyVZp diff --git a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.processimage.svg b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.processimage.svg index 3b406fe..2da3c39 100644 --- a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.processimage.svg +++ b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.processimage.svg @@ -1,2 +1,2 @@ -MotoristaAnalista de suprimentosLogisticaGerente de lojaSolicitação de TransferênciaValidarLojaAprovarTransferênciaEmitir NFEde TransfReceberProdutosVerificarproblemaColetarProdutoValidarprodutoEntregarProdutoValidarColetaValidarEntregaGestor IdentificadoLoja sem GestorAprovarReprovarReprovarCancelarAlocar motoristaValidar produtosrecebidosProcesso finalizadoEmitidaFilial nao identificada +MotoristaAnalista de suprimentosLogisticaGerente de lojaSolicitação de TransferênciaValidarLojaAprovarTransferênciaEmitir NFEde TransfReceberProdutosVerificarproblemaColetarProdutoValidarprodutoEntregarProdutoGestor IdentificadoLoja sem GestorAprovarReprovarReprovarCancelarValidar produtosrecebidosEnviar para coletaFinalizar diff --git a/Transferência Ginseng/workflow/.resources/teste3.ws.cache b/Transferência Ginseng/workflow/.resources/teste3.ws.cache new file mode 100644 index 0000000..42a479c --- /dev/null +++ b/Transferência Ginseng/workflow/.resources/teste3.ws.cache @@ -0,0 +1,792 @@ + + + + + volume + + + Default + + + + + mecanismoGrupo + + + + + Tecnologia e Comunicação + + + TIC + + + + + + + Compras Indiretos + + + ComprasIndiretos + + + + + + + Obras e manutenção + + + Manutencao + + + + + + + Aprovadores Compras Nvl 3 + + + AprovadoresComprasNvl3 + + + + + + + Motoristas + + + Motoristas + + + + + + + Requisitantes de Vaga + + + Requisitantesdevaga + + + + + + + Recrutamento + + + Recrutamento + + + + + + + TODOS-TODOS-DIADMISSAO + + + TODOS-TODOS-DIADMISSAO + + + + + + + ResponsavelDesligamento + + + ResponsavelDesligamento + + + + + + + GENTE & CULTURA + + + GENTE_CULTURA + + + + + + + LOJA AL + + + LOJA_AL + + + + + + + CD + + + CD + + + + + + + ESPAÇO DO REVENDEDOR AL + + + ESPACO_DO_REVENDEDOR_AL + + + + + + + FINANCEIRO + + + FINANCEIRO + + + + + + + OPERAÇÕES + + + OPERACOES + + + + + + + AMG AL + + + AMG_AL + + + + + + + REGIONAL ALAGOAS + + + REGIONAL_ALAGOAS + + + + + + + PREVENÇÃO DE PERDA + + + PREVENCAO_DE_PERDA + + + + + + + MARKETING, TREINAMENTO + + + MARKETING_TREINAMENTO + + + + + + + SECRETARIA EXECUTIVA + + + SECRETARIA_EXECUTIVA + + + + + + + DIRETORIA EXECUTIVA + + + DIRETORIA_EXECUTIVA + + + + + + + INFRAESTRUTURA + + + INFRAESTRUTURA + + + + + + + ESPAÇO DO REVENDEDOR BA + + + ESPACO_DO_REVENDEDOR_BA + + + + + + + BUSINESS INTELLIGENCE + + + BUSINESS_INTELLIGENCE + + + + + + + DEPARTAMENTO PESSOAL + + + DEPARTAMENTO_PESSOAL + + + + + + + LOJA BA + + + LOJA_BA + + + + + + + TREINAMENTO + + + TREINAMENTO + + + + + + + AMG BA + + + AMG_BA + + + + + + + MARKETING + + + MARKETING + + + + + + + COMPRAS + + + COMPRAS + + + + + + + AMG SE + + + AMG_SE + + + + + + + LOJA SE + + + LOJA_SE + + + + + + + ESPAÇO DO REVENDEDOR SE + + + ESPACO_DO_REVENDEDOR_SE + + + + + + + VENDAS IN COMPANY + + + VENDAS_IN_COMPANY + + + + + + + REGIONAL BAHIA + + + REGIONAL_BAHIA + + + + + + + CANAL LOJA 01 + + + CANAL_LOJA_01 + + + + + + + AUDITORIA + + + AUDITORIA + + + + + + + CANAL LOJA 02 + + + CANAL_LOJA_02 + + + + + + + PLANEJAMENTO DE DEMANDAS + + + PLANEJAMENTO_DE_DEMANDAS + + + + + + + PROJETOS + + + PROJETOS + + + + + + + COMPLIANCE + + + COMPLIANCE + + + + + + + ESCRITÓRIO - MATRIZ + + + ESCRITORIO_MATRIZ + + + + + + + ESCRITÓRIO - CONQUISTA + + + ESCRITORIO_CONQUISTA + + + + + + + REGIONAL SERGIPE + + + REGIONAL_SERGIPE + + + + + + + Transferencia + + + Transferencia + + + + + + + expediente + + + Default + + + Expediente BackOffice, Logística e Motorista + + + Expediente Escritório Matriz + + + Expediente Lojas + + + + + camposFormulario, documentoId = 590 + + + activity + + + centroCusto + + + chaveNfe + + + codigoItem + + + codigoProdutoItem + + + currentUserId + + + currentUsermail + + + currentUserName + + + dataAbertura + + + dataColeta + + + dataEmissaoApiNfe + + + dataEmissaoNfe + + + dataEntradaNfeConsulta + + + dataEntrega + + + descAnexo_Coleta + + + descAnexo_Entrega + + + descAnexo_Nfe + + + descAnexo_Recebimento + + + descricao + + + emailSolicitante + + + estabelecimento + + + excelUpload + + + fdAnexo_Coleta + + + fdAnexo_Entrega + + + fdAnexo_recebimento + + + fnAnexo_Nfe + + + formMode + + + fornecedorNfeConsulta + + + gestorEmail + + + gestorEmailE + + + gestorNome + + + gestorNomeE + + + gestor_cc + + + gestor_cce + + + invoiceIdNfeConsulta + + + itensNfeConsulta + + + itensNfeJson + + + justificativa + + + lojaNfeConsulta + + + motoristaColetaLogin + + + motoristaColetaNome + + + motoristaEntregaLogin + + + motoristaEntregaNome + + + motoristaEntregaSelecionado + + + numeroNfeConsulta + + + operacaoNfeConsulta + + + productIdItem + + + qtdDivergenciasNfe + + + quantidadeItem + + + requesterId + + + requesterMail + + + requesterName + + + serieNfeConsulta + + + situacaoNfeConsulta + + + storeIdNfeConsulta + + + tipoMotoristaEntrega + + + usuarioEmissorNfe + + + valorNfeConsulta + + + WKNumProces + + + + + mecanismo + + + + + Atribuição por Associação + + + Associado + + + + + + + Atribuição por Campo de Formulário + + + Campo Formulário + + + + + + + dpf_di_emp_filial_filtro + + + dpf_di_emp_filial_filtro + + + + + + + dpf_di_inicio_diadmissao + + + dpf_di_inicio_diadmissao + + + + + + + Atribuição por Executor de Atividade + + + Executor Atividade + + + + + + + Atribuição por Grupo + + + Grupo + + + + + + + Atribuição por Grupos do Colaborador + + + Grupos Colaborador + + + + + + + mecCustomAprov + + + mecCustomAprov + + + + + + + Atribuição por Papel + + + Papel + + + + + + + Atribuição para um Grupo + + + Pool Grupo + + + + + + + Atribuição para um Papel + + + Pool Papel + + + + + + + Atribuição por Usuário + + + Usuário + + + + + + + diff --git a/Transferência Ginseng/workflow/.resources/teste3.ws.cache.bkp b/Transferência Ginseng/workflow/.resources/teste3.ws.cache.bkp new file mode 100644 index 0000000..e69de29 diff --git a/Transferência Ginseng/workflow/diagrams/.project b/Transferência Ginseng/workflow/diagrams/.project new file mode 100644 index 0000000..d147ec9 --- /dev/null +++ b/Transferência Ginseng/workflow/diagrams/.project @@ -0,0 +1,11 @@ + + + diagrams + + + + + + + + diff --git a/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process b/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process index 248d9b3..9b00760 100644 --- a/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process +++ b/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process @@ -1,5 +1,5 @@ - + @@ -112,7 +112,7 @@ - + @@ -124,9 +124,9 @@ - + - + @@ -138,7 +138,7 @@ - + @@ -152,9 +152,9 @@ - + - + @@ -192,7 +192,7 @@ - + @@ -216,7 +216,7 @@ - + @@ -226,9 +226,9 @@ - + - + @@ -266,70 +266,12 @@ - - - - - - - - + + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -3498,6 +3440,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3560,7 +3537,7 @@ - + @@ -3653,27 +3630,11 @@ - - - - - - - - - - - - - - - - - + @@ -3683,13 +3644,13 @@ - + - + - + - + @@ -3699,12 +3660,13 @@ + - + - + @@ -3715,11 +3677,11 @@ - + - + - + @@ -3730,37 +3692,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -3783,39 +3714,33 @@ - + - + - + - - + + - + - - - - - - - - - - + + + + \ No newline at end of file diff --git a/workflow/.resources/Solicitação de transferência.ecm30.xml b/workflow/.resources/Solicitação de transferência.ecm30.xml new file mode 100644 index 0000000..02197e4 --- /dev/null +++ b/workflow/.resources/Solicitação de transferência.ecm30.xml @@ -0,0 +1,2967 @@ + + + + 1 + Transferência Ginseng + + Transferência Ginseng + Este flow permite abertura de solicitação de transferências automatizadas, informando qual item será transferido e direcionado para as aprovações corretas. + true + false + Default + Transferência + Usuário + <AssignmentController><User>projetos</User></AssignmentController> + 0 + 0 + 0 + Default + false + + 1 + true + false + 172800 + 0 + true + + + + 1 + Transferência Ginseng + 42 + + + 590 + true + true + false + true + false + false + 0 + 2 + + false + false + true + + + + + 1 + Transferência Ginseng + 1 + 1 + + Solicitar transferência + Solicitar transferência + + 0 + false + 0 + + + 1 + true + false + false + 0 + 0 + 0 + 0 + false + + 0 + true + true + false + 100 + 83 + 0 + 0 + false + false + 0 + 0 + false + + 0 + 10 + 0 + false + 0 + 0 + 0 + 0 + + false + + + + 1 + Transferência Ginseng + 1 + 4 + + Aprovar Transferência + Aprovar Transferência + + 16200 + + false + 0 + + 1 + false + false + false + 0 + 0 + 0 + 0 + false + + 0 + true + true + false + 490 + 281 + 0 + 0 + false + false + 0 + 0 + false + Expediente Lojas + 0 + 80 + 0 + false + 0 + 0 + 0 + 0 + + false + 0 + + + + 1 + Transferência Ginseng + 1 + 6 + + Emitir NFE de Transf + Emitir NFE de Transf + + 57600 + + false + 0 + Pool Grupo + <AssignmentController><Group>CD</Group></AssignmentController> + 1 + false + false + false + 0 + 0 + 0 + 0 + false + + 0 + true + true + false + 490 + 490 + 0 + 0 + false + false + 0 + 0 + false + + 0 + 80 + 0 + false + 0 + 0 + 0 + 0 + + false + 0 + + + + 1 + Transferência Ginseng + 1 + 18 + + Receber Produtos + Receber Produtos + + 7200 + + false + 0 + Campo Formulário + <AssignmentController><FormField>gestor_cc</FormField></AssignmentController> + 1 + false + false + false + 0 + 0 + 0 + 0 + false + + 0 + true + true + false + 1370 + 270 + 0 + 0 + false + false + 0 + 0 + false + Expediente Lojas + 0 + 80 + 0 + false + 0 + 0 + 0 + 0 + + false + 0 + + + + 1 + Transferência Ginseng + 1 + 24 + + Verificar problema + Verificar problema + + 172800 + + false + 0 + Usuário + <AssignmentController><User>logistica</User></AssignmentController> + 1 + false + false + false + 0 + 0 + 0 + 0 + false + + 0 + true + true + false + 1520 + 490 + 0 + 0 + false + false + 0 + 0 + false + Expediente BackOffice, Logística e Motorista + 0 + 80 + 0 + false + 0 + 0 + 0 + 0 + + false + 0 + + + + 1 + Transferência Ginseng + 1 + 31 + + Coletar Produto + Coletar Produto + + 43200 + + false + 0 + + 1 + false + false + false + 0 + 0 + 0 + 0 + false + + 0 + true + true + false + 870 + 679 + 0 + 0 + false + false + 0 + 0 + false + Expediente BackOffice, Logística e Motorista + 0 + 80 + 0 + false + 0 + 0 + 0 + 0 + + false + 0 + + + + 1 + Transferência Ginseng + 1 + 57 + + Entregar Produto + Entregar Produto + + 57600 + + false + 0 + + 1 + false + true + false + 3600 + 3600 + 0 + 0 + false + + 0 + true + false + false + 1280 + 679 + 0 + 0 + false + false + 0 + 0 + false + Expediente BackOffice, Logística e Motorista + 0 + 80 + 0 + false + 0 + 0 + 0 + 0 + + false + 0 + + + + 1 + Transferência Ginseng + 1 + 2 + + Validar Loja + Validar Loja + false + false + false + + 0 + true + 250 + 47 + false + 1 + 120 + 0 + 0 + + false + + + + 1 + Transferência Ginseng + 1 + 46 + + Validar produto + Validar produto + false + false + false + + 0 + true + 1540 + 250 + false + 1 + 120 + 0 + 0 + + false + + + + 1 + Transferência Ginseng + 1 + 62 + + Validar Coleta + Validar Coleta + false + false + false + + 0 + true + 760 + 470 + false + 1 + 120 + 0 + 0 + + false + + + + 1 + Transferência Ginseng + 1 + 90 + + Validar Entrega + Validar Entrega + false + false + false + + 0 + true + 1040 + 655 + false + 1 + 120 + 0 + 0 + + false + + + + 1 + Transferência Ginseng + 1 + 39 + + Cancelado + Cancelado + Atividade final do processo + 0 + false + 0 + + + 0 + false + true + false + 0 + 1 + 0 + 0 + false + + 0 + false + true + false + 700 + 310 + 0 + 0 + false + false + 0 + 0 + false + + 6 + 65 + 0 + false + 0 + + false + + + + 1 + Transferência Ginseng + 1 + 52 + + Fim + Fim + Atividade final do processo + 0 + false + 0 + + + 0 + false + true + false + 0 + 1 + 0 + 0 + false + + 0 + false + false + false + 1700 + 284 + 0 + 0 + false + false + 0 + 0 + false + + 6 + 60 + 0 + false + 0 + + false + + + + 1 + Transferência Ginseng + 1 + 60 + + Fim com cancelamento de processo + Fim com cancelamento de processo + Atividade final do processo + 0 + false + 0 + + + 0 + false + true + false + 0 + 1 + 0 + 0 + false + + 0 + false + false + false + 1570 + 699 + 0 + 0 + false + false + 0 + 0 + false + + 6 + 65 + 0 + false + 0 + + false + + + + 1 + Transferência Ginseng + 1 + 86 + + Fim + Fim + Atividade final do processo + 0 + false + 0 + + + 0 + false + true + false + 0 + 1 + 0 + 0 + false + + 0 + false + false + false + 980 + 510 + 0 + 0 + false + false + 0 + 0 + false + + 6 + 60 + 0 + false + 0 + + false + + + + 1 + Transferência Ginseng + 1 + 93 + + Fim + Fim + Atividade final do processo + 0 + false + 0 + + + 0 + false + true + false + 0 + 1 + 0 + 0 + false + + 0 + false + false + false + 1180 + 610 + 0 + 0 + false + false + 0 + 0 + false + + 6 + 60 + 0 + false + 0 + + false + + + + + + 1 + Transferência Ginseng + 1 + 42 + 2 + + hAPI.getCardValue("estabelecimento") =! "" + 4 + <AssignmentController><FormField>gestor_cce</FormField></AssignmentController> + Campo Formulário + 0 + + + + 1 + Transferência Ginseng + 2 + 42 + 2 + + true + 6 + <AssignmentController><User>logistica</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 1 + 42 + 46 + + hAPI.getCardValue("validacaoItens") == "entregue" + 52 + 0 + + + + 1 + Transferência Ginseng + 2 + 42 + 46 + + true + 24 + 0 + + + + 1 + Transferência Ginseng + 1 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "" + 86 + 0 + + + + 1 + Transferência Ginseng + 2 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ HIPER FAROL - (CARREFOUR)" + 31 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 3 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ MOREIRA LIMA" + 31 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 4 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ SHOPPING PÁTIO" + 31 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 5 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ MÁRIO DE GUSMÃO(ATACADAO)"|| hAPI.getCardValue("estabelecimento") == "LJ MÁRIO DE GUSMÃO(ATACADO)" + 31 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 6 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ GBARBOSA TABULEIRO" + 31 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 7 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ LIVRAMENTO" + 31 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 8 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ RIO LARGO" + 31 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 9 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ SHOPPING CIDADE" + 31 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 10 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ SUPER GIRO" + 31 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 11 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "HIB CAMPO ALEGRE" + 31 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 12 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "ER PITANGUINHA" + 31 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 13 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "TÔ QUE TÔ MACEIÓ CENTRO" + 31 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 14 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ MIX MATEUS" + 31 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 15 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "ER RIO LARGO" + 31 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 16 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "CD SERRARIA" + 31 + <AssignmentController><Group>Motoristas</Group></AssignmentController> + Pool Grupo + 0 + + + + 1 + Transferência Ginseng + 17 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "ESCRITÓRIO MATRIZ" + 31 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 18 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ MACEIÓ SHOPPING TERREO" + 31 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 19 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ MACEIÓ SHOPPING EXPANSÃO" + 31 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 20 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ GBARBOSA SERRARIA" + 31 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 21 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ PONTA VERDE" + 31 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 22 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ HIPER JATIÚCA (ASSAÍ)" + 31 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 23 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ GBARBOSA S.MARIS" + 31 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 24 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ JACINTINHO" + 31 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 25 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ PARQUE SHOPPING" + 31 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 26 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ HIPER ANTARES" + 31 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 27 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ UNICOMPRA PONTA VERDE" + 31 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 28 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "HIB MARECHAL DEODORO" + 31 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 29 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "ER ANTARES" + 31 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 30 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ CARAJÁS" + 31 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 31 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "QDB PARQUE SHOPPING" + 31 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 32 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "QDB MACEIO SHOPPING" + 31 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 33 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ LAGARTO" + 31 + <AssignmentController><User>001217</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 34 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "HIB ITABAIANINHA" + 31 + <AssignmentController><User>001217</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 35 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "ER LAGARTO" + 31 + <AssignmentController><User>001217</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 36 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ GBARBOSA SOCORRO" + 31 + <AssignmentController><User>001217</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 37 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "ER SOCORRO" + 31 + <AssignmentController><User>001217</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 38 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "HIB BARRA DOS COQUEIROS" + 31 + <AssignmentController><User>001217</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 39 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ SHOPPING PREMIO SOCORRO" + 31 + <AssignmentController><User>001217</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 40 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ BOULEVARD SHOPPING" + 31 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 41 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ PRACA 9 DE NOVEMBRO" + + 31 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 42 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ GALERIA PANVICON" + 31 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 43 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "ER CONDEUBA" + 31 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 44 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "QQ SHOPPING CONQUISTA" + 31 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 45 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ ASSAI VITORIA DA CONQUISTA" + 31 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 46 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ BAIRRO BRASIL" + 31 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 47 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "HIB BARRA DO CHOCA" + 31 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 48 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ SHOPPING CONQUISTA SUL" + 31 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 49 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "ER VITORIA DA CONQUISTA" + 31 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 50 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "HIB CANDIDO SALES" + 31 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 51 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ RUA ZEFERINO CORREIA" + 31 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 52 + 42 + 62 + + hAPI.getCardValue("estabelecimento") == "LJ MIX MATEUS TABULEIRO" + 31 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 1 + 42 + 90 + + hAPI.getCardValue("centroCusto") =="" + 93 + 0 + + + + 1 + Transferência Ginseng + 2 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ HIPER FAROL - (CARREFOUR)" + 57 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 3 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ MOREIRA LIMA" + 57 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 4 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ SHOPPING PÁTIO" + 57 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 5 + 42 + 90 + + hAPI.getCardValue("estabelecimento") == "LJ MÁRIO DE GUSMÃO(ATACADAO)"|| hAPI.getCardValue("estabelecimento") == "LJ MÁRIO DE GUSMÃO(ATACADO)" + 57 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 6 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ GBARBOSA TABULEIRO" + 57 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 7 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ LIVRAMENTO" + 57 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 8 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ RIO LARGO" + 57 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 9 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ SHOPPING CIDADE" + 57 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 10 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ SUPER GIRO" + 57 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 11 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "HIB CAMPO ALEGRE" + 57 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 12 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "ER PITANGUINHA" + 57 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 13 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "TÔ QUE TÔ MACEIÓ CENTRO" + 57 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 14 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ MIX MATEUS" + 57 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 15 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "ER RIO LARGO" + 57 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 16 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "CD SERRARIA" + 57 + <AssignmentController><Group>Motoristas</Group></AssignmentController> + Pool Grupo + 0 + + + + 1 + Transferência Ginseng + 17 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "ESCRITÓRIO MATRIZ" + 57 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 18 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ MACEIÓ SHOPPING TERREO" + 57 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 19 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ MACEIÓ SHOPPING EXPANSÃO" + 57 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 20 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ GBARBOSA SERRARIA" + 57 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 21 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ PONTA VERDE" + 57 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 22 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ HIPER JATIÚCA (ASSAÍ)" + 57 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 23 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ GBARBOSA S.MARIS" + 57 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 24 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ JACINTINHO" + 57 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 25 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ PARQUE SHOPPING" + 57 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 26 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ HIPER ANTARES" + 57 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 27 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ UNICOMPRA PONTA VERDE" + 57 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 28 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "HIB MARECHAL DEODORO" + 57 + <AssignmentController><User>001025</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 29 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "ER ANTARES" + 57 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 30 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ CARAJÁS" + 57 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 31 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "QDB PARQUE SHOPPING" + 57 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 32 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "QDB MACEIO SHOPPING" + 57 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 33 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ LAGARTO" + 57 + <AssignmentController><User>001217</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 34 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "HIB ITABAIANINHA" + 57 + <AssignmentController><User>001217</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 35 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "ER LAGARTO" + 57 + <AssignmentController><User>001217</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 36 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "HIB ITABAIANINHA" + 57 + <AssignmentController><User>001217</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 37 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "ER LAGARTO" + 57 + <AssignmentController><User>001217</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 38 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ GBARBOSA SOCORRO" + 57 + <AssignmentController><User>001217</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 39 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "ER SOCORRO" + 57 + <AssignmentController><User>001217</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 40 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "HIB BARRA DOS COQUEIROS" + 57 + <AssignmentController><User>001217</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 41 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ SHOPPING PREMIO SOCORRO" + 57 + <AssignmentController><User>001217</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 42 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ BOULEVARD SHOPPING" + 57 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 43 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ PRACA 9 DE NOVEMBRO" + 57 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 44 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ GALERIA PANVICON" + 57 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 45 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "ER CONDEUBA" + 57 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 46 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "QQ SHOPPING CONQUISTA" + 57 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 47 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ ASSAI VITORIA DA CONQUISTA" + 57 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 48 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ BAIRRO BRASIL" + 57 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 49 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "HIB BARRA DO CHOCA" + 57 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 50 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ SHOPPING CONQUISTA SUL" + 57 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 51 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "ER VITORIA DA CONQUISTA" + 57 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 52 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "HIB CANDIDO SALES" + 57 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 53 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ RUA ZEFERINO CORREIA" + + 57 + <AssignmentController><User>motorista.ginseng</User></AssignmentController> + Usuário + 0 + + + + 1 + Transferência Ginseng + 54 + 42 + 90 + + hAPI.getCardValue("centroCusto") == "LJ MIX MATEUS TABULEIRO" + + 57 + <AssignmentController><User>001509</User></AssignmentController> + Usuário + 0 + + + + + + 1 + Transferência Ginseng + 1 + 3 + + + false + 1 + 2 + + + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 5 + + + false + 2 + 4 + + Gestor Identificado + false + false + 0 + + + + + + + 1 + Transferência Ginseng + 1 + 7 + + + false + 2 + 6 + + Loja sem Gestor + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 26 + + + false + 24 + 18 + + + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 41 + + + false + 4 + 6 + + Aprovar + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 47 + + + false + 18 + 46 + + + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 48 + + + false + 46 + 24 + + Reprovar + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 53 + + + false + 4 + 39 + + Reprovar + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 61 + + + false + 57 + 60 + + Cancelar + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 82 + + + false + 46 + 52 + + + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 84 + + + false + 62 + 31 + + Alocar motorista + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 85 + + + false + 57 + 18 + + Validar produtos recebidos + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 87 + + + false + 62 + 86 + + Processo finalizado + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 88 + + + false + 6 + 62 + + Emitida + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 91 + + + false + 31 + 90 + + + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 92 + + + false + 90 + 57 + + + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 94 + + + false + 90 + 93 + + Filial nao identificada + false + false + 0 + + + + + + + + FFFFFF + 794 + 1791 + 20 + 20 + Solicitação de Transferência + 1 + 0 + + 1 + Transferência Ginseng + 1 + 1 + + + + 82b0b7 + 198 + 1761 + 50 + 218 + Gerente de loja + 2 + 1 + + 1 + Transferência Ginseng + 1 + 2 + + + + d0daae + 198 + 1761 + 50 + 416 + Logistica + 2 + 1 + + 1 + Transferência Ginseng + 1 + 3 + + + + d6e0d0 + 198 + 1761 + 50 + 20 + Analista de suprimentos + 2 + 1 + + 1 + Transferência Ginseng + 1 + 4 + + + + adc9ac + 200 + 1761 + 50 + 614 + Motorista + 2 + 1 + + 1 + Transferência Ginseng + 1 + 5 + + + + + + + + + 1 + Transferência Ginseng + 42 + 5 + 1 + + 342 + 100 + + + + 1 + Transferência Ginseng + 42 + 5 + 2 + + 342 + 326 + + + + 1 + Transferência Ginseng + 42 + 7 + 1 + + 279 + 527 + + + + 1 + Transferência Ginseng + 42 + 26 + 1 + + 1422 + 528 + + + + 1 + Transferência Ginseng + 42 + 61 + 1 + + 1552 + 717 + + + + 1 + Transferência Ginseng + 42 + 84 + 1 + + 789 + 717 + + + + 1 + Transferência Ginseng + 42 + 85 + 1 + + 1332 + 316 + + + + 1 + Transferência Ginseng + 42 + 94 + 1 + + 1068 + 627 + + + + + + + + 1 + Transferência Ginseng + anexo_lista1 + + Nome do arquivo + 1 + + + + 1 + Transferência Ginseng + centroCusto + + Filial Destino + 2 + + + + 1 + Transferência Ginseng + dataAbertura + + Data de abertura + 3 + + + + 1 + Transferência Ginseng + estabelecimento + + Filial Emitente + 4 + + + + 1 + Transferência Ginseng + justificativa + + Justificativa + 5 + + + + 1 + Transferência Ginseng + userSolicitante + + Solicitante + 6 + + + + + + + 0 + 0 + Transferência Ginseng + 42 + 4 + approval + title + Solicitação de compra + + + 0 + 0 + Transferência Ginseng + 42 + 4 + approval + description + + + + 0 + 0 + Transferência Ginseng + 42 + 4 + approval + highlight + Centro de Custo - Aprovar solicitação? + + + 0 + 0 + Transferência Ginseng + 42 + 4 + approval + approve + 6 + + + 0 + 0 + Transferência Ginseng + 42 + 4 + approval + reject + 39 + + + 0 + 0 + Transferência Ginseng + 42 + 6 + approval + title + Solicitação de transferência + + + 0 + 0 + Transferência Ginseng + 42 + 6 + approval + description + + + + 0 + 0 + Transferência Ginseng + 42 + 6 + approval + highlight + Transferência + + + 0 + 0 + Transferência Ginseng + 42 + 6 + approval + approve + + + + 0 + 0 + Transferência Ginseng + 42 + 6 + approval + reject + + + + 0 + 0 + Transferência Ginseng + 42 + 24 + approval + title + + + + 0 + 0 + Transferência Ginseng + 42 + 24 + approval + description + + + + 0 + 0 + Transferência Ginseng + 42 + 24 + approval + highlight + + + + 0 + 0 + Transferência Ginseng + 42 + 24 + approval + approve + + + + 0 + 0 + Transferência Ginseng + 42 + 24 + approval + reject + + + + + + \ No newline at end of file diff --git a/workflow/.resources/Solicitação de transferência.png b/workflow/.resources/Solicitação de transferência.png new file mode 100644 index 0000000000000000000000000000000000000000..f17e62b7875577ffe1557c36c73be6c006a8dd95 GIT binary patch literal 45262 zcmd?Rc|6qL{|Bmticm>HmXbuF63RBIFo?+@+1o6Qecw%ygzO>f$UbD>vQ8@d8e`we zzVC(^%-l2d`Fwo7-{0@v``^8fd;e*sdB4v&uk(7n&TDzTUWd;^WjR`E7HSF#3R-#S zeK-Zhk+T#OhlGwE1i!FkKD~k9{<;W$q&}`Jk9O)6KlKA!wP!r^as_z?s z)>8;d-@ib`2Tt{WDBw+Y=9Nz0H=n{f{Qva?tY3ldcq2Ex2lwxbPjkJB-u+q=r?7D@ zL~yZWT&Wd8)&z=&F5~s7oQ&kJ@eI;@28GFL#5|IE9M~AjJs~ zaX~w^#?q<48@q3s)KkMz$O5~&mt-XkCT5xrBANC^5CmUJ^I<&;14-LcpX8{JvO^5J z69t!Z3cKlIU4@Hf-CSSZG2tNL4}qB@3${^aNgjZfn+0J4C0E+G^?I#k_C3> z;8FPbbNJJC^SB}hUrOy4yVA3YNaHNbNZyet;Zsu*k#T$Ry{`xd38N`$gp*nGj9*h4 zp|#wcl9YzM+sd1Mm8=4s2SS*V?kbI|V!iwONIm&aIQABJz|9A3*5N8FDa_%{Zzqiy z{NykQ;R{V*U#okoUsQ-0WU7kWBl?yCG^kJP(^_AemvugG`bAVi)=Lx8y@*YmbEY7x|!G zEK^8dK1H&m-o?J5L|@TXw(?g?zZ{z2emyjyvKP5W!xzA~D9t`WXtLG{?@Vid-|$hz zwy50=#uK>(p>|-*1ylmjM0=~tlG3bUmmf1a2_9IbR>5+|rL=InpB#@)U5ZXH@5w2x z*jYy$)e280p9F0FeM)pVPL;M(S;b(N%j>WpYRUSfv?Jy{OHW+3Oghh$`|YhH1$gFV z$(Wp$-Szg*FUR1YOz@}I_4^#k;fht_e->66@xa;%$xUjk6)Wdtp{N1()#t^FuzE|C zd;2L3`OGPdN-*@mdhw?oMg}4@nRZkz>5(aE>>o;>=CTwp5(f5y_Bafwfs1XE!XiSHfttF2-U)W`7+7TaWxL*Wrva#Kr zkbYUl4eegH#~SH84{X7jwL33g86V(Vfm z@fLfJjvj-*v;`Y}%_dIFkE4|QuuH>z?x)f-4dJQ^f*~`8s%xfg@rNE|BK#$I=KbPP zTMHQ2nA~x|>-YnJfx40oYA@gOL6b!t_%YAHn|dzu^d77TBAi}R@+F_M6Q6+8qPv>UNjj2GH2sy_(0cd=a=uW1v1fU4 z{nAv}>0Ra50>@F8E6lyl2ptHXxb7S!aLMc{8_*54ZfG*9U2~>t3xgv(7q^$vp!bM_ zs*sP;j5Jugv`lv9d25z_&PYl<&80Z|@sA9b0-IQN5>=|gof;>lR@S2GT%fsxdU$dg znc#IU73rCjNhUoVST|G`jQR;-DI`U1p}Qc3(u(uCiPGMKoGsLAS#kVoIrk6}f z0#jv+Ov&81MdncuEbA&n=jfmX~G^Q_iwO5OJNM)D74=qkHCdn@38g(O$YM2?! zOUFjA)nT`%t3t_iM8L8Fw)1n)T#AD^&nGAPjt(jAjq*N>{^T^*yZ&8J(tc>AgaOV# z7@ZrAVJpZdM0LwlP_^iG9^K`j}*&n)TAxtV2!XQ z`MW$FSW*lutidQ_FDZuYF+@ljaVzEO_U|{*0+CTsEaCa0ac+HK&o4kAb)_bFwj&(n zi?i9;!zHVc-E_z=3t~)-iqc-X{_-b7UEC?SbplkeC7h$2he)9g%Sle|YutRrNh3=kmb1JB>{X9}#A|DJY!n9I*NG)xJ9rRS$F zZU$0l1iS80ugXZ;Ro&$a(D{f}Ba}E`OL2;MW*mp)Y9gTTJs8)$q7E72S9O`ot$jb6 zbv$=mC%n|IxdofOCD5b4N2s_D4P0m=nh#sunC`MEOESie!*nVy7p6H+l#5NaP2A&x zsEnA53YiS=EI1hDV>c={Do9(4M3Eo8X#CZ6CUMok4Vj$OJ@y0u&u_1+ViJ_h?p7ZZ z&ZMQKn%S9eyp`aF$+sBeQTXgOCJ4#XR;eHzS|m*@C5lSri+rdN(wvdXws12xn#ql$ z+}hKvXM8HshzUd0M6Isz;?L2yOB+O^#nxQB1srXvbkSw$Gxv}?p9aoU&ZIXk!)V6tGI+!#|Uh2nP;JljNW6d*IR8?UgC9J!I^4&uS z^6OU}?W&$Od&{^d{OAUx#rZ#k;EP@8#TTNhP#SuxiHLF)DaD;`HN^AWCyH)aQz*>T z+bVsjF(J}q$8W<1^4vZbfwUK!5mDQI^&80x8F3|;Nbxbbdl$%38W#-5kaiYHfGE<$ zbEMl0GmnOyyo;2gZmhx%-xWt46feRG1zAN(=_Xq;gV{K*gEP=IRM2&$rE+wR5zW|X zgBKKlm=RwFBikRB87{2VYbb9|-)l5k(u=%m_p2+DJ_XL|0hyJMY3|!>>idpa?)-H^ zW;e)sRmu%W>kQ1?p26#DMrvtFav25a6dP#-EA4biQV4zR0m>}UVh&$P~EOAFc; z7LNfE?zkza1@(=$6A_=M1abZo*@Dh5f2L#85s!1-s+n5xBfyLYZr^_zF;KW2Ko)N; zw@fnukVIykg{z_2m?YWir`_|w5~I4Dt9!(2vXnEk-uhhOq4Jk=4{zgC7Q=7S)S@_? zM8SI$GY^4q;IoDS>;nT@<6N6P`Lh^jqQ-*DYNa=v-fOmMp5DC#--vOwwi`1#Mmxd- zDccG~mN|?Kl1HcA^Pz*I^c}6%jgqJ)_)#u1>#14tna8@v!a`fiM$7A9Cs`Uu8-XaB zqS zNyA?;ukS7DcCIV3x0JuA&rA+1>rZvp9Ha-UwXXMzV+;c7A(eT%YCeI0t{$?+-4Ugemk1FXng2V^am65r%=ORqT z-)@oTIFv1wbH4Bs#GQz1g_YnwM5DgkUV&l1C`_WH2CC0>DicnH)Nn!VB6qhWz|FrK z2pIAs2{UQaQ8_u`a;w0}y?wx9J!!Ep@Uic4MwgvSbbsQpqod;lMHsv=SIB(8-bHF5r99WAizF3ck)e@(Aj_5gau5@@Po8Yx0 z#yE^TT5>aP2&w0PGP3VNI7lOYN@XhE@Im~<3G~%VEWDgC;m4BZEWkpq`u>OHq;J49 zy$2{DW-hL=Qi?dMky(xy#reaM;-)(7Fkb|END1NsS{u01y4GXuc|!8FS=8*qVnwQ7 zO498*vAK!?_02r|^e{hmhl@FZ;ezvv>9HdZg>QK5>Bisb4u?`u)OsV229iXep%J5>Md7B1JCc!YBg^b>2XRybk85%3mMgb&JVN`2YiWhvY1HgS30vR?F2{#AQ&l<@$8!i@0}Z(IwL8G!j*UUd_sK0^Q{556%8wp_C+rR6}QCoxeA|?%==I7 zrmt9Z5+(XX++4zzGLuM!-5h_3t=&`zdb+mPB-NfNX(GE&%(CVB^F_%rV;9lC=>NdU zIQ3(L1&Ha+ZE3zXpG9G^#H>Bk;u(fbz*ma#!{|FamEGj84cr1yT~V90U$*{nWqEdY z39WVX*MIo!Ce`seAa-{3jXDNrDvCL^EtzhhyC%o{?Ec=41V9W3a#|{Sb8|Q1&utwn z$ZJJ-!z?q!T>c!&?j4ReG251}uNBSxD<|E!cazS`5mTJPLelC%3Tbnc=uYfZIRhK@3O- z%&9D$=93_Se z9|-@nk;2fqMvTo0b~bVMetj?Eg?%M3hIN0hS^@&;=y2f(!Fi0M=9*k2)g$M8G=b+2 zV?J}PhrGUL5`Z2xHeQNPz#g*F%f?;U|3TuGwV6_kkhlVC<$InexkE z2C?M|D)9B8auBuchzl+F8Xxn2scNUrBxRZ2Hn5Zj`gLO^@%Z%%e@IE=v|ArgNxq)W z$!H(^N8dm$GSLMN-7y*=1~pH?L`cI4u0O{gxCT*vla|Bi*p!s0VCu5Jv`|xeW;L)# zxvmA|i&g@1!d#5@{(oj`2O5w1vlFtp!pI`r8%rY-kI+|=S@Vx3gS6gR1}Qqug3eLg zQ_AsEr;^U-o-Rz1E&S|9ynOHdo@r>{z64deqT5G5C-z54$=tr7i2&x^-D74K)M07+ zc`xvNIXxp_9+`)VkAg}+-)4<7Oi7t&XiiD1cx)7$yC4A`-3bG@K(pZd-|&u_XmkSZ zS*%P==_+_kp&s&s({8ZoXNk;?hg!nP*{e6YVvm5|(?Y~D~NiXvn$o)FHU%<9o7E~>wfIO4)_qS z05sjuT&S}|hbyel@82tqxI8!p_j&j^zwWP>0ajI7cKYXkytg02VbR(5ItVi$P|$z>$Ya!So~v^`m!aJ7{fv4TgplR4xMQ1QY3_rclhp3YMJ0}~qWr=X6r@X7CLp#CTR(a4Y&N6;ty|8Hy0uI~M> z`nt!*4&gsXYfsz%R~a8hpQ!x*_`geF<$SWZF%ddDuXScBcmxK=jCW zgva}<4J^e9`EA4>vE$8N>e7u2NLP*@clVu+{~vJfKkUK(&vyKZVD-~Xk+|F@NJ%av z9QE2YP=5|qyt0mMe~7dv)u835zY7v)lcyFUz29*>q|f7>A;@)ESoE`R^D1&P|BHLU zjY(;wa$>Mue}9nyWuO82;;a3$b877`ApD5^*R#95r`LmNO+ZaRO`u0Wk-O_(GpkJB z2JmtS#eUhnf|3#Zzl#XhxyjD!F9VWR@xa%)jf>U2w~J`6f7qn~?!&d~A^+HnJN^Iz z7dD$mPL(}DYVzfB{cCWtt1rQ?2sgZ#{!2YiZA9i@ED!>4^QR(QF&{(uqi_Wfa_sYo zh(r>obA-MJ%JUN4SxY*%)912+nFdbaAv%SBDi2|V z59OSNXkKx__0Qp;^!2L|l(hUW{pDBGOxKb{7ln*Rb~56e=I8ARmv8Ctpqy9RQhI|) ztLiW*nVkq6TQ(NH6p*JjqXay^Pe=5P|ML9t&rmzxxaqe?@WYiwvAQdps}{soSR4}` zq8|nn;h%cOi~`7qIEK4zAK42a6s6=rcz*Qnt@zTOwQOM!thh(%agRJy_yrt`?92IW zG%xPX6!vS-0F4by0zR7lFCTrUn(Fwi$@++)PX~RD!)M7=4!FgBRzJ+O4I-?Ft8qF> zBcx<>dn-rBolmUY4_Ad*)$@vmGaBL)X3lF_|xX&XH!VM`| zut+#A?aKDMlIP!n2P5mXUook>Q(uBMgW8d4PtLR20H#^hHc?H!lZbfE&i87Fe?)YZ zEs40m#uxOSTm_QKd0va`%8&QXQ%eW|l1(;tLaM4_Ya?n-|K;6xNr#clSs9_SL1M;j z2QnTN%EpD_WZGIQAX_DMfoEwigOGn)UM^gZ8R+5Ry=qWg@J+M^ta31>?XxLoO@?AG-!X+8*ySt`@9O+e7 zx#4IcB$oUpkz0NC_VuH!7(4{xq&G%#rJx8VGZNXK=TCj{5;XQ><9`%&!i)h)^N5#7 zl`QJQQ@h-;u&kPz_aW=m3N^smO7d`1iO5zs$8hc_o^Wza&R0u4H2iAx4THXd z+(~`Ol{cET$D2zHH?69|(Gkj(b6s6^E|2K}8j->{Y^va^aC47=v;t=f7TUiAndrcEZ=0W9q%Z?xw6s=SpVZ}6|g z$^ByoMZf$}`d~5{x{SwtOqS$I z-DCiSSZ(2!@hkZJy>Jfu$MtaT#032sm9So0FQrV05@l;IjheRs2 z>A=KanJAt_9EDS&$8TuPxMx>XTGh4;lM9$|EaD4bSBOuVNr2c)rcmnxf42TuGbJS$ zyTgFTA-cLGb>QCAoUi$XdX53C00} z;{!dUe_H4d%2J+!#5EbAS?%WrbXcogL(#@W785-v;&6%E6SWH|7ca2bxUXURU`sRF=p-ni!I(0Srgr0@_{VPkpn+ zaiwXR|3AxJk6J%}54^0yBrI%)AW5!dS{SgFo43W2b&z<#7vK{+n%ZB&tk8V*QG2_pt z9N5c~S#_>CZx!?Rr`<`Ubv-~)diuC8acAA^H@?{BNDH&$Z;Tzmdb3pjZNK|R+DBOj zYD4i??dDrzqX~k>WE&8{Us|?Ax;YdlB`NG;|IQq;`OCC1qP1LP1*T;NYQ?L(h)Ym2 zW*eQQ4d6xq&~h^h_=KJ5?JpBfY@}j5tHb+@r^T)3gp7WD6fawVYxHmRO#GT~vDR-X zdv1xdQSZ|tZFO7$-h+`M9&$r^2DfAiz?o$Raz z4bX7x30m=uZ@D&;5f&)t>9M)R88UN9i3H1??H>&J{xB1Q-k4l`-=A2)^N6VM&SoV* z7Q=%*l@z!S`ZFh`BsL{16^u1XrQb3-eg!&jPFm<2R#&Ho>jNXtVguCpVM2=Z%xJXH zas8OsH`mv`C0tuuUZ12xg$~Cd&AP>nJh6;I0!>ndn*%Pz8&65q_d4dYjTw{Po)1lS z|GnPLF;ucz-*7lPEaC0=TsW(JBX$e2S#@%>Qhyu!zN4kiUEfS%_A|EJ>9@00dy?rW zzZ|X4Hm90)f+y(BQJ3Z`?0zRb6IM)j&T%#}R%FPgU3B7{+jv%?YO6G&b`I;FW*=0F z4+Hx6^a#+$YH*Bcw2QrY0F+y~ZD)RP`ny-^+ic8gx2_q+(q?J%_xKemx)>o-T)3V+ z`rJ`k%BOGV&(rHBiI;d9MS~YkHIcfZrvv4Ek zdTc=osY9z=TWsfQDczmgumjX8&xz`^Ovm!mLHjwBYEM0VOFhFZ}&pp^F zUG&&VPW!Z#PmgpgPH-MxC_@r+vft~M+jjkydx4?XkCl?No6Y=m#T6yzemH%%UC8-1 z=5&~`@ROjv#<33DkXwsMPF17gfi04C7kx^m@}DmtQjbMXr{x+?HjO?=(Y&!PoXG{9 zcg%M6U^ZP$KP01+EFPo;^%H*>LubU{V9FcyI@(?S{Lz-`GB#TKK~xslB5B^^XMaA~ zZCWvtJ+!*I2bM;3vZLwt_ZxvU`r)@MoXlP1gZc(rbg9ta4K1c;iT+GUxSWMD5-_`h z_9^U(eotV$2oCzWsm7EK;#p4H=eYs|HztwG5MNKM17=ck(S>wGDyJ5;GZ^P$h+!Uz z65=T|R+&1py$Yd$UwJRSwYn0g9kBgGngjS?+Vjx)kFO$WM9Y+U%BWA2HD2dABNHj9 z|GnVFysN!SMDrO@^`4$u&cbfyFS;U+9XkXdU_9HccP``HvCVi9JK55WvCz7iN7saSN;|6PdM zgpf8EkR+t%nSk3{_-z&GM|9hKOFOjL1`J2e2lb+Qpoy(Gk z(Y>jqjpt|<)k6vl^*arYG}yGWi?!W`&J$O%WoU4XqkRifGLM;*X=N=iPIjz}?@WKW zj3(SuOjW#kiz_6Kg5pI@s9~0#31QcrLD=EIVjanH+pW@H zR#Noy29vgqrOA!5&Ik$9+@l~E#4Lz^#%+ZpcU_X17Z};DDQ=y)ft2{gdatzU${~)P z=YaxTEx(@FZ-gv(U=yQj?0Yj*QyqTHB{z_Md!^e0;vMVq6o)29Z^X*w zk+o@b*#dQUQNKm2i2LB{BeL!x8rmREZ<0(Y7%9q)B!^rCCwXRdYp$eQj-D`)TP=xlT0!?(`0&&Q!uWMrvNA=7 zKAO3LLw?`=M7k1i^Cmwy3vJ$i43CZ0bRKLM5bBTu6_w$;+0qEyw}U0q3A&*3FY(aM zF}OHoZAmS6x6FJlMAxl=Nb09dEFP{b^{2+dg8Hh@P`uJQ2K0Ts#-8t?|MH9a>g$2# zEZXO`+18q$yTsipnbhOpcgLxshErb*ZqyPNI=t+LrMG_LBtnykCVYjtk8`*WTp`R3 zST&D&swQtI&}zh@c1ULrahwynv>u9jV=_v~^nw-T)Sgxsc&CsX9L#IT_TXyKk9_!3 zh~(>@*n$MFd2R+Z@iW~H4_dF5*1DxG6$mB&9RC_e;DM>X3N zFLd5k*JGq#wz43z0^Qcwoi7KV)s_JCFQcRhB?XFN`tU87**o3!b%h zbT1BQq-+vjt_h*?jA&)PF<$ATddAi@!@l<@MO#q2^h|U=`VQXFdV3_9n}HQ$-!Lty zBapw%7s<_3dmJa|j*n12SCPTMuy_l2I#E? znxA=}N@l4ZRM=XNp$f?E9MnF-4+FUU)ax2rxR2U3XP4d3(A@*O)=o6d(>yAPbRGV( zIyv6Gl`1-s-(uV3JcU=xuYYOZI#)9=YOBRE*ZWiX5^mwcKlhS*Rvj^@n;9!(8Y)^T z+4E;Ws&8tF;YiDf+D+D+fKs7+BV2Emepo+$K2mOro1aPaAjM5SX#~;(TSvkZ63Xm` z)kB)$D3=9xUWDYwuC}B&7mL6C~Dl~o||An&g%bGr!pr|;Q^Jaoowf~FavA)*DnCN#=C0D=tkNZdHgL;hd zLl5kaBj`ehiM4Ra4MN)KLUx^^sfAf8+6E$B&T@z%Jmb;&aHHs;+GfSb%56~@BC`o6 zx%T&Z7uMd*Gj=0ntV|GLG{Flu4jZ=> zq#LR!528hI+Zl3k*JeL{((FDC5$L(G-d-Ou*vEq3prg3?;pwDa&)}OMPadwV02O=1 z8TR-~9zMi$>b47JM=wTHu+Z5KS#Gy6NJA%etN#~>v)*lYbiUooE!Hc_7Ny*m+YuO= zPEM%5TToPmEaK<*L-8!LsD6GMf9wDqUNJU&5S6|v45tZP?WVol7w2Avph5$>%ACiJ z#R}-Pg=u7j0b`SeVhvUxKpb5;b}SQB4!+enyg-nkK;N)0gec5Z6a1Oz9T6<_=2pSzUJ`&Udpp zJ`qrq91GIW)>bv?noBQU#9)FFT81nzPnJ0Flj+QRNan2m{EmEgwhtO4Pm9?Wi3gXN zH|;BB5xP+YFM69oVf-kYQd}JuN}RaKgjvt@kb8Sv)4k^@w~HRY8)Uz9^HAKsaCS1V z(zM|SWbM;PbR%XqMn5g_)n=c^?#B@qDEDIvySZgSa z_;`bKsB)EGKA+TIIa<2Sokwb|G!|ADjmVfmhznZ-{D9{BA}g+cvHnUHRC3#LxT4(h zx5qs?-U3U5RqkM9g4U@$F;I=BKCxwV5>2~v2|B39rfql}M*48hc`!V^LgvGW&{F0G z=X##Dw&JCPtlKkb#Vry-!uF;PMZ&_8P6JjnbhqLi5eQG6Goq*U#lXV~kWQgOwspZ}vF;Bv^UHiWinAa~Df)ab|dn z6x*7X8{0T?h{%rC>xNcdMm{~SCaNvQkW}*>;4jpx@I#6KnDD}{s?K(A%*~^AOvk5F znF4XF{4%kZp+o3A~Y(1U0VN822QpB#p*oNNB@cRG_`;_B} zu1Wt^M{B0A7Km=&pAIW(`0O`&i!aIJSM>RnWg?C8ue+2=j<1}yo@@eXE^%qhWOtQA2dxLM<=Apejfff zxcZuL8vm&qv!YNR5nD8QsG~iC$qdQIkz_wSQ8O#lp(1y+^4Dt(k+(Scju7#g}-k|M!dH_3wLcjtW5`?Xm};MQikI{SzV_egOGs+dChw1S4s-U za0JS)?}l}bJo-Lom-Nj2jcDIYU_m)Rf-hK>Mf%oEQh}=3z|5osSHG{7k84}Q3??!r zij6p!Ds`-kmd3M1nN~VTk1H>%_N__vGH0`8S6Hro_hOnD%1UYu;&%L{%?e!F>_7`1^Y|WY2u!>M(<}% zn+HT&Px>UDITsZT(_)W1Be?*5vUo)w;4b3TpZE%|y{ykeho-hj;IY8Ts+@|`6W`1M zv4ACTw<2>_vClvcDCp*)L}T>^Jh9+Z5DpBVJ>?_{da|eHA;UfFrG?WUgkl}30v8c2 zNs+J@s0PYdlYEy6&z}Ot^wAaL5JgPWTvs_BGF&&FZ$h*9#dWo5g7LfcDqLegov8Oz zapi0AC2G%10H;Poi4_iX7{x5lX&QxDAeYNmJyIKrAt4xw4m(dO%6p}C5KfBw0%uVq za9I8I2L{>Pznui_gge&1d{GjexIWeBGP(ys^2Y8invPoKNCDRQ(&pNBA$2DG4YdU? zHu((BLZ06GPc$u;Bd*Vq z2zwIMXg-L?roKdP!`^*FD+fhsdm=TM(8dn0U#8Ai-!_$}iF|BdtqU9LTA%D|YBH6y zz)cjw#!~Wtr5nK3t4@wBo><3?N2I2}1eez|jVN1(0IXXs=I*+TE54*uI{oU9N2&*# zf?m6Or#j7w!^v3p2?s9Hdx{g8g0Z(sMHtvXeBW<&zP>iz&1q)3x!Vomz@7G+tBW)? z{S9ZTEM~O1(XIcH_FjHJ$K#*lIMf)6X0Z9ESrPr|p3NPBtw*0;1o8+ms7xMbR==5X zQ|SB6e>FKO#3}$260X-GD8sE~1&Shu0#7i&(K7)-a|1zFixzob4Ydx}J8QH_u$wlr z`8`oO7l&s?>zZ?jxHS5W>l<>=!&+&+5PU*p75b(J40}Q(mokgU`EMMv35bz}O&hYuifj52t69<}RK}e@1QG8qh)CXv%?|F%MHYj$NwjJ`4g9=w{ViR3W~*{aqMdP1 z36s5pVi)2tdiKVuy!f*=(ITB#AoF@j@vPve;mVN(fxE2(KibPYBP4Q5jEnD@B%^1) zPBeQJFQh0*BPza_{v7nWwl+WAp_*^RN>b5h*72<#MTV~g!!elZP|jP@|7lhlN^ae}5hkyv$SGwj`x-qVE< zA323BM>geM7S?})xN9*4z5WDbri;$qWqF!2Wy7m+6;ec>5yuP`X+&T;t9e(*YYTek zfJLJids&g$0mm*)w9~4uq;(CmZc4J`W1E%wYX0(DFX8qsjVgwvE$$6fa1dwVYO>0psqZ^(UMMZOZvm{10RX@bc5>qw`};~$g)v>k3ncD0 z{o*6F#eTPqRt{X)oN)eb0&Q}cAt~T7rZUAsi;=2Qa_V*^1{B|VKd*ZEFsOx`5v zk6I8?ku!>KoB^68wY9SdG$GR@t6s`w{@3>l5IS(JwW@XC$qBtihtr@I@;dIXro)r+ zkAtFwK`O*h3ljq|7`cz43|;ye_?Y(Sev>pVXy*LZ+t#neMv^}^^64NKqU|ch+?;2+ zv>VMT2s7fo=6s#W{q&LrWf4p`fLc@BneTMeCH;61M3~^{PkXg|@#ee1kkd(bV=YVJ zk{p{BE~i&MKY7B|1L~xWL&*3EX@vD*?-tVew9i?rH!ri=Rtg&_BYq|bm_itxp=fX4*DV~`|y_VD|1u2*v#g=c+**wp(~ z6b*Q{+JJ5X&^kA@K5y%#YY$pU@}@iGq;Six^@&mT0EQkdUF_)Y@Uul7F z(8!mb?CQ-|&CDEhavk^rY_MF5RGBx^P|ji{fG}AeEgdSZiRe@~f<_|tH0;7rc-cFZ zd(?0t#VtzoeOQn}*!x&<5=b$L=+?!2AY@5!YV?52M~pmw_BUFXrykssBFe6*&9n`_ z2gLDp5A~I<{9tg=>mz-w3+^|^RBRVk)y&b6Gpw=N0~CnGQ53NW*rDzfHcGSycIGj_ zW2!!yS26$GI83;b&bgjm=!NN^Z%3~8S!Z+92*c3~9%|{6UnZ92ME&_I`(e@mbTDyo z2p4f+d@5|Q@S8iV_nJ|4Ze&ehY`%ep-WP*M&dVDkny^Q>%HD|V$66{VT344g8&?P@ zistilgpSsxh70g7cQuO&-rioS959^;$aXcD^%o5|e@ceNP*G%PjQ$`6cIXJMCvgn<^iec0gIa8EN8uJaw#L^M zSh=CeLo(nt+1(FOL~+&gEzrUO)D&o|ybny-pmx7YC=DFhxfK^yPl;AH!SEe-y@LDB zYR>z)(n7!Js@<>~C4HPTqT3;YMa*_QO+{CVu{`OE*OS&c9H@&2Y=<5Mr-9h*3qmGu zhrYBsr)onT=#Ei61Hjo0gr4Dj5sSJHBlD|t{4Wwkhn$|7qi%b%S5CcWUFCm~|MSUc zn#?^h5CSwZ`71&M4u9@FqA6K)OvUdKH1qSg9^^e|nAmwJ_bEn7bnk%8axQ*42IFGA z^X1!4r`+d{>o1nguNVpown!8@4(#B&thFc3^_So7b~LB>pqE4{;}LCTQR(^QEjs_S zctvy`Ti>)b0nsQbG>3R`7V>4Wxjx1{hKN3wMO6DfqmQ%Kl2>!ydg^VaU0UFVU*Xm# zIluIE?t59C?KT@AP7Tuqa8MoO5(QT8zBEFd5jx^{Bh(Spm|irryN=vm{J~1opAU)^ z0#Kt^@49bwSJiN*Yw;h|`L{zy){=L?Mw z9^baKYD`HG6znU{UAk3lv~14SFWRCc7c&a-xVGvH+0Pgr$Ig@mt=Um?gMOjdfz7YJ zw&7w9iVHThI#w_kDnVQR+-6rxLCT`RXbYM4t(}e3M_E^Kzd&lc(nikvJ1J@M`iHg3 zH&X=NbGc+Bch*9fq%7Ozds9J6!rd{{Ns0?6<%0;gB744|AImSSMk49%34KCz1Ive; z{t+T5Zl>R7_Z4{3KHcb_91Lks$;~tf0z9ocLY8)m1^tjIChLB}3c!_HzAV3P=4Z;h zB_f)be>tjYzU!o>;cCZgt}}ryPZXJG?UQ064LigmQWM+;GB5Kq&!LW)HA-n@6%V>m zOC!|(0^ZoC{3CQiv_%6BkSFhaI6KgY>ZoQ*jDxY^9t7%rQP`D z4X3bd$gQ|Jfot;xZUgw$l>;WJgJKrLg`9$_rlL> z!!3}mBR_tjL;NiU-8MWx3?p)Dv_R+r$ri*gP!BA`+$8m&{5crt($|G{fr}mF8zkB_ z=a{x7t(&&V9bB?O3Kv18ECXpg+kB$NlE_!qP~5rCN@Fdton;OI6%*?2%?OrP7`PWre~kfm9SK;8NgD2X0R}@WSxM(6%jtqdzvF z3>xO0TD?^UT9*YAIPK=u@wd~e600;a=T#dk+&?xor$j}$yXw0OAR3{f(HE#a07eU9 z-uip}B6_IU%Tcrs%35v;ZC$Ozp^G$7S`Z1QxArG70xszn-T9A+Zslo<_KV-`X$ODU z0CpZ&Msgd-!q-DKnltCU%lrDGwDJu#D%?mrUZ?E<;G!$F+E)i*qPPzYV&MYJGz@K{ z+rBf!T0MX2BEl1EGX*S=@AtNWid2PSRItfK6w1E$(tY4( zg=1ssTB=h^?1&XvbJ>@n%?}>2^-bDsX<4k>lkAowPqUz<#ns4fth+s%d zehrgZMHK|KRB*35tsp})p<=PiiDgc8mS&3{V{C(`8*~LKZbv3_WJ^KPshSb(&9MLi z3jrO=y7OLVvP>&4uD}jc{PevDbu)6=wKI8FuTfq&1{dmmxqK08o5Ru~4EGD)y|RCS z6BtL3B@{vmR9;`Cb4|PsdPTmKW50$Z1~@+@Zet1Sk}g|D5N#*IbhSo3xFY=(7_ZM4 ztt5D%UIO-RBFZe3NYUo3qHnB zG~{A|`2O~p1*s7uaoenK1vC#iPR`OvwE4PI)B&Ogiz;Hl*u4dE!C%#g!F>6q*+*~p zZF*OEXDy2NNVV-vC`m zvTK05z*JPrEd8-no~;Oshtc=%1_57r1>ogkz}1fkTVm;TXdA@U-}Ezd3;5OyDd`2zMb#bVO5?m7TV`1I`vG;9|vY z{-5OKQC`#(y6HRFjB;_#%^NKh^IlBIT7gKb^_?Sb&lSdajz2sEata$ExOjw4SRX^u zDW3y}T6zig z6d^yd8LP=%!7@WfUL6H@L!M!S!0i(TWsM8hL6@S%cCJ4)xLor}Y^>YYqa*v{$#edG z=Gv#6V6Ui{)PtNm`*baCuXs|rjoEUaIz$z-x*Ms2rjxXL?wOZ27m@ggs-HcJ@3^=Y zkG1`}pxKAPr4Jd!+yAsiNwtG6!3m8u(O3gr$j@sd=TCtKCq9axi|(0qguag*4vkoE z;)q~N%+M((>IO&v>b9tErtE9m zAa9P$oGnP9$^o#)hu+&-R#=A?@KtDv(z21;>;C`nhCHjt9!cn-N zK#221NMWR)b0B=@=y_S-HOYFsC-T=qsl_0&##r9;sI3aGbD_NXS&Is7lHG7ICGs2y zej~Gm4j|0SIKzHemhNg7{=2xD8fe_2z@EoEy2Wy*0u55#SZ|;JYA=JL@TJ4#J6fc= z=_=3u+H>8xMZ>Wv@7|!6?_U4{Q~hhtzl|x@Q@Rwl^j(*$N0N8g6t}ku3m`~cY`&I) z2RL!jQ3+B%ZgN6KectT0CSLT>zjDt1#pXASz_S>~mt%vk9^SXjM>km$D^t_Zah}*| zCD4;ysS_0CntI)~D; zA7JfvX@s`;o>>CtD?s+fQMi0anz@J_P#iu8lkleahiE0~3ZP~G;>;3A_iO;TK&DUS z2-;h0X7D?(K|6LRczp*EnYUZfpnaFj=Ckff|R0ob;>=H%mEJio%Wwf&$$+< z-dxzzG5&cTX`uWgb*kC;p_1Z?rIE!RZlSD7QoO}u#1B&IQ0%Kll{1^)jPCzRcbFJ; zx3O68l#oKTBnUAXNnLNa@&2kTo5AL*6VM9{7jAey`*Ai%=2+sdv$m%WetC1}lrr=Z z4^4*R#gj5Gf-l|=GI;S$=+>?G4QCAAGUvr*mu8f~>@@69Swrb%E!lCyhumh=)HN`v z;Tt=XZW#yS7mXiX_ICx`=3#d0RkONK{;wwYesbZ-sKh&SjmLET^D=%B;)39Q$4d z!?%g2JZN?mjpxb(y;iruO@;xhFLz^B4^nV4cJctGg|c;E{Zt?J)2Or=`R1b@?sjvv0s#el zd;v^d(RdRLP1KmB*R4rPiaUJiFa<7Y5KSs5L!1fUeB`nvAggQ{0M>|maVqKUcYMaB z|J=yMca-R3HUyB7O4QFZrT`H}{%hIihtZ;J`r<>RBGmvr>xR_uu((5(1f^v406qKd zpX1fC985W5AF72}k3Z6P+-AbKO*2LKOFiJU;#!Zjt~Wq#b`=}w+qNCkq(nDMoGG;b zTXp^xn#Ye%J5Td8k4akW;P5CdIQydhN6i*7n(MRT5IgOUF>e*$3MppOynLB6Hf8S% zK4PN`_?%1(xcptGR`p%KN0V-DC3q^=y)Y)db$Y&WN2$kp!i!SLdcP<*aR#bhPi)sT zerBPozX(P7zCAEIEy@^i92s5y=w8)|JTY*J42R12>errZ+Eg;>s|@Ec_fgdB)JDb42uZWp%L>|Z+mQsw941%agW zB)veaF$?QrEnz+|u5#>y;9Dz%(qxBmAc#Unl`q}f(jNF92w!GK2iJZIkm@fecnrQL zQ#J&O`MW{X*M;C$vKw1z-!%!A>o#z%XII`L*;x=0=ltlzz)h;y$$zQDT~|%$-Ns>2 zbyrETEK+~6?fRO5I=xzEZ{1YR&Xf?$Q%ODi7$%o*;G0t7cTzMB+(=ivVDSwp*6pV> z54hm_FMinG1&ikcUjn;v49*Z2GQ*4>`(I5*U$9pm23<}E>hXv7tt3{4}kw4~ZXs&9TS9;hf`pAN78{ z>Gl3x*YEe=_qx7+bzM2n`@SE0+>giOCO+Vlb58oqdQ_Fz)WrsjG=X|%^M7-j#qMSh z?I3gzF%bRCv^dJ?m00jmT2Fs~Fq8)Maw{~t-8OOkzdlDvXT`VWvMKT}$WMP?A z?3<%+x50R{V>p{`s3ODdWSV*b-DRW=l%%d(#70e8@4r=~jdHl`=0>(-zO+%ENuHB5q#n}Hh?Ap6+3@yfth$YZr^+}46oxw#8}?M z9Mv@=57werV_e%aTOCdf@!b_eR_(8pd;NIL75?;A@PGf&zlSaEuSnq~HfLTLNi-Eh zz8u>K&1`A@^LKvZ@WbEuT5>o!?=|EzQ>5fux;ocY)WRYMH^k*fE}W`4s`M?cxzq}B z0>gvHP7ClZQq$@g?Znr;z9lOCX+sY23w*EoYj$HFf`V+c5kC*~nBg1|7cL!T`BLi! zHRdSW6(Vjt)q#Dik0tz*QoBu!sf34I(ICDr<+V#YB=7&=Pbvp>g~?KQZSut?_@7mv zzI}|@@%-|dBB?0v-==`?e-Z(IppFNN@9}8v2U9U7exw=Ge@6akm1x7XM5YGF#=?R5 z+CL5Nbo%$M_X?^n!6n^$A{Z7e`8R9bZ~cosgTw;Wmm<{3l8`}9vi}X1L;!+hb5eYN z&ity&{}47{&i&YcIUi!PYbCdP6xb|!%x=mA z065pj?GJwGMEMWf0pW?~6{!C@Mnt_jrVNmO%sJ!)Qf*!ydvAdo()w}72t@`H+qe!c zx}g)8e%4wo*(i?6Emt=cP5L*GNWIoXUpANwBNQ(UqBp*PGB@IVS+SJb>u&3Kf0zxD^i3UBmu z$-(8vALLm4TZox~J-rU>Y4Y@a0nbw4qDEOAbxscdoX8oO-V6+$=ra|obJ(_hkA`{s&%{|Dg!ugiXX z4z#7uF?{0b0bI#VUL~BiVcYVn>bYkq>6>B4ku4=6 z!XAh}a~?VmZu3Qb7iQhf6ryoV!yMu#lCiMxfAIbd>6;8(AWZq+vUtc^J&c81pCKYn zk}Stv1^IUV9S_4OyN5t;m?NzN5YEq$U-1Ei*fAR_&r#{x@Qt~G8yI9>R81!?<^Mp| zn!X}lhjH-=-M5~c53CnK;C$A>M4GNB1{@<;Wnwc4%| zz;Ot#3wfFq!>vEz8!k>}c+s$uSs8pg0KOHR{K!Pfu7xS`7-y3qj8nviSTR5+6CGOa z5Vp}m*NyM-@oUxLt54r=x>uZ6M97kw4OQv6tZ9Qux6y|YA6`nX4v_+f^rraYEXT$D zgo|w&51dwz8<<|(6t);{2cyaFo`kOqd&@)RW4P|?J-M5DwUjcif6}t9@uZT(w|cGY zx(V@9l)OXI&~{=Q_}2vbs)cuc!wzP|ggIbx?VI;_Unm%GDRf|h=#c2XcxBrRedeJm z3*G#37~MUw|6r&T<1YX()VyJrjQ0GiAj3;X8D;N!H!A#jU z(6EWgDbcB7qj<{;2QliQ-og79OZSJ)6<*48KIEXAOs|T2Op-MUL3i>@R@d77K4@X? z?+_#rL_|~T%mnu*D;VWzQq#cHT7ifEp?DLEwBPB}LP-DUZ}I)?=a|Ajq*(w$l8ueW z!U_y5LPmD$Q4@FNvKCxvmV;QN^lHEN(wtb=kIMS-ZVVl(Epp+j$j? zZH-aM4F$9*xX=2fA7cTOQ^7fI;yJ*AjoV-~Gl z&bWB;-5YQ&VL|(P`)&V$ARo-7`WcKkRt>04q^X)Hv`V8+}z880_HAeneC7FF)rP^7c>%BJz zFwM6d3>Z}ipSd{|acbH(9((BG>{Y{d4$f!D!mPJqtL+cY(bB7hpgF{X!5K#Z?#dM1 zvwi?de=zXuZt{9!tJ5K@9nb%F+;7LmWPKcl3vsFBdcX;+LKeN(cLKm7kb!TuriO&W zU>@?_TZgHlSGGTkVRJk+49@{_`lsTtcFf}YKghgT5fA1AA$QKefs8VDCf$`7tw3i- z3u@1Q&}jkOO4F11jHdMReWEc;Dr`PL`rT}9XwBzVneg?7 z$7_khwMTb2yj$p|%QOCiAMCnzY-& zEyc!;%dwCiEb+nCyyodqs!ew4#!mxJTeBb78INn5UE&7k@HbsboRJYBZhIh-<$*N<<8+-@{m^I)jM9Y0vy*ASmhWoJLh zezGhJWL?pMDd$U#mv?0CKwWtp1Q?e`R;w_K>aY=j)6w?(WiPi?7gMf|$B~zp=70}r zJA3nt=&d6t!~4`!h+ILFJ5nT5J(HMw!M`Hf5InhHt_HMta#^a3@`8)Ai%=Z8(SCW) z2|~QRW=>SiKQP=XbK&h%Jg5Jr{um)V=oL2kTH*bM>Rm-aF_Rg=6mL!wW^G=H)zZe` zbG^5EZ$+rKD=>@}F2Zr-OOfOhI#GD>{*6uHiwZsy#>y~6lPk!WO#s<&cR3*IFiXT! zUhy92NI}mr3>GeG@5$z>f&tG*AUOj#M>a^h@YA*4PB)Mt4Z&lv!{YEu6@D40V}Eum zDnJJYraKEI;rXuTkmsGRCi#D%_oBhtz?*Cp8^<=jGNcSJq4erP_;*@GpxsG67C)-K zP+N{n;ZZxjvBZm~Z45;of{D}#=gF`-gnbP;yZy-fyr}elWfR3KZEo2@BGRz7wENW! zC^=uig3rtq%oBL9!O36{`N!`60?mI;fx&sw+vl?_qBdWVn^V7mcE^$H^2k1H?{K$A z;PgiQE3kGj{~o}ca0F-zcZB;;JT~w$_#l2LY3PxlHyGaDQN8vvd-MSDYv%b;3AX{W zMU`3=eDu&QbV`QWK~9&sF9N!J`Z;zW-(il&)%#{OWPtrL&KM}1fgj|k?3rL@j;I&< z>rv%-oMUG`7^v9W8Qn&Cv1cndbtOztL$#m${ooLvzjVk3Mbg;Dx4S~@_Ok4#VD3JF_a7@4I$~`MnC%(d6!&U_Z94!LNmDTs)5U2nw>@5gVPjo2t?G;JXQ(oV{VP zT`nu@uOAjZF8t&Vb|YOH!agb{Th0)08DhAuCMo8+UDFZM~%%ft_DVes7jXe51jmdccFjR+U}wn&0q(3WJ^j z#_zLz2~q<6Ii|!i#EarS2!$rPGLl>G8;>@%*3NmiJslg4+3nIZwTQ8ktms(ypceq$ zIK|+&SJ1;k{{XjJ2!;~0ea`3*aN6`><>I$~+kS;klElO^Wb7Xv6S3Z0ThjG)ZdelZ zK7|ox40&3y5HNl>aJ)iD8m=3!tW6tPlzZT@71T%xJw%ut7yQ*zJ9}n&kcA$o00Xx^`ABdSC;7+L`UNZXd=&*YTBoWf-Qol{ zia!m|-dt7IWl`TRbLK;yhM!~jtH=Vy^=ZN6OvkrDtJTkdzi2AgppHnNxhQU%8p5^# z`;}7Cs5c7wql*{$=T|JDrD1}kZ=zJJ4#CZ82aU()?d@&~WhToHJ8JJqeuonGdGTP# zsD!%YdMjlL&KfDuyCWtOpA(Dk`T+CLA)UPAFFX+q@`_BGqtaOxIkCHpjZcQTtaD$t zA=h8Ud`f&o%$+zTDwC6l{mgP@|EZseGr5U*N8$i;7WA#CHZid78?{Ac^c*VA9Igpn zTy`OgqV){0-7LR34#yiJ)m6;xB*Q4GhJF^D$xs7BQF*cK%44qHTQopJ(Aux!ytWC4 z5AoC^X5u5P5d7E0cR6K&MV(AMMX}1o9v_4iruKtNEDli8SirXl(B}+7=;pPs|-J7y(CtLx)Dr;d}@RVD9uszhag>$rY zR0FgHXfhZ~z2_;g77X+|+EQgZIwfj(eZuZ%|VK}?YIl&>Po zPCheaBPgiDt%#?iEy50a-Ru1@waCnStr#{@!*dFWX9|m-So(F{Fv^;RsH>7@jJygF z$r9+rRmDq)25*47i0V?{g;!7PY%HTLD*OLE$^LsbW?# z-k+!0E|)%GNHm@k?ZI_^~rL;&-^Q`=8XQ_)=aX+0ZinX|&`U}ZF*@YaiBsyj%sHX^uP zRg8$uIa!)q1~snrAMA&Uwn|m+!ZPPYjoTK68zU1#8E+Qq=egEjK3y&gqKg!AK+jhb z@{SE>mjb=oRh5<+Bd}2n8}?5X!L2v8!_ciKQks(DD?C zz=4lvi&RF5CMRTP`lNEHgzn}q2*Zb&>;l~psYMn!i$Su?y+U?xhEn#W=5neRf|?h5=dz)*@T^x+ zWw?}DWQT^b6CH=`L};qXtR+cLcdx22C{38m;TW;$@tipMt*}`f#Oc~`jfK9MRk)<<9?nX_>9U5^|wpCdM@4z@KA z(F$SgJel<~O>8-<`=wsN+3xa#h==OV-8>ya%9%D{+Wi@p{RL-{%KLhooFi9StE&z6 z>%)6ld5x?KWPIMg@QF-#B|MPo?&0o&8IXsBRHhl zQCGcR!(Uk@@=C_{K_!ulgmB1sS!K2j!H^X$bhEklORN-Eo#1QJz&Wz3>_sQ>1I4I&$Zd zQohvUGHP)c?twtEK&NGW0>~e%MzHTd6b3=H6!f~P7*ZVX`RryX1~EW*H5{S!5(3HH zw)i~P{TS|XzZIiP7N5g`3z<_rrq!QVZ?uuXPBIskev9^ejtnX?(o{>8ok8)IracujccS2GLAhc+L;a>qbR5nD8w4%Dcxb=L2CY8 zZ96*tKCFI1QSNH#N?Ci^{ujksKiE`vfT7k&QFV7jiN=n~!rOc5r?c+#7RZdsC8E|| z099k5y{c+A8@4&vEl4?hl2)cto2+>JvHI!zcko0jc4f1Ebg*Uy!jD#J!)Pmz10BQu zo!7dPq}bP{sZkQ_=T;+J+2i=PjiQ)|8G+m$quo9`Rfs8fK+%zAT3TUmR#E=cRM27m8FmTn;umXumWVia4lveEzbz{nUeaH;W3R>{#P$ z)!-X+Q$}EMp@oB(uS$3CTR7Fpz)(h>=WZ?;Z$wqy5!$L%y*gN<)%VkT_QYZ)@lUh| z5s#_N2Ve9~-ZsM^YZrS}A>bh`&S_R@XacVc`-fD|m9$_35b3CKTR`o)mikv9*GtA} z-#?6`A$@TXxDDHj%fL~;^L*dfz+;KCgk|M9>^xb=8JcPoCP#BEUG<>2x$k1sZsR*X z>^iN;LA|Z}=!(wekbDG#udmQmiq-`)aK-!7a?Pv66_x6t5f>Se6P)3y|be?<((Wi?UKDAgE|do z!5UKqFuJi^sL>i2XDlQ`W>vXeVU>m&{rt9LbmV2MA89qng^&IuI2%#o7Z7`B0c5tr32pn@u2+5N5g=eKVGbI}dazk3^1x6Pt5ePye|6tz()W2= z1xi`Q&e6!c%C~Jjlk@{oOAdVO^~mJ{omP|J`?k56m9`Ti`%88Mf)_6|Z-YCRd3!6B zRt07-;RhQO)K&wt4Nfq~Sf_SqFJ&;Z8ep*BeMce}{xizNs-Y5i@tr!O!D9zhBx5@u z4NDViL4^6ifQTBcJ|M~==5+xUsV;7_-ji5LC3~qv--`ht=|rKIij}x?#&_e(Z*n9E z;)QLflC-S5=9_QcpDcZjw}K8ib5Fry|MH&%_=3_bYq*9C!ME!(!H2p+oP`8bc$ z@VjxR;ccBSZweS+F6g<@gwZizTnfryM8yoI_Ph0eVWVgYXgC$B3^GVfogk*F1W8B* zC8V*{2?n5`@6NkA<1j&ymMfX&tSawmwcqT%!n3=IVwTRw&coyc2-nBH=?o=32C1-A zq13M#F;#z`QhXa_B&5S%vU9M(Hw^MwWS!w z?F(>4z7Fy}Z|(7BpJs^Rhw=#~-I;)^OCFOz0+m-8fAU&V6%NT!~73w=p8m zRda(S!zbgtCj(T|lG^C?d}VNLOHHt<7Jr@_G_|6{M0w_6KDve?9QKrvU5v%}oB~mt z#NTgQv;)uIl_T828RDQWIYOJgx`BH-3yrz810PHF5%2D*_g3DUM|SjaC^l&kFZ!$O*D)3rw5_3#lNM&B zaR#IBKQ#O-ID6F!eNln94g)Si?#h95-odv-)n+l1g+`m3xAIy&7K>a_J&UQKxKc-K zzbO@Kf3o|{99CT9=GH@Dc+HveRERs`;XJRNh11eO>qOTa!RZ{Se!7_F=Ow+VwcmKu zi6^(d#^+Pi!_@{aqFP}0`Tb_o9oS>Fn~M^-1<(Ho=W1E01EWHPvvKKpc;|QaAFEPh1&& zl?4=@DBg{M_Y3cvEeD`f7_u<^nJ>+VGjT|Hd!hZ{Tq$JefW@P}tl`e9QIsc6ftOPP z@oBTtgMlvA4!5jpNtCc_S@U1q*l<&ug#G4DYs|^8Oq}GhZaurwtkj1&*Jb8)5_{DK zkOiHItiPL$VB)&a|K!ftbVTcYni&5oj!Z7SlDqj2ZV6vFEoDearaY=d3#Vz(z7Xe= z;{)>vuPcOwm5G_W4xfnsL6$McY{vYw0c(8w1xPWimE|rqF=0Z>D?mYi;nW5>dm+*Ct7phtr?Ycqe#E=68PHz)W zS?uec0^LBGVL!*Z>tn|OMIQpnar+D$!htQBsr?kh;6sr@++Po)fNGA^en*Y7S#CB$ z2J;wQuXU#uBP?=T_R^$~R@i<&55z=#Q|=Zh7H!z)+w8wHGbGNPQQKx$S7&Q*Q8wlZ z)+Sd#3~6-I#n#mb)@`2<&oVXo!6l4M0F$c_>Wp~ak)_6MGY&Pbe6znCLXIjEzqnVE zwaI;;A=+{pp49t^QmoP&T8l9Tv~$JNExv}O_L8EfA0bN$ur=68%E|m zc4?ADQ2>C4?bWZh`n|kcGPTx%6=v?lpXt-*2QOPx-XZfqq>JRbBN}Sk<7eiWm7IMk zy)YeL1uIsvn@{rf6D!nNWOY@K8tFt-fY}hrZdQw!X6o|!pB@bR<<+#M2e?_Rjick> zb1CH_tNjov1Kg*#_MnhGLl0avXSx=ZEsD!xg*42te8hIU?1erzGh=e$wPjssSt9u3 z-#P$<=!aHiFPM?yD)af?lra0PC;Zav*caLJU#NCx4VzEdr{rj_h3m@gIkxG}>^<8p ztH2a=ysyq0)lr=R&$EgCtesZ(hb|%dYR8IA>vnMGL9G zCs`n~3g40;8F3u3mM0EDR;du=dBjWkym9Q(c)Qw(cDi}Ez zU`d@-CqKT`))=hHxkaCqg`w)Jyt`qP(_I!o<$>rh`&6mfTV_W?{PFHUsS*QR?MWJ&KPT$L|I$jJ>2W7%&azDUV5V=l-+NK)Fsj%6s7G^!xLNjNBtQ? zPD3y_J3b6-^;1d$A3Y3nDi*ucX9+cZy*Zl}woA?*96(4J4G4c)abn3(w3HJc^Mf>!;4Zy zkA)}V_S1h-4^Xg`IB-`W3fTwAu&VN{ zP2hd#4W5(gf1fJ88eOoL8Qc$D)~$R-^n{I9_M-|Aqvb0}Tvdm+q2}&NZ=>*6At!Yh z5f`RO-F)3@G#{6UPIls&b-BGH^Q*txrCyMTy{Ay*-2SEBcJ?BVy5pAG{UEb@xT9YFu|j#n)US()2VEDcyQt!v?Iac~xI{|vXw}zS1*5f$4 z{w$t8szIr-1SCW7m9gTjRr#6lprt&Pd0%rAMq8 z>!%rJS-;Ig8YXo&7PvqDb-i;a-`|D`g26(USppX2G3Em;@ZBcFLv{6Y@`++5*5P;c zDl@jqxV{#QFcl&e>@;7a2a4@Zy$NBo(=j3p4yAlYd1CaIG+`6|`mehv8h>B)ERnHr zK+SF|vQP@36}*g1r_lp5e_PRz@w*ZeMD_^r7Q=6-FQw+E7+RZ_?_ z;Esj#(hQM`GX3kP{o99U^tS2fxqAV4k!!=@iXu!rA`sBQlG7sm0wqnz82;~rG4+v< z%5spl#tJ2ao{{P@Ji_Z|&@C;SiSLX-p+L%)MwC<^U4&Zu)7A6}4z_0_I#&@VMcK1- ze%D3(cAB-vs_@7@K>(FLCX8vkaPXf_34dyvqGdsRct+6ab)0DNLj`)wcr`?@7kKQn zjxFz~aGSv$X5-(2m2g;y77m7sRSQ2r6A+jjCzw3c8OPj#-A|3dQNT5vP|H1#HP2T3 zYY{xh_G)BqFW0Tc8hmbsr)rk3cSUj?44)uCbe>NkJXDM!hY#TG`K#O&tv-B5QgpoQ z{F!+^VAlu;<^|Pj2(Xfek2pf5Sg*#7AHHn|I>iW2ZP6Y+Yqv$0rSsN}3I9;v+p0v0 z3!UIy67XfGLxKB=yu+m&;t+zj_V6@TK)<+F5 zO1QU7Q1j?*l8sg7J+;oViVX6iZT(8?6gH2Uh@@S1n#BFZagN>k2<7iOPIiF2t|S?V z0k5ewQxaRh`s>TnA;&uqb~ZIIOedT~z|WtfH2c!$4;eWz+&8&wLG>qU44WO1R`97~ zVAq3rRethw=Z&K*;gMQM4^M3N7+gF9pSf_a9{KpxG%N81(h!^Od#duTJGX#y@9HP5M*V~8?l2W4N4Ll30=l0!dbsMZH1j>=3$(kxr4Uut`rh&9nG|H37m zwY7Mj&O2)hrxX%p@ zKz#2N-0?-+;_BI(!Y+z16-I^gj%;>eA8X~Uj+E-QBlG35-5y!E>oZ@gTrs6OnE%ET zzPeU2b9_Cng6cr^57&pMOY4$PbA!6jq~6$%{+{yQbipwf?mDe(P%G0xGE^;hSCsdK z`lg7RJE*VfbujHK8vdwS_joy%^VMzX>tz!}rwj9Fsjl3ti--tbR3qPkH|Itj#)Xgc z{d{p7TBOK%fJNoxoO{fPn}Up4Eq#-B`*}(})?U5-R3k(6w&rTO+D2ma!G6w|ZAT{L z{b9=xwR|;JFbCfDaQKtp&b)fyUTAT}&BeU`_7tVmM7kN~RB~VvA>L;acjz2Od<-K;SY#%|`}e|yYDR+AhOV~J5$^2c1rw44Z$*+4 zPHtuOno_YlcO*TbcgDgMwT0%Qf`~bc8j5T?pg)s>CCLUnNYzU>(pw>2yAwyyd14Py znGqWGVDA}%NM6KgdeWz7Z@~*vF~4j{TAVvC9Ngz>XuKV3>S}d_{Ryzf^Er?gpd1m? zBqb@bKiDV4XWEDIx^~6F@WTBHN&9-B}jb(PgY-+N!WiY+t+D?zZ+Hr&fM3yZI zEUqZZ-SJyF*z#>9zCM0bJBbEBo!WX`$Wv7-_mt<__;Y59`C5gzL5?-*p5E&ppWB`H z^16Fe!=fC`W@iE|kIHCVqso{t=4H-q)?Jy=%@CKWl^rdroPatGMsd3Wd-?K zn2oSHKTg08tu23Sy}G;)rj%a}-ySnuecULg?zCgImQmkW$=NCp8wr8EMsN6M2)*Um zeAvWy6xnY&CJTKysy4V4JEENbeo1;(cEGZhKIKD?ofIAYnP^T9jR$!)`i<;@7%MRM zc?r*BhTHf#9R-gi2+JmdV-Kcj$1x31n8WxfQei7(xFV@5ts zoRnDWbrm;u;e%l4hs#J@&iKJ-V>RpUDl_EZN3&%Zp#7O>`HonK&1PG4p?STx)l`4g zRPLYn=@bi=kHj?aRX;E8X~-@$uhDW@wfh-QBsXCB@R=^($hZ4@!^zwt%`s#fEu0>X$;bG!cM~!}*VoD4@>g(Z+^r;DV&S;3AXzkx`6TUe{g$qwCP=MF?;5}Q`tMJTA$I(ZO4dJV7Wdd zLAD*4yRkCSy7LzUWu>9QRRD8vkU5##XoVOYKQXlNDP&eWR!A6Z z=tnCeoJj6KZ`;~FY{^hMU!W1#a(&145Y(&6}HjRMbQxIRGD=8gmu}l`7oeAua7@VN#L#g_|;xD`gpU zoMSdEc}xKp_#Eq6xw#MCOuakmj}6^NwZh-EIxxXPfv8-Ca)1;mm1Vj4bc~C7{^tI8 z_4+_}N;WtN&$wCyT8ftRs1SCh07hJ!WQ7EyEv7q=g+AFp6C|^t(h_4{<{L~`?RPsb zY!9>ELDu3`C&s%K(*NM7>U_sbx7K$Ge|m6$FcpsKgbke@2_go}z&Lia3A@9$8dg`= z;xCY%=Q(5B-hml|vMm>OS*-CoDsO(zS3boVzcP>j=O~!l3<@k4|Zu>lZBNN{u zH4FBNJbiE*!d*&R4O0QIpZT$)ds&u#W@Fb--O&yr_VpB|@`CJTYlW*1T0i2(j^jP* zk+2mYRG220?L-Zc1X;KDOL+m~t{Ng{oC#3x^TWwp6BPvic)OyJ;Dh{GL7A}j-DkQw zG{vv?rbAeBnq6ZX+2;uV>mv_M|Aj1cQO(*N(w8xGHCne`%{V7dRcY9bGOU21M>^&` zBl!RLy*n5qaBPA9cmBt5?_YG^qC{`udE+$-4Bw{kJCWn8F>2M=&E)?;w`;PVr~*Zx z#`69c>-mE|gss0*mIaH54nmS2HXSu6?5rtiUY5=}Q`>aI4{J=-SVpFSGKJxT9}u9t z>pR*PdnFG2{-lOzP3mCMmodVn?=Sm5`T^W{Cim-ya{{)3f^Ij z?FVLTFC;^ok2zZJW z{Lu-ram=Xmltm{rD^MTP7nhWuJ|`WnK<^7Wh>V-pls75-U_AuA5k59*`KfzA;K*sWa90n5T#Q{DnbMEvvT{@u(p zjiR4rb>mn*&_WS>i?ALA=XB-SglO<>i32hx>t`Ee8xVj>KwyAPuc;{EW|5v^;(Obx z*r`p<<)p`A*3s*#GKLzi%CoSlb{2rdr4dw%+oh#XY$3Cy5v36)?#ts}P0Y4_@!V-Y z7HTjG-qM+yD-Le1gY37hVr!g0>OkQ3=LB2=tVzK*CL=t9T6FV}M`^q$LO|;ZdY)4& zg;1;u^o1;b0fdN-F2`k!pLV$^lT3YhxHkOL^oNIY-`>=#b_}PSzU2%k?PW1m;nts> zy04gP30P;^WY*+Nrw~X9h?Y0Jl1RQJjPHR64499PO2{4t<@)<-x!@^J8e1OPIaThr zO8=Z84vQhJb_J_4IX{^EC|yC?&W0 z!-beA2SJdUcPIkyrO-!WD z6P~i=4hMRCr(cF9bc_7P>OE;qm-T|~I5)uToy7Rh=J20cQwV>_NBEUHK*rQ+c$3rK zyvG9qofuQD>vwxKc#|9NkjbRTU(|#l5jyQ42>B7Q%GTya8h=|=%*5CTX8Z^Sy3B@_ z3PG7ZL7=6((j!vTqdY|H8*lQEi+E09dI?sV*yA3nwwnCjfRDgtY$3Kim7q8NRYR#O zXfd;>n8bjRcx1iIVM#oo;JbBDUx*&zRlj>N(F+v6zXH|#M%uY_cUb7~A}gr^JR;p6 zpBnwC<0bKdDF^`r(J|aHGwgtM=PN6>$4qBN>p-zOCq;tSTrt27weTAjnUI8TYdkXf zpwPjtkffC*3Qf1f#ktowr~MibsRG~Q|19e7k6p*nu4=?!Q*|_&#RJt{@0+|j3tN|1 z27^ine3|++84wRU_MKnLT})r{Si5{{iSHE%+ge=tobMPx4wlg71&oj`@h8XYd{w=l zG?qsA?PRFMuPDI{GKE%mEezlu&ypA30jE;E=Q65l%HL&uDPPKSr*1nNJ^pVs?M;bfS^-y{{q+Vi)5aS)Wj4O7198pu zy=L{sWK=Qsny=;JwVq=wyXg=NA)#hjTIEJvF1P%)*@f-?tg!E%AGBK&V^!4(K{M-C z{16AHB!6GH86n^dQyH|SN}~Vm-7XOqc>xVwU6Gq5<5r@h+$kck^Rj~+c0s&bSyg02 zC&VUj$T5F>$Z^G;xvY3twpn7Uv+Q_HY}lJ!lWnVe(v^4XlT+k5WT&=FRC?)n){A?^ zaXy9qn;b8%wF~X#g(Tl(A|?9xJ$L75Wd86h7;J0e*)|A<>&$oGO6FOg&7X-)@M^Ek#5?3-+{} z&-NOr`g~7^c{fA9(JtxF_?;$(32z9Xp{&c^8y4Rk*!JvyWcdq3dapXkU$bj{&TRl= z+tiB-^X{tKUKy~lxc*__vq8v{Ky_HS7hm*O=X}i|pe=-F*id7mOr(6E!PxuB4gfWD zTcL+9EXCTHhd7<2k+Yl^T^!V&9wNm|Vak@Q-e+`{R?ViMTOpH?!jRI$XrkN~SG3ZQ zQPw!y-l+}C1sy%;t^j}6727PQl@Z$<$aJ8UAQ10%jP1SbX%^|qg%A0DGekNS=S`-A z?tbfLNqebp`3xnmT*@gTo4I9Q|H8HaemBCdugX%HuiKgUuay@|+`L0d{U2uQTfbtz zCHnKTEb7Ij0-7qmEOw|LLV+?y(?!g75WA{oiGZ1B^nLRl*?{+(v8Cx(fvQw9PD~6;)GGzO%o4?Y#!esUhd>eD_;zidi+up5iQlw6!@^KAtOLkNPgY~0ANie_pY+?CwXrvGS)4d^nr3_Y=}LH>LfalvLcWxbLUsj?`#N$e=oyfg_Rqb)efb+rZCjTS{{I zX{Po&YLJC>71*o`9g;BVtpPuhx= zv^vW&2jy9YKx@46;D5G6sorCgv5>145+171KAnE>K`CVan>!+DCkrb1Vv0}~Dwje3 zC~)oR08)6hSNl~3bX=*^4TtVq9=&u1K9?oCXMT_C!9s+gF2w%~oTr7nSmh(Bo0c4_ z-8fM(6#Wo#xu5_aMbigPR53g;j-(0(Qj%HCVhU7VC zTR1lt%+0USu=Tdk=GL+$Y~`~|!lrh`Qr;q|@cmuoT+ucb!MV1V_5-gb3@mpMQrri= zzGR>a_JmH9cYg&d#TKP=QcA{%Lk`GDpVa>(e@=R2QwvKWvh|}UAl&WgHj#MF8%}8w zZg=n=Bd?z9d4)QC6LJ;!W7hL6IU>L6&V8?*hEv}G&cjt|r@Jg)nIw|=_IRbU9C$LS zu1IG>Y?xUI8+Sb!S!`US_qN+F3Gb~(p%2}(=Q)U!Tg6NxVv!m(3b!o!4?^Mwd z@U(}O6d4rp$YFJr&^SR)St4}wuR;obrnYz8H+D3TKtgO>J$T- zDLW{L!PC88LCHC#PBni%`IehLtESeCu*~$C3{Ejrwt@1dX^vZEMc&MuNhn4(B(Vm#P5?fu zT2srDk@H}qX-$@9hTmV z#n&b5hmHXmMbWS%%0_>ey}9f}dT=R>V|N6k0U0-^;`xA{0wwZeH)&>fPiSCNc2LVP>@(-}~QX#83FPR!p{y zmReH0D<3Tq!MkJ>m#!$ynQXs7pLgn(h-{Y`PzuO4^RVGbG(<)l;q%Kv{=f6fX+$D> zUEd1|-tD(PU@G%WvP=rER%hZ4>7&Os-{#1_MW{GpNH&trGCM_n-RnM*MRm%0ZkVPYNcZS2K&9^}}0<->owO zAELVxC!GzVA6Ag>eFL^-UgDehTb%TQmPXl6+wfHd;%zJ#I{)#h%WD2kk{&Z5dvYZ3 z5jYP|@MNp=XAbEpW<%9{S>k?q_Bk2FRLip7USHfZ+l1xPxfn~w9$H+-OI%0f_9&l_ zmbONT)$5t&N5daJ^vT9*aY|qt)*Fe45icDEC%lLi7Q%u1P1wa5`8nYvf!cZX1uAWH zINVT9_-7W;Qc#ZZr9>~0%jBbR45Z<)YV23HxcKZWL1@~c%B`rH3Y_dk2VCQ71@JTv z5Z5h<|4F6`lg7f_Dj8AlJz+uXIn=nQ&-gaXI>w09w+P{%E!(RwNMhV4<>TH z9MqBH5n~aaG~tcOG1z+QL1w<-OX{gMrx&KdWixEf18BL`kQiVw+mfP!t=BfwtSB)+ z>B#L4I_z9RAVy zbj(y7ImKF}QJd(GWE=36tkq~v`(Ze{9kVR$E&FS$yGGh8x5v%QbzwWz9TI3UB~s#p zZQ2ZNSXpWfO)tOtoyQdLH}8y#B2uYa4BkNsCYTw{A6)StgYLAxJM}zvdEj})q_>JX z;+gTBe2klb^LxFQ#UJFC#~fcyLjIrjuKcZuYYm6eN);$7-~yVoXhi`<8y2B#dVxfP zfNVkbMHZ1oOOOgkL?N`G(1>h;1QY@ZOF&s92o$1N(GWrs5W*&2mINY@kOUf%+(E0? zKjHpx&oA>lbIzRez2EnK@60o2&YZ73Zr;@(#Kzp_QUE`Y1Lh$uk;x0Ds@8SwDB1e+ z!pyN9Zfe>GthaPpfK9eN{5dQBO5-p$FlEfj+^98VlDYk9K0f&%i}F>c^uUZsCEYJB z>0l9|%Nb_50J}tadL!S1ussevERHD`X zW4L+`f>v_8Nr0sf4QBbM_G_UJbc4Qs%{`}w> zh`EtK#6Al%jUq}RPcKsMkuaEUUYI>B6Ih|Zeh@w4Chn%RO!%#dC+ob`(b+ZIIr=US zhgQAsZvoZsKRrvUq&dd13AMR5zF+0rE`_veR9Ug0WP$B@+JLKWZ<~8{YAfux#bt!k zLtdB@?L9=KkzMSyRN$M(<^JHa$7_M)eN4-Tj~g?&10nH_4%Wa`^P57I-zv=3xkV-I zvD3@^=;Vfdl(Z&fdc|zR3viLyFXeso#6?w{bm%e7z6ITU5m{l^E*>Z6Cv_yo*9MPC z@&{vV6*KSD=?Etm2Ztv1x#t7IeQlcicGRsUO;^4RNREk31q8c?NnNw)cM0*g2fR#J@OO{^%gS z@InuN*ZT>VwM5U@wJ^hu6B0G6<7kOBF6q&V+gJ~j)NX>J8oyQW?~uQL zHnF!FM$BMNf(cls{4EJAAx-6g%ykn8UO2EOK+fXHQO)0bt`dUN_&-*At08f!5jTWs zjMx@jvQ^bCKN9-tdCAL{!V|*!KaaJ^OkDjezm5y5a!J5=-Isp1<;EtE>a#uG_U1}r;k%-PH>kjIjYCmdRC>EV_EFJVff z07{Z*XMmul-@GviX>f8+Od-v86hD@(D4%$KsZ=(N<*~SdWx-b@QTXo4=lG_RlGTT4`)avx5S0%qI>Q;7GT_s+Az7?g! z;t9BzIa#2vf2Dw^1cx$S8wH#3c8`OlK7@Bpmd1iErCP~43zB&GMnfnHenmDhDHmVah^pyOkt09{p!IJ~=UxyLDfv81rr=gnID_|-%Pey%;e zscOH@H9I|EoH{@VaROJAjS!@taUt|x!@9j#ZQ<`}A>9LIkh3OHcS;iUXhR{%yW(Vj zVc)S^Ag@Co{ya+}cWX-b+hMnWY}jsU07NAK;=XNwbfkkj(E-$HI;L@kWIC~tuOHO7 z$SGgv#D#+{H)#bCS`d?OK>cw*6l40F=n5>wnhl!T-w?G62M|Szk)8#8;wg+jZ&*apw1sHtyJ>r4@A#^v%VnO219Ot!tp^kWoVJ-CK$iElogyM6 z3LtVVN|q#QJ7oR`pZi0oUBsJIjPhBEait)G=@2)4!TF9Tnyn80p);y}prLOVY^L## z36&obkEq1@SMZp=%gq^7sbjPAFnDx#fCIL7>YrhpfvJT0*MKW$J8%ya50Sumk#<}I zeHV@%zz)Um`#Qi=TJtw7iqT&9RbhWLRx3Kjv)q0WYcBt>EBdM!9zqACK&3P;1NhW( z#KRnIg$}&85s?CUplj}{r6Ns2u(Y-7^lo!MWceoCv0TEnaQ6oEQ*yhrid?_FwX8;y zV2}lnSfSDJ6Eo9uyDFpxd0(6a%$x8lz$+5dpA!udRAU;n+Mys+_XkIRLp1q@2d_x^hk zYDz?<`CJ*6HcpEof!|?Cw#&zAkM0{TNhukHcZiNd?>foaf;5k9;M=i*?|SOA^1f@W zK`|k|5e?RyMI}&x)ka$WQHq@;%eoetvFpFq>$n46uYqqw?|ZYfASaql^VVd}Kr$#` z+67<+=;h`NCeT0Uax%LV;No>n1kfI|pJ2UHRH + + + + volume + + + Default + + + + + mecanismoGrupo + + + + + Tecnologia e Comunicação + + + TIC + + + + + + + Compras Indiretos + + + ComprasIndiretos + + + + + + + Obras e manutenção + + + Manutencao + + + + + + + Aprovadores Compras Nvl 3 + + + AprovadoresComprasNvl3 + + + + + + + Motoristas + + + Motoristas + + + + + + + Requisitantes de Vaga + + + Requisitantesdevaga + + + + + + + Recrutamento + + + Recrutamento + + + + + + + TODOS-TODOS-DIADMISSAO + + + TODOS-TODOS-DIADMISSAO + + + + + + + ResponsavelDesligamento + + + ResponsavelDesligamento + + + + + + + GENTE & CULTURA + + + GENTE_CULTURA + + + + + + + LOJA AL + + + LOJA_AL + + + + + + + CD + + + CD + + + + + + + ESPAÇO DO REVENDEDOR AL + + + ESPACO_DO_REVENDEDOR_AL + + + + + + + FINANCEIRO + + + FINANCEIRO + + + + + + + OPERAÇÕES + + + OPERACOES + + + + + + + AMG AL + + + AMG_AL + + + + + + + REGIONAL ALAGOAS + + + REGIONAL_ALAGOAS + + + + + + + PREVENÇÃO DE PERDA + + + PREVENCAO_DE_PERDA + + + + + + + MARKETING, TREINAMENTO + + + MARKETING_TREINAMENTO + + + + + + + SECRETARIA EXECUTIVA + + + SECRETARIA_EXECUTIVA + + + + + + + DIRETORIA EXECUTIVA + + + DIRETORIA_EXECUTIVA + + + + + + + INFRAESTRUTURA + + + INFRAESTRUTURA + + + + + + + ESPAÇO DO REVENDEDOR BA + + + ESPACO_DO_REVENDEDOR_BA + + + + + + + BUSINESS INTELLIGENCE + + + BUSINESS_INTELLIGENCE + + + + + + + DEPARTAMENTO PESSOAL + + + DEPARTAMENTO_PESSOAL + + + + + + + LOJA BA + + + LOJA_BA + + + + + + + TREINAMENTO + + + TREINAMENTO + + + + + + + AMG BA + + + AMG_BA + + + + + + + MARKETING + + + MARKETING + + + + + + + COMPRAS + + + COMPRAS + + + + + + + AMG SE + + + AMG_SE + + + + + + + LOJA SE + + + LOJA_SE + + + + + + + ESPAÇO DO REVENDEDOR SE + + + ESPACO_DO_REVENDEDOR_SE + + + + + + + VENDAS IN COMPANY + + + VENDAS_IN_COMPANY + + + + + + + REGIONAL BAHIA + + + REGIONAL_BAHIA + + + + + + + CANAL LOJA 01 + + + CANAL_LOJA_01 + + + + + + + AUDITORIA + + + AUDITORIA + + + + + + + CANAL LOJA 02 + + + CANAL_LOJA_02 + + + + + + + PLANEJAMENTO DE DEMANDAS + + + PLANEJAMENTO_DE_DEMANDAS + + + + + + + PROJETOS + + + PROJETOS + + + + + + + COMPLIANCE + + + COMPLIANCE + + + + + + + ESCRITÓRIO - MATRIZ + + + ESCRITORIO_MATRIZ + + + + + + + ESCRITÓRIO - CONQUISTA + + + ESCRITORIO_CONQUISTA + + + + + + + REGIONAL SERGIPE + + + REGIONAL_SERGIPE + + + + + + + Transferencia + + + Transferencia + + + + + + + expediente + + + Default + + + Expediente BackOffice, Logística e Motorista + + + Expediente Escritório Matriz + + + Expediente Lojas + + + + + camposFormulario, documentoId = 590 + + + activity + + + centroCusto + + + codigoItem + + + currentUserId + + + currentUsermail + + + currentUserName + + + dataAbertura + + + descAnexo_Coleta + + + descAnexo_Entrega + + + descAnexo_Nfe + + + descAnexo_Recebimento + + + descricao + + + emailSolicitante + + + estabelecimento + + + excelUpload + + + fdAnexo_Coleta + + + fdAnexo_Entrega + + + fdAnexo_recebimento + + + fnAnexo_Nfe + + + formMode + + + gestorEmail + + + gestorEmailE + + + gestorNome + + + gestorNomeE + + + gestor_cc + + + gestor_cce + + + justificativa + + + quantidadeItem + + + requesterId + + + requesterMail + + + requesterName + + + WKNumProces + + + + + mecanismo + + + + + Atribuição por Associação + + + Associado + + + + + + + Atribuição por Campo de Formulário + + + Campo Formulário + + + + + + + dpf_di_emp_filial_filtro + + + dpf_di_emp_filial_filtro + + + + + + + dpf_di_inicio_diadmissao + + + dpf_di_inicio_diadmissao + + + + + + + Atribuição por Executor de Atividade + + + Executor Atividade + + + + + + + Atribuição por Grupo + + + Grupo + + + + + + + Atribuição por Grupos do Colaborador + + + Grupos Colaborador + + + + + + + mecCustomAprov + + + mecCustomAprov + + + + + + + Atribuição por Papel + + + Papel + + + + + + + Atribuição para um Grupo + + + Pool Grupo + + + + + + + Atribuição para um Papel + + + Pool Papel + + + + + + + Atribuição por Usuário + + + Usuário + + + + + + + diff --git a/workflow/.resources/teste3.ws.cache.bkp b/workflow/.resources/teste3.ws.cache.bkp new file mode 100644 index 0000000..c8ca446 --- /dev/null +++ b/workflow/.resources/teste3.ws.cache.bkp @@ -0,0 +1,155 @@ + + + + + volume + + + Default + + + + + expediente + + + Default + + + Expediente BackOffice, Logística e Motorista + + + Expediente Escritório Matriz + + + Expediente Lojas + + + + + mecanismo + + + + + Atribuição por Associação + + + Associado + + + + + + + Atribuição por Campo de Formulário + + + Campo Formulário + + + + + + + dpf_di_emp_filial_filtro + + + dpf_di_emp_filial_filtro + + + + + + + dpf_di_inicio_diadmissao + + + dpf_di_inicio_diadmissao + + + + + + + Atribuição por Executor de Atividade + + + Executor Atividade + + + + + + + Atribuição por Grupo + + + Grupo + + + + + + + Atribuição por Grupos do Colaborador + + + Grupos Colaborador + + + + + + + mecCustomAprov + + + mecCustomAprov + + + + + + + Atribuição por Papel + + + Papel + + + + + + + Atribuição para um Grupo + + + Pool Grupo + + + + + + + Atribuição para um Papel + + + Pool Papel + + + + + + + Atribuição por Usuário + + + Usuário + + + + + + + From 60a17ce6d9ce863134feeb07e209a20ab23171ec Mon Sep 17 00:00:00 2001 From: "Andrey Cunh@" Date: Wed, 18 Mar 2026 10:17:16 -0300 Subject: [PATCH 06/25] att transf --- .../events/validateForm.js | 6 +- .../fluigFormAttachment.js | 433 +++ .../fluigFormAttachment.min.js | 1 + .../script.js | 81 +- .../totvsflow_solicitacao_transferencia.html | 125 +- .../Solicitação de transferência.ecm30.xml | 408 ++- .../Solicitação de transferência.png | Bin 40397 -> 48431 bytes ...licitação de transferência.processimage.svg | 2 +- .../Solicitação de transferência.process | 2582 ++++++++++------- ...licitação de transferência.servicetask99.js | 48 + 10 files changed, 2586 insertions(+), 1100 deletions(-) create mode 100644 Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/fluigFormAttachment.js create mode 100644 Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/fluigFormAttachment.min.js create mode 100644 Transferência Ginseng/workflow/scripts/Solicitação de transferência.servicetask99.js diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js index 9c04ff5..b5ae4a2 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js @@ -52,6 +52,10 @@ function validateForm(form) { message += getMessage("Data da coleta", 1, form); hasErros = true; } + if (form.getValue("fdAnexo_Coleta") == "") { + message += getMessage("Anexo da Coleta", 3, form); + hasErros = true; + } var tipoMotoristaEntregaColeta = String(form.getValue("tipoMotoristaEntrega") || ""); if (tipoMotoristaEntregaColeta == "") { message += getMessage("Quem vai fazer a entrega", 2, form); @@ -90,6 +94,7 @@ function validateForm(form) { message += getMessage("Validação do recebimento", 2, form); hasErros = true; } + if ( (validacaoItens == "divergencia" || validacaoItens == "naoEntregue" || validacaoItens == "incorreto") && form.getValue("justificativaDecisaoItens") == "" @@ -130,4 +135,3 @@ function getMessage(texto, tipo, form) { return 'A quantidade existente de campos "' + texto + '" deve ser maior do que 0.' } } - diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/fluigFormAttachment.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/fluigFormAttachment.js new file mode 100644 index 0000000..4a53f4e --- /dev/null +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/fluigFormAttachment.js @@ -0,0 +1,433 @@ +/** + * Plugin JQuery para trabalhar com anexos nos formulários dentro do processo + * + * @author Bruno Gasparetto + * @see https://github.com/brunogasparetto/fluig-form-attachment + */ + + +/** + * Configurações + * + * @typedef AttachmentSettings + * @property {boolean} showActionButton Exibe o botão de upload/delete. True por padrão. + * @property {boolean} filename Nome que será salvo como descrição do Anexo. + * @property {boolean|string} prefixName Adiciona prefixo ao anexo. False por padrão, True para prefixo aleatório, String para prefixo fixo. + * @property {string} accept Tipos de arquivos aceitos. Segue a regra do accept do input tipo file. + */ + +;(function ($) { + "use strict"; + + const pluginName = "fluigFormAttachment"; + + const deleteFileClassName = "BtnDeleteFile"; + const uploadFileClassname = "BtnUploadFile"; + const viewerFileClassname = "BtnViewerFile"; + const compressedExtensions = [ + '.7z', '.zip', '.rar', '.gz', '.tar', '.tbz2', '.tgz', '.bz2', '.lz', '.lz4','.txz', + '.xz', '.z', '.zst', '.zstd', '.war', '.ear', '.jar','.apk', '.arj', '.ace', '.cab', + ]; + + const isString = item => typeof item === "string"; + + /** + * Procura o índice do anexo de acordo com sua descrição + * + * @param {string} filename + * @returns {number} -1 se não encontrar + */ + const attachmentFindIndex = (filename) => parent.ECM.attachmentTable.getData().findIndex(attachment => attachment.description === filename); + + /** + * Configuração padrão + * + * @type {AttachmentSettings} + */ + const defaults = { + showActionButton: true, + filename: "Anexo", + prefixName: false, + accept: "*", + }; + + class Plugin { + /** + * @type {AttachmentSettings} + */ + #settings; + + /** + * Elemento do arquivo. Pode ser um input ou span (no modo leitura). + * + * @type {JQuery} + */ + #input; + + /** + * @type {JQuery} + */ + #container; + + /** + * @type {string} + */ + #attachmentFilename; + + /** + * @param {HTMLElement} element + * @param {AttachmentSettings} options + */ + constructor(element, options) { + + // Garantir um ID para o Input + if (!element.id && element.nodeName.toLowerCase() === "input") { + element.id = FLUIGC.utilities.randomUUID(); + } + + this.#settings = $.extend({}, defaults, options); + this.#input = $(element); + this.#attachmentFilename = this.#input.val() || this.#input.text().trim(); + + this.#input + .prop("readonly", true) + .on("change", () => { + this.#attachmentFilename = this.#input.val(); + this.#changeButtonsState(); + }) + .wrap(`

`) + .after(`
${this.#getButtonsTemplate()}
`); + + this.#container = this.#input.closest(`.${pluginName}Component`); + + this.#container + .on("click", `.${pluginName}${deleteFileClassName}`, () => this.#confirmDeleteAttachment()) + .on("click", `.${pluginName}${uploadFileClassname}`, () => this.#uploadAttachment()) + .on("click", `.${pluginName}${viewerFileClassname}`, () => this.#viewAttachment()) + ; + } + + /** + * Indica que o campo está válido + * + * Caso o campo possua algum valor é obrigatório que o anexo + * esteja na tabela de anexos. + * + * @returns {boolean} + */ + isValid() { + return this.#attachmentFilename.length + ? this.hasAttachment() + : true + ; + } + + /** + * Indica se o anexo está na tabela de anexos + * + * @returns {boolean} + */ + hasAttachment() { + const filename = this.#attachmentFilename || this.#input.val() || this.#input.text().trim(); + + return filename.length > 0 && attachmentFindIndex(filename) !== -1; + } + + /** + * Remove o anexo + * + * Método útil para excluir anexos em tabela Pai x Filho. + */ + deleteAttachment() { + const attachmentIndex = parent.ECM.attachmentTable.getData().findIndex( + attachment => attachment.description === this.#attachmentFilename + ); + + setTimeout(() => this.#input.val("").trigger("change"), 500); + + if (attachmentIndex === -1) { + return; + } + + parent.WKFViewAttachment.removeAttach([attachmentIndex]); + } + + showActionButton() { + this.#settings.showActionButton = true; + this.#input.trigger("change"); + } + + hideActionButton() { + this.#settings.showActionButton = false; + this.#input.trigger("change"); + } + + filename(fileName, prefixName) { + if (fileName === undefined) { + return this.#input.data("filename") || this.#settings.filename; + } + + this.#settings.filename = fileName; + this.#input.data("filename", fileName); + + if (prefixName !== undefined) { + this.prefixName(prefixName); + } + } + + prefixName(prefixName) { + if (prefixName === undefined) { + return this.#settings.prefixName; + } + + this.#settings.prefixName = prefixName; + } + + #getButtonsTemplate() { + const hasFileSelected = this.#attachmentFilename.length !== 0; + const canShowActionButton = this.#canDisplayActionButton(); + + return `` + + `` + + `` + ; + } + + #canDisplayActionButton() { + const element = this.#input.get(0); + const workflowView = (parent.ECM && parent.ECM.workflowView) ? parent.ECM.workflowView : {}; + const userPermissions = String(workflowView.userPermissions || ""); + const hasEditPermission = userPermissions.indexOf("P") >= 0; + const isTokenView = location.href.includes('token'); + const hasMobileCameraBridge = ( + (window.JSInterface && typeof window.JSInterface.showCamera === "function") + || (parent && parent.JSInterface && typeof parent.JSInterface.showCamera === "function") + ); + const isMobileUA = /android|iphone|ipad|ipod|mobile/i.test(navigator.userAgent || ""); + const allowByContext = !isTokenView || hasMobileCameraBridge || isMobileUA; + const allowByPermission = hasEditPermission || hasMobileCameraBridge || isMobileUA; + + return this.#settings.showActionButton + && allowByPermission + && allowByContext + && element.nodeName.toLowerCase() === "input" + && !element.disabled + ; + } + + #changeButtonsState() { + const hasFileSelected = this.#attachmentFilename.length !== 0; + + if (this.#canDisplayActionButton()) { + if (hasFileSelected) { + this.#container.find(`.${pluginName}${uploadFileClassname}`).addClass("hide"); + this.#container.find(`.${pluginName}${deleteFileClassName}`).removeClass("hide"); + } else { + this.#container.find(`.${pluginName}${deleteFileClassName}`).addClass("hide"); + this.#container.find(`.${pluginName}${uploadFileClassname}`).removeClass("hide"); + } + } else { + this.#container.find(`.${pluginName}BtnAction`).addClass("hide"); + } + + if (hasFileSelected) { + this.#container.find(`.${pluginName}${viewerFileClassname}`).removeClass("hide"); + } else { + this.#container.find(`.${pluginName}${viewerFileClassname}`).addClass("hide"); + } + } + + #confirmDeleteAttachment() { + if (!this.#canDisplayActionButton()) { + return; + } + + FLUIGC.message.confirm({ + message: `Deseja remover o anexo ${this.#attachmentFilename}?`, + title: 'Confirmação', + labelYes: 'Sim, quero remover', + labelNo: 'Não, quero cancelar', + }, result => { + if (!result) { + return; + } + + this.deleteAttachment(); + }); + } + + #uploadAttachment() { + if (!this.#canDisplayActionButton()) { + return; + } + + let filename = this.#input.data("filename") || this.#settings.filename; + + if (this.#settings.prefixName === true) { + filename = FLUIGC.utilities.randomUUID().substring(0, 9) + filename; + } else if (this.#settings.prefixName !== false && isString(this.#settings.prefixName)) { + filename = `${this.#settings.prefixName}-${filename}`; + } + + // Evitar conflito de descrição do anexo + if (attachmentFindIndex(filename) !== -1) { + FLUIGC.toast({ + title: "Atenção", + message: "Já existe um anexo com essa descrição", + type: "warning", + }) + return; + } + + parent.$("#ecm-navigation-inputFile-clone") + .attr({ + "data-on-camera": "true", + "data-file-name-camera": filename, + "data-inputid": this.#input.attr("id"), + "data-filename": filename, + "multiple": false, + "accept": this.#input.data("accept") || this.#settings.accept, + }) + .trigger("click") + ; + } + + #viewAttachment() { + const attachmentIndex = parent.ECM.attachmentTable.getData().findIndex( + attachment => attachment.description === this.#attachmentFilename + ); + + if (attachmentIndex === -1) { + FLUIGC.toast({ + title: "Atenção", + message: "Anexo não encontrado", + type: "warning" + }); + + return; + } + + const attachment = parent.ECM.attachmentTable.getRow(attachmentIndex); + const physicalFileName = String( + attachment.physicalFileName || attachment.fileName || attachment.name || "" + ).toLowerCase(); + const isCompressedFile = compressedExtensions.some(extension => physicalFileName.endsWith(extension)); + + if (attachment.documentId && !isCompressedFile) { + parent.WKFViewAttachment.openAttachmentView(parent.WCMAPI.userCode, attachment.documentId, attachment.version); + } else { + parent.WKFViewAttachment.downloadAttach([attachmentIndex]); + } + } + } + + /** + * Instancia o Plugin ou executa algum método do plugin + * + * @param {AttachmentSettings|string} options + * @returns {undefined|boolean|void} + */ + $.fn[pluginName] = function (options) { + if (!parent.WKFViewAttachment || !parent.ECM || !parent.ECM.attachmentTable) { + console.error(`Plugin ${pluginName} executado fora de um processo.`) + return this; + } + + // Executa o Método + if (isString(options)) { + const methodName = options; + const methodArgs = Array.prototype.slice.call(arguments, 1); + + let returnedValue = undefined; + + this.each(function () { + let pluginData = $.data(this, pluginName); + + if (!pluginData) { + pluginData = new Plugin(this, {}); + $.data(this, pluginName, pluginData); + } + + if (!pluginData[methodName]) { + return; + } + + returnedValue = pluginData[methodName](...methodArgs); + + if (returnedValue !== undefined) { + return false; + } + }); + + return returnedValue !== undefined + ? returnedValue + : this + ; + } + + return this.each(function () { + if (!$.data(this, pluginName)) { + $.data(this, pluginName, new Plugin(this, options)); + } + }); + }; + + if (!parent.WKFViewAttachment || !parent.ECM || !parent.ECM.attachmentTable) { + return; + } + + const loading = FLUIGC.loading(window, { + title: "Aguarde", + textMessage: "Enviando arquivo", + }) + + $(() => { + // Oculta aba anexos + $("#tab-attachments", parent.document).hide(); + + parent.$("#ecm_navigation_fileupload") + .on(`fileuploadadd.${pluginName}`, function(e, data) { + // Impede abrir o Loading caso tenha erro no arquivo + + const file = data.files[0]; + + if (parent.ECM.maxUploadSize > 0 && file.size >= (parent.ECM.maxUploadSize * 1024 * 1024)) { + return; + } + + if (parent.ECM.newAttachmentsDocs.length + && parent.ECM.newAttachmentsDocs.findIndex(attachment => attachment.name === file.name) !== -1 + ) { + return; + } + + loading.show(); + }) + .on(`fileuploadfail.${pluginName}`, () => loading.hide()) + .on(`fileuploaddone.${pluginName}`, function() { + // Atualiza o campo do arquivo caso o upload tenha ocorrido + + loading.hide(); + + const btnUpload = parent.document.getElementById("ecm-navigation-inputFile-clone"); + const filename = btnUpload.getAttribute("data-filename"); + + if (attachmentFindIndex(filename) === -1) { + return; + } + + $(`#${btnUpload.getAttribute("data-inputid")}`).val(filename).trigger("change"); + }); + + parent.$(document).on(`fileuploadstop.${pluginName}`, () => loading.hide()); + }); + + +$("head").append(``); + +}(jQuery)); diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/fluigFormAttachment.min.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/fluigFormAttachment.min.js new file mode 100644 index 0000000..23dd23a --- /dev/null +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/fluigFormAttachment.min.js @@ -0,0 +1 @@ +!function(t){"use strict";const e="fluigFormAttachment",n="BtnDeleteFile",i="BtnUploadFile",a="BtnViewerFile",s=[".7z",".zip",".rar",".gz",".tar",".tbz2",".tgz",".bz2",".lz",".lz4",".txz",".xz",".z",".zst",".zstd",".war",".ear",".jar",".apk",".arj",".ace",".cab"],o=t=>"string"==typeof t,r=t=>parent.ECM.attachmentTable.getData().findIndex(e=>e.description===t),c={showActionButton:!0,filename:"Anexo",prefixName:!1,accept:"*"};class h{#t;#e;#n;#i;constructor(s,o){s.id||"input"!==s.nodeName.toLowerCase()||(s.id=FLUIGC.utilities.randomUUID()),this.#t=t.extend({},c,o),this.#e=t(s),this.#i=this.#e.val()||this.#e.text().trim(),this.#e.prop("readonly",!0).on("change",()=>{this.#i=this.#e.val(),this.#a()}).wrap(`
`).after(`
${this.#s()}
`),this.#n=this.#e.closest(`.${e}Component`),this.#n.on("click",`.${e}${n}`,()=>this.#o()).on("click",`.${e}${i}`,()=>this.#r()).on("click",`.${e}${a}`,()=>this.#c())}isValid(){return!this.#i.length||this.hasAttachment()}hasAttachment(){const t=this.#i||this.#e.val()||this.#e.text().trim();return t.length>0&&-1!==r(t)}deleteAttachment(){const t=parent.ECM.attachmentTable.getData().findIndex(t=>t.description===this.#i);setTimeout(()=>this.#e.val("").trigger("change"),500),-1!==t&&parent.WKFViewAttachment.removeAttach([t])}showActionButton(){this.#t.showActionButton=!0,this.#e.trigger("change")}hideActionButton(){this.#t.showActionButton=!1,this.#e.trigger("change")}filename(t,e){if(void 0===t)return this.#e.data("filename")||this.#t.filename;this.#t.filename=t,this.#e.data("filename",t),void 0!==e&&this.prefixName(e)}prefixName(t){if(void 0===t)return this.#t.prefixName;this.#t.prefixName=t}#s(){const t=0!==this.#i.length,s=this.#h();return``}#h(){const t=this.#e.get(0);return this.#t.showActionButton&&parent.ECM.workflowView.userPermissions.indexOf("P")>=0&&location.href.includes("ManagerMode")&&!location.href.includes("token")&&"input"===t.nodeName.toLowerCase()&&!t.disabled}#a(){const t=0!==this.#i.length;this.#h()?t?(this.#n.find(`.${e}${i}`).addClass("hide"),this.#n.find(`.${e}${n}`).removeClass("hide")):(this.#n.find(`.${e}${n}`).addClass("hide"),this.#n.find(`.${e}${i}`).removeClass("hide")):this.#n.find(`.${e}BtnAction`).addClass("hide"),t?this.#n.find(`.${e}${a}`).removeClass("hide"):this.#n.find(`.${e}${a}`).addClass("hide")}#o(){this.#h()&&FLUIGC.message.confirm({message:`Deseja remover o anexo ${this.#i}?`,title:"Confirmação",labelYes:"Sim, quero remover",labelNo:"Não, quero cancelar"},t=>{t&&this.deleteAttachment()})}#r(){if(!this.#h())return;let t=this.#e.data("filename")||this.#t.filename;!0===this.#t.prefixName?t=FLUIGC.utilities.randomUUID().substring(0,9)+t:!1!==this.#t.prefixName&&o(this.#t.prefixName)&&(t=`${this.#t.prefixName}-${t}`),-1===r(t)?parent.$("#ecm-navigation-inputFile-clone").attr({"data-on-camera":"true","data-file-name-camera":t,"data-inputid":this.#e.attr("id"),"data-filename":t,multiple:!1,accept:this.#e.data("accept")||this.#t.accept}).trigger("click"):FLUIGC.toast({title:"Atenção",message:"Já existe um anexo com essa descrição",type:"warning"})}#c(){const t=parent.ECM.attachmentTable.getData().findIndex(t=>t.description===this.#i);if(-1===t)return void FLUIGC.toast({title:"Atenção",message:"Anexo não encontrado",type:"warning"});const e=parent.ECM.attachmentTable.getRow(t),n=String(e.physicalFileName||e.fileName||e.name||"").toLowerCase(),i=s.some(t=>n.endsWith(t));e.documentId&&!i?parent.WKFViewAttachment.openAttachmentView(parent.WCMAPI.userCode,e.documentId,e.version):parent.WKFViewAttachment.downloadAttach([t])}}if(t.fn[e]=function(n){if(!parent.WKFViewAttachment||!parent.ECM||!parent.ECM.attachmentTable)return console.error(`Plugin ${e} executado fora de um processo.`),this;if(o(n)){const i=n,a=Array.prototype.slice.call(arguments,1);let s;return this.each(function(){let n=t.data(this,e);if(n||(n=new h(this,{}),t.data(this,e,n)),n[i])return s=n[i](...a),void 0===s&&void 0}),void 0!==s?s:this}return this.each(function(){t.data(this,e)||t.data(this,e,new h(this,n))})},!parent.WKFViewAttachment||!parent.ECM||!parent.ECM.attachmentTable)return;const l=FLUIGC.loading(window,{title:"Aguarde",textMessage:"Enviando arquivo"});t(()=>{t("#tab-attachments",parent.document).hide(),parent.$("#ecm_navigation_fileupload").on(`fileuploadadd.${e}`,function(t,e){const n=e.files[0];parent.ECM.maxUploadSize>0&&n.size>=1024*parent.ECM.maxUploadSize*1024||parent.ECM.newAttachmentsDocs.length&&-1!==parent.ECM.newAttachmentsDocs.findIndex(t=>t.name===n.name)||l.show()}).on(`fileuploadfail.${e}`,()=>l.hide()).on(`fileuploaddone.${e}`,function(){l.hide();const e=parent.document.getElementById("ecm-navigation-inputFile-clone"),n=e.getAttribute("data-filename");-1!==r(n)&&t(`#${e.getAttribute("data-inputid")}`).val(n).trigger("change")}),parent.$(document).on(`fileuploadstop.${e}`,()=>l.hide())}),t("head").append(``)}(jQuery); diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js index 519e775..0b0c650 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js @@ -52,6 +52,7 @@ $(document).ready(function () { if ($("#formMode").val() == "VIEW") { showAndBlock(["all"]); $("#btnConsultarChaveNfe").prop("disabled", true).hide(); + updateConferenciaNfeVisibility($("#activity").val()); } else { //show the right fields var activity = $("#activity").val(); @@ -140,10 +141,11 @@ $(document).ready(function () { } updt_line(); } else if (activity == 18) { - if ($("justificativaValidaProblema") != "") { - showAndBlock([0, 4, 6, 24, 57, 31]); + var campoJustificativaProblema = $("#justificativaValidaProblema"); + if (campoJustificativaProblema.length && campoJustificativaProblema.val() != "") { + showAndBlock([0, 4, 6, 24, 31, 57]); } else { - showAndBlock([0, 4, 6, 31]); + showAndBlock([0, 4, 6, 31, 57]); } $("#userValidacaoItens").val($("#currentUserName").val()); $("#dataValidacaoItens").val(requestDate[0] + " - " + requestDate[1]); @@ -186,6 +188,8 @@ $(document).ready(function () { } updt_line(); } + + updateConferenciaNfeVisibility(activity); } formatarMoedasTabela("preco___"); @@ -197,6 +201,7 @@ $(document).ready(function () { invisibleBtnUpload("fdAnexo_Coleta"); invisibleBtnUpload("fdAnexo_Entrega"); invisibleBtnUpload("fdAnexo_recebimento"); + initAttachmentPlugins(); processarConferenciaNfe(); // gerarTabelaCotacaoIndica("tabelaCotacaoIndica", "tabelaItens"); @@ -494,6 +499,70 @@ function applySelectedMotoristaEntregaOption() { $("#tipoMotoristaEntregaOutro").prop("checked", true); } +function updateConferenciaNfeVisibility(activity) { + var activityValue = String(activity || $("#activity").val() || ""); + var exibirConferencia = (activityValue === "6" || activityValue === "18"); + $("#blocoConferenciaNfe").toggle(exibirConferencia); +} + +var ATTACHMENT_PLUGIN_CONFIG = { + fnAnexo_Nfe: { + filename: "Nota Fiscal", + accept: ".pdf,.xml,image/*" + }, + fdAnexo_Coleta: { + filename: "Comprovante de Coleta", + accept: ".pdf,image/*" + }, + fdAnexo_Entrega: { + filename: "Comprovante de Entrega", + accept: ".pdf,image/*" + }, + fdAnexo_recebimento: { + filename: "Comprovante de Recebimento", + accept: ".pdf,image/*" + } +}; + +function initAttachmentPlugins() { + var mode = getFormMode(); + var allowedInputs = getAllowedAttachmentInputs(); + var hasPlugin = typeof $.fn.fluigFormAttachment === "function"; + + if (!hasPlugin) { + console.warn("fluigFormAttachment.js nao carregado; campos de anexo sem botoes de upload."); + return; + } + + Object.keys(ATTACHMENT_PLUGIN_CONFIG).forEach(function (inputId) { + var cfg = ATTACHMENT_PLUGIN_CONFIG[inputId]; + var input = $("#" + inputId); + if (!input.length) return; + + var canUploadHere = (mode !== "VIEW" && allowedInputs.indexOf(inputId) >= 0); + + try { + if (!input.data("fluigFormAttachment")) { + input.fluigFormAttachment({ + filename: cfg.filename, + accept: cfg.accept, + showActionButton: canUploadHere + }); + } else { + input.fluigFormAttachment("filename", cfg.filename); + } + + if (canUploadHere) { + input.fluigFormAttachment("showActionButton"); + } else { + input.fluigFormAttachment("hideActionButton"); + } + } catch (e) { + console.error("Falha ao inicializar anexo '" + inputId + "':", e); + } + }); +} + function normalizeNfeKey(value) { return String(value == null ? "" : value).replace(/\D/g, "").substring(0, 44); } @@ -952,6 +1021,12 @@ var beforeSendValidate = function (numState, nextState) { if ($("#dataColeta").val() == "") { throw "'Data da coleta' é obrigatória."; } + if ($("#fdAnexo_Coleta").val() == "") { + throw "'Anexo da Coleta' é obrigatório."; + } + if (invalidFile("fdAnexo_Coleta")) { + throw "O arquivo informado em 'Anexo da Coleta' não foi encontrado na aba de anexos."; + } var tipoMotoristaEntrega31 = $("input[name='tipoMotoristaEntrega']:checked").val(); if (!tipoMotoristaEntrega31) { throw "Informe quem vai fazer a entrega (mesmo motorista da coleta ou outro)."; diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html index d1d5740..d0ca130 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html @@ -355,6 +355,12 @@
+
+
+ + +
+
@@ -417,58 +423,7 @@
-
-
-

Conferência da NFe x Solicitação

-
- Consulte a chave da NFe para gerar o confronto dos itens. -
-
- - - - - - - - - - - - - - -
Chave de comparaçãoQtd. solicitadaQtd. NFeStatus
Sem conferência.
-
-
-
- -
-

Validação do Recebimento

-
-
- -
- - -
-
-
- -
-

Rastreabilidade de Motorista - Coleta

@@ -481,6 +436,12 @@
+
+
+ + +
+
@@ -518,8 +479,69 @@
+
+
+ + +
+
+
+

Validação do Recebimento

+
+
+

Conferência da NFe x Solicitação

+
+ Consulte a chave da NFe para gerar o confronto dos itens. +
+
+ + + + + + + + + + + + + + +
Chave de comparaçãoQtd. solicitadaQtd. NFeStatus
Sem conferência.
+
+
+
+
+
+ +
+ + +
+
+
+
+
+ + +
+
+ +
@@ -546,6 +568,7 @@
+ diff --git a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml index 1be2345..2e0950e 100644 --- a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml +++ b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml @@ -408,6 +408,155 @@ false 0 + + + 1 + Transferência Ginseng + 1 + 99 + + Consultar Entrada + Consultar Entrada + + 0 + + false + 0 + + 1 + false + false + false + 0 + 0 + 0 + 0 + false + + 0 + true + false + false + 1600 + 260 + 0 + 0 + false + false + 0 + 0 + false + + 0 + 82 + 0 + false + 0 + 0 + 0 + 0 + + false + 1 + + + + 1 + Transferência Ginseng + 1 + 104 + + Verificar problema de lançamento + Verificar problema de lançamento + + 0 + + false + 0 + + 1 + false + true + false + 3600 + 3600 + 0 + 0 + false + + 0 + true + false + false + 1600 + 60 + 0 + 0 + false + false + 0 + 0 + false + + 0 + 80 + 0 + false + 0 + 0 + 0 + 0 + + false + 0 + + + + 1 + Transferência Ginseng + 1 + 103 + + Intermediário + Intermediário + Evento intermediário do processo + 0 + false + 0 + + + 0 + false + true + false + 1 + 1 + 0 + 0 + false + + 0 + true + false + false + 1660 + 260 + 0 + 0 + false + false + 0 + false + + 0 + 43 + 0 + false + 0 + + false + 99 + 1 @@ -505,53 +654,6 @@ false - - - 1 - Transferência Ginseng - 1 - 52 - - Fim - Fim - Atividade final do processo - 0 - false - 0 - - - 0 - false - true - false - 0 - 1 - 0 - 0 - false - - 0 - false - false - false - 1610 - 284 - 0 - 0 - false - false - 0 - 0 - false - - 6 - 60 - 0 - false - 0 - - false - 1 @@ -646,6 +748,53 @@ false + + + 1 + Transferência Ginseng + 1 + 101 + + Fim + Fim + Atividade final do processo + 0 + false + 0 + + + 0 + false + true + false + 0 + 1 + 0 + 0 + false + + 0 + false + false + false + 1780 + 280 + 0 + 0 + false + false + 0 + 0 + false + + 6 + 60 + 0 + false + 0 + + false + @@ -684,8 +833,8 @@ 46 46 - hAPI.getCardValue("validacaoItens") == "entregue" - 52 + hAPI.getCardValue("validacaoItens") == "entregue" && hAPI.getCardValue("dataEntradaNfeConsulta") != "" + 99 0 @@ -858,23 +1007,6 @@ false 0 - - - 1 - Transferência Ginseng - 1 - 82 - - - false - 46 - 52 - - - false - false - 0 - 1 @@ -882,7 +1014,7 @@ 1 85 - + Produtos entregue false 57 18 @@ -943,9 +1075,135 @@ false 0 + + + 1 + Transferência Ginseng + 1 + 100 + + + false + 46 + 99 + + + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 102 + + + false + 99 + 101 + + + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 105 + + + false + 103 + 104 + + + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 106 + + + false + 104 + 99 + + + false + false + 0 + - + + + + 1 + servicetask99 + Transferência Ginseng + 1 + + function servicetask99(attempt, message) { + try { + var validacaoItens = safeTrim(hAPI.getCardValue("validacaoItens")); + + // Só precisa consultar entrada da NFe quando o recebimento foi validado como entregue. + if (validacaoItens !== "entregue") return; + + var dataEntrada = safeTrim(hAPI.getCardValue("dataEntradaNfeConsulta")); + if (dataEntrada !== "") return; + + var chaveNfe = onlyDigits(hAPI.getCardValue("chaveNfe")); + if (chaveNfe === "") { + log.warn("[servicetask99] Chave NFe vazia. Nao foi possivel consultar entrada."); + return; + } + + var cKey = DatasetFactory.createConstraint("key", chaveNfe, chaveNfe, ConstraintType.MUST); + var dsNfe = DatasetFactory.getDataset("ds_fiscal_invoice_by_keys", null, [cKey], null); + + if (!dsNfe || dsNfe.rowsCount < 1) { + log.warn("[servicetask99] Dataset sem retorno para chave: " + chaveNfe); + return; + } + + var dsSuccess = safeTrim(dsNfe.getValue(0, "success")).toLowerCase() === "true"; + var dsUpdatedAt = safeTrim(dsNfe.getValue(0, "updatedAt")); + + if (dsSuccess && dsUpdatedAt !== "") { + hAPI.setCardValue("dataEntradaNfeConsulta", dsUpdatedAt); + log.info("[servicetask99] Data de entrada atualizada automaticamente: " + dsUpdatedAt); + return; + } + + var dsMessage = safeTrim(dsNfe.getValue(0, "message")); + log.warn("[servicetask99] Consulta executada sem data de entrada. message=" + dsMessage); + } catch (e) { + log.error("[servicetask99] Erro na consulta automatica da NFe: " + e); + throw e; + } +} + +function safeTrim(value) { + return String(value == null ? "" : value).trim(); +} + +function onlyDigits(value) { + return String(value == null ? "" : value).replace(/\D/g, ""); +} + + + @@ -1168,7 +1426,19 @@ 6 - + + + 1 + Transferência Ginseng + 1 + 99 + 10 + Lançamento efetuado com sucesso no RGB + + 1 + 2 + + diff --git a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.png b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.png index b1b8e7b2ae993aa9a01ad6f8bbc16d1a76c8d05b..c1a700f1ccde929aab4533378052147636cfb868 100644 GIT binary patch literal 48431 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 Al>h($ literal 40397 zcmd?RXH=70*EWhGq99@e6r@-X=_&%!MFgSa!FSltM=if=`&U9^R#(i2HEwuB?V@?7}c@<(a8CE>8=G(aRO)qYv_1E(_&E zwYIg`iY#Alm_JL+;CN2?4BhJq&QF#}*A;!W-!dP1bAaKl7)|=?$A=CGLhf?DeD~(U z!Bgm~uxpB-@|5XFE62>G1^6uOu1acFJox~< z&zTOTM%;@^qymsYKM`s zfyDmGnFvv7+!1i>6koq)sz_5I$^WDFUv2_-8FMF*`c5Bcxgg8wf* z5Lifs%rp;Smhz~ppP4qkc3FFJrosF50l?SuWF_s;awmhc@!8Q*Fi4_+4l_yZFqz|1 z{F<^b0U6ek*)j%JuH%hTKZ2E7=^h4=Zc~!KZVa#Ia9-T_xqXl5qe1?F;~g%I-(oAMO;_L=Iu&N+NfU*Zf@}Y!-;^_boM)OTQ&Q8wy7j4rAe8l zWK9A2;pOp7RA0}wi}4|=CMbF1@2_&oVv<(FdlmR2Vw8V!_?>ayEN&ac8Rk~+ld^}N zN{%pQ?ru%BEWHzeU$==v4eHit<&&lP{K-A#&}dDuB6jA_p-IxES?gK&LxcN-PhHlO z(8*L z9n}ll+u=>r1{E^<-F>+;P&A^yXWPBdN5pJT?Ue;IWiflI^+cm#V2hrY`*dphd~XhB z!87ZmPsIL1t$doY8A#&IJD=4xbje0>d;N6s9aZr1>iJ%oj{a@fXR4fwdt6wmfb+Yc z$H|T1rIgz{(T>rU6gC7|+4=IWD- zQaFeSA7+Pk$T}bneT+L}PyV0!lf@yx1Q?P#;oxlKXRwjcvK^=Q_aX$*4Am1aLOo2y zc4-5~16zMHevGUvW@+n6YW=!EIk@5mNd^6fs^0I3^gFMYEYCurK|pysezUp64v{EE z<+U&E?~u^@nY_vAIJ?nZ_Ex^x#C;tQ;HHIYJH_g_z0(klNwV;zUM_H$O6qg$tUiJ- zn;EHS@cs@&OQH8L!w0Qdpr~1&?xW%E*pNSXn0{oYTRWkznm8Jx+fgfp8R}f8tC&x&iP}P39wsY-!)GlFzoNOOgH@S$4JeCw}FltBk!iwFgT` z`UOYbIpxWU^IE&yM*}DnJB=>Jbg)FGSJGz}qDEHh$B`Kv-NMkhH0y|R(nwA%%3%aMb=AqRbMRVEj@Uuem)BGs=&dQ@)#?sS$_b$nOM%?1jxna@2;Gdw!>Os%l zEvcJvhHRjp+>&`9!&^f;w9#|S$n}WPTX_G^SZU|wFhO>qrz0;-Mb57WrJ+uWV^>Z6 zN2E3ewd3=R3Er0kq#dS*S@UoaNp~XfKd`JMW^nc?>3||dEBWl#A1tEmT02d-f+V-s zu774@7ZwpJwlMV;nhq`VKkq%>F-Ve!_3%09VvKUCi%kf@qsM@v?GsRz4`r@uTt__H z@{?2b#{Y5@n!yg2B#^MO+UK3HEkf*G=7tMtR4f(wXk**a)t1{dMrr|MXVqa1JVgD{ zPm3NeLX&#^sOvaY6fMSahq8fP;^{BJcpU~pb#5N7k|D~gA@#+{%7}dt96buXv<_sZ zVBq;H)~ukxq8`^UhZ2*rwCMhP-QeAGm>=Kf_@adOuw_l={y{{mGy9;2-tI0)rB1{R zkQRAWqYA9C$t}sd5;NP5fKIa5uJYqY`5N4N)+uy4S;2H|hy5*T^&58-x0;w&?Ho9n zE7*144%TMdK?F(4*u!Qxm{nEuPDlPeQ&A}wAVI@kRuODKSWly#{uIY3Dz=tRHud3x zA6`&0tT1g*|4B3OVNbJemH}V0eG)l2L%$*`x$`aYbbP|KOG20QBCFi`cPFu;H7K_a zPmrn#@_TX$Jp!D9r~s>ID3d&0tG@SSV`NBFR8;?w&$cYW&Ogoa5;)H=#DoV@?Re%j7@+E3${MINA*+WR;+KPH6&T7<7 z#aw0b{93Kt((d+RUc%K6O=d`sO6-7~go~tF!Xy2C%07THtE;jY|IT&;WqdZ zv2BY*@U55X>BY57#8wz}r2L@y1tnr#Fl)&2mq)z&3-gaa2~!JE7HvQ*`Zr2$w$Uf- zj^~9b)K{l97FkajR{X;FvhR$A_ZqR8G;i~5ZgxxDKw&B#dF?NsNEU#!4%=nuF!9+e zjI$7H)gq<6=X_dx>Z3NBzEC!>o+Z3_Z@?07w4R2*rIr-X&IFG^U zV{y}!5;x#C(f*{J+KTjgjmv4W#`)+Y>gZ2#al@^st?voc`hL}3^(E$`=)CE?gu2a; zU&anQ6JUX4RLiibhQtuy;$F~MaMA4t-O=Q~0%aFy$23>!#Cv4`3@nqI+^2@?dU)-JQwA*&q0$Kv<&xv{c@(Evm zJgSZtXn`hpVVCYErzg^><{WjGAhpGqE*~Yc;CLT|I!74dlKDm?exNi*z}3E{sijFl zr`ma&scq}q=k_mw#JeVGLwO6u!9FJ6#eoo4plvBXnT-^D7@P9Ghj^OgFvn!XCBd_j4J- zJ25R7OJ%+5b6*DA0*Gf4Q+5yugfF~%5m`e?GnBa*z1wlLH};xU?HB(W^zvqnfl9|? zT>E_W+20b+Je5^{)e5t!aBIT6_sd)sOR~`#%=OUf8TpksbS2OZ={Ynk-rBt2O@4WF zCtGs-EwAq9=Nmu_liKmGjjS$pGBh_NWx0EFo1CVvSPmyVmXXoxYT~uCwTf~69!|fR zn{43jgU+;2Wm!w1e7sD~#%~wg18n6m%rCR<){f&)4kUaFes`;XP)1@k`m~+U+0a#GHkXg zDp=cC2oYs}r!N%YMQZeI-UX`5hFhfuj9QA%(Lf`EX=}SW#dewaSUV{3z^R6mO?-R< zSM{7-^k-|9?19ghWTQOmrWAKqeh`c+Ww2d7`DHtSj7)4ZK5cotj+ZoRJA}>`4H$;% z<+ml(mEA3R;uhrM5aPj%7e5h=*boIT`uY_dRCKdy1HZeie8U?#2m1U;DD||tdJ3DD z`7kHkc&$6I+PyA-SHyaF#dUhs$dIsZ<-6IATHGnJ%LyXJa`2wNC+=dlvK5hMHa^`X z&zttv(DSahDkzPu2L0h>kS0$VFnWlzM(89JnKyA{m*_GUp@3GfZt_8*m^! zAjdqoMIrn3)z`&ggZHVFR4SGV#hT4!cF>r97^+H6;8IvPthCJUt?tqbM|K+6TSO%5@kOg3)0isl7UMa<9ZD8)`WWn|?vAp5J}x z-8UWdHq)`|SHmr{B&+r<66;L#PdygX-BY|3vE?zMy)RrC@;KCy61bGR_xDQljsTE; zMW`$aen1lMT3Ps_fBm7a9U2`T*Cr^RVp2{I)y|0pyDuK=FVRq{m-iJNL?FCgQ#w*L``L`n>W z)6a>8+h|_)41C@iGm@7nEB1!V>d9?;WUK3<2BH@Ti6R4}RjtFO8G{Z5+!r+^Ack&c zE>O~3AdM1?8p-Rpj<=I0Hih$QGb!ZOqZGsUTMgZZkh$vk>lcMfa!(XT56}ZTp_iW? zfmVEplP=#ltj-{F=MdgL2yGBLAmTDr|Lus@rTsGWBFKboEn)JZu)91zX(+pHY`;j) z)K)p?;pp9%>yiHk=0eQ3N*;mgB-->%3^j?W>ar5pG{K>RH|(8?{ah&qNo3*+B3HjC{^??e>E3R@Ls`l9;=QZ)FoX?*Z@<0rQJv7YT@<9CJF8@}y zY7Xb2q-O@0t?jY{88soR>}HS?`#N0&6ow@-xS0xRCZ`?*mi$LU_pFM(A*l_;k?@)M z9gT$Io?boVw~^)PQ2os_P*%NC1(-=AC|3QCl|6d8qj>Jr-QN##%EDX}5TYPW%~k&` zDRQN6aHc2;WK%$j|Ka)yq%|XUfPO*pFSZ+5b8G5Z*Eek!PY=6+ubv+UK}GN504izn`-L*?NZnT@C&sARHnQ>F zgfRP}LE$&UwMh$oqnK3i<1U;HeEvxmSj==9cE)1Ee-f&=$6*)jRGj>k@^$bv1>O7q zb~Vcfk>4-=)P0g9LDs?!4&YM~&t1klDLc)OPn7vG9jLoI)BCx1%BaJE7>-rmwRrbt zNfLZ_+xH0cg8Sb*%Z1XkUiq13^@o^`#%rS_)!sk6b)HD>iT!B@levEXKRbC1x;&Ay zd^di^?FFgOn}?7c)~CG6|8RT};y26rAAZ2W{8ZYQi~b{rCLc8Dft4%pto|(>kncvr z<4z^tSowSJ|5Jzbl>aR{TLW%R zGV{CpU4OqARK7{_lg)zf+$T0P$z8?2Ujx*c@x!n)Y-52TkKOFw$8|25u@!YY^#1w3 z8D8RGn0PnaCHz~RfRDH<_}A9|OCt{N!IQ~%HvacR{Vz@2*W>?R zzxeWXSxk1tQhDHC(82vWHTK;c_Ux8Bgwyb)&RmYoWzz2Qq_oywcmuL0tBJ2r#@@o& zQBAXB?PbN1-(ARmZ212G$^Dg*1)hwAgxfBAI$+zvZGo22W? zrsz=apoKKA64m{q9!FyT%>x%qrC9OUFrkhdX!M-TLc2Wsp_D0BT8_Drf~GvwDpvOG8M{E1hO zEH-14n*NJit~w1jMs84?)KTz=RhOsm*5B{yfR~+dM)~)W9_!BxlKVJHep*-l<`thF znv^}#vrVX`?TJje(|qc0|KbIp4n%dw{RmUM-VhH2c6HRmraqG)=@!^gIM0{4CKR zv8ELKoeyt6IBRiR@aSQ}@cFIrSC>MsR-NvYLc$NG#?rVp- z_f{>Y`I)Lo(A>*7iTuv-50S%k;*+aPqlw3B5(9}LAqveY>7-n5qN+p*NkpI~vl)89 zYY%Pv;}Q#B%lfvtPSnBEeK~|Tqc4yTSMRSAf6n-h4r=V~FMb5tl?B+C9omHo9dW;? zT zdQtvAsbI&&Lr5PD9snmLIN6fg%};Ltotz7O#Zd(B8t^}M&S4g37esv4b@5N^<$v7q zNhscPjupcJQBL`9)Z`9L;X`uGLV4vMspQLI?0`&s&>P(ULQ>ufc*(*P8#i{b*wPTe zEbf06kj01`wcT5CPSQ0YoR_ICJ`5}0(LOA_-rpB;_F)Og(j2+i^xVtQ7Sg_SH`u6`@-iJ*wR|r z3S53jZJbU4iM0;JuQ6iAykzSBh4;kte6LgDQjHgPUg*~jl60v*S$ju2|dw8vVlx|;RVeQ`vmW^*KAnTW9p0f>n;S^eZ~RKmDa zt6;zK3I+z;MJC7O1S(c0-ULS0kC;T?1qkeG<2~P6U3U~pg`_AvE}Ov-zI0PHf(NXO zR6(Uq<|bAtq^D$`bLjZhsBXF}*7_g!Qc?=G1@yLtiHG78m+QLw^b|k3hTzS6^$9Y> zdUQ3%{-}{*z<~7?0V8qZ%dm`w*le+l4vP@6X+Jy9&$Hu+a*?b~59^}A&av;Q;Pur^ z-+9TE4V(Hf0CcbaE)&R-%w0_Zh9{^&aXFYnGxUD@|3H*lr{C){Y9705=+$Rp7v~N$ zU+7!1erku9nEgDnSfD!BfmX5@K1--RacM6&kV~u439>a&=qavDZ^mdBKcrqJWPJ`z z*>xZUTO5Y21VGW|LQj{ndXLR9o49Yj{yYk^YmfD?HMSO8Z}Io17qpdd%&GFeX6mxw zan}H3-ggS_?WIp8rDOUvVS-h1te%MnIqZEza}Zu;w9YHlqfl`6_(cg3y0>FR$?2`; z6B8*ZrfQ;Z&qtMw`NVCuyx}rJHL%s$Blk|8c#-j+#JIZ7%ojac{hK72ZxFUpq$|A| za>yQ=8+JO{dnf&I0DhsQI{chWwRFx~R*%UMkC~h=?%#9!aDh7igp6%QCQn{hObJjJ zvOHD5?iYCXw1@HLHGu9Ei7CfR7FqFORvRp?C}ToqQ0sAzts+Azu3@W8$Nuqn+l*Ym znhth|1DBDxx4g#*Qy5Idjjk8<_AK_TI$b)%ucQ{!_12f3+lWb6$m~8zYA49k80%(^1*OAODGfcJ?(TK53$MiN~uS9tgcv6VvOM1H8%zPG9S97)&IMJ1q6g@`+7s zN~C$J@;s`IH~VABaMJ=wt$@(jtvrSJJR8`B|bG5v2Zz49ZaXG!mFwY)v2=7!nmTK9$GhDEVnPoAd; zK;k4;J1+E#ZxBj~6C%hhw+FQQW!2tc=j`)c6g+u6zFP!?4e(2Qn~`^I{uLE-nlPo4Z!C}Y5H6} zS(qd114ynxXt}U>jDsvDb>hAJ3{`?BqtUib@?wY%F7PVBfNPm>HypIDV!p2kwX;Zg z*lwWc}cR>P2NoN^~ z?@Q%XZ##cIGq*C=W-+{$!+AS=#!r=Bay>rFO9wHYYfWfoItqQG z2R!>^Q7_v--sBrF4FVXinPcr;exHf+8lzN;F~}LK^r|D>z!_5-kQ}GN ztpagw>rOY6=gJzj44W(V{lcVmlHOT$_UwlME3z+ATQAQ?MGvw`+RfG!WIzWv8(1Z0 zN(*K-3mvdi-+J!n*I|137d3b7MXm@8=FX(T%p=341dDa^FB!H*Oec3+fi|$(c4RaA zj1j##tJkZDGnH;qBz({8FJJUd2&##m!z+CY{o1*Nl+m-cERRAEWj&5d$ zc&!Nrepb(6vv=B>8{a;9`iAK6nXHoRYH{nG=nK?!-Y3pN04A-JhGl9(dq3{*k%cXb znTkAZt^WBTJ3?7TDVwsx+3fjav`!z-3G@7#EB+y6DfrF^;cez~tMUar_tF zb8y^GSTzfC+di!vubc1I=zJ{TsDp?^wqBnSBA}uN;iDnT;{_EtRCMb^{*z>wi{Dyu zJ}+TjZ!xxDrf@UgrnTl{zjfZt&n@+VX1v;kJ;eE*BT!z2WS3rzd%GShK21nUv$#2C zXtdYxP7`OVOO-*Zu%m>2UUwU7OZDbCJt%OR%Q<#IZK(xKb|S(%mDZo4yfRL_e`O_o z)6wLk-K*wyJ*^QHIIsU=$W<$$3LEy`kPkTGWsL2Ti_BC3x>tMo$47K;PI@LmUigCrk>v+AswSk zN={`ni4#|nQ&_Jm``0!YD&1EYGZ*DPT(j+3l36oAL>5^QNd>gk43g{QY=u@ckUPrG zNFuzV%HfB_s%$@A*y3}ft-j;JlYVQQ_48X8Y<@UzSjW&>bk3kvs9ph*E&J$Tk>;p` zdb#GNRrsQ{H{Y{%>Vj%%IVBh*)O{rNPPCYn>yrIy1C0fLvtSNruIrbXhmv)!I$IE8 zVH*AUW3Iu~PaNRY*sQMOw=f@^OUc*|1)=0E4Z^0wkU(>`%85*em!#@em5g&B+fsfnI3S7i>d2cTWG{inU zWrp>n>k24aA76`ZjS$f^=xg98>OEO1%)(b~*=jgXN{Az;8thY(&7E#Uc(}6mvh7`1 zqfWC&vk#iBI7`F3zvJ42FCQ02HcxGbTcK=oWMNsUH2fN>EhzXMdG&BY_-N5u+mQbJ zECbgVJdzoXxHdm8RG2*0IxjQQ#~f$yOw3k&$^O=+G>eltg70N~c+44va4o?vd21}& zkDQe2ioFbEpd+}`Y5rw{?|zseD^OUxuf&ZIET0b7FgJ|;sre`Wn?fsd?aOTEW0xvP zzU)IO1U!3%SBAe0Zma2nROQn6qUk7M7snKXZzd5DyKBq4svTn|(-NHP**sn)uo)$Y z2^CnX{mLG7RF#F%{w{qLZWW>UhWLm+hDR7PEgEnql3%GhM~X2TXI^|tSCY~H0ux*4 zfBXYAa@csc=*c&4XM@3Eqr1-IXpr~V8TH>`eN4Ec870+r?zBy)U+Nj&c3p8@*Sy3NnM23MwANvy)%Gea#!949eNydo@)b3>W65V2 zN>CT`JSBZ*$kmGe>GaP@0n7!>p&2VV56ESiZBfLaT=Y2&`oY8Q$Dtt=mXGO&rAdl` zEKa395w&fIjnfI%giaYM)Nz^h$`#}}#bdNGCa7yRdegxYNkvmV`nB~r!|>6wB-phT zkn>G1UGKIj>pw%8L*BZ1MGsQbXIEn~krO&2%mcTxb zK`)(u$Lw)2>S5ktq}jWNE=vXTGRI$9e}#|LIF>JoYo2O1Bb{-K zGbjrl+$?`+{C$IHoN&?#!uwLh%$;`65j_KG&!JS$SzV8*YiA9;yGx%5kiHc}FtE&- zfEq7jBbI)*>&@tbK;q!?yrPRJ+@qx3QzT=_PZu+vL*ff_OV-Pk{B}mzGQ`oX0f&q#QBqHK)45st!DCG74jRd_E<)*zwLeJV2J$t&!UTmt1+ z3!dC7G(wHP%3VE2&3=j?`-p>_S!SJ0j%awTJKopQG#}B^@__Ix2z`gP>M(NLk7}(} z-pb%oQ6?qvD74vUa%VDNJ_*~GpjXjDlBocihpNu^6Thh%I^cy@Ks&%+2u59I8=>Tx z|5{+zZs9Y0eEpcV{zG@p4qKptgFy>QMoA0DH-(KvTi63>mGYbOKNVyk8`lRim?Em& zpSA}&Vyv7}cg||%^bfZ63?SX{$GE%KoiF%`=8!y1c|jTYN+nt{tNMBf3683f`tIpG z<4f?gv4rPr)lDkEMd1>&HZL2JK{=sxr65rw_wuk1K1|@2DZL%LK5fZTezXz)wza{0OFBrp+K)(qCmpg$?`yR=LltrurK<{`!|aWlo}ORdf{~K zd}R$@x~_VserOF3RO2`{vpWL|M;tsaoXuLg-O5o^NGSzSw_eVxRW|4^JJaE6Pt6b+ z@GR0HB$5^yn5Qwf@>Q%M&Jgn9+s_X*SE$=r^eRt!${*2mbTZMt(ye^y=EH4a=z;QH zu-gJzOpHEK?(|_K@mxl~+|9E22I&#GFWZf%?LmCKB-uvT+y`GzcGV6o{s6ONno%u+ zay6#husg&td`w`$vP7gn>yU@t%ZTI6#-fj!>cYUN%wZ^KE)8{{131WlO-H#bPaX}3 zID{rfOa~Yg*e#y!Z!omiZUQDm+R@&A7oHyO>8#GG7Z)H@ zE_djA{f>=P8hJYMI?rx;$>_=nd;GZhx$2VoTlbF@!$->aiWWC}*?&Cgp+?c`7LZeZ0Zci_nmB<=*I_I@5 zd>b-5z>_1}KOgsw;w*=;r0s^k^xC_2)~&kF4Tc)$m9}})2`bbL@-{(OFBu(5N#u4!E#$$;|@j0~T zD&49!rnNv9%P+!VyOg%J!*SZkqw1Q4ig|a&uIqf8#LOZJ(Ki;(m2iqMa((4Dg0$?t z?7=JjJ?xAR`a3mpTo|e(;IHQ}x%r+Ye@6SN0j3bMt1;CJ;g=RL5dHMT4LikrE?FgB zax>#yLxf@FrwHJh9Qys3R1GR`Vo`S~^0rU}x@@uXPEcEE~#vCDD(dJjDiYokxi#WCurUyU2D2D3qrzMjEZ(w9F_~ac#)R z^&6~6B`Go|gT6}i1a*&ex%m%S(B}yvE}#5LL3Z5UtEE4Or3P#FJl1G+k?_Sbj?Hvu z)G>tT#THGbHrJ%;9&jUoO^Yz)HQyFh#9eOKchpD2QaEgS#C@@vFkOJAJnm}tGpPmB zEiu1HSmI4h7s3tjZk4hSyibBl8e{-(p47Lfo_*-ULr}XTJZxy4A#F?&EtDFGM{Gj&)yU8_{r>{u;L(an6G~=Y3ku3)>(-%SQ8b(2G zQf<9h$5&z9C-R$b&`Y7=f~^TM%g-qT_zk3&zV+c=m;P>kzzHoD!x}deLAlyf-{(2? zdcoqANw2MKpVD`3G2`@TDM;0?2zdrdHEnj6KK-=#=yMXq68Zy!3AgaGZiEGO@tfUd zgcpn_M=({@HXstTq6V4Yd4`rJ=02%iFbH)=tRnpsr}KYS_*#hCVs0T!w(PL)6tgNk zOcUP)m091^aosI<4B(9{sw}&NlJq=*No;L3q-`HPGu(D%)++&TCdg?VTiwR_6D#=t0w+Zpf7GdTpnLV>`KVqnif@(8NIItya5@b@7i>v_Fi4V=HVl`DKS0wz~7Feo$=KggutCb>R7 zUK=>rHe{8<{%h$TU8pTF>L{oct9B}EPWC(5N-wn#ORwWhMJD(pyNh#8O&gDHU>QTG>04M-^~+>n zhJ>0;QMl(eZwhjDB2kW=O=fq~W2y0ru`y;5u{*<+s$z%@vip$j2~;rprz*w=U3QwD z^?eo@vmiX}H#U{|Uij%QHPXK%ggErV_-z#nI?-MhBPZl5c#XDQQjjpeVO*EsQT!}) zpb~T)^~4#SYk$0pq7~@VZI5-G*z{OXJ0FR`6K|IX#Yw??L%b@NT0xLoE|I_d_C~X< zNcZZKMs>xk!4uhTq_u^uj(H>RvWbTLDZj6U4(soyR2hBHOM^qt3~g^=)M(qQNKPEV-}3tPu?$Sr0Epce zjXhT&gMXu1KSGD;$mMWe-#A&8mtJO%thKNe;2U)^cX^9hGx!?Kn&~i|-#JC=Z;^92 zcL)2ZF-JtXJx9oDYp>MrFyC63-#(eM9f2rXYB}i_!h0!#$zd=II!SUeqY#yKK;kNc;9|eTYEYK7FVCq+drt?#`5z!;87jrdFj0nKIkE z0+7YT)`j9aUW)TYJJDR92Xtj&nO9?)W!#L$?RV?r%id*}%$^I@TLc)7uEkoVL6Tm6 zrGmtG>m84?`1|Umz!tkBH-hG;jpe$#!X$KRfde~#n_jUPNyD}hX5zM0x;42r=*x~MLVirx zCFD<)*%Zvbykt~SEM?avS4X!lsQuIYyJsRMtuZXkB}iThv;&jx5m$HM)sv?*Zu9p2 z_N>l!Y`{S91hRn`2`qUQ_NLKr&tx*lMDQcF2MiwJC&@Bk@vNl0KnqTZRYGk|ko>g{XYjZqa+j*uFn? zZZd+tJw(aSTXEA$zLhD%o5y>j(*66-C~ox(Dd#5c_E;Ca%{8VrabDL9_w8E0W;H{Q zDXbh2#j+l{aqVPgUQN*8T=u3tX|>Y@*^zn`U|KTS z0HltcNTT13qJ*=TfxEUGe{U#*U3IkGNH}q{>m!%~r6vV4BQ4=Cp7yVGo-a=FGvKS( z32s^k_ z`lq=@O53Gt)N5!MVw{ZZ>nguVX{N>D>|u|(1MM%kYK7#zF^eJx8^L#xMR z6ODEQq%H;P;U?1pnrma7dR{MQNeCX3tDV9L=9KL;Y%4@q=%)`)HyhHTvWdllXmq}Rp=t&DhbtFfyR8&3}1SNU-d3k z*ewu_bR1zPe&-q_*#E2o?Tez45;cI9@Ly(vzgkPQD7`E?Ds$du08D|eStYw$P*~1*lgbucGOZqT1ll`YALdf`$aiu*7C-K~iu9D@FBsh@4%(m*>1L0I;HydVef8{sv5Cx2vIM zJ-Au=cupL7Y`U}uHu!~7k^e04Krt?dkf9Es8VKx#vxjZz*!UCTRg-u_hs|nm-! z%{k0WSK{lszfH~eFbukRs++{=)+&CfD99)(h;-&JE66oZoXYLb5V$i*~GBbFkay;()&Q07}pNpHv%Ir&(WQbl|N83ne( zWVXYuDG|HiRr96^JI$T0nI~moAQZTLiBiXmtE(WR zBCwA(k8*t|UitR@&G=ey?b~2#XgcW$Cs=V8!61GQhJR*pBOlGY`&N+vN3k?T29LSwuiZ@}= z9Kx9nFq!Y zEA-mDr`bSZ3xA1*2QeelmbVP4p1 z<}Bw2=V&Ar!OYI_uFMeci7*>ueA-wq*%y0ig$^We2xDc2%zNZKM^~qEUdqnQ3t5;m z@?+XeXJWeyL-8wfX}H{Rkcn}Fck=jfY=#U1IN6H=!zdT3cS#}WDx_6;ktz998EH02S z>()|fd>VFC#^G0lzFpRch|byUXCTe1_dZW?k&GpFZbY1iKU=x?WQ2PacgT{_o(ie` zg?l&NE0mbk8{sj04&0W!cLe%078J8iu7tkm(F%Y)>g!h&JTb^RVl|Y?CW36o>o$k9 z2z&qf(kf9fK7Fpgag^3VQf+kpRg9o9R6D^d5hL5aO58ZDLZh1cyAS18Vq5-nwT2ou zWv*W0wcVUE`b@5Fy5{{#|6Xg#p5nCu34pIedlrDO$d=f22+2GnQ4xDO0 z?+R<5p+u*rVc~Dj-*9Ld0{3|V_IRHUG#Hx?Hhk{M3K5s#?{iYoms+%N9I=myXwlQL zJIe#H`NTFs;B9N;+Ms`XE^K=>M5*eUX?+l3X)yAP@R=_=3saGi#ku1{j@qx9 zUy2iAWLPe>*Pmk(V2g(nv=oj)6E(j(1fd^)h$c#DpA3cw7bR=~BugH6q7plsMP+FS z(QMhOhl@Q~D<(%tEa1wvbjk`Qi0f8*;tuI}mzbgl`nLQuxGM((|*v^CM= zWSlO*OZC9TUJ}P9ZrS=XfMUCru!%Jd{=PGGtioJ4vBzy4jVaAD=XF{X>`IBHJK_b$ zC0%Q{MbGFRDfszlJe^9e!Uz3qooeO@I}>Hkifnp=$cw_)T#&4sDI>T-=>4!0$)^HA z4SEe{;QGYm){I?(4qRn*7o*6ZuzGh6)@<=s|Dy+NTnxvc*DM(2{Hs)XyMCRWvmk5( zLHM3}PLV--c3j>=Ckrp%EFR@C{LR}h%eeyNT(3$&F+85zA64Svk3iLva!Iq9j2T@CWdqS7@!l;%ve+N3FBfCY z9Tf#2!=a?>Oj^bK3w=6kliM*OXV_4YJHo9>>}xG zts=?ZMmn5eyE(EzbOx7cvpp=eC|?57(GcX~DBWaRoiPzM>&y4Ii z6Px`#X_uo&(qiZtDK&UKl0Az3r|v1`Y3=y{zS^C_#dN=!Ayk=yuOYWZcK!3<&(uDAmH;)BR{&~vMFSs7coZCASTt)(fPfo-d&2lalQN87Z%e|#peori$V#kUX8!XMVXRmpmPd)X`W+Sy!sKHW-VUh zYR5g+y>36h`Wv(V_I4NB)iTe;=A-fWBp7?xh7Y>0J6wR!A%>i6^|wR%f7y?h6^PpO zee~dAk=6Qwb-0kvmz|IxJDQhg-Rjw*w=_iHH7>Nvbgr^2^|tlPAo9#>ZW=i?gUqJ=9QoZv6tMB z@?ymPkA9Sidhc;I&qn^h$D_jg95!U_bEs*2sYv{2RY^!MWU)L@1Kji~ueM6Q)BKtn zV(2JuatyX&`Gdg#w%FC2q9I?7|wd2Yk%@u=YQ`jbEpp1!?yG!8zLE@smWj|7m5qppQ_oGvw6 z<=6+7{S^GgXU1dvbaLys_zVN@`_=F6ckBOYwbJPy@ROI+IZY##hw|Z(eYO>ww;l5s?ToD_TvBE2{B& z=OdYQJo`-A+v8$%OR_EONE>Oq)!VI|nZNFyqY(42^e+L6{}WUf17^1-y0 z)07o%xc9C1C;1H-$Z&p9n7Hexssy;PbKCyGV!P^$V3uVnRt}^-rvd>OV`XRe8BFrX z&x2O73abYe7zvLuByfpYdIxVC4`!9F!XpprDISu=6szp#igiu}$b7yc+!^75)4dSZ z8@~#J`+mn!Fz$p-bpZOAn(z$T`n7NX4C@dd)i3lBj$I4IpG)4&X@5)TwGg!%?rBun z9$p^Z{%#z9j*uWtag;$lR8PCPYPr1-dtpgH{xk?Vv>=2Q9sR#Atq*1)6J#-oT!zG9 zA;iWGEy^s-z^&Vh;FYyod;E4F`6ea%J3S)@&BO8FWWYFV{XBWYV4Cc(k&G|;Yt83u znvrjP+zkj*ERJdT^gb_2p?dA|V9M_DYq01DdED;ukD22;696wTT~?UH3SgxvZvT3G z1Zwp?{UqqHUk1*WJis|ZPN+E`RFB3|Zb69CX4;1n{M$)CC;B`NQv3|yg;YImZ7VrX zsPU0@0MaLqsjkz5{EdU*`HRR2j!hJ?KY=R2A1D5+V}FGij1r=g=E} zM)Qr51al*q)!*V_cz)=fRVZH7w7N_wTY6`dL_l_lKVGJ%xO>%5oj}VC1D&0-j!r8C zFwzQsou!Z&KsYCWAs&E)Y8*zAA&`pE_4sQLF96T4&mf30rpu?mT5wGc{8-51B79i? zY~aB4&eqh|zQ4uyC&xWj2?&sL=86w!1ff7iX;k`PN7G|q1{Td#OApLKqgg)jK+M1x z+8cQh2yya{Tm&If0K|nOGe~%n=LSgdA1|{|+$CSkn?vv3i5gHnb_lsAOK)6*4Vbf~ z0oP%TL*4sIROxHGLWtcY{bNwlLKs2}|GqH~M@Mn-Bv71>BM8g{6W(GBXF! zI}Wlu$Z;o5M&HA6s|0wl8a1eCCoioB+ zj-ldNRiQ~EG4xQ!kamK%h;b{Oy5E5*-%ELCZ_d6gDRF}CF|G(ag1TjXxyy5REuvyL$l#IQjjKfjziS-- z-VhgrDx*&HqBGaBNcXyg{jIA-<;N5`8UK)-?D>nV7kNM+;X3)My)q}bhp3|H_Hkf@ z4Of$5w*4=5Z2@fVvcVZ zIIsuv9=Fwc@F+Cq3YS~_x{J0m4yiso(=!uWzL^%^E?1tJxtmtro|8eEX+~v8ixOu~ zk0#*F-<~3x(0r=&kHB@IMJa!L00v#-D9a)0P*~S+f;WIX&Djy z4xdB++~pF)?=86383dIsLd~2(q+!)Ln!+_=*N|4IYm+hUOL$?q{MqQ%Wg?3<>LABc zAB`UXZ|b<35~EC&woWfCzsQ*Up0_EyFxF{FI0Z^A=YSOx^|mL%p`_sh9k!rPWDi2D z8kol7l*o$xIqJ}iMCe?DG%+wUY}v_ESiaz3xUpo&j!!^1?iTK`{mTd4bd*@r*M;{@ zERMzdQ~4$vB)%gaq(~wY<9e{Gql<|-@Z|otOHe{A_%)@AYS|q>ybn;Q{b8-qDp{ng z5!_C^1O2aW{9=^FiW0u5|MT%c^V*=w`HCmjf|=4`c&$yPP@0?fFF+QL=c769XT>eb zy!LpwedUVc2i}|c#uT>!O)T^%)PplEK@8s57iL>=b(3y>kkF3b@@W6~5pPZr^ZL|%21{o4IaqNX3VM!2#;3U`CcG=PYZc;1uj z1VeD%qH{#A`QFb3gDq#?IQS`GX(?Xgx3qV$KR)mBY_^`|tj4`z;eb>T(OcWQ@Hpqr zfC2#n&8p*H%SyDh#h!K}xw;wW%M88-6ht&I^W{|kLZgUFLny;;$LlXrgEqir`J49z zAz3rv=bLC0%kEqvP*L1H3VkZ5thz`a*6Kd%HUk$deQi4cPgeW~AM1;^G8&D7skS<+BTIeMN z5|X_20lIac^Uk~XjW^Cce>}$?V~Zr;H`na*H|JW*xWnj?k#^~9wy4a`m>t#ze1t(P#e4}CSaBWwR0W(%F-6JXhE#~I zWw3VAQ6wvv5ccI~F^;^1;ZA5AuyYC3dwgMoUHjyc=E}59TkVonPCw{&b!a8ssE|Zv zvbUXf?{-FK^mnRdA+pV+;bO%3p{=;T-=?_d3IGdC-B94i@y(Fr)%}dr&)HGp*bY-( zb~5`=#Xi#+=3IKAk}a;?0gErvhEqxPcRk;*nG}|dE~0_8W#k35RhaIV>~|sY?cecq zLpKCHREB)9*C+f#+a&g`QCx?k_l$7LZzib!w6ZP{7(C<4!O$81`#=G#B6Mljzi;p( z{f4zfIptvfVsP8Ibhfi5r!gV z2*eN3y3DuNFdJr}mm|(SK-;U7>l|?^j6qQ+itWJb?FIT%39^Qtdfj8xk2WS z@3{rFbr@^WtAdn&@f+pyTE_kQx&u4laxEoYZGQ(}8Tz+USz+P(9;#1p*g!4O<8bPWIq_;i;UCMIkxfs)W0plSOVbKzeAAL z)Pw&(s0{Tz1-n!=&s3}aot>O@Se)&XXt<^vOOO;4P z)2pScb3YHhk7o@v#!#0Ehze6pb-#RO?Hh!dy-nvH{OKtr)#=wwxK3KGlW?!fc32Q% z@?Nf&!9p@8?Xnv{MF2*=xiO;oLLT^7{v7Z03NJF1qIlCF#?7WNWzenyIm zJ+u+Gz_Or_x-0S=hWmT^LV>$yXLVvUllQFpFVW+GvY=IOiiM(6rK%znXSyQpz$Lv- ztEH%Im`4bRqmI*2ty(hl_fQxOd!{`#BlBSZN8kH!LlwZb@M_>}W1l%n?R(jXSl&x8 z!CcDT2v5)pK&JIjT}aI#Es5p+v;#n6z{`FrnD=Oos<4TqG|=#! zae}X7PY4*=7h2s~$u#t+Kv3=QX@ksAzh3%y6 zz;DL(lSlwh-A}C!(mRS2*t=nBKffHJ)+a@rYh$eRZ2R3-z=+F`lwXzF0@?Sk7WRYI z-N}_7Hxdp=(uEG;*$RuFgV#LDFHiU+kcK@=sk6m7Rol##XkKrr3e8OqD?QeErQ;L627au;W6??&RriQFlLk?z0;1vw!_aTmXIVw9jnO5!i}T z4wD6{Tb@Aa`Yo6MC;HG#9F070LZ0mI zFNy|HShnybDLU[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 -MotoristaAnalista de suprimentosLogisticaGerente de lojaSolicitação de TransferênciaValidarLojaAprovarTransferênciaEmitir NFEde TransfReceberProdutosVerificarproblemaColetarProdutoValidarprodutoEntregarProdutoGestor IdentificadoLoja sem GestorAprovarReprovarReprovarCancelarValidar produtosrecebidosEnviar para coletaFinalizar +MotoristaAnalista de suprimentosLogisticaGerente de lojaSolicitação de TransferênciaValidarLojaAprovarTransferênciaEmitir NFEde TransfReceberProdutosVerificarproblemaColetarProdutoValidarprodutoEntregarProdutoConsultarEntradaVerificarproblema delançamentoGestor IdentificadoLoja sem GestorAprovarReprovarReprovarCancelarValidar produtosrecebidosEnviar para coletaFinalizar diff --git a/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process b/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process index 9b00760..48aab1e 100644 --- a/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process +++ b/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process @@ -1,79 +1,80 @@ - - - - - + + + + + + - - + + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - + - - - + + + - - - + + + - - - + + + @@ -82,100 +83,100 @@ - + - - + + - - + + - + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - - + + + - - - + + + - + @@ -191,9 +192,9 @@ - - - + + + @@ -202,54 +203,44 @@ - + - - + + - - + + - + - - - - - - - - - - - - + + - - - + + + - + - + - - - + + + - - - + + + - + @@ -265,16 +256,77 @@ - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -282,146 +334,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -441,26 +493,26 @@ - + - + - + - + - + - + @@ -473,10 +525,10 @@ - + - + @@ -490,146 +542,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -643,146 +695,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -796,146 +848,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -949,146 +1001,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1102,146 +1154,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1255,26 +1307,26 @@ - + - + - + - + - + - + @@ -1287,10 +1339,10 @@ - + - + @@ -1304,26 +1356,26 @@ - + - + - + - + - + - + @@ -1336,26 +1388,26 @@ - + - + - + - + - + - + @@ -1368,146 +1420,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1516,7 +1568,7 @@ - + @@ -1535,26 +1587,26 @@ - + - + - + - + - + - + @@ -1568,26 +1620,26 @@ - + - + - + - + - + - + @@ -1601,10 +1653,10 @@ - + - + @@ -1620,146 +1672,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1768,8 +1820,8 @@ - - + + @@ -1783,146 +1835,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1937,26 +1989,26 @@ - + - + - + - + - + - + @@ -1971,146 +2023,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2127,146 +2179,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2281,26 +2333,26 @@ - + - + - + - + - + - + @@ -2314,146 +2366,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2469,26 +2521,26 @@ - + - + - + - + - + - + @@ -2501,146 +2553,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2657,146 +2709,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2811,26 +2863,26 @@ - + - + - + - + - + - + @@ -2843,146 +2895,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3002,146 +3054,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3162,146 +3214,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3323,10 +3375,10 @@ - + - + @@ -3340,26 +3392,26 @@ - + - + - + - + - + - + @@ -3374,10 +3426,10 @@ - + - + @@ -3394,10 +3446,10 @@ - + - + @@ -3413,26 +3465,26 @@ - + - + - + - + - + - + @@ -3447,26 +3499,26 @@ - + - + - + - + - + - + @@ -3475,272 +3527,852 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - - - - - - - - - - - - - - - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Transferência Ginseng/workflow/scripts/Solicitação de transferência.servicetask99.js b/Transferência Ginseng/workflow/scripts/Solicitação de transferência.servicetask99.js new file mode 100644 index 0000000..688d8b4 --- /dev/null +++ b/Transferência Ginseng/workflow/scripts/Solicitação de transferência.servicetask99.js @@ -0,0 +1,48 @@ +function servicetask99(attempt, message) { + try { + var validacaoItens = safeTrim(hAPI.getCardValue("validacaoItens")); + + // Só precisa consultar entrada da NFe quando o recebimento foi validado como entregue. + if (validacaoItens !== "entregue") return; + + var dataEntrada = safeTrim(hAPI.getCardValue("dataEntradaNfeConsulta")); + if (dataEntrada !== "") return; + + var chaveNfe = onlyDigits(hAPI.getCardValue("chaveNfe")); + if (chaveNfe === "") { + log.warn("[servicetask99] Chave NFe vazia. Nao foi possivel consultar entrada."); + return; + } + + var cKey = DatasetFactory.createConstraint("key", chaveNfe, chaveNfe, ConstraintType.MUST); + var dsNfe = DatasetFactory.getDataset("ds_fiscal_invoice_by_keys", null, [cKey], null); + + if (!dsNfe || dsNfe.rowsCount < 1) { + log.warn("[servicetask99] Dataset sem retorno para chave: " + chaveNfe); + return; + } + + var dsSuccess = safeTrim(dsNfe.getValue(0, "success")).toLowerCase() === "true"; + var dsUpdatedAt = safeTrim(dsNfe.getValue(0, "updatedAt")); + + if (dsSuccess && dsUpdatedAt !== "") { + hAPI.setCardValue("dataEntradaNfeConsulta", dsUpdatedAt); + log.info("[servicetask99] Data de entrada atualizada automaticamente: " + dsUpdatedAt); + return; + } + + var dsMessage = safeTrim(dsNfe.getValue(0, "message")); + log.warn("[servicetask99] Consulta executada sem data de entrada. message=" + dsMessage); + } catch (e) { + log.error("[servicetask99] Erro na consulta automatica da NFe: " + e); + throw e; + } +} + +function safeTrim(value) { + return String(value == null ? "" : value).trim(); +} + +function onlyDigits(value) { + return String(value == null ? "" : value).replace(/\D/g, ""); +} From 5f7c2f99d1835b2457fd2fd9bb16499c15bdf6be Mon Sep 17 00:00:00 2001 From: Andrey Cunha Date: Fri, 20 Mar 2026 23:32:59 -0300 Subject: [PATCH 07/25] att --- .../org.eclipse.e4.workbench/workbench.xmi | 4487 +++++++++-------- .../0.log | 1 + .../com.totvs.tds.ecm.dataservers | Bin 0 -> 557 bytes Transferência Ginseng/.gitignore | 1 + Transferência Ginseng/.metadata/.log | 260 + .../.root/.indexes/properties.index | Bin 57 -> 203 bytes .../org.eclipse.core.resources/.root/2.tree | Bin 81 -> 0 bytes .../.safetable/org.eclipse.core.resources | Bin 730 -> 1135 bytes .../org.eclipse.e4.workbench/workbench.xmi | 64 +- .../org.eclipse.jdt.ui/dialog_settings.xml | 2 + .../0.log | 1 + .../.cache/clean-cache.properties | 2 +- .../org.eclipse.ui.ide/dialog_settings.xml | 22 + .../dialog_settings.xml | 2 + Transferência Ginseng/.metadata/version.ini | 2 +- Transferência Ginseng/.vscode/servers.json | 6 +- .../Ginseng_chamados/.project | 11 + .../datasets/ds_rgb_products.js | 3 - .../events/validateForm.js | 10 + .../script.js | 140 +- .../totvsflow_solicitacao_transferencia.html | 66 +- .../Solicitação de transferência.png | Bin 48431 -> 51657 bytes .../workflow/.resources/teste3.ws.cache | 182 - .../workflow/.resources/teste3.ws.cache.bkp | 155 + .../Solicitação de transferência.process | 58 +- 25 files changed, 2971 insertions(+), 2504 deletions(-) create mode 100644 Lançamento de documentos/com.totvs.tds.ecm.dataservers create mode 100644 Transferência Ginseng/.gitignore delete mode 100644 Transferência Ginseng/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree create mode 100644 Transferência Ginseng/Ginseng_chamados/.project diff --git a/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi b/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi index 1c35dce..978f9f0 100644 --- a/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi +++ b/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi @@ -1,9 +1,9 @@ - - + + activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration ModelMigrationProcessor.001 - + @@ -11,9 +11,10 @@ topLevel - - - + shellMaximized + + + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -73,85 +74,85 @@ persp.showIn:org.eclipse.eclemma.ui.CoverageView persp.newWizSC:org.eclipse.jpt.jpa.ui.wizard.newJpaProject persp.perspSC:org.eclipse.jpt.ui.jpaPerspective - - - + + + View categoryTag:General - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java Browsing - - - - - + + + + + View categoryTag:General - + View categoryTag:Mylyn - + View categoryTag:General - - + + View categoryTag:General - + View categoryTag:General - + View categoryTag:Server - + View categoryTag:Data Management - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General @@ -159,7 +160,7 @@ - + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -191,54 +192,53 @@ persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateLayoutWizardID persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateWidgetWizardID persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView - - - - active - + + + + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Fluig - - + + View categoryTag:General - - - - + + + + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig @@ -247,3061 +247,3074 @@ - - + + View categoryTag:Help - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:Help - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Help - - + + org.eclipse.e4.primaryDataStack EditorStack - - + active + noFocus + + Editor removeOnHide com.totvs.tds.ecm.designer.bpmneditor - - - - Editor - removeOnHide - org.eclipse.wst.jsdt.ui.CompilationUnitEditor - - - - Editor - removeOnHide - org.eclipse.wst.jsdt.ui.CompilationUnitEditor + active - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java Browsing - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Server - + View categoryTag:Data Management - + + View categoryTag:General + + ViewMenu + menuContribution:menu + + - + + View categoryTag:General + + ViewMenu + menuContribution:menu + + - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Mylyn - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:Java - active - activeOnClose - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + + View categoryTag:Fluig + + ViewMenu + menuContribution:menu + + - + + View categoryTag:Fluig + + ViewMenu + menuContribution:menu + + - - + + toolbarSeparator - + - + Draggable - + - + toolbarSeparator - + - + Draggable - + toolbarSeparator - + - + Draggable - + Draggable - + Draggable - + Draggable - + Draggable - + Draggable - + toolbarSeparator - + - + Draggable - + - + Draggable - + toolbarSeparator - + - + toolbarSeparator - + - + Draggable - + stretch SHOW_RESTORE_MENU - + Draggable HIDEABLE SHOW_RESTORE_MENU - - + + stretch - + Draggable - + Draggable - + Draggable - - + + TrimStack Draggable - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - - - + + + + - - - + + + - - - - - + + + + + - - + + - - + + - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + platform:win32 - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - + + + + - - + + - - - - + + + + - - - - - - - - + + + + + + + + - - + + - - - - - - + + + + + + - - - + + + - - - + + + - - - - - - + + + + + + - - - - - - - - - + + + + + + + + + - - + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + - - + + - - + + platform:win32 - - + + - - + + - - - - - - - + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Editor removeOnHide - + View categoryTag:Ant - + View categoryTag:Gradle - + View categoryTag:Gradle - + View categoryTag:Data Management - + View categoryTag:Data Management - + View categoryTag:Data Management - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Java - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git NoRestore - + View categoryTag:Git - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:Debug - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:JPA - + View categoryTag:JPA - + View categoryTag:JavaServer Faces - + View categoryTag:JavaServer Faces - + View categoryTag:Web Services - + View categoryTag:Maven - + View categoryTag:Maven - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Oomph - + View categoryTag:API Tools - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Team - + View categoryTag:Team - + View categoryTag:Help - + View categoryTag:Terminal - + View categoryTag:Other - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Debug - + View categoryTag:JavaScript - + View categoryTag:JavaScript - + View categoryTag:JavaScript - + View categoryTag:JavaScript - + View categoryTag:JavaScript - + View categoryTag:Server - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:General - - + + glue move_after:PerspectiveSpacer SHOW_RESTORE_MENU - + move_after:Spacer Glue HIDEABLE SHOW_RESTORE_MENU - + glue move_after:SearchField SHOW_RESTORE_MENU - - - - - + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log b/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log index 43fd93d..141e4ca 100644 --- a/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log +++ b/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log @@ -1,2 +1,3 @@ 2026-03-12 10:11:35,412 [Worker-5: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is out-of-date. Trying to update. 2026-03-16 18:19:59,450 [Worker-2: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is out-of-date. Trying to update. +2026-03-20 19:38:52,890 [Worker-4: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. diff --git a/Lançamento de documentos/com.totvs.tds.ecm.dataservers b/Lançamento de documentos/com.totvs.tds.ecm.dataservers new file mode 100644 index 0000000000000000000000000000000000000000..9bd77f9d7af155313108fb239bc739a13d42cd32 GIT binary patch literal 557 zcmb7BJxc>Y5S@!rgE>-Ynbtx<)&vV6A=sDVu!bHc=Ptn;~PxJCX7!;6+;RroYEd85xO4fboQ#l+o|^( z|8g}0nL3yrqY_)Lv+bg+L*5U+P{OZXi+Sr|xOrDyS&)a-d!@B(g+9R$dy=3n3A216 zndmV=tWYqr<3+C18a=#xoL_e@3eU<-!sA>D5oVA{WNSRmDtk`|OG=Un%MEQ-u2f2; zb#km#h~Cfn- zpTuWOoTrd;J`k|+U$w;p^|5xJvxyGOt3cAFcrrm3vH3_j4sRKd4u&2FtZ>W3srJ^?MJq__Y8 literal 0 HcmV?d00001 diff --git a/Transferência Ginseng/.gitignore b/Transferência Ginseng/.gitignore new file mode 100644 index 0000000..e10e727 --- /dev/null +++ b/Transferência Ginseng/.gitignore @@ -0,0 +1 @@ +/.metadata/ diff --git a/Transferência Ginseng/.metadata/.log b/Transferência Ginseng/.metadata/.log index 0c5d3fa..39eea84 100644 --- a/Transferência Ginseng/.metadata/.log +++ b/Transferência Ginseng/.metadata/.log @@ -61,3 +61,263 @@ Caused by: org.eclipse.core.internal.resources.ResourceException: Invalid projec at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.createOrImportProject(SmartImportJob.java:604) at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:552) ... 2 more +!SESSION 2026-03-20 19:29:41.529 ----------------------------------------------- +eclipse.buildId=4.13.0.I20190916-1045 +java.version=1.8.0_481 +java.vendor=Oracle Corporation +BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=pt_BR +Framework arguments: -product org.eclipse.epp.package.jee.product +Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product + +!ENTRY org.eclipse.egit.ui 2 0 2026-03-20 19:30:11.037 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Home'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. + +!ENTRY org.eclipse.ui.ide 4 0 2026-03-20 19:30:50.588 +!MESSAGE Could not import project located at C:\Python\Fluig Ginseng\fluig\checklist\fluig\Transferência Ginseng +!STACK 0 +org.eclipse.ui.internal.wizards.datatransfer.CouldNotImportProjectException: Could not import project located at C:\Python\Fluig Ginseng\fluig\checklist\fluig\Transferência Ginseng + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:565) + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.run(SmartImportJob.java:252) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +Caused by: org.eclipse.core.internal.resources.ResourceException: Invalid project description. + at org.eclipse.core.internal.resources.Project.checkDescription(Project.java:173) + at org.eclipse.core.internal.resources.Project.assertCreateRequirements(Project.java:57) + at org.eclipse.core.internal.resources.Project.create(Project.java:267) + at org.eclipse.core.internal.resources.Project.create(Project.java:251) + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.createOrImportProject(SmartImportJob.java:604) + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:552) + ... 2 more + +!ENTRY org.eclipse.ui.ide 4 0 2026-03-20 19:33:53.586 +!MESSAGE Could not import project located at C:\Python\Fluig Ginseng\fluig\checklist\fluig\Transferência Ginseng +!STACK 0 +org.eclipse.ui.internal.wizards.datatransfer.CouldNotImportProjectException: Could not import project located at C:\Python\Fluig Ginseng\fluig\checklist\fluig\Transferência Ginseng + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:565) + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.run(SmartImportJob.java:252) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +Caused by: org.eclipse.core.internal.resources.ResourceException: Invalid project description. + at org.eclipse.core.internal.resources.Project.checkDescription(Project.java:173) + at org.eclipse.core.internal.resources.Project.assertCreateRequirements(Project.java:57) + at org.eclipse.core.internal.resources.Project.create(Project.java:267) + at org.eclipse.core.internal.resources.Project.create(Project.java:251) + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.createOrImportProject(SmartImportJob.java:604) + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:552) + ... 2 more + +!ENTRY org.eclipse.ui.ide 4 0 2026-03-20 19:34:16.689 +!MESSAGE Could not import project located at C:\Python\Fluig Ginseng\fluig\checklist\fluig\Transferência Ginseng +!STACK 0 +org.eclipse.ui.internal.wizards.datatransfer.CouldNotImportProjectException: Could not import project located at C:\Python\Fluig Ginseng\fluig\checklist\fluig\Transferência Ginseng + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:565) + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.run(SmartImportJob.java:252) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +Caused by: org.eclipse.core.internal.resources.ResourceException: Invalid project description. + at org.eclipse.core.internal.resources.Project.checkDescription(Project.java:173) + at org.eclipse.core.internal.resources.Project.assertCreateRequirements(Project.java:57) + at org.eclipse.core.internal.resources.Project.create(Project.java:267) + at org.eclipse.core.internal.resources.Project.create(Project.java:251) + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.createOrImportProject(SmartImportJob.java:604) + at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:552) + ... 2 more + +!ENTRY org.eclipse.ui 4 4 2026-03-20 19:34:47.542 +!MESSAGE Unable to create part +!STACK 1 +org.eclipse.ui.PartInitException: Unknown editor input: org.eclipse.ui.ide.FileStoreEditorInput@5545f917 + at org.eclipse.graphiti.ui.editor.DiagramEditor.convertToDiagramEditorInput(DiagramEditor.java:285) + at org.eclipse.graphiti.ui.editor.DiagramEditor.init(DiagramEditor.java:215) + at com.totvs.tds.ecm.designer.eclipse.ui.TotvsBpmnDiagramEditor.init(TotvsBpmnDiagramEditor.java:407) + at org.eclipse.ui.internal.EditorReference.initialize(EditorReference.java:353) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:340) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:998) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:963) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:139) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:408) + at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:331) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:202) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:91) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:60) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:42) + at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:132) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1293) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.lambda$0(LazyStackRenderer.java:75) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.impl.ElementContainerImpl.setSelectedElementGen(ElementContainerImpl.java:170) + at org.eclipse.e4.ui.model.application.ui.impl.ElementContainerImpl.setSelectedElement(ElementContainerImpl.java:188) + at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.showElementInWindow(ModelServiceImpl.java:651) + at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.bringToTop(ModelServiceImpl.java:615) + at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.delegateBringToTop(PartServiceImpl.java:790) + at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.bringToTop(PartServiceImpl.java:404) + at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.showPart(PartServiceImpl.java:1239) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:3205) + at org.eclipse.ui.internal.WorkbenchPage.lambda$9(WorkbenchPage.java:3110) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:72) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3108) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3078) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3061) + at org.eclipse.ui.ide.IDE.openEditorOnFileStore(IDE.java:1377) + at org.eclipse.ui.internal.ide.actions.OpenLocalFileAction.run(OpenLocalFileAction.java:100) + at org.eclipse.ui.internal.ide.actions.OpenLocalFileAction.run(OpenLocalFileAction.java:73) + at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:232) + at org.eclipse.ui.internal.WWinPluginAction.runWithEvent(WWinPluginAction.java:218) + at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:580) + at org.eclipse.jface.action.ActionContributionItem.lambda$4(ActionContributionItem.java:412) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3986) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3585) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + at org.eclipse.equinox.launcher.Main.main(Main.java:1441) +!SUBENTRY 1 org.eclipse.ui 4 0 2026-03-20 19:34:47.543 +!MESSAGE Unknown editor input: org.eclipse.ui.ide.FileStoreEditorInput@5545f917 + +!ENTRY org.eclipse.e4.ui.workbench 4 0 2026-03-20 19:34:47.544 +!MESSAGE +!STACK 0 +java.lang.NullPointerException + at org.eclipse.graphiti.ui.editor.DefaultUpdateBehavior.dispose(DefaultUpdateBehavior.java:422) + at org.eclipse.graphiti.ui.editor.DiagramBehavior.disposeBeforeGefDispose(DiagramBehavior.java:1779) + at org.eclipse.graphiti.ui.editor.DiagramEditor.dispose(DiagramEditor.java:510) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.handlePartInitException(CompatibilityPart.java:310) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:342) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:998) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:963) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:139) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:408) + at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:331) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:202) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:91) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:60) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:42) + at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:132) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1293) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.lambda$0(LazyStackRenderer.java:75) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.impl.ElementContainerImpl.setSelectedElementGen(ElementContainerImpl.java:170) + at org.eclipse.e4.ui.model.application.ui.impl.ElementContainerImpl.setSelectedElement(ElementContainerImpl.java:188) + at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.showElementInWindow(ModelServiceImpl.java:651) + at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.bringToTop(ModelServiceImpl.java:615) + at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.delegateBringToTop(PartServiceImpl.java:790) + at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.bringToTop(PartServiceImpl.java:404) + at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.showPart(PartServiceImpl.java:1239) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:3205) + at org.eclipse.ui.internal.WorkbenchPage.lambda$9(WorkbenchPage.java:3110) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:72) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3108) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3078) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3061) + at org.eclipse.ui.ide.IDE.openEditorOnFileStore(IDE.java:1377) + at org.eclipse.ui.internal.ide.actions.OpenLocalFileAction.run(OpenLocalFileAction.java:100) + at org.eclipse.ui.internal.ide.actions.OpenLocalFileAction.run(OpenLocalFileAction.java:73) + at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:232) + at org.eclipse.ui.internal.WWinPluginAction.runWithEvent(WWinPluginAction.java:218) + at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:580) + at org.eclipse.jface.action.ActionContributionItem.lambda$4(ActionContributionItem.java:412) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3986) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3585) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + at org.eclipse.equinox.launcher.Main.main(Main.java:1441) diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index b/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index index ed9b514964f6d401c82fa8fdb36ac30ac51534a7..97e64c7d32bec581031160d74d609a332d949a33 100644 GIT binary patch literal 203 zcmaKlu?~VT6h&_vR|ky_`Vm!VBVl%T(YRxM!4jdQ?-74r;?&9co^!4Opr8&|XzXKZ z4f%H%nT(H#Od^g`^2AvAI0y}LZv2a`(g;BnYLy*V8S;Rg! delta 17 YcmX@jXvxLMz`(%Bz^Ko_I59&X02OQkYXATM diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree b/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree deleted file mode 100644 index 8a1fc9ec5de0727c9f056384e5a3167da908f53b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81 zcmZQ!W@2K102mGB!YM`uk^G``z0~BK%!1-ny{wcHz2y9&RFFI)6C(p7hz60&U>yJm CSO?Dl diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/Transferência Ginseng/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources index a8bce7e54f5a91b185e6343d949c8ea1f34f896e..5da05b0dd03e8ccf18054ac1e984f918bf72b007 100644 GIT binary patch literal 1135 zcmZ?R*xjhShe1S2b=vdAllRFf=Oz}Hq!uZZBqrsg@^UG=6=f>;CKf3e87LT9S{a*L znVKuOyM+MxMrOQR$vLTsMJ}m1C5iF*Md^B}$vK$?#i@EJsY#{jddc}kskS9Wr9flw zsw>Tes?yghDN0SXHO8qvw=$4gIJ;O6t_z3RSt%t%xS+haM6WC{Co?6nBr`t` zziUAz<|LNpC1+&jr9+jbfc)-SQIJ^#HUK3QKxStZ!<=DgZf;^=VrFD+Zfa)1%Y{!P z-05g~aQL(c7~+J(x*&xZRj6);MBagj-=D!rB=B=j_3rXx4m3_OX^A<-M5Gz0GEx%_ ze$(MWk6#&DvcazyHQhkf;){RONI**j_%y;@kEVxE!olx;c*?=A4As?8wdiRF0I30% Ap8x;= delta 207 zcmaFQaf@|=f{br|o`P>;k%FO_f}w?#k+GGrxq`b}h=P%Uk=f++%vxN=W|n3~hUNx_ z7LyHGBqw(;X-?*6R-gQbS$*PKe*Uz?oZ?hoE`7a{qSRDdqsfX)M)-|{nBl-^1Tqb1 z!sL%ku9LMH`GB+>&`^QN70fb|&oc9%*{e{HlB$=SUzBPKwedj2@6XD67(}E3KlfDc HE - + activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration ModelMigrationProcessor.001 @@ -13,7 +13,7 @@ topLevel shellMaximized - + persp.actionSet:org.eclipse.mylyn.doc.actionSet @@ -76,6 +76,7 @@ persp.perspSC:org.eclipse.jpt.ui.jpaPerspective + active View categoryTag:General @@ -192,11 +193,10 @@ persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateLayoutWizardID persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateWidgetWizardID persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView - - - - active - + + + + View categoryTag:Java @@ -204,19 +204,19 @@ View categoryTag:General - + View categoryTag:Fluig - - + + View categoryTag:General - + @@ -287,7 +287,7 @@ View categoryTag:Help - + org.eclipse.e4.primaryDataStack EditorStack @@ -296,9 +296,11 @@ - + View categoryTag:General + active + activeOnClose ViewMenu menuContribution:menu @@ -431,13 +433,11 @@ View categoryTag:Java - active - activeOnClose ViewMenu menuContribution:menu - + @@ -461,7 +461,7 @@ ViewMenu menuContribution:menu - + @@ -488,7 +488,7 @@ Draggable - + toolbarSeparator @@ -504,16 +504,16 @@ Draggable - + Draggable Draggable - + Draggable - + Draggable @@ -522,7 +522,10 @@ Draggable - + + + + Draggable toolbarSeparator @@ -561,8 +564,21 @@ TrimStack Draggable + + TrimStack + Draggable + + + + + TrimStack + Draggable + + + TrimStack + Draggable + - @@ -3208,7 +3224,7 @@ - + diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml b/Transferência Ginseng/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml index 3fcc57a..5a1b792 100644 --- a/Transferência Ginseng/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml +++ b/Transferência Ginseng/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml @@ -7,4 +7,6 @@ +
+
diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log b/Transferência Ginseng/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log index 74a8a76..8571486 100644 --- a/Transferência Ginseng/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log +++ b/Transferência Ginseng/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log @@ -1,2 +1,3 @@ 2025-05-26 12:44:36,966 [Worker-5: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. 2026-03-16 18:20:20,734 [Worker-2: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. +2026-03-20 19:30:10,530 [Worker-3: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is out-of-date. Trying to update. diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties b/Transferência Ginseng/.metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties index 866b111..1af5f80 100644 --- a/Transferência Ginseng/.metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties +++ b/Transferência Ginseng/.metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties @@ -1,2 +1,2 @@ #Cached timestamps -#Mon Mar 16 18:23:37 GFT 2026 +#Fri Mar 20 19:37:58 GFT 2026 diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml b/Transferência Ginseng/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml index 628f10d..856a7a6 100644 --- a/Transferência Ginseng/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml +++ b/Transferência Ginseng/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml @@ -12,4 +12,26 @@
+
+ + + + + + + + + + + +
+
+ + + + +
+
+ +
diff --git a/Transferência Ginseng/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml b/Transferência Ginseng/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml index db71fb8..1539167 100644 --- a/Transferência Ginseng/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml +++ b/Transferência Ginseng/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml @@ -14,4 +14,6 @@ +
+
diff --git a/Transferência Ginseng/.metadata/version.ini b/Transferência Ginseng/.metadata/version.ini index 26d6c14..5a022bc 100644 --- a/Transferência Ginseng/.metadata/version.ini +++ b/Transferência Ginseng/.metadata/version.ini @@ -1,3 +1,3 @@ -#Mon Mar 16 18:20:13 GFT 2026 +#Fri Mar 20 19:30:03 GFT 2026 org.eclipse.core.runtime=2 org.eclipse.platform=4.13.0.v20190916-1045 diff --git a/Transferência Ginseng/.vscode/servers.json b/Transferência Ginseng/.vscode/servers.json index d5fb634..b3a4066 100644 --- a/Transferência Ginseng/.vscode/servers.json +++ b/Transferência Ginseng/.vscode/servers.json @@ -2,13 +2,13 @@ "version": "1.0.0", "configurations": [ { - "id": "mkjw3cu0krommujt2hvyinvbjsfeaj", - "name": "Teste", + "id": "1v6yi27yg82mmzgeg2todjqzi42g7", + "name": "teste", "host": "comerciode188007.fluig.cloudtotvs.com.br", "ssl": true, "port": 443, "username": "andrey.cunha", - "password": "eyJpdiI6ImNlN2IyOTIzNjljNDZmZDQwMTM5Njg2MTEyNjNlM2IyIiwic2FsdCI6ImM1ZDFjYzhiMTFiZGNjNDBhOTQzMGUwZGU0OWY5NmZmIiwidGV4dCI6ImY4M2FmZTUzNTkzYTBjNDc2OTQ3NDQ4NDc0ZGVlNmRiIn0=", + "password": "eyJpdiI6Ijk2Mzg4MGUwODVkYTVkZmI0YjQ2ZTdmNmNlYTJlMGI2Iiwic2FsdCI6ImI0ODMzZTAyNDkxNWYzNGFkNDVkYjE5ZThkMGNlOTM3IiwidGV4dCI6IjY3NDBmZjM2MTE1YjhiODAyM2IzYjVjZDYyYzEwYWRiIn0=", "userCode": "andrey.cunha", "confirmExporting": false, "hasBrowser": false, diff --git a/Transferência Ginseng/Ginseng_chamados/.project b/Transferência Ginseng/Ginseng_chamados/.project new file mode 100644 index 0000000..2ec973e --- /dev/null +++ b/Transferência Ginseng/Ginseng_chamados/.project @@ -0,0 +1,11 @@ + + + Ginseng_chamados + + + + + + + + diff --git a/Transferência Ginseng/datasets/ds_rgb_products.js b/Transferência Ginseng/datasets/ds_rgb_products.js index de0d1d8..0fc0eb6 100644 --- a/Transferência Ginseng/datasets/ds_rgb_products.js +++ b/Transferência Ginseng/datasets/ds_rgb_products.js @@ -4,7 +4,6 @@ function defineStructure() { addColumn("codigoDescricao"); addColumn("descricao"); addColumn("sku"); - addColumn("id"); addColumn("brand"); addColumn("ncmId"); } @@ -18,7 +17,6 @@ function createDataset(fields, constraints, sortFields) { dataset.addColumn("codigoDescricao"); dataset.addColumn("descricao"); dataset.addColumn("sku"); - dataset.addColumn("id"); dataset.addColumn("brand"); dataset.addColumn("ncmId"); @@ -91,7 +89,6 @@ function createDataset(fields, constraints, sortFields) { codigoDescricao, desc, code, - trim(item.id), brand, trim(item.ncmId) ]); diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js index b5ae4a2..c0f4550 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js @@ -10,6 +10,12 @@ function validateForm(form) { log.info("Abertura de solcitação: " + atividade); if (completTask.equals("true")) { + if (atividade == 4 && String(nextAtividade) == "39") { + if (String(form.getValue("justificativaDecisaoGestor") || "").trim() == "") { + message += getMessage("Justificativa da decisão", 1, form); + hasErros = true; + } + } switch (atividade) { case EMISSAO: @@ -27,6 +33,10 @@ function validateForm(form) { message += "Consulte a chave da NFe antes de enviar esta etapa.
"; hasErros = true; } + if (form.getValue("fnAnexo_Nfe") == "") { + message += getMessage("Anexo da Nota Fiscal", 3, form); + hasErros = true; + } var qtdDivergenciasNfe = parseInt(String(form.getValue("qtdDivergenciasNfe") || "0"), 10); if (!isNaN(qtdDivergenciasNfe) && qtdDivergenciasNfe > 0) { message += "Existem " + qtdDivergenciasNfe + " divergencia(s) entre a solicitacao e a NFe.
"; diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js index 0b0c650..ece38a2 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js @@ -503,6 +503,13 @@ function updateConferenciaNfeVisibility(activity) { var activityValue = String(activity || $("#activity").val() || ""); var exibirConferencia = (activityValue === "6" || activityValue === "18"); $("#blocoConferenciaNfe").toggle(exibirConferencia); + + // Na emissao (6), mostra apenas a tabela de conferencia. + // Os campos de validacao de recebimento ficam apenas na atividade 18. + var showOnlyConferencia = (activityValue === "6"); + $("input[name='validacaoItens']").closest(".row").toggle(!showOnlyConferencia); + $("#fdAnexo_recebimento").closest(".row").toggle(!showOnlyConferencia); + $(".justificativaDecisaoItens").toggle(!showOnlyConferencia); } var ATTACHMENT_PLUGIN_CONFIG = { @@ -538,18 +545,19 @@ function initAttachmentPlugins() { var cfg = ATTACHMENT_PLUGIN_CONFIG[inputId]; var input = $("#" + inputId); if (!input.length) return; + var dynamicFilename = resolveAttachmentFilename(inputId, cfg.filename); var canUploadHere = (mode !== "VIEW" && allowedInputs.indexOf(inputId) >= 0); try { if (!input.data("fluigFormAttachment")) { input.fluigFormAttachment({ - filename: cfg.filename, + filename: dynamicFilename, accept: cfg.accept, showActionButton: canUploadHere }); } else { - input.fluigFormAttachment("filename", cfg.filename); + input.fluigFormAttachment("filename", dynamicFilename); } if (canUploadHere) { @@ -563,6 +571,13 @@ function initAttachmentPlugins() { }); } +function resolveAttachmentFilename(inputId, fallback) { + if (inputId !== "fnAnexo_Nfe") return fallback; + var solicitacao = String($("#WKNumProces").val() || "").trim(); + if (!solicitacao) return "Nota Fiscal"; + return "Nota Fiscal - " + solicitacao; +} + function normalizeNfeKey(value) { return String(value == null ? "" : value).replace(/\D/g, "").substring(0, 44); } @@ -856,15 +871,29 @@ function renderTabelaConferencia(rows, totalItens, divergencias, mensagem, tipo) var html = ""; if (!rows || rows.length === 0) { - html = "Sem conferencia."; + html = "Sem conferencia."; } else { for (var i = 0; i < rows.length; i++) { var row = rows[i]; var rowClass = row.status === "OK" ? "" : " class='danger'"; + var itemSolicitado = row.key; + var qtdSolicitada = formatConferenciaNumero(row.requestedQty); + var itemNfe = row.key; + var qtdNfe = formatConferenciaNumero(row.nfeQty); + + if (row.status === "Somente solicitacao") { + itemNfe = "-"; + qtdNfe = "0"; + } else if (row.status === "Somente NFe") { + itemSolicitado = "-"; + qtdSolicitada = "0"; + } + html += "" + - "" + escapeHtml(row.key) + "" + - "" + formatConferenciaNumero(row.requestedQty) + "" + - "" + formatConferenciaNumero(row.nfeQty) + "" + + "" + escapeHtml(itemSolicitado) + "" + + "" + escapeHtml(qtdSolicitada) + "" + + "" + escapeHtml(itemNfe) + "" + + "" + escapeHtml(qtdNfe) + "" + "" + escapeHtml(row.status) + "" + ""; } @@ -881,6 +910,64 @@ function renderTabelaConferencia(rows, totalItens, divergencias, mensagem, tipo) resumo.text(mensagem || ("Conferencia: " + totalItens + " item(ns), " + divergencias + " divergencia(s).")); } +function montarResumoDivergenciasConferencia(limit) { + var max = parseInt(limit, 10); + if (isNaN(max) || max <= 0) max = 5; + + var linhas = []; + $("#tabelaConferenciaNfeBody tr.danger").each(function () { + var cols = $(this).find("td"); + if (!cols || cols.length < 5) return; + + var itemSolicitado = String($(cols[0]).text() || "").trim(); + var qtdSolicitada = String($(cols[1]).text() || "").trim(); + var itemNfe = String($(cols[2]).text() || "").trim(); + var qtdNfe = String($(cols[3]).text() || "").trim(); + + linhas.push("Item solicitado: " + itemSolicitado + " / Quantidade: " + qtdSolicitada + " | Item emitido na nota: " + itemNfe + " / Quantidade: " + qtdNfe); + }); + + if (!linhas.length) return ""; + + if (linhas.length > max) { + var restantes = linhas.length - max; + return linhas.slice(0, max).join("; ") + "; ... +" + restantes + " item(ns)"; + } + + return linhas.join("; "); +} + +function listarProdutosDivergentes(limit) { + var max = parseInt(limit, 10); + if (isNaN(max) || max <= 0) max = 10; + + var items = []; + var seen = {}; + + $("#tabelaConferenciaNfeBody tr.danger").each(function () { + var cols = $(this).find("td"); + if (!cols || cols.length < 5) return; + + var itemSolicitado = String($(cols[0]).text() || "").trim(); + var itemNfe = String($(cols[2]).text() || "").trim(); + + if (itemSolicitado && itemSolicitado !== "-" && !seen[itemSolicitado]) { + seen[itemSolicitado] = true; + items.push(itemSolicitado); + } + if (itemNfe && itemNfe !== "-" && !seen[itemNfe]) { + seen[itemNfe] = true; + items.push(itemNfe); + } + }); + + if (!items.length) return ""; + if (items.length > max) { + return items.slice(0, max).join(", ") + " ... +" + (items.length - max); + } + return items.join(", "); +} + function toFloatSafe(value) { var text = String(value == null ? "" : value).replace(",", ".").trim(); var n = parseFloat(text); @@ -990,7 +1077,12 @@ var beforeSendValidate = function (numState, nextState) { } } } else if (numState == 4) { - // + if (String(nextState) == "39") { + if ($("#justificativaDecisaoGestor").val() == "") { + $("#justificativaDecisaoGestor").parent("div").addClass("errorValidate"); + throw "'Justificativa da decisão' é obrigatória para reprovar."; + } + } } else if (numState == 6) { var chaveNfe = normalizeNfeKey($("#chaveNfe").val()); $("#chaveNfe").val(chaveNfe); @@ -1012,7 +1104,12 @@ var beforeSendValidate = function (numState, nextState) { var qtdDivergencias = parseInt($("#qtdDivergenciasNfe").val() || "0", 10); if (!isNaN(qtdDivergencias) && qtdDivergencias > 0) { - throw "Existem " + qtdDivergencias + " divergencia(s) entre itens solicitados e itens da NFe."; + var produtos = listarProdutosDivergentes(10); + var msg = "A nota tem produtos divergentes da solicitacao."; + if (produtos) { + msg += " Produtos: " + produtos + "."; + } + throw msg; } } else if (numState == 31) { if ($("#motoristaColetaNome").val() == "") { @@ -1126,12 +1223,14 @@ function setSelectedZoomItem(selectedItem) { $("#gestorNome").val(selectedItem["RESPONSAVEL_LOJA"] || ""); $("#gestorEmail").val(selectedItem["emailGestor"] || ""); $("#gestor_cc").val(selectedItem["COLLEAGUE_ID"] || ""); + $("#ufDestino").val(selectedItem["UF"] || ""); } if (name_item == "estabelecimento") { $("#gestorNomeE").val(selectedItem["RESPONSAVEL_LOJA"] || ""); $("#gestorEmailE").val(selectedItem["emailGestor"] || ""); $("#gestor_cce").val(selectedItem["COLLEAGUE_ID"] || ""); + $("#ufOrigem").val(selectedItem["UF"] || ""); } if (name_item == "userSolicitante") { @@ -1175,10 +1274,12 @@ function removedZoomItem(removedItem) { $("#gestorNome").val(""); $("#gestorEmail").val(""); $("#gestor_cc").val(""); + $("#ufDestino").val(""); } else if (name_item == "estabelecimento") { $("#gestorNomeE").val(""); $("#gestorEmailE").val(""); $("#gestor_cce").val(""); + $("#ufOrigem").val(""); } else if (name_item == "motoristaEntregaSelecionado") { if ($("input[name='tipoMotoristaEntrega']:checked").val() === "outro") { $("#motoristaEntregaNome").val(""); @@ -1705,15 +1806,18 @@ function invalidFilesTable(tablename, idInput){ */ function invalidFile(idInput){ try { - const inputNameFile = $(`#${idInput}`).val() + const inputNameFile = String($(`#${idInput}`).val() || "").trim(); if(inputNameFile){ + let fileDescription = ""; if($(`#_${idInput}`).length){ - let fileDescription = $(`#_${idInput}`).parent().find(".descAnexo").val() - return !hasFileFluig(fileDescription) + fileDescription = String($(`#_${idInput}`).parent().find(".descAnexo").val() || "").trim(); } else{ - let fileDescription = $(`#${idInput}`).parent().find(".descAnexo").val() - return !hasFileFluig(fileDescription) + fileDescription = String($(`#${idInput}`).parent().find(".descAnexo").val() || "").trim(); } + if (!fileDescription) { + fileDescription = inputNameFile; + } + return !hasFileFluig(fileDescription) }else{ return false } @@ -1732,10 +1836,12 @@ function invalidFile(idInput){ */ function hasFileFluig(fileDescription){ try { + var target = String(fileDescription || "").trim(); + if (!target) return false; const anexos = parent.ECM.attachmentTable.getData(); for(let i = 0; i < anexos.length; i++){ - var descricao = anexos[i].description; - if (fileDescription == descricao) { + var descricao = String(anexos[i].description || "").trim(); + if (target == descricao || descricao.indexOf(target + " - ") === 0) { return true } } @@ -1767,3 +1873,7 @@ window.parent.$("#ecm-navigation-inputFile-clone").on('change', function () { } }); + + + + diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html index d0ca130..7338787 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html @@ -252,6 +252,7 @@ 'fields':[ {'field':'PDV','label':'Loja'}, {'field':'RESPONSAVEL_LOJA','label':'Gestor'}, + {'field':'UF','label':'UF'}, {'field':'LOGIN_LOJA','label':'Login','visible':'false'}, {'field':'COLLEAGUE_ID','label':'Colleague','visible':'false'} ] @@ -267,12 +268,23 @@ 'fields':[ {'field':'PDV','label':'Loja'}, {'field':'RESPONSAVEL_LOJA','label':'Gestor'}, + {'field':'UF','label':'UF'}, {'field':'LOGIN_LOJA','label':'Login','visible':'false'}, {'field':'COLLEAGUE_ID','label':'Colleague','visible':'false'} ] }" />
+
+
+ + +
+
+ + +
+
@@ -292,7 +304,7 @@ - + @@ -343,6 +355,26 @@ +
+

Aprovação Filial Emitente

+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+
+

Emissão da NFe

@@ -379,11 +411,11 @@
- +
- +
@@ -391,7 +423,7 @@
- +
@@ -415,7 +447,7 @@
- +
@@ -497,17 +529,18 @@
# Código do item
- + - + - + + - +
Chave de comparaçãoItem solicitado Qtd. solicitadaQtd. NFeItem emitido na NFeQtd. emitida na NFe Status
Sem conferência.Sem conferência.
@@ -573,3 +606,18 @@ + + + + + + + + + + + + + + + diff --git a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.png b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.png index c1a700f1ccde929aab4533378052147636cfb868..bfed2b38e7ce27e234082af7df951d0dc39324c8 100644 GIT binary patch literal 51657 zcmeEu_d}Ce)3z=Oic%B-r3JB|ARr<|DX~$ciV~u9Z z8@G4uV#waLi%w$SU%@@GeF_X`L_Gjas(OFt>#uWcK^zvpSdSE;ZX(YFt!*)9IdbWfDDc?t_%g_?9s93$hX<+Y4b25eM_L#9k9sy&{o;~VImnDV97sX=zldk+8s+Mis`it(^+_6)o2 zm%A(;3mH`0@}=8;d4)~~H|;CLv-2j`J4UFO4sPewk6n;rkN1oW+buvf3nj}&5Ttuf(J+eWy;v~7{|EtA!1Qg3xII)NbtI~IAgZJx(BJy;O>^{GLf zk`Q`v4eo8NzuN_vK){*Z=#BV!d-Vb3OCyI1560&8&Y#$`ScCE5gkoa%ogDx1eB1Kh zf&mzOGw_{AId%GUaD8+exHU%HeGPQ-RR^aP1`*leI^sh(Ld8ifYO4ocY7((t8H$nO z#B^+yofS{`De5CYRK;N-FK6AVT6@RBkbnWJ8j?AC58~AoCD=zpeX<{RZ58k6MlMEH zy*{Pz!ctt&f}5|DA&qGpQ@3aUdtJ;Zoy~{|3&#o9+JIH~d6O8Zgj%QE5pOUe_A2mj z4XhoErSg618tF&vg`cVjO$3m70g5A5pcRSc?8l(~Sj4j{N@ae@vlPdW?*$iIzP~jd zY(ITNH~R>iaiv>FRq}vO(O`kQw}y?WOl|1TbuQ4>xedi#IndoZpM5<9tR3~{_N9w; zWz;N#4a2tc;>wMjAzXnQ9t+Nrg@e9Y=d^az&Cg3yw>x`fD>XifazUyW2|S)#v~;=* z5du=1bU24Ym=M_5=*3}jrAd_x)OV?CSe1Z6i<)hZ8NCL$&%|P7*Tj z@q_m9ua%BaKvHglV8@kq&}M0zn-0D@;h81`@DaTK7o^yd zhW2J5xuME4Pu?^7DFRN|Fy55;$cjZd#*L$Qn_$sb*)`euJhwk;P(@#Uv&~^v;TnJ8 zW4>|$sU7R@^Xr=6liSVq0j-e)z%Nu67yVpXW%s$o)gfW48RoiBH>I8Bt|c+1F^0&~ z)MC$GX)@R+PE&F<#wX`PmT-vtV)>2=o((yiLN2ZT+6UlNm~7yyex@EQn^iH=)O^&u zRhhr}j_19*Bnn+>&dL0>ttBC^p*Ni_Aof?$Y#sn2x0vd056|xB2k4Ar-D4rKx70_I zU+LO5G_KqMmdaid`l&(S$rJQvKMA~J01xr(NOw{3r&53=7QbP9s-XIWx9$Ggt=nwG z`fW^gv!I;u^ex{QCBQFEW}|mIuJDn^n_>>kOjkOc7MI!)iCiE=zQwNoj!`;jD~z3} z1O$3oT8g|Bb@cd-#pol1OJ@J`p>Kx1r1{sO;b9TsGPc=s%KKu)j^oDJg&nNnr8URD zxSN!rP{_Ki4S(W=$Uxj?wSnLjmAO!UaZm%jDkLXvuO3ff*w178V3YjpSquwkzz9n4 z4GTCl(4C!iG;0nfzV&7635Qd71)aS=tqM3q?=Y=89e6+qYV zFaD$J62_b=XfcQAe&ripHg1-N{R$JTBkviu*!A6^U+X$RagW*cxDlRZHOi>2xW1V^ z#wS;Xwxqr|1^`D_`jAsic)t$55cgh2=sVs56e-C_3CTRlP-&7Qujn79|RC zalHKQRCa)~qh;e_UECDk>Qp+WKQA{^R^pUa%;peix!+iXK(2RRmEe6U)OT^4n-ysG z_Fb^GAE2A607YN?Fo;5&jeqlle(qSu;%YEKzH?)aFeM*%4PFDk?DbHszg|99Fg{{O z*{lH8>>xVlM4ZYb?u1J%Ti*RHNciTIhTzINq<4LrF95U;=Gv=LpWM;Kdh4jik}#zB zY4VS3KP7i1UwkViWOK7_FeFmJdS?DGmc@GZ1H12;nFF((v`icc~5U1mS>eAUUl9)6R~@}Z7IUzXrO7Sr?tUE zT)NGpe&GQTCk={Ioa@M!x)I~%FU}g$N8>nEb_6V8EFu}<^j#z5h;6Uz^W(Wjj+tl< zLcBpL_zDE+5jMnzCX_TL?pz?#qQMR-VsBr}TzE{>7t1Tu>w`L41)*Hx*2xhlqUtiA zQlMdBPUUJB)-Fk%(6W+~(lSLH@xla`;ygsIqQ_gJw<|}2y z6#ZDghIdwzPEBsc_x91Jqj{eL?yq9xi*?OeP=;|`kN^w!huQXjqnz-RYmbvnk-1^r zYv-{;$$(=b5y?W26nIk&;|yg!`nd$H5l=v7f;7u7els?Noh2ajG71N3!UHVf?0hng z723WGA8oB2yYrS-8w$n^VYxW^B%d8r*|Xb@RGkV7^QR*yP$=Q|l6`}IW9xI;74@)cRoK}IXtJhHDc0=t75y~-{ zg1Yr-kO-O{|n9OzIk@Nl6iaJ7>D*aZp3O9%@T(;*g?*u9x z+@Ugjdh-Y&Bw;+ND{s?f7G9Lr-)wU`_QX3TYI4etZAjn0){$xFto@72ZC)G7%m5ln z^-NX1UbO+76qlv3uoGl}vKH&ZWIwWDcPQ&KkfUq_CUu^FvZHKMcH8m?sUlEc@T&n* zlwnKxw7Vo%Do;!s!p##K;@G1ReHm9#xFJ$l82+echcV6v3B?M@t!*7v-1bP#8DJFB zDe5halT$M9M?zT!P?TE{(9IXFdQ+E3v-vO&)7yd8cK`yAad=o$ABJr@G_&KG_W{o& z=fE=_{EYqIh5AI>BOc0$i&&z}T~_2O$%}wP#w`#~929bvtl(-SZsWj?zl^FcB zaILq^Ix$SJNKy5p;x-H(vjhAcF{o3s=RfvDK-{Wc2Ib1`Qc?#=0hWY&47`lrUv^p! zpxd?UhL1Qm*U`GWExpZVNS=K~rqJBFCJ*dF(u}5u0&~LM_?;LM_yL`cHVL6Qg@G^r zo0^)sdP4wiH^A3b6Gigi76~zr3&I!h>SgU~*ZW=YSxrdqftTaS!MuwWOEp)S_%001 zIyN(ZL~F@X3i6vT&y+7WSL7P%2PQ26j2yf2=K1w=H+S~n4D10qsPnZM6>2-*cxdB6 zqqY5p?>vV$$FEJf&EnY+gLmR2*33uU91_iqR?E3T6|HO6<$r`5)*aWITDdtAW0m4t zTZS*rHN?I{cv1?pqFY)-H!K~68NC@+Ea#6U9DVE5MU`!+iW}^=qu_guke!`S1u9{p z)*=fjxgu3Q_d3Z+%LDcNbhzbfK5}I?fe0&J_n@!r{tUliKgET0W#0;LiO+tA!@SpU z^Q=kF0r>+--zl$TYmah_x4^UCHb=)DN_@*~trK&ZQ0@qbre9>sYpj^t!>V;z(#pXx zDXwfX$ige+g&O8)P37#8RKG{Rn1W{X<@cru0FOk%G%VJ)A<;EsdUpOGr8 zfdRZeiCYn#UowjktjjB&RIVv}1k^v@Xd5*~B5AdmWiyo~*BBv%AQ%+J9`U zDchpaARF#pLU?Zmy(#Q|$>xdcZv3*Y*iv&VpNOSQN2t0<-QE)`rqSNv-~QubCOLO{ z6O3dRdW~C#KU^lHHKE!BpoZS2j#(>N`-`4gq_hhLvDn)eU4U4&GHhh&7jeK|Bp5EW zS6`>UG39*BX1z7ZN-jPm`tb5xg_!DnPtnTN;Y|B%1Tr%HUYHG)ek&H=f7#5u8xLgREE?DO;KZ(BD_OU=VUKZq7^CSET^Z?n(ODqpNkK267R zWhcVFc8|;I6&kJwy9wkbFD7q7$RiyI*IiWFcIV)7yY=iRoY7(^?~;fwOnK8yG~2#$At_$v5oY{!Z`csh5{^aPJxoe z2W6LbQYMOntnX8lpf#C4xY7c&+U+ukVv7)ZR}Msh)6gVD0smldzr!5NgDmJ4e(|^9Z+AFsj%vtT0AE8v&*4 zZaA9Yft{FZ`uL$`MaxM`csc8K@w(gRBx7R#HN4ATsFJ&7%K@llg|9^qN5tRE1WHoR zy-wOr&}n4UEt7)uW>;`kHwJjFReqN)T!c8{4?g1lA~B8dW?)(OAr|rBgqIR`r7QmM zSr5A!fFg_wv^^$(awhOcFZQjF*F(Mc2(8e)Cn{E5YlIAh%hXCq15%EoWn&t;DQ;1Zt}{a*B)$b z#ZLA29N8w<*|i>|On$JDJ7y(srQek?4RKBD-%840Cx&a=kfNmk)1X+ku=DtiLrG{u zRo3(UJI@TrTu6obDwAv^m?W0->8mcg#hDv6sEVnA6p+Pp43~z#!*i;_Ww#Glu`Oe& z3M)2D|2a6th!272E)+eqU9h$|8_05Qb2%Srq+ijs<|Ef!5fwV+GEsRCY+iTEHC5JB zapV+6WM;UTCz|d2p>+$*?6N6!oFB4B3m%ZF)!*XCML zIi35d_`@^0&}`Zh5Jkg=*buvmwz)CFg+5Y4O*XaFsb(6QRcs% zrT~fR?3>!n#odPNqDO3u27ncxzIfUc-=zC7-9TaiL}w0vqL!ZP zH@cd;+`NY}hAm{Gq2+I|iu&V0?}_LyjbDVPvG`Eqb5T}=z%duxmiU+MW}(4nr*O?Y zko!pS{#cQ{r;?0Bk{Df&Y@fMpN0@FO#B)qIBT&m&&w+vA9^>XEI=zJW3K8s@2{&Su zpwen(o5j&m@9f$cXg%kEmo~b~`H>Nmvj@M__MDd_HL1VQWL=P`UC1rLI|L*v;Ih%Q zpGN%wz^P`iGcpZ|OW(_ZVm0(Lnu?m@Gvo*gy0e`=>13eW9gGnw*1aX!ErH(ghD)>0 zzcZ!8w=LLY56Gok+$QYrKfrvX8*x8rH!QtkI7QlvvZ^fX5YD9Ge!c2V*#o-ym>-;L z{SW1a=+6d0t>?!_*2EXV=eIWRFP_Di^HCh0mIM6n9&z-q5wIP>E$?9_{ym=-N9x)| zv+!e?*4~Am{9JSMvfegjM-r2fxuMYV1Lst{S6>m_50r;Ik~qN3%e?92!D4%^>&~FV z)te#lOqjgKztZJ-R@&jCXtV?zL}?FH6thhq$ZN`+@9g{m>%nBdqyUqP_Cax(P2R4V^E-&>`dVc<-JA|P z@G`Kl@Y3$i{HpOTS&NEhW>zOfxK>uyB(^eVNb1Gxl_q(^`|JY?=?%9j2LONKq4`rO zquBSOkus;XJZscN=+Zu-Nc(z9%TAWrb+NUFmdau4fDGnUP)7g6-RN9!ev!`zt>iuJZ2wsr)MGj^|$sM?p#=%4Eh8lrZo!fhj zJ*4Hm({k@VKz!zi*4K{Ncek}F8Gd3QDoCkqaw=GtFFG5FtL&s`&1Ipp%3XGHy+(+e zk)E;faOB6c6mRJRpfGdl)xW;&G!%xsL?FHs;3&%@O(4>|{NeJLH9~*oh0+psAeat_ zNDCEfL3|lRS}VmuZ|sm{>H^duvi4ICyILd+?i{Q>HzPB-pilnJ(J*cQq^jtluflZ&mwm zh*(~7w+t8=?*)qP+SM5g&JCr-5@qGdl0(8qZF>0kmv%#nBPTPYhk~n28Mk{zpErJ; zQMUUI9!XGKK!C~8ELi1TB0r?q2su%C?9*f2K!ziO+XR*rhB4ye~(e6d9IOzZypGY#%R4*b;a1t@Nnz=%Pg!ufMmFtQBU ze7;_8lWO#41|JnQ187AJ9*VmA2b#cCouCH9QcRp_bL2&xN zyp>Juj~ouwA|N*;1@b)c(5m%1yPqX~9o!Xzk-J;jkqm75P7YXnRsRE#)B-4r}9gy`t@c<^YtodKB6SrZca@=%O9q5M~nxYIffV@k4*6?v#pRI+gPk%%N z=-?hp>TD+ncb#AuPde~iYZ?|vOi>|>9JGwDK6Am|(bYP(4V(-6qO@oky>3DJ5Ap2^ zGNED)y13o&x5r);@RWtH)(WO$AEq;~(7y4Q?WiE8F2(94k@P}1=lp5C zB3o}OG!-~YSFasH1BH=Q0ZaC5OE;e*pQUaW)!$~}+j@@RdChECtkhzxV{_&7v~Y_& zz7MEVEI*}QhBa16;y7$y32Zfw?Ae)Ro^_OEcKB=+!9VYR88$=c8XxS=oIfxse429Dkz|jK;9HgsHWllQBoLe2* zav8g)se+h0`KJX3y#40re1KyGt*zQuEM%ai_dJKSh{AuBC$v-}++$%&7cy7d!)8*b z22MR=HrAk{A8GmqNa=5_(0^@W6+ka=?nnKU$k3NAn16L%=$8oZ1TnN)6G5#wA_w4u z&cHViw;@9`T}=i0!GYiHw@1FD5~$i>CYnBZTLaa$t#Ja~-xa_=S??U8&>ydfY+K8% z-YUkM0(N=vyIr2f8-T@yEEitwMujkKoubYHCmM{8BSgmfZ>j<03QN_T{4o{s^Me_7 zpN0M*kP&cd1J3*fI|8ZP19m6ykKF;FYnI0wV87D0|Dpv0c4mfGziZYJaKm_4TUr6h zj{%4qw3@41J2v^2Zw<%qaI}~oB^F^|vaYS%C>EA++PuRbIpH669@os4bs~-=r?dTZ zKj2U*yVQ0VIL24xoH5~t`qpUv^Es`fetUmP(+I@Lry=$2vi2erAabGpDg0E}mqE;` z(a(=}KxBsY-NtACaw9-)55W0p6}O*qr)Msdn7CopWgd6f=3& z4TyYOeZE3&nre3^+lHm^$!(!qlXZCX^5VQKa4tl7KLeuMR!!5<=Lq1}zsU!z#sZWr z1GI0VLRf)lM4LDHJ1m~blpros>iGbA|IhPw`@QmTef!Ii{KIBG_8coZ-DgbNM@tMm zv{M-qWS?iEAF%z7FxpaZn@ylVnLc;o8IYAtD*_$UkvE$FbGn56j-SaeE6s{iiooVZ zKcbi0xcX1Y+4mV>Sy*aC(vc}Qf3hb3O8u&7MA5yi8r5Nd)qx=dUECLLv*7w=M6^V( z5Rc2>9DXuvMxV{LK059JiT}_R(U}76U?7NmCdMQJ3N-p1GyA+9`dzOibmX3}2Ave3 z$#OCa&9v(4HvIW)=A42YYti4-O&q=KJnLUcN9qg*3v24pMq=S3jd5`kp9}MwKp~MK-S%l%hm$j<`w`uB%14dy2fA{}u2?p>U zNMEV56_z1DWvhxpv!5&USDc7l8YKeoTSx4dmUu;LD*@5zW9VZ0h|FIVgymt-j#OA8YRgyZ{i;#-UWF`ytcSTS?o{ zo(J&;MYjDO4cW$6<-qfQ+^@TXH&FK%ZA^fZEDoLi(`L?VWwYTcO&)bU{2zA1ut@7&epEo-o^*7BiQm82Kldpyf({E`hxjS_Bos@qp&A|HQz)GoL^0lpHn#5Cf5U(uDN*5c8iDx}cSvwo{X1cxm@vWUW|92oxm`_4!v)Mm>RFjmc%&dd&Ae;@cIG+2IP~?_TFWIZAvEc9~sSFhPYJOS|z00$^>eUo~V|gCmiy*sm||{K;;>Dy7&@ z9fJj0pS&AoPW?$G{(!?o#V&?PMf50`#UB2X&)g8iBn^I-U!Kjk0ZC~75oB#)GZHNd zo-6t#C>HMbe}elB4+rn5w@{{dnVz)=CuoTiaP0cK@2Y5JBij|;V?XI&{eph{2_^zS zewJhos{S7<;MG)1Hk-?=K~lhs&%crEzcT8vP+K2i0Y)zR?~6F6`GLxCA-p!AOV|G7IOpvhC_~-mIqQb{|KmAn4=WIx zikw&lhi5y}uYU_R_vc5W?>PAVNu%do9lUX;B2H^GNz_*)9#TK1aW#AD`U0Gr0c0K{2A$Zld| zvgJJ-eDrnwF=J;e?7$z^ImboOwY_!?{Ssqj<=9kMfb&<$=}6O)ycsh{MnQYK7o-K& zN&yDIu3?_O`?o&`zvL@_c;}|GM&Y^&cd-9U!%yo4pw0827^>DIY?=X8st^P+?7se6 ze)V?G1+1!+&ByHY3;ve9b~i>*q%!JIK|2|;&IAla)q37H@)(1ls#yPEhRBhb>cC7Z zO`yVUQFG{ZehYYTvO1?k5=RaceSOn}Qz_k> zhgtt^VAeyw&;IUf|8~!@w%)m|;GAP73ymcs9{*dDj~Axo-AEcS7)*yQZE%4*`24*~ zC485xg8vA!E0JFE>!s1Xc(h=68k1}A)u|pEwl8G{^^b~&UsMzN99^lKn6wnbVQII8 z!nn)*8#6E#i`Qwauto4yQxW2l`8))K_read1&CoDSLc_V z)+pMUj{SQ)7bF>TRN4N`g5Z5cmB5s&S8MvxkJ)WJERXR5~%A7lEYyNRHrdHFk$%+ z@TOb4G94zUVpVn^fv{#%SZE>_Zyz)|M!6tMicMXn%hGc;G&9Ro-0*Icm)#!V{d*32 z=Ce_CQ6!3$61j%HkwqpAc2S>-c8(5Uh@^S?HjA-Tha9~}UTKKs` zg5{l^onMTf%zWwgOPGs}aWpYC&G;HN;2#+k)uY;7R;1Og%v4vm-}uQf2~FfgTmrm% zu`*!yt?h>1-%0SIDKJ+ros*pOwQzwBq~ zWNVV8adWBje#Mzhj;W)+M#p|XF#R4Fv7jz{5C-wB){A! z0TdLnKm5ohDR`~>+xxC#U`P>#tc;Aq?U}k+7s3w$5{!@cIV}vG4>8xf^Y$&W6YsTD zBWY#J&bD_ihF(Fa>oChP`C{tvTveAf_t(KY<79vHo#C(VR%TKAM+~zcKD+5v;t>-4 zfF#YFd*p`?w3gn+?Oec!2h{y7Ok2D4~dK z;b)O|QPw@eIpr6So8-^VCT260TIS|d^hgw6$J$(lgoOUs1Xas)?10jY$my4U!F;^Z zR$bI(*x}8wh_jo8OG}$&ZY0k`OgrO+e;4t_-+1HD>BTXw^KLGfJ1E1BYKZ0((Q}%-zw&1j4*9EXG`35 zzLw0ZV`GK@Tpvv|ZyI}aW>7of`!+qr4ewpDY>ov5Xaz~hNfX*W7ox1E^1R0O0rScK z%$oQ$4IFFk>;=t|X6+;eZkOV_#YDMnNkuH;Lo?OTj;^;~kT1g3*v)$bt+LVAl%oc>QTNnz%mpi)OsCoBq(s(R`b2tT;wfpPztzC6=6%5qD zrWooyeL|sOZGQW6Y-c}|Y|1D9B2N#MG#8_R}et}NmTSy^$1iia0R#G0cV zAKa)J5`1s@&rGIve}u3*=?UBUCx5B9Yfe^M)|g!9X*TuCAipF|;`~4Z#kr#~Ny>F4 za}q6bCXMP^TAT^_WE<|4K;e_gH65Pfm1iFXJZgL98pAay}jZg#mwdv&LpP zDU!o6T3?1)d)L`>JNFA(PcTpP1Bz5tQ>)vs&id-OU@=D2(67o|JMvKv-p6d(5-%^P z<4en8h1h$E?+f_1f} z&b+Ixt+U-u{olVs^YdFmERK>-UZfp#fU#q6xcKI(IbLH{e$si-GL+W*`K{19e8Um4 z4&0*RpyE*86cP^~czzK6Fd)QOukk%o8Y475hXI*`niozxl$6L6LT@jFPyevA>?W6_ z93oYUcbV&D|ELF>S>(z3xH(>i4D_2wF0hzP58wa;Omo_{_Q~phS zHGH7FCQ>%jQ;X-Ab?$AHRxu=qkGvfD3KJ2ngsF2LDUjgk&P#z0r3KCQ zMHM`P2teGdX_bhmOuLFbc=>zy+QOCb47=`Y(^B`g%1K);Hi3Zz&GLoj5nAMh+S}xW zp)VZI*j#%!rYe4XJWx3%`>@}c#~nbvdtiEcbL^q0?9YP$CF zn7O}J-3^;L^z7_`+LdabFs>|%GiNM{T=9{=d*N^8cz#VFy(;^j$wj-{^q-q&o_vK4 zW3D%AYI%UGW4%sqWp37?DMB5;TEToyX_EUu8LbI%E>SPgf z)j2!%s@~qZo*vFOyz7?}#TUYExk*XGhij{-@}{*76`;tjl*|W@LX3=?540qM31*r< z3W3uL&>t$ck61{B$D|9Mt)EXiu&A_U43k?PF4$*_!!2CD#noMpRrY3~r45`qT`7Fv z@E>D$(UdQiZz9k8ZwzZ=tt^7@iNrwPgK=F9QuJy2kke* z?0_v)^^u;a7s(b_@?PGYOE-^iYC2#L0XXposITK!yV~fj`gVvTB_XO`>H)b-*o8Oy zqhe%jgw^Mv9>cIy?B*QZE`9+ZFH9SQ1X)0RU1wa&P2j*tl7Mk9{|=~z%Xi&=o5M7y z3oROqs_mYv){m8mCGcj4HkrxCknKWoIUI^&x0$I{C>+M7-lp85Aw^)r)Hw0 zs#=qtMqV;+)^hPK0k?_Q&S{}1(#R)9TH>_sJ!K#&590+j$z{j`Kul5mE>!M*tRfwK z$Z?Cl6`BqI9D;#?SAf;uXDHDw&N+GtCNY4!tllB7u`bsoX+Q(6+w1Q-s|ByY@+y$+ z4f`iFPbev}@G$|`(9nLegAFZJxu`Y65Od$iAMhZDxJcWF_<=p!llKYZG18Z z4MVOO;R}b#%}-mO*yjKG10C zB)(n>rf#gC2ywf8JNnMsHw6{YoY@#SbGaOOqwyZi1mi;GmB9T~zqqXyidQTfvdJ0@ zWE-_u(9>PJ_U_3-SJPu9fDNhN{{qIq)lx)?DZ5fm8TLnsm9PFNb?#r)PdZ3&>!OF~ zMV}1ce;L`C!JNv#3I*?Phb1hB)Dknx)7B=P<<8biJkpWLc+Q0F$cjPsPf7Q8jL+sL zb$A^vqm5P#3inY@NA+>-MZMl?S=nm>ZWaG{zx}Eo|E?=c!x5PI>yWG7Z}Y7Quij+M z&G!zK>UkY$?~OI%2)<4pfW|ulcWM?a*!-3^lR8CCSN)hXIzKk@j^(Y>%mb(Q2cC~b zSUD<)PK`IuhU>|wCk%=dHr{opSwY)Y27a%IX^Y?q&(Wxg6XFx{DnpoU6yW*~FxqBj z2(7qv`KF^>I-?~CS^Aio?}0%H3C~)_$M+hsRHnGXTO!3@_sZK1z2vq%k6OSCl2h{% z1ysibb5Cs*;AtZQ3e5pkW-dIyjmqH(maDrSU#Jz!k!OdTe=nywh>CroLIU|EZeKZokg^d~*60orTg`Ch#y*T);}ZF(<$ z$e5N7F~4qsEebhuATWdjW=$rajBP7QsA3o-E!4!@k2I#M+>GkXj?0ZJ_v3qUd*h~c zKrKW@TII?0t&C<}hBj5hyvrX%8wlE`@sG=9a`d%0a$W0m_%OV{rwK!}qO|AXJbEa; zIjdb}L{UL$K1oqNe7N2cD)+2+J#M47po)Ymo24#S`hck4U&dlsm~qE;{%urL7J0mdYO37| z0=Tni;`3&>N3Q)+n4O+q@FvN})5xv5R0ANK-0Imfe0EmGi`#oujd|)b?LP0`>H%(f z=PbFD@pNrH%{$-v!;CzIGw%OYMHqPj@U?+!-Z`mS$5x-O>Ia}WCE@<0JXKn_T_=Q$UORYrO@ zhd?K%$6p5AVz!HhH*5A8q+Qpva1gf5ao-7xR_~8 z1Q&1+o~$;x$YU`M znbmhJ0W}+$z^$mKOW^$pF-6~yF#PxWF!}bhqIZ{y25qf38Z=@OJD!H#Rr)T(V|Qe$ zqYIj-g-IlYL#y|U(TM&7@S`0n94j7Qy>DbW1TPp1)@~siTuz8sq!(g0!#xbzub>K9zQwPtf9tNM)h9JIByb<_Y~751Okcjmz{_$2U_R0%Y(- zEb;{aL3m})Fq!Huq$+YIz;vh1*2IDsC)X0GYNYWK4{~HK*o=FJ2>=(6yo`H8KVJ$t z`2C>cfz64f>|x$~son)?Dnt)PUT96bl*wXP{ z#QU1MJN`8rL%EM4f8>Gp+gNvsk$X-($qZyNa++$X)5|$|@@RkUVxxLXxx0uc2?d;B z-v;zS+@{+r*a}ac($G}(dI?kcq%5b4(@T@f$Ey#fg$*36VhSnHK;8D0*2|kp6&NcJ z^3qb=+Hd?h#HX4@2H3Lqw3S<-RZS4Geum&eAuENre4C%O^7IkOk)L)kXK@#_8~M^W z6u2QhTy?8rk*$;S$CpoqrT1X(sw2HKNqo-Il}iy(Ly1ZA9eEZN7kR4)DQv_bwx(9>0(US^kKNL!i(_r+i`5}*p}gw`M|hgSaGGm$ zulq(AOjnZl7IT4y4mC-S9Z`Py#em2`vbf|@zga{d*|z>$;{``7OK#7k{j3&RMSm3( z>!O!wX6%Ix)=ZeMueY?9uq}TrWDo^R{Ap>bt|;Z8+1Na_P}K8EJTGd5$}LZjzwyH* zMENdk+AfH`D;y=pYA!3&dreo}#jbZ)e5g~J=f2p^dpD0^1ykueSPs86(m5kW;XAV6 zw7Z3U{T0%RsHaABc_cIBI#8KYpE7?uzSp?O7MT0=g1C88yFW$TxM-=Eg;$eLPB3cj zl5U2(N|g?M7BV17ZJ3pEOLpvTD5K+ABjR(!+g!unC`FX>@I6iN$V;G=se7=PLh0x3*8*x?Fi=jgKvss)c^lH%h;s>D676xiW{*gE z?0o&uLoat|6^Kwl`5(muwbsrVbmwJ^H;PLs%&cLPwt~s9kU`l=gR;YNNv_7X+hiNU z_|(d`idj+q*X{5666QMIWo1iGX%P6~bPlj2(yK-<(jgesXfTwUQjGe9x|#*!>nP?~ z(Zw-wbQQ7AmUuN->@6zV%~E_-bqIpnyfhGGfhmzbY9}$WBJW)D8oN{hD$2XxUZO$TBk^(6iJ+i8qPj3vPifh_ zDK_5^=$Ma2;N(;zgL~46(hf{}D{1k0 zwJdH@jVLtxE^tbsUtaY^ojO(MYD6-lvc$D=`$YBuDe`1#SbRv0U^sk{&!AJFOmRh( zTey<{D#JPEiKUTF?PMtK7?y6_T5M{*c{W~GCNFJmLW59{w=^<#Ox_zQvwE(_q1-yT z@`@`(o+X?o$0&51qIJH%y*8;=3H6XGMD%Dn_~McwaABk_Q8g&x*>Qkgzdx@2;%Z9j z&W*1N)bDD=7)eOQV>6*|^llw)0LEGw4A|$HfT2Z>Mc`*Pa^9~=HmrKTK)rO;yi(1Z zY}J*<)*im6g5uu_lh%`&bUenr-(Xw^vL5;_4iRS6$qjaH-%<2z)`zG2n?IoG9(8@1 z*Jz#fmimhuLUp<;z2eWkIo(6*{82fiA^L+^+gG~CYk3gX0C5WweAFvLO3&k6lZ=++$pEL7PQQ>cTx1 zjh3a6xzz>4q9$@)$tiD$TY*uuX3$?MN+-;lEQzV^2*N>fRVv}i`GTq{&zbyY#*f}~ zgEFnd9{|)d2+F76Sk?6K)pZ=hX~54ZWie7wmtQdc1%GwB_(o&TdkAj6)l|PSYald* zV)Eb%b8hm$^AOQ?Ok0Ls78?Ox9VvQdMf4*)-&42bu2sDSrBZlrHAmp|3{f{O;aL+! ztv>KX+eZz=^vAgrgXXt-Ix^W%P#Y?f~@0&B8OfI$*H7s*=gH6BlK9z z-yZ$}C>b<>+`r(xmpqr%WiOqLR+d_4l(zQd78zW*7mXMp2l^IYeL)T2>O+hkkyhF7 zFcR_3Q?Ffn?`FuJ5gSDxyu)$$t2U=b+`)s7_X6ig;C^_`9#cmCKzgm%J_BLimF99p zm1V+@l?psLy38`?+a*o|R^z%DS!dh%V|b5G)MMuHQ-hjG(wYUEDL=3aDCOX6`KcbR z=(}Gm35o%Z!*;;!MU5lwfm4q!d9V-2&)lj}W;q5au2k61;J*5a!_Ix8RX1yqC9ZNylj8WM=m$?d!gX zI7f@SGv$Gmn4agH=0?sh&vEatrg=X2H^fc@lK{bwC;wg{LI3m)GE;FYh%CPB`D) zJY$f1afZHvg@_|>%t=btx0OHe*|5nA?8sAi4ENo+Kkd(@U4!cI^c-4yI~8Nu(dt>&`Om?EwQxziHyS=%D*#aio-_ z6kM94PA>7gcx3wGr4ELK@q#mQ!ajFdxbf)gFL%uU%Dv{6|PSVo8mG2!D z7){{3Ne%rPle>5A3q8iJuPL{9Lq3-B{ifim9Nx={S>;H)$`Mg=o#K7P_62A!mYRIW zHq3`1oXZzv>C0fbq`B^dbCO3H#YdGOo1)jCMmKLPk2j5B4AbxnonJwOv()6F$?2_B7 zvuVp!!3Aia6?Z`c2h#nKP#K^hRBoz9vdVF9Ut4N;>qCF6jF>~c>@f6LYeVoYkjk1E7`X;yj=G;HeR?RG`({yY zFrUl+QTHBDQDw{D=s{2r6i|YJJb-`*h~$ibL?ua(tRg{TlXDPh5Q!p!fPfN2B?(AQ z+9)VFBbf%t0!@w$Zy$oAGxvUPeQ&Mz-v3)`)?IU_yZ70<>Q`02s@ip^$}LCTk~1i| z`$;5MVEIM^b0L-#yfQLXYgvDcro;`HduPv4l4r;PWw8}1FV14KRee4}+b||g=}Hq? zUo_Im*8RJ}v)*%GbEX}U0vXebN>q_vKMcs0o4xRS69atK(OUKx-CPVRcQD@!{aDmA)#oa1}HQb1I4&S*v`$DFX56^Z|CF z1{-#%L)PVPd@Rt|^!f1BqmJ0Rgwlbkh=l)o>tD85S=p-(D_>FiWVDtz(2U8}+H_v7 zuu;5<6#uB-XV&1o{ZyO=WahUA1UD0N65ULza0J3Gy|`nD!F2e{yfV6(J0G51GP!tt ztfo^saK?p=&M=8rE>bZR6&S<+u4t|Eq=2o90x#kGJ!H)nMnxXNy;D|Ci1$CgmG=X@ zgCXJ}KDC;lS}~Oa3!l-GYvP7gmD`&$jbis!eooz7R0w*9kV8w7 z`j?gjY!0`-Xp7&dH9IwA{`Q0Bork5{28@IP-RBC+TkWL{3^T5wxjaqvSQe%3+?RE3 zjItV)vo3hdCUV{~MXk(QVn-n(?DllyyMBI`xpFtRn`go{zl|`sOjDYKYeb7~)YqCy zl&P(sI^uha=VGDfT40QUm}9Yhb!quzNhpiUjPs|o-3hRFR`wI|`nM~zH!v1fVNB0X zA>)glHM<+%xzmWS&dbZHGthLZmOJ}2aZG!PU2a-wh2r8O5&JT0xf)S>CspHF|7ZlY}_tt;j9Blb&<9ZK}!>&6Vaz{HaytH=cCdwE^rGZL6>;d3md) zrN$zQeM5895`&w3>r<$y9py$ zjq#)LPe4-o_A3R2&-KzBzu8cGHHXjB*jDJiRtQCrT#Hmxs?g?rS2WZvi_9o0xb7)q zP*JH|yC{z(2I^rd(f-@>EZL%t|e<@g{!eoLFsejB?ciQPFBZ^;O$hyR8Jc?#~QP!yld9o(l{av=zo7o$E{gre{sdwaB zY!wAs%OyjVl=5w!i?}3W81a3{%iJe1RB}V3ccjOvGp1B6)%mXHH&GaNsM>N~vS{gU zy)qM*6}=LeWByp@&6kn(cY5(3RP`$C-te7AvKPez?dKclguS}!sy5KIcBpK6LKedL zNDw9xV+5SsOilae8M%n53g0~~qYOD`xx>w_R_u9=oS5liMj?C>cj*gGvnY~i zuIEF(9bb*g<^Y6Uw;qa)RnL4xccrQuPyT#%qxROVD)q*kqA!CK`IkX(aINChtFkM0 zil;K5SK=Y|D={~_xBsC zeA*Hc^eK)Q{rZzL6%O@0FNhf8?1cqzW5g8J8n#!%dFdJd&hK;yIc}wlV*K+eWqw=P}J_OhoPaFuD!!r zD7B7vr)C!#?V#9A=)(y`9O(`(Rzh3rF{l;OB4#8kbP6doT`pO*sn3V8>KnbO846?F zb}dt<>>@=n3R$r^o4s=G$1BfIpg-Hex?Qj3`cVX(S!b;xzWT$@ZjFo9HF&966ZRB0 z+kMWh<;lvR7d4AhFn&fMb?WQ_MN9(hflsnX89UTmfsY(~63?=Ixh3|_QzGH`PqI^u z+e;vBy<~h&9{w!rrhBLqoQ&M{hiSh4iB&V0+2 z>5-9dpgB|4M%hbpL1?{SMS{EfW8>8kk`RLw7qMd@UgEo7)>BYR>Cq&r-8wwC^mL5O zhgAD^eRDVCy3iAt1bbn+%{&TPjPm3;fI5nC)^a9+dR7j?=DPEmf9)_`Jx}OF?k#6y z2o6aoapLm|CQ_5dyc7GOUG~RrgEJTG%OwE}b!s1WhoA4hRGFrf-Y@0=%J%H8@Pmc%#dXd|Ji)WnGdTN(ysa%FPP7C&y|M(XYA<7B;bULEnc zZf=%2EPZZ&V_#bk?ufKB4Czw0($QPUbF4&S``cBAkEDuFnzRFCFz> z4$VkprvJk28Kycyv(@1lD41KSd-rWJ=R3v>c`573yXF4NohV>7de-nU>b^2 znd-WsBUhr-^XxoQKu%v*6yJZWg_{ zo4_v6(A}hOeGeVdWSHZK`C+UQ*Ig=l#Z1{lA*eCQ!9L1E+rWDR+?LI(k2h=7_2|^B zGpHjhywUqOxPEJ`+ePon0t34F6tw-)Gm15dW)BPETgeo(q)-~0HEEHM$YbvNuFLi@ z77??Hd9h6=gHT@>K+sVU0~l3&$NJ&{npDbbZFA_D9~MdB6C0GTggMpt*iMhmL)>AnXE22SOX4WVa?` zn75YcI#2af6IljiBy7cH!GwpR#&-c#>TYt>db=P`YKOq<&cn*5o9bRq+d@w9^=6-s zc`n@~XHKPcP5bMcuQ?VWTes}Gga)hGlp0d%a@6PZ=-yk-iTG_;b_?xdtF11MvwF`+ zxatFPRvEW=cZw=tVJJ50;ryjZBheqq*k>MI4bNA<1Y7THW2(oKXfw;^N~7JDmdC7# zC^ZIMQ`}iHBxqg=Wlh^Quh7=%Da{h<&_3hubM~vAnzMb8%@7uCQuo9NY;QIK zgcQ|O%XbB=+hSNbzC^8R%Oy^1VM&vR#pDaMj+d7*jnwWK2zp*i$@|vzmxBY$kyO`G zvLcMKvQ>u`5V_$LE(ygXXFPH?i)#uOh`+DQGfdH3wahOErtcnH`eWL1CE6J%qFwLh zqD5Te{JXwmGZ_O<;?r%mQUi9FX9Xp z;;!3?9)pGYXL&B1OuF)=G*DYEyep=;-b-fvEk2~M*2&X+{a(X^MRe!(HFi;Y=t$}- z;7b^-F}^NR&5uxH84;kk^8L6vbSE_kWoGeEZ|h{S+QvKQjm9Es0Y%~gPsT_!cOFpd zaSo;A=JGPyRSQke*XEyc>CDlO7ODYMibVAa5uY zu=e+>INrGVqBbvwY##lA&$3WR>n1T*6HeKV7+w|Qq-a({mFxSR(FiwMw)CvZUYMxc z#DB$ko}U)qZHYyn6li?&{mO1S3Ghl@%F0`Dd|Do~uJks8UMF(GsmundcXaZX$CPa7 zE^RYIzNt!{8m>z*Ss42Dq%BDQuR~V>!r6MmnV68fe&l$**VT%%Crj%3F8mN=Ih(6F zIZpNDx_t`9`dXU%WahPo1UYmxa)sUUg<5g0l-#9k{2uOb3LgOC?o$qOYak;TrG77? zR;)B`q}>m2n&hHA!2ey8x$!1Uaa&^GykpZsAgr=hRA6+6LVkW;-+apwP}YQ;pLf(& z<;Ajg%*Pv6%@T7r5H%qMyKB3p$3JNs*nI(asCfFu8-ppQ);JqWuddHiLXn&ctlKT% zIFfPAUQpds|LNZhTaZv&4oQY&gnk60P7wm{4XQl`Dc2h62fKZ&SX)pgqnsRfn^eiB z&x=Lw@W$Qf;|E;qf{3u3;)7hb_A4BO-7Y2u3_HeO4AS!h^>oO@-j^07XHaO=irnt5 z3Ur(yP`;#-oIY56;moAkI!Kb^gEqbmluo&=fhg1b!e#QuO=WHe%+hYve3H+?T9wnn zn!}kKkcClVO+-}H+jf5DE90Nx?7v+iYN|hT?8Ky%g98n^iWia>1}q2x9am4mbnyeS z`pOJuq+e4oPx1+6k|-cGL4VbKeie3Gza&_DGH9bkZgGWld#G}?puKr}lWm}E4b+Al z!WhNg*>G}L`|NBK>()H$$G!snFbDR z_rD%aIG0N8^iSZc3^45ows#`Eh;~=+7^fDTG_aqsH}j+ri@B2CI^_DgW2u!Z)~B(FpzI_w}}km>C$DLXZsJBIs# zw$}IUW~VAhe{86T>giOY8@#+fN>oxV4-b$`+2_o|kEF-yL;E=NQPtTbDsgCO<+k-~r$3It^!cJ4oB1 zkaM$oh2ME4madO|d{Eo;$%)FQbZU6Iv#{|Q^JYab{@`ERu}37^P61$78|k_xa68|u z6b=m%D%J}{h5isO4NHuiPzilK*jv|&;?SKQ&>`PZZ+L?#E<3%W1VvaKXpNrUJeyQ% z!*H$V44~;bpA#umI6B&=W9G|pu-#RKy;ZIYy*t=}AH%{XVM*T5n5+d*R7d}gRh=7MA%@ll=1KI|jNaTh<=qcHG&l}|sXRZN7c{83 zD%dziB7RG({sK8d-CF55D1_h`1(9)ct(_8kpIv@f1J5#~l^DGKLEFTXmX)hJMnGF5 z6WbatY>!zOwWiVvKbJC8fap;1mym-n)i8l|Ss-kVCj$T&6}-zCUt;=xB`-F5p?8Cm zEB-CM0k!8vfQgllAvBzXmx8&v z#^ru*(SdGu7ti2|&z;WBBDdWFT&Rs2UU>whz^BEhE3YiD90UJF(7z=a!|y6do=6S~ zrUix!4nsFp3aS(oiQwc2m|iO^W5(SH+9bRb6}M0EPz|$i451FgG-Ys_(it1K1(+;7|Wbz;{|MM2VC^D4ZEr&mXaZPveR2XY{If{b@?x#6q__w3IhUND_=Dhm9oVr*CY@weS8ygb1Bcxzsv0uH?mU=aIYX zl?yE9PMh6T;<@*NFr#3-AlTcGH&EDw5QR6Lo4atFg;4H!i~imo!(>7BsaEV`s%hh~ zn9Fh|q|9gGqn_2mT3aR+<$itXn>+%VQmA7E1?Re_Dni%7Q7Xb?Q4YIHA}EsMkT27L z20i-o<0;Q2Ff#9#pSTG~AF@(Qkpi2?g`{NaShq(SGL+wUfU~XwGL8x-gnaKY0Ofmz zpjKLkcMSL)Oo0=M(IroO#`jKUTfvW41{k{gN?Zp_kYv!HPBgB5xcTc629u=#~EAoetNoZ{V_2l&$p3``0_cD z*^Rxm`mib66eo(&SCAbkyStEHZb5+Dz+2^8TJn38wIa4l!EZ8LCmOpd(Q3|#DCti z!^55px(a70vKvolH=f9rMT3i+)AV-Z zgn?%ru{bPEL=cqu2=&0XY)kuX+jUozMR{aE|Or4>()6L!Cr&NXD=5eO_nF`O{)`4|L>XAnE+ z&<;OB;RwPEhONZPv@Hd}xE02sbcHze^nd z{n>yJ9f&3qUt_=lm{Nv!t9U_vfdy>IZ=6uj&JcobgAzHO{;$e0M9K<(>lTYVj^D%I zzXH4{!~&oK*P6*2DG*>d1^Nj74}sv}%7kF$Vl#9j4I=1&?}rzYF_Y8)CRyw@x8(aa_K2b`!_z({Epf@Cac?X$(8cWMK|hYrB0iU{4Xy9wYUr zMgKST0voImv0w71JLW67XTHIx&R4@0lQh^WZhHL6%IBiEe$CD(>OpWF#t z5h(ewZeR99O^7qmuO-<)m;ivO2=kU-zFlmCl7E zef7I+<;aOY27zVZPS`bvqyL8N7ZaWbGQYOJXE&gDqD?}>d8iJ!#{#(LA)3OL^ENkd z&ZV7uog4p|u5IC~SLBhsohn`fB$hF)xUlg17zOW?5`)aIt=gwsdCpbatSsRk6Hl_; zF20YbiEGWc_WQ3FB?xmk!jw;EUqkC;qY#_w1g8#V{;Z#kDrxI|a1hGK{kGNAa7piM z$r$(O=g!VLe3Fo|)a?gnjOvm~WsQ73c5v_%(5+B)^^FVLtqt!y9}`!=ag_%CH0?)T zti`(Z2?Fh%S`!|IbN^ghtuxEB}2ZU!zX6Icw)!WZ+OQ_SMNsu;8O zCpdp7_pJ8^Ch&#xPY4NhIkHAGH=Q)*EHAnLUYNqwkru(jsm)^t%v}Mle{Y;c&gA>g zvk(UU{D&T!?0OnbVCA%98h?IoDQ9}keXPG(1EJiTKRgQ~A^xxoECD*CS(7AaVCwr0sHv zmRrrjdy-u;Z7ifyczOM&f+m6IKvvz<(%AjL3G*SLv4mKrmZBTt4c0gcLdP z+u!}j@J(g)F%1e3eL?KjuLQ+0dbK}(3j*QZ>ToLm$76w`e!my!FJFCJ`yU>9_(Qf> z_7`gCi1UA(2f&vfSOEn{p@M#oGM`)quML&?*aTs!AyR7C=oFJNBf7Ib7RM^9^1fd? z4f-ROe<_bbOxw*OoOa*zq=~&Y4c(i6mcZyizyjG(iBQ+Gx;IRAj)GX|@X%IFJBXq6r(>R3D@Aw1I*&_;j`U438*;}3_!BM=&$*jNsbIJ)| zLma+fLTFCD^N?;^($O;gk8fP`s!#v%^t2{UDC(KmJa+gfJ^3NT`6pKAN{qYh0dd0z z#4RvZ<;RKhSAa=F1jPU3UjYaFYY)+Cf)T8TVGC3rNf8H!%+QcQZ?UtOzSY#%)63kh z9s846{Qgz;U6{CENr>NU?Q8xb=6!XyLWjM?|5KFrvDB|k*bqS#&{gD!#z)zIfU ztj(Wn2Z;EAub!s(QeH#lFWY!aO<_Y!>{9S2P}?W`2IDg*0pcV8FB1A?B0}25x;6p+ zMIc+%_$8qjlT`yv@teTQJ%GL30R*2tX6^6$U!09D1u=6QVacs6$RvGeY4EA$v?)~d zHy;uq0aF}?YaU?NzZlQn5&Cj1H%clzK<9oRSsM~p>vrmbXwWVVB(;Nonh?AqO!r}< z02zID*var96mSDQhaqHdMG!)6!?a^V;$nH>cmAu2c3ByJdNSa2_i}+f7q}yb&V3qC z7Do%r?bRPDIegTAIlL#YDNJq`LDupoIR5uOXne_lYbySPar^T2#|iP&tH#Gb+5p@F z6XATZ&FlIM)6<}s@Jl^=q2W0W;O@W^%Ask5T+g&2#Jx%XI&|;w+18tcw?YzpZhrI z1Yh5aVH&l5R3>305_A6siYKs_OgI)s$)FSe4dmgn$q{j?LUJO20#FhMx;ul+AWJbf z{>WjBGH8yF`iHgn%>&eD)S1Dk+5f%}&~fPOCYu@E`UyR~ z+i}9v$AtU$Bn9?87&!LrB`Kk(0!-h!QSBr`_BU1(f1JdG{lJ0o9two5*vizg4Po4b z5KsV*M)@C7tv`fwRIT_Q!E{fmOo?9!d_h%XFV8i8OkRId;7|JW$F{b^Q3Y;lAMpC0 zbCwquuNSwcw)~ct!O$Oup$~&+gBB@gMmWE&(D=!cJvclT`FjTU$2Zf=HHr%^C|}C% zH_}reC)WAhl720hb~hVge3x7d-z*y;ANczThl&@Z?OAqZU=K5(P!eR(Ky#)IAb;xtxFVc$X6;Qf0U zCPJ?4&Yg7A;Vt&yfdvoT;TLg!m@cb(U#lUjt z%^Mq7?2ny12NK{t^W!cs?>8{Eg{jjKKbYQq0)>lW%;XESO(bY;`5!;rG8`VngPLzb zv@j`o8%NJPr&8O0;IELkOr9#vyOv6=-}#P!3jvIFp8@esWms?{{0K@=8;X+TP5V*y zuZqQ=G*1%~cs^uaUw`s>FZKVYIN-E`oAGf4sOx~_3GZUOMqK_5ayng`eV32268v7e z-aa7O^j?(dbzQnLnHvqyo^_U83CaCY7e4;deyOlTxnHbU=rUZL`IjU&gfEtls>ep# z^GE=`1LN1OYhtqJ!+A{!y(}&b8?(&BrN{PVpx?;HT6AeIG0V#;d~d90;?;M$ey35a zxEe0qgnm8+^2CT5GG;e{p+!cRPr#legIpz|4S5KNM|WvjvPej@ZT0Tj86UM&t*mS~ zJ89jMYNgJL6F!(`GSvG9;h{fA36~A_pr3Uy$xX-9=x{Z55N5>iT*6M6`H{m(&DE}n zv-h2%617~!;G}H(`_xyvqP@Zph!npJ|A0PmUwTzobEP84!7u9h)XlrbHrT@b%*&zK z;({_c@m|#*_Y<77KL(0l^ztMBmCTTWUi)_+wIbevY)@JjY#78^D z#!%rWeQzCjINN_ax7(pq5;93=uH~RpY_vfC>mr1LBb&G^dh-&xivc}{|3~o&c3t#a zn?BoRi4T(;+q9cz2l7`FPJ$A&FJNTPvelH$D<*;tZx3TPEQOrsGHXi;xGKCbTj zCkZJVsZ-iC+%)Lrf#6c&*wP!og5MziPMl$H-rppVDOBX5a`2@;SULFI|H$k)U%1@! zN46DzQtvUC7!Kdp@#H(ru?*Yu>*k;_FdVr!<8JXu9nD1@VRH}~X-2CDLI?!@5g?s^ z>U!JEC+_p>6s71a9lQ3Aav9!hF)HC7J~5AV^Udv;(Rx`u0aa;vb|8mmyK2Q=iR9Y% z51ed^m|A4|3*vz?7dXz=g#z8&+?e0Pz_l0}2uenLY}uVo(%wbS`)u+0ak_1R&i_Q& zP5&xSN!`8r9tb^5<;7j=ZwsG;qAE=s`^)&Ed%efQO1JAOnU&IyOYlRGKZrh#74A3O z*OKJW4;C}Xb{28&!^Pi&`j=zDywzmaEV(7IH+rqotEpi@=p zLyH9QQ1UShf&;Gcye5>+zD>c1I|cI#B#@skD|O3Twe?y#G!CF&cVUEqnDI93s6ZVx zop=AC$N4xtv%4_wPVC+Ok&ex1-Eydhemeq!2#zEpB)c=ZQ`f}B2}uB`$l)@F`e~%c zud-66mW03-xCx=v6ui^D9iapMP|jsQ5caM(&|iW{k`K5MeYzyuHBvj?(D)W zx{*TLF!>r9>rZzaf*CFGBEuDIY7gYTAmw#9Tb7| zLn}BGTq9F3Zb%(&KIfkEXqMw`qy|2Z^4@u_+`y&N6#k4**l-dnxcwG$h8T)SG#t3; zz1i&!vOS3wI@y@L_RXEWT=lkJ)MO@WO?b8`kxP3_Z^`wL$2N;@p5-ZmpwAHnL##7Pek!mmt{M}8_7%Q5d{=96Eibn9GAPU1 zC_f*uX|A;nvmh7u8XW9?9o|@Hh>2SqeOTv%Ok$FkcEmEs>}L2FVgsvoXWI!%f6P|- z>?F)9p8_a@+MZ@&Wp$FycqYrDZ~S)lAy&~Ra4XTq`?6*KaspkZ&SlWpAq~ow@K@dZ zG{3XN3T}PiL6YP;TcLU4TwM=%6QiJ20?HY9F!G1 z?6nITjO&Cr5b3op@084DB60ZYB0dTx4B#>{G2Ri-sRN^TFglGGfPH=KwT)VF`^2JX z_A>|GpZBGG$b#G2EA62QY7JD9)2%Ckq>2*j72)Ba$1DXwGEWX<7S;59SES_#$z<&j zwu8&D-Q(9(u2S@P-%}r_o&})Wo{H`~d^ysutT=UUr zM;r@~CMew@m72n@+Wn^H`cazz@@36ir84m{#00gS+v>)({|*~v#SXk)6tqgz+X1rHzUy2p24k7`2t3Mr1s@i#asCC&ohD6efw{Z=?6&& z9`;zXb%0ET}X$aZl9pbB({@Kji_#LE?ftg|_pRJSmQg&MT{QG1gyI3+ujL_VK7i`M#thN<9mf zrKn@oPsbl=rR%eR2H;oI2<9cu7q7vVfv^sl^}{t^I$96sZYc}u_pfk_FQ zwqrrI>NfLl&b=mH*3!5>*lM0FlqqRsm_L;uJQiTz?FarEWLwD3Qh^ZUboSsao1b@X zU9G07X=1+;!t7)#=rY+%mU?)UCRWd-hdK+ORs?rG3DW4cyI)ftVni1GFyO@V4Vf@Z zwdAe!b4a}rTaK?<#tY^RSr>XmEUsL+NLfyHvN3;!Tx3yAZaOOs?f%?`leefX`h?!# z8_w3ES*t)9v@bcVLWC^3_bftAtk`h*oZm9srOWDh^3kyxE!~bK~v-`Nwagn00}Y;bD6;h|-N z8)o$Ms9t>|x7Dy$%~~v#%Jv!!=PZcZZ;4G%tWjk*E3}?E76xz&o7;g6%A!3=>@Sp} zK-qp#>eWIcir{sDjK}k68$GF6P8swr;>SR*^qZ|#XL)jBd6>2VUz4r;RK0iuxzb*+ zp;mKah;8%4Rrg3CLX}f|_*J7*grl`9Cg;wXn4mo<-@aacC?N{`$U5Nz&W-lU(6X+^ z9`T7Mj~7z9!fBKH5c3F=Z?;-Hch~0Z(Q*XzGE8Bpbjr{&%b!^Qwy$0~*1!WyPonkB z?rB`|?7o%P2WE69r5H>2`GZ~$Zb?|`zqy9aC1NaVtT(0XnhhIF!`|X)_^$HvHx)Ff z6+169piJ6pWm$;0`Y*xL8d#i;Lp4Qjz4M7$$U&Rm>Jgyp`+j_ zG8Y|_KBmQm-AG!sCingb`KgSsmIJz2m*2M$$cGBY`;-pMek~u2!5rcrTy9BX*T>pM zbMt%tydrE!`qE?VW>j_+rh4)UxK@0LTYYpzX!8>DrZA1=#d>4ou@#fn2x0dalOmAt zIdsjGh0ZmW_Dw3kOERQ+8d57FWvpH6T3n1jR8XQNB|C+`iv?~EsGGWb-sqB!z}*%* zX+%a|e7SKHesXu_~v>pcgtSo%A)H=r>V|=Dss>+ z4CHZf3V9eq4qu(##-w{u8GWUipk6Z&F>eWU87Kg+vcBPQjAYQR`eY#=I~YOB_fEi= z;n2V5tp8c|&hs^3vd#X1d9fFc)}{gRZMfmlwuB$ui{^w5taTB9x;gzR-oQr;tceO$%{Putbn)tuH|M$X`m7tUN^{~ zo;gp}L~6FPh(^t}tq9z^$k7k(Yk;H)W_KB?V6v0me}z4C>$rMDluqMk<79-ByNwb= zLsOiUlcM~?nogHifUwAb|EAaS_gKy3vd6oK+UNAwc34H*_$*%QbMMY_+L)NXNHU01 zYZ1qM;X^{)oH3U>t@6>+MCitwm7072IU=|y+8sHHqFfm@J5yn?#C8fc)RMBd}C6X1Gip2~nE!CozFQt;k?<_9X zgi$#2a()fl8HY!$DKC1MKhLyDvo*|Tb1s@DewOf@q&HV{qSkn!#@?%l;%R~O75@G^ z)bC0?<&0x|aL-pteVkI+;@AC8!(7!a^QJOPP#JF!iXvx@EeWH#3b??u&buNrgRQ1x zF|F_JTC@tr1ZA~(xSYc?0%d7~fOg<+~}E=W;HzDnDOY;I|jQecAB{l~PiEK8lV<7Tm_t)*KJv z?;8muyYN9`^Nj%h;$oMfTUuq(N=hIBxS8j7!7CYIFe^f}e2zbgWlsDie+KYP{oz5C zz(aE`nWU}FUD4ms{6dEE2~-DHu*V;{ZcPW6MU88h+&X*qkeo@KL*hQjE3r@mj)q7g zyl85hy+Cntvn1lC*SCzrnMYCrX|Jql@m0YW zAW2!LD3Q2!Yzet4af~C^ZqAQ#oj7qwcz{DoNI`XujKq>MWNJ6bJZHlW`*>1LofmWW z?#}yRz?fJ#pqC+sp4Zg|mkm(?-?Kiv_i#(WK1gQoIFBx{)=r>Pi7LF)NJNtn>k(Y# z9Rr9UKk)r=OAm`AHtvnAf(hNq>H?ka?fXNrXcbbpk%;S2;B95>z;u5ZQ~KVtc$KTQ zT8XM)?BqtBweg)sEfWRJ0nDiyQI8GH&;*;ap{UM2%^HIQ8}(a7sV$Rp<5b~PJrbH+X2v0fiABF&RLL_zrRdIN72R@Je48Ek|YIcl*3I{Um65A`k-U zx?qt@bAr#yS%z<*js!Y2ZvAC|rtLKUWkALwP;{PmKD?$KynKSPGGlNs>l%96x}LCX zg<-JAsZ50Oyjn5#!6iLwt%p`y*}`J9^~%n2T=7EJsC0~}ACBe4ZoYB{f$&xqotTWR zdQSMc_DWZ~yzLEi;L1RD>FX-Y1OeQUd{Ch)Q3!^b+sqf1KUiRE1MXXh4x|o!WrZi3 z?}EwZz`NZ+W#Cn&iH>@2Ep-K2+Z?ckh4x<}*FN-hI<-H(7!V)Nv=B>ck@j1Nr=g%F zLuN3nZ%zS@Exnuo1W@14`!`~)VN@!+)LwZKewtPx^= zKq*mXCc8{|XbFVyQ#;pjK!-)}z4lBktzdr~?|iq3<*WSFlsI#<9IL#3)tK%a4KRTc zXuQA6LWM7FYa%|Etow^9{Yvt@jdh)FdhxQVjPr(9fl-T(3bZ1FqLPzdV#@_o~K59SW?dYMqwQV}awfw;yJIOH1 zu6?09BSmgTWQc!>0bPXyw@HY9uCNelr!x!nTO5B0!kHHhwl*w8WG=w;dzP(w2kFyP zIxfN?Esb|MZ#h5#RVo~&m=5H$A_nUqqTj6z!aWi~C6T(zhXn-!&TV=6Ku}0p!c%gR zDCnc9wt3@aR&6-T{#gQcoRw0k@y6Q^z67_=b+=D%zId_9XBla^3;tq#Q+McDrtKJr zo*tClFE0hbz2`@ONr;O9@#%^hsA@dTYJ8>rK2Je!Q1zwB(71)IX157|j*jZUkMEaD z^D5u#4t*|G>bcjml~w2=(FqQ+p{GlpJ=its#3!BeElkWe^%tRo??Jx=b=IW5vI$s_ z!lHapLrd=#V~@w_@+!N1JI!sg9Z`Q}>w^4!A(mp!WQ^kGsPGRL8k15M98a&E z1FhlxDgr||$|zpE>nwR<#W3H38No{rCzTDb8BoE^2f~b^QrPABZlo#tv3jeP0u{pMEBDo4_MB62lHPn7Lz5YU}$*zqbDX z8oaY68m@QMiWf7ScS~8hvg=J>@-nSu%>g=q==oaaBJl-lgMaeeaOFVhF7sp-XSwhe zZtx-l?#hQvNd<+i{N@V@LZ?bFLy)g8D9@}~V88p&+`kcLPM+A{bqsED?p4{Ir(nXU zU+_|2h4BaktK!Nk!uBAifD`)(dHh0E_fSNvEBTI$g5d}{2NT2g6+k7sYQ&3kQp|BZ zw9e<*P>EX(;0k*$O&QQ87;F5D72*RZSToDr5;&Q*QQ{L`3W}889Lcb4u2FjA!cBj2T+fxW|rasT}7UYA}3J<<8Hay4*07K3S z{k!pL6q_ePg4fbUrdZbr(M6z+i(Myr#))NqyftiS+l3#)Wjj>NJ*8z}cXYqObQ>Nu z7bKZ(bEcaN%^j)+pH5xLjUB?Xuk$jU9E`kDE%GP^p6NQFeY5h&a=g#8K)b`?1eV3WRxfTDq>U>)YF#zB{f-JXlC+in5mfecx_~wLIvGAGzK^7jz zgnNItbGpK@d$X#C2{*|0?k+tvB{eM8***x;aCd z*yZUHGm+2L&@&EJDfOc{M$tSPI_g^E&Fxb^NiI2y@?De2I~WR5&W1;T612xdD0lsi z5F7(L{aaCBIt>BIYb#0=gBUY?mb+-jxSE$^ihn)}yiP((<5l>2qSip~z0|=Qxl|T< z_uKtQxZd?y{CuYnj=H&_59IS0%#n$a3E-XRy}TmSh5g>u3@7_I zDof#9IlL2>@AnmEVbfwF&HEBurbTue>x>@xT*bk|-H#sp@MzItiBEwHnFC6dB`BQK zQ)zUb!wAc1^PttXwH3NfRS^%9r{3CFMW_C?57V#RooM(7B{1Fwg(XrA0XHnn#Zkq| zuM6Mbe@lr>Uo62;pq?3r5DG+VH=H})m?L8EV66a#9^%}6S~fQQ67Tmk>TJI96!h`- zxN#$o*Y^8u;s76z@2#I9m%I!kY-R7g6NlwMP!@uu*aX$q3;%Kgll-z52HnVQbZ%AU z1+a=v_RFDX>aPgb1l5M3I9_ewC**KV#@fVhL~w_G%PK0=)GV0qk0tLkt~u+2$L$@p zu1zL+`vAnRxb)D6#XWGD03u)pg(vW;iH_FOvnKO168z-muL|vAqV3FBl^$Cxzu#&% zpSJG9WKGBY1ecqS){Nh%2e)dTH6wFKvmMz8yVJL|c;>)xT2E@*ivrSWM zDeO9C^Sn2gSBJ2ic62!gmc+;56!CLa9CXAOCEWvVbmKg__Itq)dX*}R1}{7UbzJ=^ z6dqeEk+DTgyT(o1nK+9<>oO}-mYHCWJk2GdhtnPfOGX-egzn~Q!04R1;r8N8QBwU)iaAT*_MNO zY1o49^7|eeV|7<+vb#(T@;zKiFzLtO8I{29u-{<~kXL48 zPuZrT!5?F~JzBHcZ8ZOmQB%{DxN@zo-^c-F*LG`6U0i`N!5SH`-HZ0BBCct60H;nDlTE6AWhxO0Vj;h<4Tst79C z`FmqyAV&uUndipU6wiu=cGPrqz#odprP-LZbqS+0vWO*100TQ_2U`e+=X(yk#~#)c zrtp1sz+^Kh(ubje6>WD~@0$Ft2X&lo_>5n}L7b35e>BXZ+cE)@aEJ691PNbNcyc&U zWiZpI$g7DF{0%5noL#&jHNTZ6c*#xKMF&}jgzHePEKIsLbN42x50nLT1o=m{k=X2j zmlyyY+58+d*pV76E`CzfzS$~mI8Z4Mrf&$u|8Ot+KRS=}>DlWStnGZT9kor0#e&~~ zz-ztW0_=}sR8Er%E5!H-rx^5};m2}3`L`JMUx5PGw?UWwy>>WCukTkqeBWgDW^W}Y zw|~Zr28Na^fY$I`>`S9hL*iB;9|~V75z~loX4#G%_u23TcON;8_P_!+i!iNP;ARFf zL~8P@;OcwpX0YP#gR6Wa*|o^SW+1rwLLc>kwfrQw`G5<_0H)|jq7n;U$Fw)pmAf@? z17##a4{l-}Lcw+&#unfd&?9i`5|VuM>mwL6dy^&j5WNiCQ-h5^&9LHv7d)g19t0)B z&mjHlAg21O!xL2@ANIz0e8DsY=sFVYSN5S-9iX3=0*ekl47kh%`I5rD%f0PBLIr`v zUV%34?~ez~N{gWXycn?hENi%lwkL21V)!Mq|14Apn!5k(-4r%w3cO_pf_$kCcih&I z94U7}Vy$&YrGgfzcZ9?ZeYUk>N#l5ImxR0}-5pTj^lw2+#6RTnOCS z{!O;NKSr&oAt?P<_Z$3~c$)*YAAUwt77bW=I=B=3uh0GuINE>QVnu2CHlW+^Rbc2N zJpA>yd`QpGJpmFw=tDvK5`PpNE)PL_eZ#+X`1y+*XaMi^TVZYPi+p5+@igT7{s1Ni zO0-)zbsUns^@m)2i`O6FLHiwQ0FZqxO6q&c9DztF4?s!30po(6Q~WQWMz}@z|7e?? z6J?5Ft-w^8WYun)A^+OOMYC(>61^K3S`1Na-1;pM-wvxJ<*SZ^5<);ILAqQ zi1f;-1zFRG*vqaiU{tAZb3b8?O|{70a&vdzoN{xITozrJnixtl@_IZiI)MEV8@ns| z&2vihBtli))s+#68zGi%2g$F*uvGc<#8KIU3z5SwQ!yA>@Kyp3-6mLepvO+`R?6THOGTktQeglwYaPf$2t6Wax$)JPQ0OV+j!G#1_|NlJJe;06^<3j5H=nekgBjBA zI}n7=j0_Y|7le8oUN0QSH%A=us&G)GxbpGn4uPXeu$IgVce(ra?7uP`8C06_&rjC#HLic9`^;guxjvyUyj3qVb)v(f7AzwM3wh7k?kWw?%=ja`jcM&%#po zmf$6cjW2T&TRHjmyNhPQ+qTtjF`aXbi!ShsMNu!#?H_-8 z{+0m6w7CgyEF}jiK2hzzKfP#&c~)fpK=78JR#_)8#K`gs`+@u#7oB#O*lk;n*u6&t z=*(7m{>-H_5MRMh+WmafEJ16>cEj0CY0fg!>((r!%J|z4nUKK`6HnrsA`-w@ntOf?AqwlHD1qF**TnpXzSo zvA!`5yOYgcX$81I0v6zSuUptWuXY!IzHazlbj|iORH%qdc@}P*B@@`YYSd!pHfx3JLvkh4{kBz~8ZC#P~y*MvrfiMYQptLVN7gZ+2H&;>@ z{P0Ts?Us@I+TO9%wYS109BVR+O76~&@vM3~$*!b_C5Q}_dz!i_{cD{>lo{9eQm?rm zc26g)xpwn1wukzw6rk@Hk? z2w{w<(tK%{-HKO|xoV8brD$n~FJU=fDtX4k*J56WUBk*-CIJZlCcP1|d&5)Pv$PMl zp9ch11Rrx@rK?F)b)}+IqDt>|_ zk;}BWvRmoLuEV8br)&8i*<3oc-&X`CBa@}TaD3f zL48@Xbxy7!l6(6Z&6h6ZI8b=3(Q z{~bEZTl_Hl5^$XHp8SMr(FnK*&IHH~Gp3^HrdQ9S1`d#Jga0E_-0BIR zK;VvbVQu+%*!Lv%&;^&QnOqJec=?v0HBTzH|Nd5ARkUEyL?LNx=~0de6gXQDDCk5c zFqbOF<6AL`C^sbw*zP+FiS2sJp&l40vMGNy7_{YS?mq$4wVN69qSpLWhldVN(<|AX zP=?*{1onJVX`$Qk#ZW3ZC%7vyPdwM&S2$p1e!X!Sg{-Hg=;@z8ws&DykSZa2WDpEe zM4`94=Dy$js1@^Fx7hTXn;&2FzA)v~Y6CTp39zt~PhI|$ugU#BM5I-8US^w~LUu;aTw&!Lx?Gwuf`gt*Ys?s_sjs__8+6nf#0FgvKMJ3)On9ONyIl8b{&G*3 z{j$+@`s+=h;OCXH8M&<*2MT1@BI@c^y*h4qQt25WxMaomf=PjdPE)U5rTw)F5D>P{ z?2pU&GX;E2_yX{3dLRU@Dhg}UZsmh@vJ(`Z2ANE2BUEi&%~qL^T75_z&Y-s>{pD~6j2b80k?A+V8Bn4uH3DD&NE$Vc6|AY;8jaW+PhACvx=4z>#;2RNVJJs}gZB2@)JKx6VT+U#5xYli*b%%W zh(W%BO_|@&OT*#!Z+$)v9ScUl>hp9t_l%)g5le+_vz^sWM$jav749IXsDAHDz0#aG zYg-z4fH-dIGZ<%rXe!&Z)rA@6$Or#?KowGKUN}RU4oAVtkmdq|ycHYiNNvJwynfX6 zp>w(euIhvpVJS~qGrb4Eu&hDCzno~jkO#jEh==}E8IK0;u@5h2{su8UPs_(pmj2x9 z1ylQ$esL@2&v`<9DSr3*RcnDno z(?}U>zU92L*2i-m?(_yS!V`k`9)HuM7UqEs{#K1*WKai598SMCx+k7QZ1r5ZJ|F*k ziOT`uu6oNhV0iiE0C511c`v%alC~J1885&@6;xGY7rYpfo*olfO?7NKd2y>>+~NpQDy#Swh7|?Zfw(1jj=o+k&FY8Ur5p%8?Bm2PDd3($ zk~^+1pRsa@Ve9&k6gbi;D3dApzdh7w;A#EBT)on(wQqo?s8bcJJP^f!NP z@V#JeNMSMc^gG4w|D3wU7bu98n=v)lL}~LtZxE8T6NzXB#C1xf6F}QMm@sP=@89*N zKwXDZ!y1}G-M>O9W7%qP<5=dE>|w(>j-f*cJz?E8#-eD9o2$7qeBQ56;nGh^RYl*I zEnnITP*!oTzVdT!EW)^%Y6`lef9q&%{lijm9aKY!;P1&&FJBe(WP5h*bZ+U%&4(pu z$P-Ubpp(BT)!0$H-M%Xk91OO}8Ab|OTXUsMCtt7L(4ss7jMf+~jCFyH2DR+O;@Xsb zm*4KyG6xbrMd@?jV)gd66$y19=?WqGGTUl>&V)-g%=ADOD7rPTD+^RgqX7EGiOBN( zn_u-l-H)_Q{7Sd(Xp?`pQAB{lG(7oVS zQz{y}U4$_eFAC5=MVXSM^ln;%>#mzd@TMG69=Bl|;CoE(QrCn?b){_ZxP_n!DXrp* zh7e3Q1DCsTIAO2(;oqrtY-Z;1f>p&qJ+0|-zq|GV`2pQQSE|}589`2q)w))+xH!ia zvft=+>UI^2cuu(dNpszp!DNn-H z9Z*HNh10-H$_|5zOkBy z&IZZjWN~+^rlT=TstnVDchzh~p{Z)k4Q?E^^+06}?7AYJbPs>Nn*zIO~%X-`d!ZbI84GjBugoLuv zX9|k(h#laoAs5A(u7sD7+j-mbEOhzZaygcOR=)S7QNgrEP3Z%nD?5yGx9CaDD$TK0 zYg5{2{nQjtWMXa|s%1VrrwUek29S0xFtKNDIC%G8OfWn6oO=T?k|NybyJUGISvv^7 zZy#wpvRqcRO03viWO2n?(mpDb&fWpMXCs_5Di%@ zg0b(TpK~9jgF-W(49RkRrdVX2&n_eyRTr&{VB2fAn|&;{iC#={SmNrHaOkWoWv zZ6aF3QO!}(Fi_AWeRuSneCDylZD5nY$-VT)a7_cAWta$oQeR1VvQ%tfB{9haEUOe` z=xu`9tcG-61FIa?0X#Ql;pGv!Ji&jW+$8~-<9G09-D<6qidt$P)b9n;dD`Z2LfBxA zeYLL9RCZ&qG|cnGk4~md2awD*-A5gI3yeC8Y=1>9kVn)M-Xay`!DLKVYvru`nhca4 za`&H?r`*^A@`H-4!RaM*M$FIX0nBKSwR9MJ3Li-JSD&S58VuACS4%y?7;_yyczwf*3ag&+OPc6B_Ex28Jwfs<7z$!98tUk*#p8kyBuEVP+LQ#>+@xE+Y-72%OoVoN_* zN2-gXJVqtG7a3f(*z6(M-W|PDIiGgG5r!a>lcft2RDLX9yz;WOr8u&CyjiSn^n4i3 zA62%^>@AC<8ec!TvaT~1H}$&jd4S|b^25eBnc!DFyKdhTUiYnFRfxLuLpn?OES;DL z#N~9RD3!I+4r>!9p8kFm%j(Lf#w-GPaJ=Lgv)-FwDC&+oziXtAbd|%x8nd%sO)M)Q zCRm`T3a{QbWb3YEV++*+uEGQYZle~CA(Hb-*$0%U=@pvhN9)GkC;LQF41TXxNAmkw zN$U1Wg*-9@kdRzm11 zvtJw}Inei>K+L1HS1vlURL<#;jN3&UzT0XM)KZ)&MaKI{8>4Lxk6E3gHQ1)uhYvB)SH9(3$&muh zjU}NCLqK4{D~d%B9+Q5N>p-w=0x zK-TdTuhLzhGtw^j?GqId3r%@a5m)tW#I!-)P&IV)1LKi#i?TDX$39rP<-_MXQ6ChW zHne$TOl=g!!Eo2j<%$rGQR-wycOCyjZYU?KQn&2#Lt%p! zOdZ^-;n-cWv~ujzzYliqhQJ}xD*vs^WmmBDxk_cazkzXX=%9K#@MHY=`hr#CxnNL= zP&f9%Za{ngS`Yxp?xzQTftb|!LL><(&ph|n=Pa0?au^@utbS?*t-`TZ1Bi1l`ZCB0 zqlg(v&Jv{MdX2YkfpQR@=N#}_%-QG{yz|@}?i@Vn7c}&~=H=RX9O1@9GC~h=$46j@ z%VGmXDaf$Hv1E{P*Z@6%x*8QIf?1r<+u%-DAcik=E+N9FN=nCZY{F!4 zE%JxyZ$7uxa7fzQ=Eed*%r<;bi2;I$yL2H@dP!>(JJ~{)^=yRdNW^Zv45UdNJEdni zy-&v>X4hjkViU8a8B6sQ=o(ST0paqXzz#6GB=P}v5`t(zc<8EoHY+@c{P;Q#P#FVM zR*|e#-bEWA%$BVB#=BL{W)8RbhBc$^W-TQnW;H?H?@R9{UHp;Ad?v=6DZm9yz=aBS z;Va9ffr_vyy;6;LkjhdA|KX~du&t@`{85thjl3Z$YCds>le#hk21PY&D2Au!*%1?X z+7m3QYY2p$x9&u&tU)!1x5BK`I=a^R-@LcF`T5%owY^yrZS~MAQSRKOesxdVJBR-M z0k(6*mH+OU)8(Bb&NDrIj|Mr1S$9uyG#n^)(aw9l;N{ku{>+#DnbdTVZ2}p@`Wvv^ zSe@e6mb-p=qFq0%XCBGxbxIf#bo8Dl67(aS{+O^-M6!y^Qzz76Y@+^oT93RdUi&<) z6Hxi`EWe@5iE*MLvF64_X|l$WX6@v|+aK}l2`y^1KRK2~uD-8D{n(&i`&?3sFoKqi zVm%ncBOsf#OF99T>f|?_zK}8c*Hpu~u z%V-3jb=Eey;Q3NDxL4uNSy$f z4!s(^bSgcGng~VZzS52qC376LcEaXX0#hNES(fDCSHY~_mqpD*rv((zk25mP< zP!wl#^@tr&O!sIn(Gaz}LBreh;8b%#a+Zrarft2|9T|8`;+4Y!0Hz5Gy0c$Y9NKq) z#M7*Ka`qGy{g!^+KD=pz-EHLf2ZRFuk}9U1-=ccbJ1jQM)5&8eRQfs*;D216%!HI# zE0%=8t~|&=k}fJDqWPW#DQew_x*9pN&A@ZZs3cV#x{o?g5!ekU;-(h+CN$7&!f`$- zxl1PH0S_>J^YbmPT2a4dRCj*!)OL^lo`>}h;L(bh`l-mnSx#D&(6LcNJy>OC6f`HT zx^tK0?kTqaN0(IKIji-5h>LFn|N7|9yv~p~Ub_RNBXxN#tTN~70ZyjsBtm*tADCL{ z?;>?aVW-|`qx?*Y>PidT!DNxxu@-qFL}|^;etOeRczjDK0DX5(jLd!eWS!NLUq=r; zMCD#7r@6Nhsv?4=+rYcfcx4Oc*|9{hX61EO;|S=`iF<2)5zbOkF2`Dt!Mz(devKjX z%AacZIpZoM8b|YlIN~gl_x=>WZFR}FCApk+oh2HoMgA7@$$|`0)OQ(m+)RU%E=ZNu z$=z@PFakpo|BZ3BGjXzT*te;@>Is5v4X2J$`wZ&wQm(Qxa>hDw7H#q(E_JiaNeTz{ zM~r<)J3os1`s>1vul?s=fpafYvDG$@xr-#Cq(#ilG3tTF* zZr|i-nP;5Ym|uFU=sqA6<&J49-HXd<0?hT;s#ie18j?cwEh229CxBlU9DfTW&67yd zXhu|*@Xv?ZYvGhTak97{&)^Ha|8d@5KkKBrVSQHPi{B$&0L>q{f;KpU%2bm1@f*N2 zdj|R)&>_n`{SGkfmB0EL2JjPc6D>fQx(c-4YQWvt2Ce1w(;}>~+idz6;P(O-{ih

a)*OtWnxZ+5D>;XL6ec_ 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 Al>h($ diff --git a/Transferência Ginseng/workflow/.resources/teste3.ws.cache b/Transferência Ginseng/workflow/.resources/teste3.ws.cache index 42a479c..4486a82 100644 --- a/Transferência Ginseng/workflow/.resources/teste3.ws.cache +++ b/Transferência Ginseng/workflow/.resources/teste3.ws.cache @@ -481,188 +481,6 @@ - - camposFormulario, documentoId = 590 - - - activity - - - centroCusto - - - chaveNfe - - - codigoItem - - - codigoProdutoItem - - - currentUserId - - - currentUsermail - - - currentUserName - - - dataAbertura - - - dataColeta - - - dataEmissaoApiNfe - - - dataEmissaoNfe - - - dataEntradaNfeConsulta - - - dataEntrega - - - descAnexo_Coleta - - - descAnexo_Entrega - - - descAnexo_Nfe - - - descAnexo_Recebimento - - - descricao - - - emailSolicitante - - - estabelecimento - - - excelUpload - - - fdAnexo_Coleta - - - fdAnexo_Entrega - - - fdAnexo_recebimento - - - fnAnexo_Nfe - - - formMode - - - fornecedorNfeConsulta - - - gestorEmail - - - gestorEmailE - - - gestorNome - - - gestorNomeE - - - gestor_cc - - - gestor_cce - - - invoiceIdNfeConsulta - - - itensNfeConsulta - - - itensNfeJson - - - justificativa - - - lojaNfeConsulta - - - motoristaColetaLogin - - - motoristaColetaNome - - - motoristaEntregaLogin - - - motoristaEntregaNome - - - motoristaEntregaSelecionado - - - numeroNfeConsulta - - - operacaoNfeConsulta - - - productIdItem - - - qtdDivergenciasNfe - - - quantidadeItem - - - requesterId - - - requesterMail - - - requesterName - - - serieNfeConsulta - - - situacaoNfeConsulta - - - storeIdNfeConsulta - - - tipoMotoristaEntrega - - - usuarioEmissorNfe - - - valorNfeConsulta - - - WKNumProces - - - mecanismo diff --git a/Transferência Ginseng/workflow/.resources/teste3.ws.cache.bkp b/Transferência Ginseng/workflow/.resources/teste3.ws.cache.bkp index e69de29..c8ca446 100644 --- a/Transferência Ginseng/workflow/.resources/teste3.ws.cache.bkp +++ b/Transferência Ginseng/workflow/.resources/teste3.ws.cache.bkp @@ -0,0 +1,155 @@ + + + + + volume + + + Default + + + + + expediente + + + Default + + + Expediente BackOffice, Logística e Motorista + + + Expediente Escritório Matriz + + + Expediente Lojas + + + + + mecanismo + + + + + Atribuição por Associação + + + Associado + + + + + + + Atribuição por Campo de Formulário + + + Campo Formulário + + + + + + + dpf_di_emp_filial_filtro + + + dpf_di_emp_filial_filtro + + + + + + + dpf_di_inicio_diadmissao + + + dpf_di_inicio_diadmissao + + + + + + + Atribuição por Executor de Atividade + + + Executor Atividade + + + + + + + Atribuição por Grupo + + + Grupo + + + + + + + Atribuição por Grupos do Colaborador + + + Grupos Colaborador + + + + + + + mecCustomAprov + + + mecCustomAprov + + + + + + + Atribuição por Papel + + + Papel + + + + + + + Atribuição para um Grupo + + + Pool Grupo + + + + + + + Atribuição para um Papel + + + Pool Papel + + + + + + + Atribuição por Usuário + + + Usuário + + + + + + + diff --git a/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process b/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process index 48aab1e..3fbb7a0 100644 --- a/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process +++ b/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process @@ -73,7 +73,7 @@ - + @@ -93,77 +93,77 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -193,7 +193,7 @@ - + @@ -213,21 +213,21 @@ - + - + - + - + @@ -267,17 +267,17 @@ - + - + - + @@ -314,17 +314,17 @@ - + - + - + @@ -4367,7 +4367,7 @@ - + From b836b0a5d2246228f7bb8bc0159251eacaf4e6b4 Mon Sep 17 00:00:00 2001 From: Andrey Cunha Date: Sat, 21 Mar 2026 13:24:57 -0300 Subject: [PATCH 08/25] att --- .../org.eclipse.e4.workbench/workbench.xmi | 4459 ++++++++--------- .../0.log | 2 + .../com.totvs.tds.ecm.dataservers | Bin 557 -> 562 bytes Transferência Ginseng/.vscode/launch.json | 18 + Transferência Ginseng/.vscode/settings.json | 3 + .../fluigFormAttachment.js | 29 +- .../workflow/.resources/Fluig teste.ws.cache | 640 +++ .../.resources/Fluig teste.ws.cache.bkp | 640 +++ .../Solicitação de transferência.ecm30.xml | 101 +- .../Solicitação de transferência.png | Bin 51657 -> 51903 bytes .../workflow/.resources/teste3.ws.cache | 30 + .../workflow/.resources/teste3.ws.cache.bkp | 485 ++ .../Solicitação de transferência.process | 14 +- 13 files changed, 4099 insertions(+), 2322 deletions(-) create mode 100644 Transferência Ginseng/.vscode/launch.json create mode 100644 Transferência Ginseng/.vscode/settings.json create mode 100644 Transferência Ginseng/workflow/.resources/Fluig teste.ws.cache create mode 100644 Transferência Ginseng/workflow/.resources/Fluig teste.ws.cache.bkp diff --git a/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi b/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi index 978f9f0..e8a9eb0 100644 --- a/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi +++ b/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi @@ -1,9 +1,9 @@ - - + + activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration ModelMigrationProcessor.001 - + @@ -12,9 +12,9 @@ topLevel shellMaximized - - - + + + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -74,85 +74,85 @@ persp.showIn:org.eclipse.eclemma.ui.CoverageView persp.newWizSC:org.eclipse.jpt.jpa.ui.wizard.newJpaProject persp.perspSC:org.eclipse.jpt.ui.jpaPerspective - - - + + + View categoryTag:General - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java Browsing - - - - - + + + + + View categoryTag:General - + View categoryTag:Mylyn - + View categoryTag:General - - + + View categoryTag:General - + View categoryTag:General - + View categoryTag:Server - + View categoryTag:Data Management - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General @@ -160,7 +160,7 @@ - + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -192,53 +192,54 @@ persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateLayoutWizardID persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateWidgetWizardID persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView - - - - + + + + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Fluig - - + + View categoryTag:General - - - - + + + + active + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig @@ -247,3074 +248,3020 @@ - - + + View categoryTag:Help - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:Help - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Help - - + + org.eclipse.e4.primaryDataStack EditorStack - active - noFocus - + Editor removeOnHide com.totvs.tds.ecm.designer.bpmneditor - active - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java Browsing - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + active + activeOnClose + ViewMenu menuContribution:menu - + - + View categoryTag:Server - + View categoryTag:Data Management - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Mylyn - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:Java - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - - + + toolbarSeparator - + - + Draggable - + - + toolbarSeparator - + - + Draggable - + toolbarSeparator - + - + Draggable - + Draggable - + Draggable - + Draggable - + Draggable - + Draggable - + toolbarSeparator - + - + Draggable - + - - Draggable - - + toolbarSeparator - + - + toolbarSeparator - + - + Draggable - + stretch SHOW_RESTORE_MENU - + Draggable HIDEABLE SHOW_RESTORE_MENU - - + + stretch - + Draggable - + Draggable - + Draggable - - + + TrimStack Draggable - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - - - + + + + - - - + + + - - - - - + + + + + - - + + - - + + - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + platform:win32 - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - + + + + - - + + - - - - + + + + - - - - - - - - + + + + + + + + - - + + - - - - - - + + + + + + - - - + + + - - - + + + - - - - - - + + + + + + - - - - - - - - - + + + + + + + + + - - + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + - - + + - - + + platform:win32 - - + + - - + + - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Editor removeOnHide - + View categoryTag:Ant - + View categoryTag:Gradle - + View categoryTag:Gradle - + View categoryTag:Data Management - + View categoryTag:Data Management - + View categoryTag:Data Management - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Java - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git NoRestore - + View categoryTag:Git - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:Debug - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java - - - - View - categoryTag:JPA - - - - - View - categoryTag:JPA - - - - - View - categoryTag:JavaServer Faces - - - - - View - categoryTag:JavaServer Faces - - + View categoryTag:Web Services - + View categoryTag:Maven - + View categoryTag:Maven - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Oomph - + View categoryTag:API Tools - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Team - + View categoryTag:Team - + View categoryTag:Help - + View categoryTag:Terminal - + View categoryTag:Other - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Debug - + View categoryTag:JavaScript - + View categoryTag:JavaScript - + View categoryTag:JavaScript + categoryTag:Other - + View categoryTag:JavaScript + categoryTag:Other - + View categoryTag:JavaScript + categoryTag:Other - + View categoryTag:Server - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:General - - + + glue move_after:PerspectiveSpacer SHOW_RESTORE_MENU - + move_after:Spacer Glue HIDEABLE SHOW_RESTORE_MENU - + glue move_after:SearchField SHOW_RESTORE_MENU - - - - - + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log b/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log index 141e4ca..cdc59fd 100644 --- a/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log +++ b/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log @@ -1,3 +1,5 @@ 2026-03-12 10:11:35,412 [Worker-5: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is out-of-date. Trying to update. 2026-03-16 18:19:59,450 [Worker-2: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is out-of-date. Trying to update. 2026-03-20 19:38:52,890 [Worker-4: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. +2026-03-21 11:10:18,833 [Worker-64: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. +2026-03-21 11:37:49,557 [Worker-1: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. diff --git a/Lançamento de documentos/com.totvs.tds.ecm.dataservers b/Lançamento de documentos/com.totvs.tds.ecm.dataservers index 9bd77f9d7af155313108fb239bc739a13d42cd32..e1065021a678c599c6baa0f367eb9010b94d9974 100644 GIT binary patch delta 43 zcmZ3>vWaDapTOd@7tim8mzJ6)gfw%ec`ct9=f=bBmQ$LUu27O%T#~wRbrT~1jOr18 delta 38 ucmdnQvX*6npFr0eY3}4jdu(U9=m-}_y3Cyz=f=)fl3HAnYP@kn6C(f?m<~7q diff --git a/Transferência Ginseng/.vscode/launch.json b/Transferência Ginseng/.vscode/launch.json new file mode 100644 index 0000000..104d190 --- /dev/null +++ b/Transferência Ginseng/.vscode/launch.json @@ -0,0 +1,18 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "totvs_language_debug", + "request": "launch", + "name": "TOTVS Language Debug", + "program": "${command:AskForProgramName}", + "cwb": "${workspaceFolder}", + "smartclientBin": "../totvs/bin/smartclient/smartclient.exe", + "isMultiSession": true, + "enableTableSync": true, + "extendFeatures": { + "charDetails": false + } + } + ] +} \ No newline at end of file diff --git a/Transferência Ginseng/.vscode/settings.json b/Transferência Ginseng/.vscode/settings.json new file mode 100644 index 0000000..6def96a --- /dev/null +++ b/Transferência Ginseng/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "totvsLanguageServer.welcomePage": false +} \ No newline at end of file diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/fluigFormAttachment.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/fluigFormAttachment.js index 4a53f4e..d57efc0 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/fluigFormAttachment.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/fluigFormAttachment.js @@ -31,13 +31,28 @@ const isString = item => typeof item === "string"; + const normalizeAttachmentDescription = (value) => String(value || "").trim(); + + const attachmentMatchesDescription = (attachment, filename) => { + const target = normalizeAttachmentDescription(filename); + const description = normalizeAttachmentDescription(attachment && attachment.description); + return !!target && (description === target || description.indexOf(target + " - ") === 0); + }; + /** * Procura o índice do anexo de acordo com sua descrição * * @param {string} filename * @returns {number} -1 se não encontrar */ - const attachmentFindIndex = (filename) => parent.ECM.attachmentTable.getData().findIndex(attachment => attachment.description === filename); + const attachmentFindIndex = (filename) => + parent.ECM.attachmentTable.getData().findIndex(attachment => attachmentMatchesDescription(attachment, filename)); + + const attachmentFindIndexes = (filename) => + parent.ECM.attachmentTable + .getData() + .map((attachment, index) => attachmentMatchesDescription(attachment, filename) ? index : -1) + .filter(index => index !== -1); /** * Configuração padrão @@ -269,14 +284,10 @@ filename = `${this.#settings.prefixName}-${filename}`; } - // Evitar conflito de descrição do anexo - if (attachmentFindIndex(filename) !== -1) { - FLUIGC.toast({ - title: "Atenção", - message: "Já existe um anexo com essa descrição", - type: "warning", - }) - return; + // Evita bloqueio de duplicidade: substitui anexo existente com mesma descrição. + const duplicatedIndexes = attachmentFindIndexes(filename).sort((a, b) => b - a); + if (duplicatedIndexes.length) { + parent.WKFViewAttachment.removeAttach(duplicatedIndexes); } parent.$("#ecm-navigation-inputFile-clone") diff --git a/Transferência Ginseng/workflow/.resources/Fluig teste.ws.cache b/Transferência Ginseng/workflow/.resources/Fluig teste.ws.cache new file mode 100644 index 0000000..c8f2401 --- /dev/null +++ b/Transferência Ginseng/workflow/.resources/Fluig teste.ws.cache @@ -0,0 +1,640 @@ + + + + + volume + + + Default + + + + + mecanismoGrupo + + + + + Tecnologia e Comunicação + + + TIC + + + + + + + Compras Indiretos + + + ComprasIndiretos + + + + + + + Obras e manutenção + + + Manutencao + + + + + + + Aprovadores Compras Nvl 3 + + + AprovadoresComprasNvl3 + + + + + + + Motoristas + + + Motoristas + + + + + + + Requisitantes de Vaga + + + Requisitantesdevaga + + + + + + + Recrutamento + + + Recrutamento + + + + + + + TODOS-TODOS-DIADMISSAO + + + TODOS-TODOS-DIADMISSAO + + + + + + + ResponsavelDesligamento + + + ResponsavelDesligamento + + + + + + + GENTE & CULTURA + + + GENTE_CULTURA + + + + + + + LOJA AL + + + LOJA_AL + + + + + + + CD + + + CD + + + + + + + ESPAÇO DO REVENDEDOR AL + + + ESPACO_DO_REVENDEDOR_AL + + + + + + + FINANCEIRO + + + FINANCEIRO + + + + + + + OPERAÇÕES + + + OPERACOES + + + + + + + AMG AL + + + AMG_AL + + + + + + + REGIONAL ALAGOAS + + + REGIONAL_ALAGOAS + + + + + + + PREVENÇÃO DE PERDA + + + PREVENCAO_DE_PERDA + + + + + + + MARKETING, TREINAMENTO + + + MARKETING_TREINAMENTO + + + + + + + SECRETARIA EXECUTIVA + + + SECRETARIA_EXECUTIVA + + + + + + + DIRETORIA EXECUTIVA + + + DIRETORIA_EXECUTIVA + + + + + + + INFRAESTRUTURA + + + INFRAESTRUTURA + + + + + + + ESPAÇO DO REVENDEDOR BA + + + ESPACO_DO_REVENDEDOR_BA + + + + + + + BUSINESS INTELLIGENCE + + + BUSINESS_INTELLIGENCE + + + + + + + DEPARTAMENTO PESSOAL + + + DEPARTAMENTO_PESSOAL + + + + + + + LOJA BA + + + LOJA_BA + + + + + + + TREINAMENTO + + + TREINAMENTO + + + + + + + AMG BA + + + AMG_BA + + + + + + + MARKETING + + + MARKETING + + + + + + + COMPRAS + + + COMPRAS + + + + + + + AMG SE + + + AMG_SE + + + + + + + LOJA SE + + + LOJA_SE + + + + + + + ESPAÇO DO REVENDEDOR SE + + + ESPACO_DO_REVENDEDOR_SE + + + + + + + VENDAS IN COMPANY + + + VENDAS_IN_COMPANY + + + + + + + REGIONAL BAHIA + + + REGIONAL_BAHIA + + + + + + + CANAL LOJA 01 + + + CANAL_LOJA_01 + + + + + + + AUDITORIA + + + AUDITORIA + + + + + + + CANAL LOJA 02 + + + CANAL_LOJA_02 + + + + + + + PLANEJAMENTO DE DEMANDAS + + + PLANEJAMENTO_DE_DEMANDAS + + + + + + + PROJETOS + + + PROJETOS + + + + + + + COMPLIANCE + + + COMPLIANCE + + + + + + + ESCRITÓRIO - MATRIZ + + + ESCRITORIO_MATRIZ + + + + + + + ESCRITÓRIO - CONQUISTA + + + ESCRITORIO_CONQUISTA + + + + + + + REGIONAL SERGIPE + + + REGIONAL_SERGIPE + + + + + + + Transferencia + + + Transferencia + + + + + + + motoristaAL + + + motoristaAL + + + + + + + motoristaBA + + + motoristaBA + + + + + + + motoristaSE + + + motoristaSE + + + + + + + expediente + + + Default + + + Expediente BackOffice, Logística e Motorista + + + Expediente Escritório Matriz + + + Expediente Lojas + + + + + mecanismo + + + + + Atribuição por Associação + + + Associado + + + + + + + Atribuição por Campo de Formulário + + + Campo Formulário + + + + + + + dpf_di_emp_filial_filtro + + + dpf_di_emp_filial_filtro + + + + + + + dpf_di_inicio_diadmissao + + + dpf_di_inicio_diadmissao + + + + + + + Atribuição por Executor de Atividade + + + Executor Atividade + + + + + + + Atribuição por Grupo + + + Grupo + + + + + + + Atribuição por Grupos do Colaborador + + + Grupos Colaborador + + + + + + + mecCustomAprov + + + mecCustomAprov + + + + + + + Atribuição por Papel + + + Papel + + + + + + + Atribuição para um Grupo + + + Pool Grupo + + + + + + + Atribuição para um Papel + + + Pool Papel + + + + + + + Atribuição por Usuário + + + Usuário + + + + + + + diff --git a/Transferência Ginseng/workflow/.resources/Fluig teste.ws.cache.bkp b/Transferência Ginseng/workflow/.resources/Fluig teste.ws.cache.bkp new file mode 100644 index 0000000..c8f2401 --- /dev/null +++ b/Transferência Ginseng/workflow/.resources/Fluig teste.ws.cache.bkp @@ -0,0 +1,640 @@ + + + + + volume + + + Default + + + + + mecanismoGrupo + + + + + Tecnologia e Comunicação + + + TIC + + + + + + + Compras Indiretos + + + ComprasIndiretos + + + + + + + Obras e manutenção + + + Manutencao + + + + + + + Aprovadores Compras Nvl 3 + + + AprovadoresComprasNvl3 + + + + + + + Motoristas + + + Motoristas + + + + + + + Requisitantes de Vaga + + + Requisitantesdevaga + + + + + + + Recrutamento + + + Recrutamento + + + + + + + TODOS-TODOS-DIADMISSAO + + + TODOS-TODOS-DIADMISSAO + + + + + + + ResponsavelDesligamento + + + ResponsavelDesligamento + + + + + + + GENTE & CULTURA + + + GENTE_CULTURA + + + + + + + LOJA AL + + + LOJA_AL + + + + + + + CD + + + CD + + + + + + + ESPAÇO DO REVENDEDOR AL + + + ESPACO_DO_REVENDEDOR_AL + + + + + + + FINANCEIRO + + + FINANCEIRO + + + + + + + OPERAÇÕES + + + OPERACOES + + + + + + + AMG AL + + + AMG_AL + + + + + + + REGIONAL ALAGOAS + + + REGIONAL_ALAGOAS + + + + + + + PREVENÇÃO DE PERDA + + + PREVENCAO_DE_PERDA + + + + + + + MARKETING, TREINAMENTO + + + MARKETING_TREINAMENTO + + + + + + + SECRETARIA EXECUTIVA + + + SECRETARIA_EXECUTIVA + + + + + + + DIRETORIA EXECUTIVA + + + DIRETORIA_EXECUTIVA + + + + + + + INFRAESTRUTURA + + + INFRAESTRUTURA + + + + + + + ESPAÇO DO REVENDEDOR BA + + + ESPACO_DO_REVENDEDOR_BA + + + + + + + BUSINESS INTELLIGENCE + + + BUSINESS_INTELLIGENCE + + + + + + + DEPARTAMENTO PESSOAL + + + DEPARTAMENTO_PESSOAL + + + + + + + LOJA BA + + + LOJA_BA + + + + + + + TREINAMENTO + + + TREINAMENTO + + + + + + + AMG BA + + + AMG_BA + + + + + + + MARKETING + + + MARKETING + + + + + + + COMPRAS + + + COMPRAS + + + + + + + AMG SE + + + AMG_SE + + + + + + + LOJA SE + + + LOJA_SE + + + + + + + ESPAÇO DO REVENDEDOR SE + + + ESPACO_DO_REVENDEDOR_SE + + + + + + + VENDAS IN COMPANY + + + VENDAS_IN_COMPANY + + + + + + + REGIONAL BAHIA + + + REGIONAL_BAHIA + + + + + + + CANAL LOJA 01 + + + CANAL_LOJA_01 + + + + + + + AUDITORIA + + + AUDITORIA + + + + + + + CANAL LOJA 02 + + + CANAL_LOJA_02 + + + + + + + PLANEJAMENTO DE DEMANDAS + + + PLANEJAMENTO_DE_DEMANDAS + + + + + + + PROJETOS + + + PROJETOS + + + + + + + COMPLIANCE + + + COMPLIANCE + + + + + + + ESCRITÓRIO - MATRIZ + + + ESCRITORIO_MATRIZ + + + + + + + ESCRITÓRIO - CONQUISTA + + + ESCRITORIO_CONQUISTA + + + + + + + REGIONAL SERGIPE + + + REGIONAL_SERGIPE + + + + + + + Transferencia + + + Transferencia + + + + + + + motoristaAL + + + motoristaAL + + + + + + + motoristaBA + + + motoristaBA + + + + + + + motoristaSE + + + motoristaSE + + + + + + + expediente + + + Default + + + Expediente BackOffice, Logística e Motorista + + + Expediente Escritório Matriz + + + Expediente Lojas + + + + + mecanismo + + + + + Atribuição por Associação + + + Associado + + + + + + + Atribuição por Campo de Formulário + + + Campo Formulário + + + + + + + dpf_di_emp_filial_filtro + + + dpf_di_emp_filial_filtro + + + + + + + dpf_di_inicio_diadmissao + + + dpf_di_inicio_diadmissao + + + + + + + Atribuição por Executor de Atividade + + + Executor Atividade + + + + + + + Atribuição por Grupo + + + Grupo + + + + + + + Atribuição por Grupos do Colaborador + + + Grupos Colaborador + + + + + + + mecCustomAprov + + + mecCustomAprov + + + + + + + Atribuição por Papel + + + Papel + + + + + + + Atribuição para um Grupo + + + Pool Grupo + + + + + + + Atribuição para um Papel + + + Pool Papel + + + + + + + Atribuição por Usuário + + + Usuário + + + + + + + diff --git a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml index 2e0950e..fe18df6 100644 --- a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml +++ b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml @@ -8,7 +8,7 @@ Este flow permite abertura de solicitação de transferências automatizadas, informando qual item será transferido e direcionado para as aprovações corretas. true false - Default + Fluig teste Transferência Usuário <AssignmentController><User>projetos</User></AssignmentController> @@ -33,6 +33,7 @@ 590 + 0 true true false @@ -1033,7 +1034,7 @@ Enviar para coleta false - 6 + 68 31 Enviar para coleta @@ -1153,54 +1154,54 @@ Transferência Ginseng 1 - function servicetask99(attempt, message) { - try { - var validacaoItens = safeTrim(hAPI.getCardValue("validacaoItens")); - - // Só precisa consultar entrada da NFe quando o recebimento foi validado como entregue. - if (validacaoItens !== "entregue") return; - - var dataEntrada = safeTrim(hAPI.getCardValue("dataEntradaNfeConsulta")); - if (dataEntrada !== "") return; - - var chaveNfe = onlyDigits(hAPI.getCardValue("chaveNfe")); - if (chaveNfe === "") { - log.warn("[servicetask99] Chave NFe vazia. Nao foi possivel consultar entrada."); - return; - } - - var cKey = DatasetFactory.createConstraint("key", chaveNfe, chaveNfe, ConstraintType.MUST); - var dsNfe = DatasetFactory.getDataset("ds_fiscal_invoice_by_keys", null, [cKey], null); - - if (!dsNfe || dsNfe.rowsCount < 1) { - log.warn("[servicetask99] Dataset sem retorno para chave: " + chaveNfe); - return; - } - - var dsSuccess = safeTrim(dsNfe.getValue(0, "success")).toLowerCase() === "true"; - var dsUpdatedAt = safeTrim(dsNfe.getValue(0, "updatedAt")); - - if (dsSuccess && dsUpdatedAt !== "") { - hAPI.setCardValue("dataEntradaNfeConsulta", dsUpdatedAt); - log.info("[servicetask99] Data de entrada atualizada automaticamente: " + dsUpdatedAt); - return; - } - - var dsMessage = safeTrim(dsNfe.getValue(0, "message")); - log.warn("[servicetask99] Consulta executada sem data de entrada. message=" + dsMessage); - } catch (e) { - log.error("[servicetask99] Erro na consulta automatica da NFe: " + e); - throw e; - } -} - -function safeTrim(value) { - return String(value == null ? "" : value).trim(); -} - -function onlyDigits(value) { - return String(value == null ? "" : value).replace(/\D/g, ""); -} + function servicetask99(attempt, message) { + try { + var validacaoItens = safeTrim(hAPI.getCardValue("validacaoItens")); + + // Só precisa consultar entrada da NFe quando o recebimento foi validado como entregue. + if (validacaoItens !== "entregue") return; + + var dataEntrada = safeTrim(hAPI.getCardValue("dataEntradaNfeConsulta")); + if (dataEntrada !== "") return; + + var chaveNfe = onlyDigits(hAPI.getCardValue("chaveNfe")); + if (chaveNfe === "") { + log.warn("[servicetask99] Chave NFe vazia. Nao foi possivel consultar entrada."); + return; + } + + var cKey = DatasetFactory.createConstraint("key", chaveNfe, chaveNfe, ConstraintType.MUST); + var dsNfe = DatasetFactory.getDataset("ds_fiscal_invoice_by_keys", null, [cKey], null); + + if (!dsNfe || dsNfe.rowsCount < 1) { + log.warn("[servicetask99] Dataset sem retorno para chave: " + chaveNfe); + return; + } + + var dsSuccess = safeTrim(dsNfe.getValue(0, "success")).toLowerCase() === "true"; + var dsUpdatedAt = safeTrim(dsNfe.getValue(0, "updatedAt")); + + if (dsSuccess && dsUpdatedAt !== "") { + hAPI.setCardValue("dataEntradaNfeConsulta", dsUpdatedAt); + log.info("[servicetask99] Data de entrada atualizada automaticamente: " + dsUpdatedAt); + return; + } + + var dsMessage = safeTrim(dsNfe.getValue(0, "message")); + log.warn("[servicetask99] Consulta executada sem data de entrada. message=" + dsMessage); + } catch (e) { + log.error("[servicetask99] Erro na consulta automatica da NFe: " + e); + throw e; + } +} + +function safeTrim(value) { + return String(value == null ? "" : value).trim(); +} + +function onlyDigits(value) { + return String(value == null ? "" : value).replace(/\D/g, ""); +} diff --git a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.png b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.png index bfed2b38e7ce27e234082af7df951d0dc39324c8..1ea384d6eb203407e317376eb4af22b5b245f327 100644 GIT binary patch literal 51903 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¬UDtyR6lc1gThDTepb^|8!hB0Qr6-A5_vSXiD_mB z1MbHF)F9cj?|%;!UdNQAytCaHXB9F3O;OtJ`M#_%|fw+YduKmMD0ot_cK?cIf+PM=F08j)u8+-LE z*e!-7!>e*^;C?~v~R z!bl1U2n!2v`6EAqQ@k*RJS=Uf`f6B0c3WyX%xgPrs_hE zrxei!zsyi|7>?vg%=I0O(Nj=nf%5tx=16_dX1qT9yZu%noe$l3iz?wK=hK#7P0mcmwnfWbQY9q3meR~nZeJufX`V603Ai`>5f zl}EvrpM|>Www0LLEbPfO6rx^}`CG5u{SKX%<~YsxRtUO$-5^c6Hsuyg?R$9K5Ahz( zB)5TijNJk6U7O21;We(P;pVYSv@F5Vj8h5$p|sbBt-8zm-ebq=*2AaCIgA&_B^Fr7 zfL_PBPvk~He5ckm#{0piwkYQ?Nk#Om!R+@UDTAJ%L>(*s6w0`#E?cSUmlHlBp;@wb z;?wXwxvU+l)p(W)_Xp%Jg?*6qY-*jp#b1@KesTvP-hX|+go05;>i!e*loQmiweJ>N z+d-Zu6*Rh+bB?4)_tK309DqpAjIDKIpD?kB1MJWQP?EVgv%E#dQEedT!r#

R2N` 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

`cr34hiHiOE@5?K>B?iWhoUSq) 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 literal 51657 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

a)*OtWnxZ+5D>;XL6ec_ zvYgxvFCg&Qur*Tu>Ig^UafcM;-q7xikFEOxjx}Gk!9G0b>h2A4Pc!X`5gdZNj5c?D zaaMsPZMmn~cmBbH+zykq@dA?+AX61o_|1RvXl+D*8zdKU3&65+w89rt^~8_m_0D^E;>4R*6BWv!T*?hhLs?^@^ZEa*xWx~g3B(#58skybbjsxtjkvqG#0YLV0_pfUUK)}nJ z-+aD2;Pnsx{qTRI@&6wip1-;E0IPz_`@Y%-a(|O=as=bZ + + + + motoristaAL + + + motoristaAL + + + + + + + motoristaBA + + + motoristaBA + + + + + + + motoristaSE + + + motoristaSE + + + diff --git a/Transferência Ginseng/workflow/.resources/teste3.ws.cache.bkp b/Transferência Ginseng/workflow/.resources/teste3.ws.cache.bkp index c8ca446..c8f2401 100644 --- a/Transferência Ginseng/workflow/.resources/teste3.ws.cache.bkp +++ b/Transferência Ginseng/workflow/.resources/teste3.ws.cache.bkp @@ -9,6 +9,491 @@ + + mecanismoGrupo + + + + + Tecnologia e Comunicação + + + TIC + + + + + + + Compras Indiretos + + + ComprasIndiretos + + + + + + + Obras e manutenção + + + Manutencao + + + + + + + Aprovadores Compras Nvl 3 + + + AprovadoresComprasNvl3 + + + + + + + Motoristas + + + Motoristas + + + + + + + Requisitantes de Vaga + + + Requisitantesdevaga + + + + + + + Recrutamento + + + Recrutamento + + + + + + + TODOS-TODOS-DIADMISSAO + + + TODOS-TODOS-DIADMISSAO + + + + + + + ResponsavelDesligamento + + + ResponsavelDesligamento + + + + + + + GENTE & CULTURA + + + GENTE_CULTURA + + + + + + + LOJA AL + + + LOJA_AL + + + + + + + CD + + + CD + + + + + + + ESPAÇO DO REVENDEDOR AL + + + ESPACO_DO_REVENDEDOR_AL + + + + + + + FINANCEIRO + + + FINANCEIRO + + + + + + + OPERAÇÕES + + + OPERACOES + + + + + + + AMG AL + + + AMG_AL + + + + + + + REGIONAL ALAGOAS + + + REGIONAL_ALAGOAS + + + + + + + PREVENÇÃO DE PERDA + + + PREVENCAO_DE_PERDA + + + + + + + MARKETING, TREINAMENTO + + + MARKETING_TREINAMENTO + + + + + + + SECRETARIA EXECUTIVA + + + SECRETARIA_EXECUTIVA + + + + + + + DIRETORIA EXECUTIVA + + + DIRETORIA_EXECUTIVA + + + + + + + INFRAESTRUTURA + + + INFRAESTRUTURA + + + + + + + ESPAÇO DO REVENDEDOR BA + + + ESPACO_DO_REVENDEDOR_BA + + + + + + + BUSINESS INTELLIGENCE + + + BUSINESS_INTELLIGENCE + + + + + + + DEPARTAMENTO PESSOAL + + + DEPARTAMENTO_PESSOAL + + + + + + + LOJA BA + + + LOJA_BA + + + + + + + TREINAMENTO + + + TREINAMENTO + + + + + + + AMG BA + + + AMG_BA + + + + + + + MARKETING + + + MARKETING + + + + + + + COMPRAS + + + COMPRAS + + + + + + + AMG SE + + + AMG_SE + + + + + + + LOJA SE + + + LOJA_SE + + + + + + + ESPAÇO DO REVENDEDOR SE + + + ESPACO_DO_REVENDEDOR_SE + + + + + + + VENDAS IN COMPANY + + + VENDAS_IN_COMPANY + + + + + + + REGIONAL BAHIA + + + REGIONAL_BAHIA + + + + + + + CANAL LOJA 01 + + + CANAL_LOJA_01 + + + + + + + AUDITORIA + + + AUDITORIA + + + + + + + CANAL LOJA 02 + + + CANAL_LOJA_02 + + + + + + + PLANEJAMENTO DE DEMANDAS + + + PLANEJAMENTO_DE_DEMANDAS + + + + + + + PROJETOS + + + PROJETOS + + + + + + + COMPLIANCE + + + COMPLIANCE + + + + + + + ESCRITÓRIO - MATRIZ + + + ESCRITORIO_MATRIZ + + + + + + + ESCRITÓRIO - CONQUISTA + + + ESCRITORIO_CONQUISTA + + + + + + + REGIONAL SERGIPE + + + REGIONAL_SERGIPE + + + + + + + Transferencia + + + Transferencia + + + + + + + motoristaAL + + + motoristaAL + + + + + + + motoristaBA + + + motoristaBA + + + + + + + motoristaSE + + + motoristaSE + + + + + expediente diff --git a/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process b/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process index 3fbb7a0..c8bf690 100644 --- a/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process +++ b/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process @@ -13,7 +13,7 @@ - + @@ -113,7 +113,7 @@ - + @@ -4212,7 +4212,7 @@ - + @@ -4342,14 +4342,14 @@ - + - + @@ -4361,9 +4361,9 @@ - + - + From 4bb50f0716acdfede65080e33a747d92687aa099 Mon Sep 17 00:00:00 2001 From: Andrey Cunha Date: Sat, 21 Mar 2026 13:25:09 -0300 Subject: [PATCH 09/25] att --- .../.plugins/org.eclipse.m2e.logback.configuration/0.log | 1 + 1 file changed, 1 insertion(+) diff --git a/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log b/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log index cdc59fd..1a10505 100644 --- a/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log +++ b/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log @@ -3,3 +3,4 @@ 2026-03-20 19:38:52,890 [Worker-4: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. 2026-03-21 11:10:18,833 [Worker-64: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. 2026-03-21 11:37:49,557 [Worker-1: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. +2026-03-21 13:24:29,481 [Worker-0: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. From 822aa6819782e2ede509882ee960aebc0a5abc24 Mon Sep 17 00:00:00 2001 From: "Andrey Cunh@" Date: Sun, 22 Mar 2026 16:12:12 -0300 Subject: [PATCH 10/25] att --- Transferência Ginseng/.vscode/servers.json | 4 +- .../events/validateForm.js | 4 + .../script.js | 99 +- .../teste.html | 57 + .../totvsflow_solicitacao_transferencia.html | 8 +- .../tpl_coleta_realizada.html | 44 + .../tpl_entrega_realizada.html | 44 + .../Solicitação de transferência.ecm30.xml | 620 ++++- .../Solicitação de transferência.png | Bin 51903 -> 50256 bytes ...licitação de transferência.processimage.svg | 2 +- .../workflow/.resources/teste3.ws.cache | 716 +++++ .../Solicitação de transferência.process | 2362 +++++++++-------- ...icitação de transferência.beforeTaskSave.js | 205 ++ .../Solicitação de transferência.onNotify.js | 27 + .../aberturadeChamado.beforeTaskSave.js | 4 +- 15 files changed, 2878 insertions(+), 1318 deletions(-) create mode 100644 Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/teste.html create mode 100644 Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/tpl_coleta_realizada.html create mode 100644 Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/tpl_entrega_realizada.html create mode 100644 Transferência Ginseng/workflow/scripts/Solicitação de transferência.beforeTaskSave.js create mode 100644 Transferência Ginseng/workflow/scripts/Solicitação de transferência.onNotify.js diff --git a/Transferência Ginseng/.vscode/servers.json b/Transferência Ginseng/.vscode/servers.json index b3a4066..4a764ca 100644 --- a/Transferência Ginseng/.vscode/servers.json +++ b/Transferência Ginseng/.vscode/servers.json @@ -2,13 +2,13 @@ "version": "1.0.0", "configurations": [ { - "id": "1v6yi27yg82mmzgeg2todjqzi42g7", + "id": "5i6o3b75rrmmn0z5dbms6ldputs2v", "name": "teste", "host": "comerciode188007.fluig.cloudtotvs.com.br", "ssl": true, "port": 443, "username": "andrey.cunha", - "password": "eyJpdiI6Ijk2Mzg4MGUwODVkYTVkZmI0YjQ2ZTdmNmNlYTJlMGI2Iiwic2FsdCI6ImI0ODMzZTAyNDkxNWYzNGFkNDVkYjE5ZThkMGNlOTM3IiwidGV4dCI6IjY3NDBmZjM2MTE1YjhiODAyM2IzYjVjZDYyYzEwYWRiIn0=", + "password": "eyJpdiI6ImE1ZmNlY2U2NjVlMjFlMzJiM2U1NzFjM2RlNTU3NDQyIiwic2FsdCI6ImU5ZDQ5MWUzNjA5OWZmYmFlZjgxZTRmODFmM2M1ZDNlIiwidGV4dCI6IjRkYTIxY2E1Mjg0ZDkxNTkzZTk0MTliYTljZGQ1ZjUzIn0=", "userCode": "andrey.cunha", "confirmExporting": false, "hasBrowser": false, diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js index c0f4550..f99f2af 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js @@ -95,6 +95,10 @@ function validateForm(form) { message += getMessage("Data da entrega", 1, form); hasErros = true; } + if (String(form.getValue("nomerecebedor") || "").trim() == "") { + message += getMessage("Nome de quem recebeu a mercadoria", 1, form); + hasErros = true; + } break; case RECEBIMENTO: diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js index ece38a2..59e9ee1 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js @@ -353,30 +353,67 @@ function clearZoomField(fieldId) { $("#" + fieldId).val(""); } -var MOTORISTAS_GROUP_ID = "Motoristas"; -var motoristasEntregaCache = null; -var motoristasEntregaLoading = false; +var MOTORISTAS_GROUP_DEFAULT_ID = "Motoristas"; +var MOTORISTAS_GROUP_BY_UF = { + AL: "motoristaAL", + BA: "motoristaBA", + SE: "motoristaSE" +}; +var motoristasEntregaCacheByGroup = {}; +var motoristasEntregaLoadingByGroup = {}; +var motoristaEntregaGroupAtual = ""; + +function normalizeUfCode(value) { + return String(value || "").toUpperCase().replace(/[^A-Z]/g, "").substring(0, 2); +} + +function resolveMotoristasGroupIdByUf(uf) { + var ufCode = normalizeUfCode(uf); + if (!ufCode) { + return MOTORISTAS_GROUP_DEFAULT_ID; + } + if (MOTORISTAS_GROUP_BY_UF[ufCode]) { + return String(MOTORISTAS_GROUP_BY_UF[ufCode] || "").trim() || MOTORISTAS_GROUP_DEFAULT_ID; + } + // Convencao para facilitar novos estados sem precisar alterar o JS. + return "motorista" + ufCode; +} + +function getMotoristasEntregaQueryContext() { + var uf = normalizeUfCode($("#ufDestino").val()); + var groupId = resolveMotoristasGroupIdByUf(uf); + return { + uf: uf, + groupId: groupId, + cacheKey: groupId + }; +} function loadMotoristasEntregaSelect(forceReload) { var select = $("#motoristaEntregaSelecionado"); if (!select.length) return; - if (!forceReload && motoristasEntregaCache && motoristasEntregaCache.length) { - renderMotoristasEntregaOptions(motoristasEntregaCache); + var context = getMotoristasEntregaQueryContext(); + var cacheKey = context.cacheKey; + motoristaEntregaGroupAtual = context.groupId; + + if (!forceReload && Object.prototype.hasOwnProperty.call(motoristasEntregaCacheByGroup, cacheKey)) { + renderMotoristasEntregaOptions(motoristasEntregaCacheByGroup[cacheKey], context); return; } - if (motoristasEntregaLoading) return; + if (motoristasEntregaLoadingByGroup[cacheKey]) return; - motoristasEntregaLoading = true; + motoristasEntregaLoadingByGroup[cacheKey] = true; + select.prop("disabled", true); var requestPayload = { name: "ds_motoristas_grupo", fields: null, constraints: [{ _field: "GROUP_ID", - _initialValue: MOTORISTAS_GROUP_ID, - _finalValue: MOTORISTAS_GROUP_ID, + _initialValue: context.groupId, + _finalValue: context.groupId, _type: 1 }], order: null @@ -390,14 +427,22 @@ function loadMotoristasEntregaSelect(forceReload) { data: JSON.stringify(requestPayload) }).done(function (response) { var values = ((((response || {}).content || {}).values) || []); - motoristasEntregaCache = normalizeMotoristasEntregaRows(values); - renderMotoristasEntregaOptions(motoristasEntregaCache); + var rows = normalizeMotoristasEntregaRows(values); + motoristasEntregaCacheByGroup[cacheKey] = rows; + if (motoristaEntregaGroupAtual === context.groupId) { + renderMotoristasEntregaOptions(rows, context); + } }).fail(function (xhr) { - console.error("Falha ao carregar motoristas do dataset:", xhr); - motoristasEntregaCache = []; - renderMotoristasEntregaOptions([]); + console.error("Falha ao carregar motoristas do dataset (" + context.groupId + "):", xhr); + motoristasEntregaCacheByGroup[cacheKey] = []; + if (motoristaEntregaGroupAtual === context.groupId) { + renderMotoristasEntregaOptions([], context); + } }).always(function () { - motoristasEntregaLoading = false; + motoristasEntregaLoadingByGroup[cacheKey] = false; + if (motoristaEntregaGroupAtual === context.groupId) { + select.prop("disabled", false); + } }); } @@ -429,14 +474,21 @@ function normalizeMotoristasEntregaRows(values) { return out; } -function renderMotoristasEntregaOptions(rows) { +function renderMotoristasEntregaOptions(rows, context) { var select = $("#motoristaEntregaSelecionado"); if (!select.length) return; var selectedValue = String($("#motoristaEntregaLogin").val() || select.val() || "").trim(); + var placeholder = "Selecione o motorista"; + if (context && context.uf) { + placeholder = "Selecione o motorista da UF " + context.uf; + } + if ((rows || []).length === 0 && context && context.uf) { + placeholder = "Sem motoristas cadastrados para UF " + context.uf; + } select.empty(); - select.append($("").val("").text("Selecione o motorista")); + select.append($("").val("").text(placeholder)); for (var i = 0; i < rows.length; i++) { var row = rows[i]; @@ -462,6 +514,12 @@ function renderMotoristasEntregaOptions(rows) { applySelectedMotoristaEntregaOption(); } +function refreshMotoristasEntregaByUf(forceReload) { + var escolha = String($("input[name='tipoMotoristaEntrega']:checked").val() || ""); + if (escolha !== "outro") return; + loadMotoristasEntregaSelect(forceReload === true); +} + function syncMotoristaEntregaSelectFromHidden() { var select = $("#motoristaEntregaSelecionado"); if (!select.length) return; @@ -1043,7 +1101,7 @@ var beforeSendValidate = function (numState, nextState) { throw "'Complemento' é obrigatório."; } else if ($("#justificativa").val() == "") { $("#justificativa").parent("div").addClass("errorValidate"); - throw "'Qual o motivo da compra?' é obrigatório."; + throw "'Qual o motivo da transferência?' é obrigatório."; } else { $("input[id^='quantidadeItem___']").each(function (index, value) { var linha = $(value).attr("name").split("___")[1]; @@ -1152,6 +1210,9 @@ var beforeSendValidate = function (numState, nextState) { if ($("#dataEntrega").val() == "") { throw "'Data da entrega' é obrigatória."; } + if (String($("#nomerecebedor").val() || "").trim() == "") { + throw "'Nome de quem recebeu a mercadoria' é obrigatório."; + } } else if (numState == 18) { var validacaoItens = $("input[name='validacaoItens']:checked").val(); if (validacaoItens == "" || validacaoItens == undefined) { @@ -1224,6 +1285,7 @@ function setSelectedZoomItem(selectedItem) { $("#gestorEmail").val(selectedItem["emailGestor"] || ""); $("#gestor_cc").val(selectedItem["COLLEAGUE_ID"] || ""); $("#ufDestino").val(selectedItem["UF"] || ""); + refreshMotoristasEntregaByUf(true); } if (name_item == "estabelecimento") { @@ -1275,6 +1337,7 @@ function removedZoomItem(removedItem) { $("#gestorEmail").val(""); $("#gestor_cc").val(""); $("#ufDestino").val(""); + refreshMotoristasEntregaByUf(true); } else if (name_item == "estabelecimento") { $("#gestorNomeE").val(""); $("#gestorEmailE").val(""); diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/teste.html b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/teste.html new file mode 100644 index 0000000..bf98a5f --- /dev/null +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/teste.html @@ -0,0 +1,57 @@ +

diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html index 7338787..767928e 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html @@ -517,8 +517,14 @@ - +
+
+ + +
+
+

Validação do Recebimento

diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/tpl_coleta_realizada.html b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/tpl_coleta_realizada.html new file mode 100644 index 0000000..c18f70b --- /dev/null +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/tpl_coleta_realizada.html @@ -0,0 +1,44 @@ +
+
+ +
+

Transferências Ginseng

+

Notificação de Processo

+
+ +
+

Coleta Realizada

+ +

Olá,

+

O motorista ${motoristaColetaNome} coletou o produto na data ${dataColeta}.

+

O motorista ${motoristaEntregaNome} irá realizar a entrega.

+ +
+

Nº Solicitação: ${WKNumProces}

+

Chave NFe: ${chaveNfe}

+
+ +

Clique no botão abaixo para acessar o processo:

+ + +

+ Se o botão não abrir, copie e cole este link no navegador:
+ ${linkSolicitacao} +

+ +

+ Este é um e-mail automático, não responda. +

+
+ +
+ © Ginseng +
+
+
diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/tpl_entrega_realizada.html b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/tpl_entrega_realizada.html new file mode 100644 index 0000000..108b3fd --- /dev/null +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/tpl_entrega_realizada.html @@ -0,0 +1,44 @@ +
+
+ +
+

Transferências Ginseng

+

Notificação de Processo

+
+ +
+

Entrega Realizada

+ +

Olá,

+

O motorista ${motoristaEntregaNome} entregou a mercadoria na data ${dataEntrega}.

+

Quem recebeu foi: ${nomerecebedor}.

+ +
+

Nº Solicitação: ${WKNumProces}

+

Chave NFe: ${chaveNfe}

+
+ +

Clique no botão abaixo para acessar o processo:

+ + +

+ Se o botão não abrir, copie e cole este link no navegador:
+ ${linkSolicitacao} +

+ +

+ Este é um e-mail automático, não responda. +

+
+ +
+ © Ginseng +
+
+
diff --git a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml index fe18df6..fb7abe7 100644 --- a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml +++ b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml @@ -8,10 +8,10 @@ Este flow permite abertura de solicitação de transferências automatizadas, informando qual item será transferido e direcionado para as aprovações corretas. true false - Fluig teste + Default Transferência - Usuário - <AssignmentController><User>projetos</User></AssignmentController> + Grupo + <AssignmentController><Group>CD</Group></AssignmentController> 0 0 0 @@ -29,11 +29,10 @@ 1 Transferência Ginseng - 46 + 65 590 - 0 true true false @@ -127,8 +126,8 @@ true true false - 490 - 281 + 500 + 280 0 0 false @@ -179,7 +178,7 @@ true true false - 490 + 500 490 0 0 @@ -232,7 +231,7 @@ true false 1170 - 270 + 284 0 0 false @@ -283,7 +282,7 @@ true true false - 1410 + 1400 479 0 0 @@ -319,8 +318,7 @@ false 0 - Pool Grupo - <AssignmentController><Group>Motoristas</Group></AssignmentController> + 1 false false @@ -439,7 +437,7 @@ false false 1600 - 260 + 284 0 0 false @@ -541,7 +539,7 @@ false false 1660 - 260 + 284 0 0 false @@ -598,8 +596,33 @@ 0 true - 1430 - 250 + 1420 + 268 + false + 1 + 120 + 0 + 0 + + false + + + + 1 + Transferência Ginseng + 1 + 107 + + Validar rota + Validar rota + false + false + false + + 0 + true + 520 + 663 false 1 120 @@ -778,8 +801,8 @@ false false false - 1780 - 280 + 1777 + 300 0 0 false @@ -803,7 +826,7 @@ 1 Transferência Ginseng 1 - 46 + 65 2 hAPI.getCardValue("gestor_cce") != "" @@ -817,7 +840,7 @@ 1 Transferência Ginseng 2 - 46 + 65 2 true @@ -831,7 +854,7 @@ 1 Transferência Ginseng 1 - 46 + 65 46 hAPI.getCardValue("validacaoItens") == "entregue" && hAPI.getCardValue("dataEntradaNfeConsulta") != "" @@ -843,13 +866,69 @@ 1 Transferência Ginseng 2 - 46 + 65 46 true 24 0 + + + 1 + Transferência Ginseng + 1 + 65 + 107 + + hAPI.getCardValue("ufOrigem") == "AL" + 31 + <AssignmentController><Group>motoristaAL</Group></AssignmentController> + Pool Grupo + 0 + + + + 1 + Transferência Ginseng + 2 + 65 + 107 + + hAPI.getCardValue("ufOrigem") == "BA" + 31 + <AssignmentController><Group>motoristaBA</Group></AssignmentController> + Pool Grupo + 0 + + + + 1 + Transferência Ginseng + 3 + 65 + 107 + + hAPI.getCardValue("ufOrigem") == "SE" + 31 + <AssignmentController><Group>motoristaSE</Group></AssignmentController> + Pool Grupo + 0 + + + + 1 + Transferência Ginseng + 4 + 65 + 107 + + hAPI.getCardValue("ufOrigem") == "" + 31 + <AssignmentController><Group>CD</Group></AssignmentController> + Pool Grupo + 0 + @@ -913,12 +992,12 @@ 1 26 - + Ajuste realizado false 24 18 - + Ajuste de transferência false false 0 @@ -947,12 +1026,12 @@ 1 47 - + Confirmar recebimento false 18 46 - + Confirmar recebimento false false 0 @@ -1015,7 +1094,7 @@ 1 85 - Produtos entregue + Transferência entregue false 57 18 @@ -1025,23 +1104,6 @@ false 0 - - - 1 - Transferência Ginseng - 1 - 95 - - Enviar para coleta - false - 68 - 31 - - Enviar para coleta - false - false - 0 - 1 @@ -1066,12 +1128,12 @@ 1 98 - + Pedido coletado false 31 57 - + Entregar produto false false 0 @@ -1144,9 +1206,292 @@ false 0 + + + 1 + Transferência Ginseng + 1 + 108 + + Enviar para coleta + false + 6 + 107 + + Enviar para rota + false + false + 0 + + + + 1 + Transferência Ginseng + 1 + 109 + + + false + 107 + 31 + + + false + false + 0 + + + + 1 + beforeTaskSave + Transferência Ginseng + 1 + + function beforeTaskSave(colleagueId, nextSequenceId, userList) { + try { + var currentState = parseInt(getValue("WKNumState"), 10); + var completeTask = String(getValue("WKCompletTask") || "false"); + var nextState = parseInt(String(nextSequenceId || "0"), 10); + + if (completeTask !== "true") return; + + if (currentState === 6) { + // Fluxo de cancelamento saindo da atividade 6 nao deve disparar template de nota emitida. + if (nextState === 97) return; + enviarNotificacaoNotaEmitida(); + return; + } + + if (currentState === 31) { + enviarNotificacaoColetaRealizada(); + return; + } + + if (currentState === 57) { + // 61 = cancelamento no diagrama. + if (nextState === 61) return; + enviarNotificacaoEntregaRealizada(); + } + } catch (e) { + log.error("[Transferencia.beforeTaskSave] Erro no beforeTaskSave: " + e); + } +} + +function enviarNotificacaoNotaEmitida() { + var envio = montarContextoEnvio(); + if (!envio.ok) return; + + var params = buildCommonParams(envio.processNumber, envio.chaveNfe, envio.processLink); + notifyTemplate("tpl_nota_emitida", envio.destinoEmail, envio.requesterId, params, envio.processNumber, envio.processLink); +} + +function enviarNotificacaoColetaRealizada() { + var envio = montarContextoEnvio(); + if (!envio.ok) return; + + var motoristaColetaNome = safeTrim(hAPI.getCardValue("motoristaColetaNome")); + var dataColeta = safeTrim(hAPI.getCardValue("dataColeta")); + var motoristaEntregaNome = safeTrim(hAPI.getCardValue("motoristaEntregaNome")); + var tipoMotoristaEntrega = safeTrim(hAPI.getCardValue("tipoMotoristaEntrega")); + + if (motoristaEntregaNome === "" && tipoMotoristaEntrega === "mesmo") { + motoristaEntregaNome = motoristaColetaNome; + } + + var params = buildCommonParams(envio.processNumber, envio.chaveNfe, envio.processLink); + params.put("motoristaColetaNome", motoristaColetaNome); + params.put("dataColeta", dataColeta); + params.put("motoristaEntregaNome", motoristaEntregaNome); + + notifyTemplate("tpl_coleta_realizada", envio.destinoEmail, envio.requesterId, params, envio.processNumber, envio.processLink); +} + +function enviarNotificacaoEntregaRealizada() { + var envio = montarContextoEnvio(); + if (!envio.ok) return; + + var motoristaEntregaNome = safeTrim(hAPI.getCardValue("motoristaEntregaNome")); + var dataEntrega = safeTrim(hAPI.getCardValue("dataEntrega")); + var nomerecebedor = safeTrim(hAPI.getCardValue("nomerecebedor")); + + var params = buildCommonParams(envio.processNumber, envio.chaveNfe, envio.processLink); + params.put("motoristaEntregaNome", motoristaEntregaNome); + params.put("dataEntrega", dataEntrega); + params.put("nomerecebedor", nomerecebedor); + + notifyTemplate("tpl_entrega_realizada", envio.destinoEmail, envio.requesterId, params, envio.processNumber, envio.processLink); +} + +function montarContextoEnvio() { + var requesterId = safeTrim(hAPI.getCardValue("requesterId")); + var requesterMail = safeTrim(hAPI.getCardValue("requesterMail")); + + if (requesterId === "" && requesterMail !== "") { + requesterId = findColleagueIdByMail(requesterMail); + } + + // Prioriza email explicito salvo no formulario; fallback para email do colleague. + var destinoEmail = requesterMail; + if (!isValidEmail(destinoEmail)) { + destinoEmail = resolveEmailByColleagueId(requesterId); + } + + if (!isValidEmail(destinoEmail)) { + log.warn("[Transferencia.beforeTaskSave] Email do solicitante invalido. requesterId=" + requesterId + ", requesterMail=[" + requesterMail + "], destinoEmail=[" + destinoEmail + "]"); + return { ok: false }; + } + + var processNumber = safeTrim(getValue("WKNumProces")); + var chaveNfe = onlyDigits(hAPI.getCardValue("chaveNfe")); + if (chaveNfe === "") chaveNfe = safeTrim(hAPI.getCardValue("chaveNfe")); + var processLink = buildProcessLink(processNumber); + + return { + ok: true, + requesterId: requesterId, + destinoEmail: destinoEmail, + processNumber: processNumber, + chaveNfe: chaveNfe, + processLink: processLink + }; +} + +function buildCommonParams(processNumber, chaveNfe, processLink) { + var params = new java.util.HashMap(); + params.put("WKNumProces", processNumber); + params.put("chaveNfe", chaveNfe); + params.put("linkSolicitacao", processLink); + params.put("link", processLink); + return params; +} + +function notifyTemplate(templateCode, destinoEmail, requesterId, params, processNumber, processLink) { + var NOTIFIER_SENDER_USER = "admin"; + var recipients = new java.util.ArrayList(); + recipients.add(destinoEmail); + + notifier.notify(NOTIFIER_SENDER_USER, templateCode, params, recipients, "text/html"); + log.info("[Transferencia.beforeTaskSave] " + templateCode + " enviado. processo=" + processNumber + ", destino=" + destinoEmail + ", requesterId=" + requesterId + ", link=[" + processLink + "]"); +} + +function buildProcessLink(processNumber) { + var BASE_URL_FALLBACK = "https://comerciode188007.fluig.cloudtotvs.com.br"; + var baseUrl = safeTrim(getValue("WKServerURL")); + var companyId = safeTrim(getValue("WKCompany")); + if (baseUrl === "") baseUrl = BASE_URL_FALLBACK; + if (baseUrl.indexOf("http://") !== 0 && baseUrl.indexOf("https://") !== 0) { + baseUrl = "https://" + baseUrl; + } + if (baseUrl.charAt(baseUrl.length - 1) === "/") baseUrl = baseUrl.substring(0, baseUrl.length - 1); + if (companyId === "") companyId = "1"; + if (baseUrl === "" || safeTrim(processNumber) === "") return ""; + return baseUrl + "/portal/p/" + companyId + "/pageworkflowview?app_ecm_workflowview_detailsProcessInstanceID=" + processNumber; +} + +function findColleagueIdByMail(mail) { + var email = safeTrim(mail); + if (email === "") return ""; + + try { + var cMail = DatasetFactory.createConstraint("mail", email, email, ConstraintType.MUST); + var dsColleague = DatasetFactory.getDataset("colleague", null, [cMail], null); + if (!dsColleague || dsColleague.rowsCount < 1) return ""; + + return safeTrim( + dsColleague.getValue(0, "colleaguePK.colleagueId") || + dsColleague.getValue(0, "colleagueId") || + dsColleague.getValue(0, "login") + ); + } catch (e) { + log.warn("[Transferencia.beforeTaskSave] Falha ao buscar solicitante por mail: " + e); + return ""; + } +} + +function resolveEmailByColleagueId(colleagueId) { + var id = safeTrim(colleagueId); + if (id === "") return ""; + + try { + var cActive = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST); + + var cId = DatasetFactory.createConstraint("colleaguePK.colleagueId", id, id, ConstraintType.MUST); + var byId = DatasetFactory.getDataset("colleague", null, [cId, cActive], null); + if (byId && byId.rowsCount > 0) { + return safeTrim(byId.getValue(0, "mail")); + } + + var cLogin = DatasetFactory.createConstraint("login", id, id, ConstraintType.MUST); + var byLogin = DatasetFactory.getDataset("colleague", null, [cLogin, cActive], null); + if (byLogin && byLogin.rowsCount > 0) { + return safeTrim(byLogin.getValue(0, "mail")); + } + } catch (e) { + log.warn("[Transferencia.beforeTaskSave] Falha ao buscar email do solicitante por colleagueId: " + e); + } + + return ""; +} + +function isValidEmail(email) { + var v = safeTrim(email); + if (v === "") return false; + if (/\s/.test(v)) return false; + + var at = v.indexOf("@"); + if (at <= 0 || at !== v.lastIndexOf("@")) return false; + + var dot = v.lastIndexOf("."); + return dot > at + 1 && dot < (v.length - 1); +} + +function safeTrim(value) { + return String(value == null ? "" : value).trim(); +} + +function onlyDigits(value) { + return String(value == null ? "" : value).replace(/\D/g, ""); +} + + + + + 1 + onNotify + Transferência Ginseng + 1 + + function onNotify(subject, receivers, template, params) { + + log.info("===== onNotify GLOBAL ===== Template: " + template); + + var validos = new java.util.ArrayList(); + + for (var i = 0; i < receivers.size(); i++) { + + var email = receivers.get(i); + + log.info("Receiver original: [" + email + "]"); + + if (email && email.indexOf("@") > 0 && email.indexOf(".") > 0) { + validos.add(email); + } else { + log.warn("REMOVIDO EMAIL INVALIDO: [" + email + "] TEMPLATE: " + template); + } + } + + receivers.clear(); + + for (var j = 0; j < validos.size(); j++) { + receivers.add(validos.get(j)); + } + + log.info("TOTAL FINAL RECEIVERS: " + receivers.size()); +} + 1 @@ -1154,54 +1499,54 @@ Transferência Ginseng 1 - function servicetask99(attempt, message) { - try { - var validacaoItens = safeTrim(hAPI.getCardValue("validacaoItens")); - - // Só precisa consultar entrada da NFe quando o recebimento foi validado como entregue. - if (validacaoItens !== "entregue") return; - - var dataEntrada = safeTrim(hAPI.getCardValue("dataEntradaNfeConsulta")); - if (dataEntrada !== "") return; - - var chaveNfe = onlyDigits(hAPI.getCardValue("chaveNfe")); - if (chaveNfe === "") { - log.warn("[servicetask99] Chave NFe vazia. Nao foi possivel consultar entrada."); - return; - } - - var cKey = DatasetFactory.createConstraint("key", chaveNfe, chaveNfe, ConstraintType.MUST); - var dsNfe = DatasetFactory.getDataset("ds_fiscal_invoice_by_keys", null, [cKey], null); - - if (!dsNfe || dsNfe.rowsCount < 1) { - log.warn("[servicetask99] Dataset sem retorno para chave: " + chaveNfe); - return; - } - - var dsSuccess = safeTrim(dsNfe.getValue(0, "success")).toLowerCase() === "true"; - var dsUpdatedAt = safeTrim(dsNfe.getValue(0, "updatedAt")); - - if (dsSuccess && dsUpdatedAt !== "") { - hAPI.setCardValue("dataEntradaNfeConsulta", dsUpdatedAt); - log.info("[servicetask99] Data de entrada atualizada automaticamente: " + dsUpdatedAt); - return; - } - - var dsMessage = safeTrim(dsNfe.getValue(0, "message")); - log.warn("[servicetask99] Consulta executada sem data de entrada. message=" + dsMessage); - } catch (e) { - log.error("[servicetask99] Erro na consulta automatica da NFe: " + e); - throw e; - } -} - -function safeTrim(value) { - return String(value == null ? "" : value).trim(); -} - -function onlyDigits(value) { - return String(value == null ? "" : value).replace(/\D/g, ""); -} + function servicetask99(attempt, message) { + try { + var validacaoItens = safeTrim(hAPI.getCardValue("validacaoItens")); + + // Só precisa consultar entrada da NFe quando o recebimento foi validado como entregue. + if (validacaoItens !== "entregue") return; + + var dataEntrada = safeTrim(hAPI.getCardValue("dataEntradaNfeConsulta")); + if (dataEntrada !== "") return; + + var chaveNfe = onlyDigits(hAPI.getCardValue("chaveNfe")); + if (chaveNfe === "") { + log.warn("[servicetask99] Chave NFe vazia. Nao foi possivel consultar entrada."); + return; + } + + var cKey = DatasetFactory.createConstraint("key", chaveNfe, chaveNfe, ConstraintType.MUST); + var dsNfe = DatasetFactory.getDataset("ds_fiscal_invoice_by_keys", null, [cKey], null); + + if (!dsNfe || dsNfe.rowsCount < 1) { + log.warn("[servicetask99] Dataset sem retorno para chave: " + chaveNfe); + return; + } + + var dsSuccess = safeTrim(dsNfe.getValue(0, "success")).toLowerCase() === "true"; + var dsUpdatedAt = safeTrim(dsNfe.getValue(0, "updatedAt")); + + if (dsSuccess && dsUpdatedAt !== "") { + hAPI.setCardValue("dataEntradaNfeConsulta", dsUpdatedAt); + log.info("[servicetask99] Data de entrada atualizada automaticamente: " + dsUpdatedAt); + return; + } + + var dsMessage = safeTrim(dsNfe.getValue(0, "message")); + log.warn("[servicetask99] Consulta executada sem data de entrada. message=" + dsMessage); + } catch (e) { + log.error("[servicetask99] Erro na consulta automatica da NFe: " + e); + throw e; + } +} + +function safeTrim(value) { + return String(value == null ? "" : value).trim(); +} + +function onlyDigits(value) { + return String(value == null ? "" : value).replace(/\D/g, ""); +} @@ -1210,7 +1555,7 @@ function onlyDigits(value) { FFFFFF 794 - 1791 + 1861 20 20 Solicitação de Transferência @@ -1226,7 +1571,7 @@ function onlyDigits(value) { 82b0b7 198 - 1761 + 1831 50 218 Gerente de loja @@ -1242,7 +1587,7 @@ function onlyDigits(value) { d0daae 198 - 1761 + 1831 50 416 Logistica @@ -1258,7 +1603,7 @@ function onlyDigits(value) { d6e0d0 198 - 1761 + 1831 50 20 Analista de suprimentos @@ -1274,7 +1619,7 @@ function onlyDigits(value) { adc9ac 200 - 1761 + 1831 50 614 Motorista @@ -1295,7 +1640,7 @@ function onlyDigits(value) { 1 Transferência Ginseng - 46 + 65 5 1 @@ -1306,7 +1651,7 @@ function onlyDigits(value) { 1 Transferência Ginseng - 46 + 65 5 2 @@ -1317,7 +1662,7 @@ function onlyDigits(value) { 1 Transferência Ginseng - 46 + 65 7 1 @@ -1328,7 +1673,7 @@ function onlyDigits(value) { 1 Transferência Ginseng - 46 + 65 26 1 @@ -1339,7 +1684,7 @@ function onlyDigits(value) { 1 Transferência Ginseng - 46 + 65 61 1 @@ -1350,37 +1695,17 @@ function onlyDigits(value) { 1 Transferência Ginseng - 46 + 65 85 1 1149 308 - - - 1 - Transferência Ginseng - 46 - 95 - 1 - - 543 - 717 - - - - 1 - Transferência Ginseng - anexo_lista1 - - Nome do arquivo - 1 - 1 @@ -1388,7 +1713,7 @@ function onlyDigits(value) { centroCusto Filial Destino - 2 + 1 @@ -1397,6 +1722,15 @@ function onlyDigits(value) { dataAbertura Data de abertura + 2 + + + + 1 + Transferência Ginseng + dataEmissaoNfe + + dataEmissaoNfe 3 @@ -1421,9 +1755,9 @@ function onlyDigits(value) { 1 Transferência Ginseng - userSolicitante + requesterName - Solicitante + requesterName 6 @@ -1446,7 +1780,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 65 4 approval title @@ -1456,7 +1790,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 65 4 approval description @@ -1466,7 +1800,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 65 4 approval highlight @@ -1476,7 +1810,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 65 4 approval approve @@ -1486,7 +1820,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 65 4 approval reject @@ -1496,7 +1830,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 65 6 approval title @@ -1506,7 +1840,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 65 6 approval description @@ -1516,7 +1850,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 65 6 approval highlight @@ -1526,7 +1860,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 65 6 approval approve @@ -1536,7 +1870,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 65 6 approval reject @@ -1546,7 +1880,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 65 24 approval title @@ -1556,7 +1890,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 65 24 approval description @@ -1566,7 +1900,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 65 24 approval highlight @@ -1576,7 +1910,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 65 24 approval approve @@ -1586,7 +1920,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 65 24 approval reject diff --git a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.png b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.png index 1ea384d6eb203407e317376eb4af22b5b245f327..d5bc181d6cf4de942b855d1262a31021eac14646 100644 GIT binary patch literal 50256 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¬UDtyR6lc1gThDTepb^|8!hB0Qr6-A5_vSXiD_mB z1MbHF)F9cj?|%;!UdNQAytCaHXB9F3O;OtJ`M#_%|fw+YduKmMD0ot_cK?cIf+PM=F08j)u8+-LE z*e!-7!>e*^;C?~v~R z!bl1U2n!2v`6EAqQ@k*RJS=Uf`f6B0c3WyX%xgPrs_hE zrxei!zsyi|7>?vg%=I0O(Nj=nf%5tx=16_dX1qT9yZu%noe$l3iz?wK=hK#7P0mcmwnfWbQY9q3meR~nZeJufX`V603Ai`>5f zl}EvrpM|>Www0LLEbPfO6rx^}`CG5u{SKX%<~YsxRtUO$-5^c6Hsuyg?R$9K5Ahz( zB)5TijNJk6U7O21;We(P;pVYSv@F5Vj8h5$p|sbBt-8zm-ebq=*2AaCIgA&_B^Fr7 zfL_PBPvk~He5ckm#{0piwkYQ?Nk#Om!R+@UDTAJ%L>(*s6w0`#E?cSUmlHlBp;@wb z;?wXwxvU+l)p(W)_Xp%Jg?*6qY-*jp#b1@KesTvP-hX|+go05;>i!e*loQmiweJ>N z+d-Zu6*Rh+bB?4)_tK309DqpAjIDKIpD?kB1MJWQP?EVgv%E#dQEedT!r#

R2N` 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

`cr34hiHiOE@5?K>B?iWhoUSq) z?XpXK=7-zAwd%TRurkpUYKB$6lCijbK*Yh4Wi2>d%TcHVZ#e09iATY~wm{{t$ z?n8nVP0L(Qf5XJf^}4kn?X%J>x0~LEDc&-ObA7E@3w6}0)}Kfa2jqOa;10s^;z`6zoRwIhR-jl!B@U&sWUP3M6IW4-_i}Hpo$DNaEW`L{ue;c-F>^+ z#2M|-7O8t0f-dVKsVL`f@SNL9PyADFIS70NUG{96M?wSZpyK_x0tQP`%f(_8FaQUL?V(*2|Xf#I6YeF1xke!#uvcLB+`US0jX%$~TF7x`x>CvhIigdylHJ#elq?<5za z2>liypW=ns4Q*vyVYZ7MURKiim>Y3=lKk$O!~A`cJc7pkdfjOvN{21~;l$fRLM$fV zGi?8id7qhA1g3|<_HQ@vDjSwfb)1&$A@;Vlje78^qF^xku-}lNp&YJZG}u1=d#^Dt znD9%mbo8ll?a(_AIUpw`tR$*25^dS4=_(-T={&wBu6ysImrTutyZVw3+mcnV(`oE6 zKMFd(1~M$8e1s@K0W?qMi%z?v9zoXeDZYoZ-{C8~#5)#hnKiDW#T^EF4U1Mf-jIfj zAhH9ar}Z_A@$4T8H0&khzO<+6T9}K)#twB1r0i7a{%N__?o@KnI!wD5#*X3Mg_S%9 z$n+p-%EA4vI(_{#FkmFymZhD&zWzKL5!@n8l5t$9VU#=0fY#R5t}}TuQ`b8&WE20w z86q#ARUcs-9{uJ`pK5P@ibajrVR`ujCQm*`XsiI7LgLpmgLd!az5hkPO$8>5-Qb7m z={;@didE0DdmTnmFDQmxT`>Fnl9Mn4_}o=u2})gZ?A7x_MJa>T)i=nlblL`+A&NS{ zNb1WUJs&JYs*AtW=OdU53U3`-J5S*!FEg>MqHhnA4#mOEw;tgRs#ob zx8P(S_jX9H7ZJ=rqvcq%QFn~NfLNs67MF&+=I_Tu7dV;S7-@jtlG?XZSp28z?gunO zJkPMCu-p?~7^L_%ESwWiwnoNCUj?7V^@Ub(dpsI#B)#B6r|qee{3f?P?^mj?ug{Yf zB?z(NKV53a-~6e}mxQlkYpwO?<)vw0s7*qzg)mC0{01&&!xbh1j!~MmYoue@4=oZ; zPo4T%LHQYN6Mh)`RtvtTjA-97`xz6Sq(GtY!_!o~W5}6Yvq<0P&!0zdX^07`X=#!d zIy3DNLCZuOZ1T%>)ett>@yWIn6O*c^d+pKWx*Yw2KYBvn9G1o;y!LrpFT#_d7VG)Y zT&%H`o){b)71|F`Jq0@}BjGgNNuQA8@ukciryF>9&>@9Wqk;ZES`>b{@g3z_m66NU zuFeQQX+H?n480s=uRFB6LyA-F!$y5TFMu;DS=P(gm+rTwsl6FJ*fr#FIoRBQ&sqbv z_S1_Cq3Tmu5cIgXii%2!?a&;w>9wG*W81Tpy^LNm_WL5EV3y|Q1p-w<4Ob^Vc^dUFI+vYzpog*RGIuWwi*J8h{d!B<+ni1mO zb`%Hq4%`jkQfYY_|7NRhef?vgL(f$|HBlmZW9m~Y?O3KQu2@u5v`$U9Ek%(LZeeC5 z3U(NbeuGMCEViZ3kX0=+l1<_qpTsmY1QEgL zTq=?L;CDtdG_P7!I z_qvf~y_S!QFtV+;>5WgNCmt~pH#cuB^PtRK4Yx4387n6H4w^LHdg27qzONnH!~_h$ zxGlqjkp<>u#kQ=E26FNe&Xf{HYLKdlzUsGXhU35dC*nV+4%8}Qm(M&uaP^K_0&}oC zAg`lB6F@8crow-^5T2v2wLV(qN9bK%nMf2jPfJfn#Nq&RD|OUDxe=FV`!1O8%VQPk z_#hI5HHW4dU(3WcD#6;OH8uyJ)K!)^k6)Vs!nsh7+cO;JS0l@PNR`FMDk z>I=HqTJe4-vb*gh?vCjfx~eGZ`6lwdzBCOvOAw;<^XCJbQXV(P!0gNG zBeYu6)b=bgnsvp%QV^hyx^)ODfr*(Yy@Ljb`@wOi0R<2IJ7BCF4TD3?U1QMifKN60P)j&h`bU?}y5bI&;-y!y7Br1kp4YU-l z&lqLRI~MRLDdyt8ra*)sHG(t%b!0u4jXpg5TsD!g*0l^_fG_(d&4eq4`D%WcLNBy1 zH}dPfzduyz!xmdk4Ub}kqKaedMTG9iV{tSN-)~>F7}(pYnBdvWWdI{uKt+vmDn06(fv1DYIMQ}dc-(Xuj-hs?qr+y2F944^V5>hki- zUq7b@$C@OUdjbH_XW~i1=P&78XoC zKd`!&AZ^q4G8qb{C4baj&&r-Kvq*%LPXq+keUyGXf5Q$REsU&;xw5###;7{m`}y)) zYnbrF*hB}^TbygsU^BD;8m>e6u;S~pIl_pYOvNs#qvXCdkKwV;~^&N6Zi*q>1dI^Y*AG*?u?0Q&n05xlXcwnRr7=~)_{LN_KVcnpcj`(Y$ z+CW3Osamt3#WB;Az$kTe9BdAGuSI}*PiVCB27`TmrHjZq~-g;Pq*dje}<)gY&ZI?CBE^G%dwuerXqf{D2Rwr_^G zw>N3Tk{-ivfcBszoacZ$-m&MvL>mTxO?<(~%CJta!ZzO}$rGJ*z`);)Gc?YFyY9qO z$F$144FSxX64?-^wok|mzy2wbcF#! z{j#JH2q$Ma(x|U*U>AWHKaYhuPsbm@e8YP&%B^N_ai$7KDk;U5!&)mx{68{(g*L<~ z0~r9IOj}tDT#^Ffx3t|mjv20Q+wXk*QZ3M3wCnMubB{oz-2V<;9tWVGd^3C0-m-%J z(LZKXI__G?GY+ulqF|+R!iS!6^K#TlWV?MHFmZyDT`M{kgk!vOci?mU$~P}YfJAwW zRP)hr3;8>ooJuBdk`|%_ZLK|bIWDP3)0P+Em%0-sz;CT7HA+ee=?MoF$A+t{rD4lR z>8aHj!{SHV`B%W%F3n)qt-m^7%a4vAw&l9wtQf0Hbo(|1;v* zAEy8~-gUhFw>YhOty;xccS(|z9;ce`6P&Eqden6i@7zEax2XkVi%`e7xBft1e4k{| z{r6yuvsGsP*J-7_@jmHYUgD`jk`mBZUpego?Rj5f(}$p&#SC>kZ z5XOG2Ax|g4W*yC3`FAYHU15EdO;)BRK+(z&;~Rmj=+SQ7#q{%l~eKtN@Y7m zPZ{a7d}Z4@OoXf-{>+ zLX2}}LqvA)J0xFc7HGFW(W<%DV zT?8PP4w1RhF+-i9uQe*5caxoHbN3_pY09#_-nrL$>|Y;g!!47%i%?=6 zup1SQNXJ$0iB19~RBcM-$mgE44T$&0rVnI@2z_<29Ltx`+(OfSFcNQAETd~oOQ_eH zh0Wh@DYl(biK0RH-+QlY;Ff1U&>oI{jdy5@*0pX8By}}LB-ml|xDw{=bH7$lk~`rq zB|-rAdRZ{DIEdYX-pIDoMX|+L;IjDqfaA9)?p;YdOc-<}4>0Svjt^(A{AFa$+a@q- z0ppwVQX#vu$QO-Y=cqs=j#f+&3G|{i9Cl47PS!Ui|C+w0FZu7hf=~tH*s?Z56vAub zotdY&wzSp^0hm}I;JYI5Gwo);4W8)iEY#d&GcIo3&3^C@z1Xbr6Vc1S&+?P*H$@@eWEr|%g{ID*)PPqz0$4z z)0b3#0(uscH|}m}6Ih=d7=HRQ1g(jH2?%E84qG?6q_{Ck6%-?o1rKZ9tS+;X2peh@ zH14{J%4z6$M@W<)ZEP`WgT2&%+^&+~IGU5~I~F<1YJXJ>^(|62`QDS4?ueH_CtE7@ z+=wUn{qr5HCbVV(_sYxX*|w}r7yxL@u}kw_a(G}Qp$HhR3=<=BA1CKuG;Tq`b6#f6 zE*19K4Fw=86QJfzQ0Do*+?ye9D*Yj`-6(30IE%_E7^TfG`5CopWEu-Ov>1B4X(<1a=8@kv`&dT+V6G8E_m?b8quET;yYmG)3sFs_hc=4$w0_T`*uftGz4r}7Ez zppvaS`ep+RRRSpa0ZnCr>;M+DY;4(&Be$5VjJ)?Npd1nNa>?xrs*c)FwNy z7dXPh8cWAs&m1|!4fgf6z8WY1fJ;qM$miz8t8&CbyPAYd7_uA74z$#(jmN*whi7@L zthl5ICidn>Of-v+8PJCP>go`eR0HoGQYP^JNFr|GTBUOImxr62u4N=Q&fxY$YHEH+ zi@?Ff9+;lz8;`ipXl=K^MvvI z+DC#mI*xK?lZ?^$%e8V{=;irqqdmQ=_3RYYHyk~4AmhtowCg0irqy*Nqvu$)HA)GFepED{I#&tW8% zIxz#Z5`dD>WJF0f7V3;UYtnOgF@46qw8*g4a}_O-mXJQwSmcAe{EV6&a{z*3bzRBR zOp)nG`|Rpo{io?@2d*Ui-(1-Qq0wh-HnASKFCI^v{SU_z?4+IbDmaH?JYu6Qy>sK` zG;;6{RR5|wO?ZMQeQ_uhzC$-`b5L)pl-z{|5Os50k)T4X*~2i=qYg{Bm!`(xeQsoU z{fg;GR|Hx_I{kH?n2vpEbbi&np_dWpnSHqXQ}=DP>eio9QWpMPsbHS~#-ZDQIlf$G z+}psY4C4te=-r0gLC=I0DCXcSK|^ZgEA%RTOvo@!uyVnLtW!>Xl~Xd~Q-ewmebkHX znVESGEq>INW7i@@kwIB))X_4{O>k~?LebwGM`cKreDQQlxP0bbPDh|cd8=T#;FoxX zFMk;$f?0di%XdU2)@i7BKih5o#OUP*!*Pmh7XD>>>82jK0!TPmwC<%{q+T3mlI z^4KK@RW`-Cho~CMzgcx!&!2paBr_ZYzn_#QkG5m?x z{2!ZDI=z`!(DiD}N0Jadafm(z2P%=tVSfIB0YJ8(A|UJj(*f8GR_hICUzqRkw22>} zmR|YYtOpJ#h&xJ%bci^ox%7z-se&{f$`b{_OJ!_91}|UMadLuN>~Hm6U_-g*b|$o2 z2b0EoVKvCn3%LckF65=xHl>-jC4tb|*!Tdm#HDbq1vVS$v8obpai0?fZfL6?qNL%|2oO({3R8w6`!_VLg4i2cFcwZ{SpMH*Drm=jj4_*P)8J z)d^Y;J3e|=%1`{{JWVCbetqfn0h*Eee6u9^<1W2(z8*fX_q@Cz(*v-&)xVX@hAbyA zt!_Onoqv56H@C7tuJs%)kIuhtd&4lzB@o}w0KJRpi8o-$O-~!8R65;&d!|czo`n;i z?8ycuc^`)9l?0t2Yg)D6j5~R@1%s5?FwV;-JGWpy`b-QGtbxie&8tX|=AeDt=iX7O znCNVZLX;6jll;Evt}~7?zi-lUR{FuaBAOCc;y})eQ*yt#1G05}bnsJ&;{g!w8s*hC8s5ryz-)bl0J)YuwIoTjIDDvdN)9quYI*Og z$py+%BH@V5%ASKRL)9dF4~8~f#D$?Sx|cq#KZtI`i2CF*dKDq1hZ*r0WYuTddA5F& zGW)#{v?uUOB)bhtPRU=jRLdtB%DykbAL-G-lVFz{CO--quL-Z1m(OT_-Q9@V!%OQ= zL<)DnTHJ?CXw6ovZ5IBX=Z56YQzxz(`KT6?JXRD=JiO@I;sDZs+PC@`&cmHq1V`EL z4m(@U#xm2kg|RVHpOw)&ncET?)DqE9+r*J8l_=|L8qc}(X0P*fYbHjIxUVP{F9@c- ztn^A*>U0USP5Ki3B@u5KgA9YZu2bu72NlKX)Jhj9m8i=!@T4breuf$Z?Jg<9s8p!L z0C53hKz8!&nFb4u0hemd#!GIEF6ogm{gvHVMT-8P9ar%OZmw%J*M`N1q~r{a)_IIK zy~uW2buk^?@=yZYLD}20bk-Bq7K^u4l~?aSXdext$cPUvm+Y&3D=|v|_^1`t!?Ko# z!jwEML*i5Kr=jT?$Q)$uROnMX;$bzXjlb|+gzGQ zyVK8*6beN)X8tOD;ke3HKKIFXr7uV>eJj#&b0Zh^Y-A8`GMUj7B$8P2HefFvHyF~T z943#``vxk%mA@F9k-hV==|P>sAE0d8jEdN^-Sba?R)oVk$g_8A;GLP2(%tkw?!oV! ze@*s5{*kEix4rtUJ$vq7=P##zv>Tip>rkG#H@~{qVv*D5tmhZ(;+wfVth`AYJTgh8 z9h<^*9$e9J(EcpkVa%~L3Mg2q2oYkfA_V1uayfzZn9E1Pn2}p4Z}6fZ*i`FdoEjD~ z@CMR;(BHL#hMsz+({ zK>s3wI!D;Bc(Im6?7yLCSSQVu^nmfM+e}B0CHuaLKSDHM_d^rRW1@`@Mrhs)W;%0s3E!L{3JO{C@X@_GYtm=@-dszGM7 zG4s4;Hqw4k5M4*_%eBN>he#dwE2l4f<3K-Pd zhJ8)rom2e-L#Zp4>3f%3o&Z|!cn=7C3q})OIs|g&g2*O^$Q|$K@a4I^;NVp}9g_=M z)blD-%zsqGpkX+JnM7XYT}{CUo)O^X*uR@UFk`QK)!69kBvTcJT$-8FmP3pzDT zZ#+k(gM+=5uV?0Daa)kjE?~2y$q^gq8W0 zP~a|NSc0FFLPUxBp<}S{_CFY_UtrUfTm@=^QIcIs7Jiwi1T9XlQ}p96y!SRy^$zzD z_18mQ=}L&&73Y$?k58~#q_`ZQAAhO46#msUl+ew)0%%lKquMYh0S#*YdcO zy0TU~x4*9Kd&P*PuUy^DXcBSFY;taIYCM);X<;D-amQ-69J(AM6O=(iGzTv;r}qf4|8i!O;E_==v)n~7K(6#a>DvsPT2zA<4%10(%%^XY2T zFVoN&$CYoi4IrU!4IkP2qabM0P;6Zy#bvLgzG7l$ z62Dx5khGF&B%orr>x3(s&Xnk*&B9nr*_&L9eU6)s9c|TIDA6z&zJ7ZgA%3MnF#V{b z2-*PkqRF^lP;juODY#Oh+jR^onMm7 z)u-<`*6+zAS%x{9-IG1j!zQ)VpF2KY*C5%QzWj8-(WlHU+bj{4Z@TMBk~uk%bNKpx z<_y(+A+Q&A(&@taK*tEYq~Ng7B+LV(zdoP&95S2Bj@0PUB^|F;JEL)w{f06O56kFM zH0ZCKm2G@UnO<;e_@*P8j>n-@8v!PE^5gYJ?pW9Gy3VdQ#feo0auUPb9GesZ?V_zJ@2Etj+e;0t`o}ub$r3*M8AN$gLU4#eQ+W{UTH! zon`9A()e7%wnwWd$MjiG-N2Q2BUI4>KYpypu%p@3)c;!xKi-4b{k2nEL;bGMhSj?B zjYr5qUfIsDjH4k4jkD1ME5|tm3*3DkOurKs9KZKO5B+J^6)|tC2Noil-0a41I{$9Q zu+=j5+})#)T0;Jtx_2|#u;Ao+@)`xxj<3Wi>8k_h9%&_%WEOnM_>6j8Y<=EK@lbPr z#dP)6>=#%In+H`Iq56aN==|LBa-aGm=dJ3(x?*$RNOh&}f7MXTfnc~2nX4~zQA<6Y zMv^mFU+Qi#?6O7@*ZqbVkLMhHNS-pkpd@l36qTvIh@0j%Z#-oo?ws`zLjmn7C(%-~ zmy(L>mAFFV$RfCkhvYX8$q=qlCYH+yvgM_o>DN9>(ByD9)|^+If09SuxlCvrDO%+= zt8^E=M!)#x9TzFrh?Y=39&6yAAo79Md^7a<_`!p=KCU=|fpd+xZkN>|zC(zv+=JHb z$nk8OPlO5C3Xc_S-6?zHnjC#1W(_h9HYjP4IkyaCXu$GG_lmVI7P#MB8K_DbKglAO zhq3OQL^X`Td>_8OT@U;++X{cW8TkNoy+(7M$dGvgu%-yHo~RG z#IAck%G6&U(Q*Hq6LWx_FD7+joNsjrhjO!BYZS5|d>n5+p$p9wr#9SVTzLh*tFOn@ zLg;EE^XSWr63#2W8=bvP@_r4706dU5uQhsaEGOl?&I)P%gj!v7$xOh+D>Z?fvw89r zpU0+SYC@kEwQ{Qz_W*M~8V0=ScDmh`2081|y7cn055*%Q&po@5Hr8d0{b6#|zL%8k zj_m52=1Y$^Ka0%0^lid-0g8b=Ab~+V?8fXquOBl!pbrGt7@SEgfYVioM0;*JXCR|U zsx*DnfluaB!q77ndo~lJlT*{#j5dAkwCQYoVa4LzuHh;LEjo=9Kp`&h(BFM{&k=`h z$_tSM4{&$mSJWUx!z*{S$er%DSlt_$-eu3VO^`j+!_&j)H;bzKjI%UC1t{<~#` zPP?3xbRrU&akX1hH_vF@ZTheevvW}H*$?i!{vUI19Tnvk{|gT)qM~Aw3MwihB~l_W zs0bp`3Jx_#=^VPtL>&o5X&8}~QaT1krCVBJ7#O-4ddPP_gK+em^WL@IwcdO0&&5B& z6MKL2^R4|zB_D_1vzPz&j&@n6yZxTX`)3^CPQ*4>jAJ>L+LYe&)ako@`>XHnXMZ(H znEr7q%jNQ===`SR-3h4}mDUR`^#vT`n3X+L6272=BxM)rbiCcrnzvT(wT0F5ZlB%O zfQ|IozZPn?VA0XM-eHEf&&}`HPYjxyC~$1!#e7$~D8^NVa2qWl?SJLX{l+(gy>J$x zC>pVxwzhX8;V_mSy%7|cr_`Cs(`Mt)x3FGjqB)pKsNghj7HOVw6e@5`jqVyYR#%uE zi$AVDdSg6GSgnJkv=IJs2kg2Ta0Ep*9VYHH`%l~x?8J@^zTB`&_jph*3CGT?$}e+@ zq%sO$$H|kYmzSijUl2mGskFv)cdNm_WAQwd+(iM$LjzxPS96*kD;&ZX4@q_f-_4(E zjx;(_;(Y=kj=-|aGVlp(Bs$yUJX~4bGuP(Z@GHi}&tI9P@@rL0v^T}~2UK;ua-gSs zdM$>o?U&@OuQWYHW!~@ll%S%s?)#=RY-~TWK|e2wH?1js$q1g665y1bz|E27pczSu z&ej~roKUc@OeVDYdZv%w5p=Rm%I3NM*{b*5h@am&>1|ZbXk-OTEVpxi5M7Q>$cG!=jgJE!PK2%!TR7Wpi z-J$&H-qy5le#dKP_{cHo*%ib`cWy3Q-7A`DFQPef(XEy^|G|wUR_0f4iu{C8FeHgO z&)ZjBjW8IVVzh1k+1b!4;wjkK+Cu?WU?3OHcMjW&U(G2yj`^vCzi4XweSHwu%go*>Nig zCO1D^43$>%S$>qtW8R^uZOGl+dKY!#jxnuS&L zaz;H6bNco3ZpQOzLAs8G^JceN{7)CKI{mdVTc3j?J#Xn{Kz3zV^)7Uxa#FEa&kZs< zsJ3AT8|JOjMKd%vYsFn47izANAqy+4-<3ooI#x`+bNHDBY2rKf3|X8Te5MwcHr&QH zvG``_IUN#Tse>-}71#(5;*LC`t51@OJL8_~QMl+_^NLZWYNUC?Ep$&P{Rbri>r&so z_Yp=PB}25bEJ#ZQ5$uGq-E`|c*_{jB9t9?C{---ZQ6PJ;FWNIX{EWOOJ?zkHrmX@&ke- zVrI7s@LkGka9jP@$O=AJrE%N4q&$qpBvZU@Iw{ikT>X9(-&E`RpKaQ+b6(-;r)jxG zk{5XsDy(^*n%{PmoQ8yYknnUiva5gfd*cXZ`e5OF)H$w{uz*sv?^~SgcIVC4>)tU^ zKtvM%XVSBcRJn|*PWrBCC#JL@P*@0l6*?pc;T z=}<9!v}53>c%L3Ivt7La$RRVo@ANoYm(sCN@x+gt)pPOfHIXYDe?e;EVb{vnq}%Zd zVoF0Dk=B#{sz%D=$BmD>+{zZN``$7l0V9cx{p-~nUdrgX63@8#k<$Zqqf-DIQW<@` zE`GmASJXmC=>evK#s0&G5AK6^L^R_R@j`C7c@wWZ*365QV5b5vlU=0;ipK(Oq+A!G zHx+eiqa`FK*30W!WqmHYzdrb>L)=~N%hkxj&oVkoEE5iO6`B@n9Rx9 zv8CL&r7tExrfw-@LKg_L)5}41iwxfvC`O6=wITRaDz3|UXjGn;Up6}Cr1uWk7k&c+ za-u~295yesl+E%PjoYMAl&^_tX1Gr60K?t>{f%$!?7yyb@SA~PspI|!+RU1JLp^(}2dBHuS0XbyCcG3lqZ;h~LhB`+uF#CvLsIMrHp9704zqvwXGVe6Gv zu%|P<^M1vE9QAAF@9wl1-9d)!|A7qt(lc_puhsNPyBhma{{f4E{wt2vCxjLbh=qBv zuB+wGMzQ}!!S5h2(Z;I0MtdK7Q%4-KBDa24?S3aV$a7`notp2L<{&?bg?CLw3u%Oc z&yE=MyQV}xNqOm?V)N`aRWk2{s5gFuzce%k2IwR^vE0|fbNbsIHz$I-p&79KZ`a3R zUpX}Pv+!HhoQxFFki;(hBIr5yVV6?>Yh^G8iFa)2e^u`n(02?fjc-@RL>uM@p)axD z(4;5qrdv`NWP`*6#Hvhy0^(e}>m*s;qsW%rZPN6vAiUZU?@`d*Gn14W3OTEzyI^o_ z5XTnB)4Ozsb4PNs;%$^>l$PdxbcJWhRJS%6k(Lj1o)9t-K8p^L9jWuy>gb`u?Unc? zL`(fAgqHorrkG1}ohlB`bL(0!i_~%Ue1EBv?|Lm!NHu40WS?22M;)1v6*t5Y>6Sj< z4M3hHemd?Yxz#Wt$ON3dp(q@tntktr&oC;`=IT7@k@Vu-woz;691-zX=Y_`jOpoD{ zk?(>OofGHV+-k=220KX;Y}&~<1*GVN;F^$zW$;u)UPr>m_J~4cd(RshHh#Wb7pL{r zg+|pd_`nd?Vro(UTlWkjtsu5wF-QDB5SJq-*H2*+F3!YZ0uq&N*XZ7eVTUbUBVSOF z6cb0Kx;eQ+5aQIMD%Fll4z`b(^@vOTLK-b+@gUZVV0l|weS=9$kpMYNHz zc+87y^vKWp15nhulz4H(mB=OF(SjG`CorSO_;W@|0+h04Mytm33flrpwZaMkX%bGV zcOPDBP}(RH72Q~8AHcPe?5alYHi6w6BUT$Fmi z<=yej!^2hk1Y|~OS>|P!tL7A{Y-CzZ6@++%Xz+f`!pVxM{%WGp`J5Aav4|mKx_EB> zMN^q9mmqg<9b3=ySM~5NL-4P`-ml1x`&&J&^8iG17aFK-6nRaA+i{8!+Hr#1OfE_5 zb%nwX<|}W{347*mc+C3owIbc^tG_>6p2;pnC+$8cIHjsSW?nq7wj%Gj4D0dU?=1;} zSd4r3KDt{UynZU@&kpfe{A~_H5m-HN5@X^cX?_sf84I+`P1>p~#Sc!451>`6{90Y# zzfb85eG*~+U@7P&Cs(x}fQzV&o`(kYX^g_(v*ke)aH&B;NRxgebv-)NFKHytImn|^ zdq_uUzK+xKF1>Jaawab&=cI4;B`=S@oI&K%gfUl5f{KRmuv2bx`RxM54sZEF4R>w5 zPCK#jW&1-O=S?NJX?*i;z(4Y0i5J&yiLJ2=4aJS7 z*2@PMuZ+aJ5%4f9H0y2(s}*0fGBH_sbzI#u^m3^%Lt{1zs(Gq|-z|57*TA52a4fAz z6KA$gG-yQbf*n#M3)c73eX1Z<5~%=eLrb%W_lQIp>66|~zcQpx^Lgxe_u8Xz-dE$t z{J3@b4HvqaaMpD^)M|zr%j*n5>2Yo^!+~je?|63NsET5IC|$OL-(jsWxNu!_I%>B2 zdFXOT>HFnVb0I=0wKA*t@cgLk_rj6x($;J0(TM;(X|Ny=CSk$478mEgG^Pbi_GSv1 z3Qqm4yM;hzmGIv4TtC3KKA$#D$oX5s6p$=RR;FipY%)K3_9aOK}B=t zW^KMn)Qh%>?_eVjJXv)!A%3(zs%wrY9MP_6%-7%zi`rYf|aLFcOeoI1%SRQByAL|clr}8L1c7Z=v{6tCEl=MffT+5f17GdI0*{m5JM=Q& zD!o`F$3(Gx|9B<+TZCKaNnaKEskh|Cb2-QEG_2r((DE0=wBN&ZuZX)>KGV>SO%n$G z&5&?s#qpAn=a^VFPIkn(F7Gz2Qom1Q-wfSQjmbt!nz>}Kge!hyonWcD)Don-9E4e` z$tFMIi2O076X=>U*G3O}S}l%-FWux4e^EOm35ylW`JHJHl+YGOh+jYDfe=4)4MfiU z%4UnkOp7y%b8IZMS$3Vd^3}Pv%`dR(^(An*=Y81+04l4MS5#9oHt)u2R}<&slDT3$ zlQYNc7Oav?1H{xf3~jQ$hf?&kB3qzAE>?d2r#lE5CD1rvuLRQJlTVM%eO;SFh3hG< z*>#c1!>+C7Z4egg3VU1$*dAAEd39bUyC>_}6I?tNo-=asYku&e1{KZ;GSYgmRP}a&}b^Pe0p4TH!C_?tRveWo@Th z8QCxKY$HC+V;*1+2RA=fNFTxtZ`W7Ry?dVpU$fKX85j^^mvx{oL9twxMnq*;aHV43 zg4bvpM3%B$ZQMt<)FmszouFJN{hWK)?imwpBNk%a2lK7InB-=JT!DC z$z^$Ju{ig`H|dr3rtL8z0maZK?V(C{x)tU2WwjinpuRfJq$(f~9$kAm+yDjukx32L zbDz(Om$K&a$L5pWHeMZ{2ots+OkolL8DB@drzZnTYSEl3$hlabJA+0&0T42p#rJI~ zib)`W+vo%WEBIu}gBY)dS+<%g9}c|frvXN{WHbV*41Wo4{RyExdpB3m<(Ye&bvj}- zLFRaE5wMg30-BfS)FrqGTACf};~9z;VZsxP0&!!arlvA}mIz#TUP`($@`3ZldLt5a zJ@U?SuUp9jJ7^2nN_KXUQf&9PKE5+kz?Z6No{K0hAf0Eyot!I+Nbeb;dNL>An{|Vp zQKL45UkCYM!r$7=hg%n=KszwS6pu=xCM}QDe26!)Ydp3pY~0m%J6}0P}j|GUvpNx&#E8L-cEUCrs&4(nFQ@bHN}Y0J-IqWS*{%rIQf` zB)%As?CpFv$3W#}{EKFEPj`89#V8lu_kdtUk6513xhC{n?rLnor0GU2DtUnyk)G=5 zDRK>~h#)^HXU)j|amhB$qmB5bF9xo*NvYXDVW+P{9@(E`hRUp*gf4*eT7U9oP2<$~ z(UW5_+=4e&qYX$VVQ)9izz+Fr#l2UwPd}R}oq>`BRD?u`TGwi;Wa%*!Ce5RTvcI&kiM+F#U7g-v{DT)yHnmhvq51AQD{enW& z)UnigWcgS}6@3mM64wAI;ww$>GMg`1eR31sVP=-1yIiScZnCm$mS)kO9&53(@QDSL zNkf8@U)p!>WDyB$YOB-oZ*O$BUoul)nes52 zZ7g}YTA-MHNivYjY6al?uvcXskToyJB#SwUZ)T5!=_jGB25Rw24 zim6fA347=dMV`OKO}|Jnji!)dzl6G=e0{CP+*pp|M8`r9GTV71(p5L?a%tXbim2_o z0&`kA^KNbH`4*QaXb&5|IU^dF$TN{vG^)@k&v)+ttGPDa!l$G`i9ESwa9}7#Ke*I0Ua0{IH@=;j z9i?@U_3Dg|ZTxM|MJm{)ouibkta7iv(k(nsv6dA?fyKYb%K&JySg#7Tjdx}yu4T35 zk6GDgF_nO{4+_Fq7zWr9M=`g@G+t@dZd8qJa*Yw6K1>?rvYc5@-w8_x$6SD-9VY}Ni+iG4aJnw|`PRP*O)LC$=)^y7kcT=6 zPQ|0sXue5At`(TF(bCZE#=+H^U=>IB>xdlU`L{&bcs)MdUXFypPSH~qUrCf7&D=;l zz1sch2!jgn;~$@Lv#QRG3XvhBBSp{Gij5cH3%~4s6X((DkDu$B?oATQGXp6A?d0Q9 z3ooqcH|mYTqr&MH3m$x)lc0i0aYF`|43|~Vd3pG|(h+f9);)UE5gQ9UBL%x)UQ&>q-UpuXGd+y=O?X_~hYy*j zL@+9h{!aiQ{7VBsbM2Y4frwS=HC}j`>V{hx6Tn+B}7O%*dAR1)lR)YH3m@bcpY7|%oksu+I7aA0C@cvGTKn7=o)GC z{!(nTE$zNY*Qis#pj})>=1UzfFwe2#YN&4R|j#Sh*hSca28ze2Fxp& zf)p;)t2FWRc3&u?sOBwFgyc=nwGW&P9nURAorWt!>LM<#P3(l}hk@rfO3wY<%Mod3 zS}&j^PSziATLSf?xGUslH4v!4z5tWHH|UD*^J?C8)VKgikl(yhn4_^?8TO=&9V(xac#T)A*fMACWNF zUpGOir3>Wfn$tXCu=9`}P`@d4HOoUse$YwJ`f$o1>Z;iR-~|477cdeq#a}|0qom6I z7Z}`^VIC{hq@4-jV{QE7;lPr?fVTzDwV6=wMPLsX#Rr}XrFmT9NcZ)n2NlfgI70l8 zjXnt$PFeIV`YD^YOU;3P9c-B)rmr75FyGp~vPFm;rFM&O05hHE$9M`2HV@H9YA}Js zfu_0sxcKnl&3dHTn;fI6Z$gU`5&z@F}d zjG1gCCj{mGKnXS$8X3c+Z5;>HRm~@+o0d>&Nu_b+OeRpn2@4hPyd@$H& zP-wsI%gyR_6nf(0a6Vlgktf8?O5$P8KbE{rl^5LITGfp!EImiOxi$rG6lBLh#_-7; zetIuv<;A0F6!Q$IApu^&q9_)Jkl|#ZjIC~%=KPZuNm~2j=1yKxUbb9%TJK&Wh23zX z_7Z^@Hsh&{y^6$!aS|u~yyZ_01zVFi2MqniIc#4XI;im<5(NZY|JCm_+!jdd3H5*Q zeYbC3->V1gFd<(a{&xexWfJV3LB8j^BaUq@cHbGa5{M2}H8hAb zms7)QPG7&GO~tWH4FgB#`jVHryz$`1{Vp!gNqqu0Y+8L0?5@AxJ_ARmamgtjOEVzl zr8YV#4jwwaMfoJBayPfhV%~FT&)!IDgB$e5IShAWKx2?b6656y6K`L+M!G&Io6A~W z-Wi7qiC#+}eC`%*lk0rE;_mCnLEQs%7x;V7yb@Z(a)bDO18llv{}$UWcJs4gRzAy% z@ph;GxHZ(0Xg+s(R;z4(I!^;?%sD@U+Q7Z@h`~t<12bCu;VH#^Us))MEXvz`f_3VX z!N}SHtCw4(Jw6reSMUBawvGX{-%y06G>n#K1j}ECXC`uuad3o+$hHy$c$vP1+5T`8 z50oHH1v)vZ!n!H&tb$Bzu@SgX6v55<=KGdVG7Gp)=6G6t*%YbI@=Rd7IM%YV^<+{W zD0x0h4CuBKb|`WMDeDg)nck1HgMEJrxg-xmQiq$Mec1^iyd}cLbEh`ZiaLB49L|5g zRBW)%md&A6sw>y*_f!o}+I2tenmj7~5YRUY5 z5T?I4wzbPY>@jeDX$I5h?wzzPF9`YaJU~=>&zA5&PUmk&U|i(1b~$x<*eMnN>hC>( z#h;d?2ZkP67nKjXjiyB7+)-zd|Ilc|WUUR5Z~J>2RJ9CgO2<$&C#F*Wlr*74yAjZ9 z!Qn3A_I*f__=ug!Yg5WAh!X!W)ryaEuJ!AX@ehGdbONYxiFi zZ!49GzfJFVzi*2RU$%_Aw0-CC3OCYg zv~2RWYykf@4g4ErPke(3RF_M)^a>dJ?^EHkIM>C;st{HX|K)a(s_|<|2YMIP-{-yn zVEyp9Z3_enLy7=vjTH1Am0UbbSGb~W2ija39d}AOLF!w*A!<5$`}HA@BYnifN?Uh@ zF?wDpTS`2gaG}iNOA2vkI@_C-hdE{qF%E^pj#U zg3WUBnQ2jGf2jD+lBHt)GNl8EfyW*}eiuV|AU_G96tI8*1ciN!EBI6JwqFfg&~)Hq z&h0&ML2jiqOY5+}|LcDK@D2Z3Uv)XRu0n5tgo@igq~&}Wn=ikIX$1f!|H1U5eRSoF za3THo0L=9QpSr!E>LG4P9UwUmpKsaQ?MtERw?9z+?@u5lgW3nS)Lyte!s`2Y6;GpM zF`e5aJL?wlKtH9|oh?x@2Nk}-ckc)ObrI;bIJPCm&wuGUMTutk(e*Kk67$V^7hZk* z{YSs~B?o3)ZAQ+(;+Y_NV|@|FS5TmG?B;Jj?+XXE{;r|fy|$hqb#@D`nAcq`7+PS^ z0H6U50G?Cutkrr?)K175PoDw;^asI#!c#!wzxCz@0JM;c-_)BorBf-P?~>I26NrIJ zC|HjoQPmsVMX6`oF7Tl1?cbN#UiRLzWr@L`cb?YBHy;#gTY${dCZU0q9sS@WiQ3DfYuFJ-%UqkNNVk!Zhctf^tb<~tP!ap>DI7_W8c;lsKaPm zIv}9jxlVkQQ8&rCeZ?xMEu&gueCH$vyi@;lH9$h7DuB_X=zP!=0(f=HwcVCp!|De5ccf`O^x#vR5!$7bo8;0=URp#ys zwog}8{>{E6h<%i_=_v#@{@+aT7()JV?F&2td5^P@_ZUFZr`0J$`#jEh{mM~7?!fO@ z9O9w}!{S&*{zG3V7&}72_O{w?I&yLmdifwRQgZNjD+33iC52tU%Cvo4>YsL+_cYyu z%lY*5cMt_h+4eGn(h%6dB9@IYMz;Fg-=y1+=wOD|;1wkK_mC4cyI9kr~ zFE>PC7_g8OhH-(EkKUhd9+D*-WBobmuRAGRe^bhm(R|-B*W^zR1az(!(m6`o(7F++ zqghaM7wQfZQdQNaImGnJKl!=MEdoeUo0Cq$6R)}H+>;A>@JB>Lq2l%ye&jltDTLlt z&B{py;KTacmTUim$B%>gx`V@H=!hU9|5E(>C8*V>QPgUl+}k4bxPn-i^+%Ko%<7|Q zv^AW%hl=7oD~J;T&ACi}2Bb&(UIWBmBJ+BM69#gHfVLG`kPevr?K6!)?7}YmuuF*w zq?43Dte(E~_UgnYLrZF3lYWnsgyAa#PkW2p=<|kD>D-5x20cVCj%?v33Mu&~<6$5P z2T+N!ZF9_8V)d4kSKO1#8xJhM7(4a+0F(|0WBkV!`1T^iZJSR4IDfjSTB-XoxsqI5 zRUJDecM*#Ag!${1K()-gBp0&-B)@<^2H{9qjNrl<3gEo{ai-FM%o3U6Z0<9I)a!*F zkSy+bAEBs-sOvwFDBoP6i$D}|l`|@&tr{Op5Hy1q}5a$ZD+;d*t|L>0NXIi@>Z8kaIO zQkC8D-Phv%yoEgXL>N!*4JdnbzKjV(fiHZ#<>R$Ii|Mvak;YfsX1nMu?45q!J9BJj ze@kbecK7{nq0OiZBG2=+ggG(cuX_Rg zYraLk%I9wEyh@;|I|({=zQ1D=J1I6r57GP&O@tZ+0SxK?95c!cdYkG*O;rs)%hk5e zcm4|60$Y?pO%w(LZ5o@9mty+}LkXm=tt>JIBX4U5;< zbL~pLxftz8Oy8|pd=!)pgKRQ{x;HKRo6@%TjC#GbES8$T;;F;D`1;y4DQJ_1Bcq75 zv~jLYul*3DUN?>FYCTA3D z&x~4oNhbacIUzcPv+_oKJW(v+5^l9lUC6hJB#18jOd*QHVZ1TgvXSjTM1Kz0y)x zNP2qIH)l7AK%T@!dXy!mjeqhlLc#he?%)sto3o`To0%3!nKb)2_P4~xHJFtQk5Tfb zUZA)HgcI0rqgOcxUpc}BBY%$@A>qhKTdRhTU0eN9?mg8gvZH9$xTLTE{IF1-FEaVM$o~Vc2p{&4J+b#cJ zH0kmsq)7lLx^>k*VZoV4eN0}IcokHr{>~g_Sj$(E8RmeWfs7MAEB|4w{S#J@&%dm# zs+%gyz!$JyM%BI*C7xvO$G?6lqWMP@E)4v(b!)o>uq|xBNaS!M3uf}K(cRsctjC0+DMQ*1p+51w&L!Vyyug2_ zfa8d0*0U8NFo6mQnr8o6+LCka)W$-a(vji7ob`qFoFWN@FfpkcL4my|5Hj}r%ocoKa7D|g_tLN2OVf-+rAw@1BmE$_9&Ei@6*1NYpae$D{1i< z>rt+Pi!oCyFjynFBp=kmrpPOYp&G)j*AP>G(ejcH=F;3xJ)F5AiCqSn#!ab7JOw`H zgIdOtpD*NEPyGe)ZeKqrRvJ4+*BqXawb=5o$wdo%8_6`Jwgbz(2&2VhSJ&t{ogJ`K z`+?im0l9a=+VCD=)oFG>2^`>SoRqf1y_V4U!IO@w*0*uPo&$8joWNj!Y$p&TkU9QH zDP^o1l15hrJHiDArG-)r6HcRLV*v0H4$^gq3M^fGU&OJQm8X!!m5uEYu)tDZDd-2Z zyWCMwQw_RmfDJR*^6m75BTgsg7D{hb_uSnmNO69tW-nTP0 z68TOcb0P;}{t>$E_pE{TP=wcw5f3u5^mNjoJPP9C;OO(B{63`UB&I%mc+JH9$RK%o zze6C~A9KIRVE~AD!a5!U7wy^|^e)J36_0c2xpuyu3RZErZMG~|l5Z&nREwrWvi|1W z%wk7MrJyd$F;pF*FLfY#fkp_8$+B8Z$|xHcXIF4* z^8vf^2U2kE3n?h2fb|6`Sh|{aJxkv*w&$o28udHLQ1lo%sAL&7ReKU{R=#4!;0K}$ zeIi(~vSJAVlDe;sj4&^5YYEirvDwE;?*hJ*4bnS(b>=>F3DSU@qUbi&rH{3m7t+*O z!H5$zSjRJ)GetvFvOQFU2QXNA$vl=nwVqb;^xx6}8hRfo_gFnUW=g-&@E>o$3Fds= zS*Q2Ni(-sB5UbA-Wmv(%1E-wa7QK#Dy<93_JNbyl%^Ohe$S=xCi!!aiS2TO5hQ4eH z((wUq-LOy@bdL{bUklk(f3qkgMJZRqr27A3RiOOl$X#C@k#&h2&0H=Z$f^oTFRB+f zh*R!vyI7}B?uMO`-y-9H{&?CSZ|mijbgpdm1qKo-?m)!bn6st@?H>DKQh~XVB4zW= z-#Dr&f71MM7g!@3GlqM2=?(fKSE+pi(yR3fJkwrNmtZgi(WRTQZHO9^fLP@Kzni_k zsmqjc9x71%JO$AcCavhlTHXd(e9JxM2{vcXeeVzWGc4TB4|d=(8y{_s$%L?oc)1dFS~Bwm?*kN_JIy?l9T++39cFB6Att zHuBPKraTK>Zabk~0iY@8yQ3tESZ&H$ZE`*C!(tiFIRHRaqM%7Wab#F@+)%{o@a?9L z*!1x4GPs3H0^#L5C`zo6obL3i+zEA|fFowYa}7z`VUpC{3mkfElS)g`DlB^l2^&kV zh3~904J<5l^o}Y!-W+J2P#6p?rkx+is>kZ2btzA3hR3I=2L^ySyD!QXqw~jQXp3oC zkRr@!HT;3ixJmOL7>!OD@zbz(EA6IR0}A-a z|HWwU@=QR^e%JK#v-Twk;qaOh3F!cNPl|N;v;AOw?rU>qz0G}FNkU7f24_-+4`MQw zN-}PiiO{k$wVj#o)x=uLwG_N5-N<3LYGb`_A#3K(&H93eVzI7*qVFfpj@9w!h>l}I zeMS@h_?vGch~cF)(g%nr=j6sE>l@CBiq6h+kvD$;!K7ON2DzyCgVuVkQ4@M>2oB$f ze}7a4#VBw$hg5gC>g~q;d31yrSIpFDuRSlV>EVS=s}_Bh?}}Jn>>AKFpNikhX3_v2 zIM6r6DDR+|iVxK`mL4iQU-{F0Dqg|Q3=AKBFHxNBNVz#L2CzT8^`Jm8e#oQBEg7zhZs(PyF1&c;jD8&%YF(Dl@AtMrKZWm~2$S&fv=&vJ3RRt!N3 zN4$!9Vj8%%>gOsf2PCVPp^v+0a>A!7qm#6f)wsB;H$MFJT7CT9-<-e|blVVGVM z&PAN$B3N|nl&F{gn0t3S1st$Qf^6Op(Zd}iI=?H`65;Z{ITFwsCCRIs~3?+9JF2)qYnu;~w9#iyHSUEMaS*AI2n#V6<{RJqd=_#e62RODrF znt54Kh|6?QfoN~sjum|m?*tS02}j6X~Y z|GpSNmv7ymRryRVhZkj20PiqOU1&WCWLZGWQT^xhVw}TlEzNlaQ_SU90Ul~uPbthLhPRo260jV&2qJ41~ijjQHs zB?7f1JxZV?0b(+oP96KW98tA)LddWt<@pRJ$XnhlI7g*)P^Ya;g~K+7E>$V4v@;d| zNz!GsU$`=^5v~makP&A0k3$=4wVSdtUG27Z(?tKyL2ag@gtPdZNscudzcupshqhsG5n zf9BJW4?fdwJ{e?QMM*{28S`7D|)rso_QI~y)C6^+3w6Z*xYXEQEZn(j< zl3!1h5302z@B7;;rriRW-wp8{Do&Oyg{O~ zW!#n28F&r_2EIANH1CUPyN*0(XyxNgZZ_%&&i|OG_iRD|J^MDzO?Pdq?0W38vcysK z<-x4_7~v%01i^=r#^ve}Q+}mmTyut8@umg(=DGNv_w30FahA9p%tggtM}W{GWJ^R| zv*OohF^+A>Nv!SsxuD?aKF3M@I~QOD+?B-RAVv*#LUx0Qpt)EZRi6(upEpCNbdE^k zW!D=R#~U1R2l?&3%Xsxs5HuB-tG81H6=+_XFP}s{+Ox*<82Ez*qu*=;6yt;f4`?F^ z>PK#e7q5slVhu@#KND^axftvIT*?o1*I*tYua^jzuHwHu4t!!}?e?J0o0GN$)O?04 z=webXi7T0%6+$b4Z-1}HOn%B1P^do^$b@j4VcXptQ&fEd1BRCFy@!{H)5C+Wd|7)$ zgKZZvsLHSAZR%{lWS9Vk(oUJDbD-NmJg$Q2mv$yj-mu63L0|V;!gOaDe)w{adR;e= z0bHuv{be&oXxQY`X+q@kVNnBtPdeQD4{RgRw;({j2<*%-FgJ~kH^klVxO6ae9^L^E zspo`}ozi98Hw2LsYgpF}Naa^?KW&T|?G0*$s>Y7tXPZ?hjvWSmS2Nr^?`v;Z;;13sWel-SAU zeAc$W5~qW*(wThk*_9y&CdLl2>XW`&PKalZNL^=?kl_1tGHOk2=|%c^3+KN51KD3b zJ0zvY1-*}iLg|?i_5IIf{%D0Zuv0ji*#YmwVtNtZU6rT zYMnz1S5GBX2sfe23Br>yBL$C=kG$m8#r2*>w`sI$TDoLcFz!HcH!qw%m&}2d-R-fG zpVQYFyv;6sBtLTvS%mgZN2jT2PLt-xqd zU=qTuu3~w2^;LFtVa^;Db#>;k7`(EUabA?g$8Ie!#@DQn=`bgpL!T5Mr}dsjwY8b8 zxl6i7KmtO4f)p%q1x;8RO|}Lg;*y8<{dcZY&llTxS?iNY{vUwi7)9W1%cn#aPW>#7 zRm;ZZo|(`AqSCE&6d!OIUJzB`0CDO*^m26~S=1CKk5KIxhrb#&kc&tKVz z$nHo!Ke7;a70)KmE*1b<4C8!wE-!oo&0p>s62Jl`3%_Ri#HO0&bF#BY|K$Z}SgWwT zMPngo{R96a{2szJN&SsPxD19fj+xq9>t*3vm(kZ zMYTv;XP*Jpy} zuB_+w`L5-lBJ@tOr%?`{0Sio5Hu8Kp!~#YRL3l`VBn<|Y zlV}`P0!otvicgqko$UcWt;ly>Pqre`;f8=kn+T`notHCyfu$%e-ln$ZK#*T}LumxR zU_?q(D+A|13fsqspZd16_r?mceeu1{aR8)9R?AHBC-o9pIU=p9r_IK?yK}Wx4$dyt zAAv%^_Bb@0-`R2y@1ou9k0BH}q}+EMs%v3E!fif-`2wk1`&qC4RaXpEwf*G*+V59R zx}+(odtW;&UP14E?k9v+_x*%tQ-h|c*5;veX?V^1P2)c=<)s&WmLZhn%D3y2T~o4M z;SK3d?&L5qsNUT=>n>E1Rx6LEI=yXMpnmKfGP+c<7iy|H~gb_QL47R@GZ=e4qU)7e&sb$8XH{`G`Dwuv20rI=uItnJhF z11rU%wjG}HTwe}~lb&`vk>~TE8M)IS3LJ0ESSn8WzRDTmM{6zs3QWHe07S$p$agRm z6KCmh7jftv`5F%Q?qK<*z?v3t>1j4MmXK#Q@@IPYM-Md`2nf86Jl;l_F0N@ZT5Pa2 zvIjIaEMm#=Dc~>Gi2iHTPhf+CYUl(rQgi@QW8_ks6{Krx0XIN_lJS=?Yf^{-sY-rg z-Cd1J3Zd>sknpoZSXmNSXmwU&TRty?dNc{qGZf|sBHhF2X7JB3gKd?uZ0oH5kVuvyGSLZJ<<6&BD^{hW}vQi{fLp7 z&fMCRKBENE)&f_Pu>`6I`jL|Io?+j|fvhZxb%Ua|w+~~&s)loIt?T=vBrxp!^+|=h zw~9wd?v$D>Yn>wjjo)ZgJ_ujLMc3gz33<7t0=-%+4e{F zc^ab#@}u0geHA>eK>CW!>tREwq*>>q;vfN)QsCV~9Gpu;q zkCrs4OrI=6vE;m4B8gnZFKeAx+_3q;*1DpRY)r_M%LPMcw<*;r)}IQLTpFdv1Y{vk zVQ&Z3-YxnfHk8_);_gjek~(vxCCf#dH-CUK8N7cc4?OsN5C&U1Lw6}hTs@JOX+hto z+Ty(sK5Z(4cfCZvI5=uqplfp^>0wqfGEJmtxe81mZ3$eR9()aZoORm;f&GHnJSkx{ z#gedtXCH&98u`UxFlbr9$)a*s?79z=Sq|$hbDmFv&ubW3L@scRC$dGQT+)jv`mBPA ziMm6G;WpAwX}#N|YWrjDmPN4?w7xrU=YGUY=Y!?+w{!N*->|A5Z=cZ0ev#!_%UnnT zjy49j2X_52H|x)oh;okwXh=w$ep^_$gb8NnNjJj=993X@UW0kGJGXa&$}5; zLJ}fVji9WBO#&yCl=@VCfByb`>odrmg_-jRi?k7!h-IfRw1fxR)`KI1#*38$LE=PnHHU`>)&a2SQN~w7m`5OO-n{y@UntTv)RxW z8cEbMn(d(3Jbek|mq25;7x%~T7gJ)*%qMtMk(8m)Pg_HyzHVS>wCh7^v>|B)cpd?b zTkW3_3KO!-3}!9#!hGO7oK515Jk-X1!P=~U*7xc@++`-;s86c=xwcl<7BqLKI<3CN zabR=e>89vs>uB;23?-NxwDEk$9-4Hgzj7i=JsbAXZCO;1RfD~Vnbs$DzG^}A zLFTICQ7L2KX&}XY0-e3F1yn(q4|YZlq@utird8%Gcd{#B$}`PRmR+&W#zm{%5;Y|( zHqJ5?bPBs=#0m3(*6OG)&a*Z=Xu3^}vNRwqXHJ<`M4m_UVYCBr-x?K-#^hb%z`l?{ zuCX54!Zo2S>jeaZ$!Pnrnro!AwQ?Ks)OoKTAaaPj4*GLI6%C9{Y^4!lF93XpcY)Ez zgMGI}1{36TBkmQ%B{3IhwcXw6*qNmzhCp@)r0CvFm?C_t=EeW(Fs-hdf&tuns3n!6 zBdpLEpw9sJ3(tGCXeqgoaEZKn6W`7gw^9(#BCGq&DpgR8!nSo93%X{Kjma z>PS7U6x7xP@u3(Rd*232`XCtzf#U)|up#0w zne60HwUilB(Da=D2GV(bFBk_pwF&?L9vaw`vV*F3n?hYn#2JI5PrM(wf@owU2N$|H z{*H9~22K0SB1i;)3|1;)!M5!CPAhQ!3}jEUp;6_nJj)hI*;YS-*;Oc^4+_bjwd#pl zo&UH9%tBD|$e1;o@6#%60NzTaPA&4Rj?pN*Y!$Yv{&qvQh+NCLU0S3pE)i63ynTTl z0!j4Z20j@=LZD5jKU7zHxhYY}J$F&huKHtnl5F>a|6C3o)V4_Jr1HAen7*_*Bjo># zoAn1CZV_d3`?)2P>q=F`lsNlZ;m&l*fWoG1HjyY&29z9HKMZ!5G86zA779;5bpr?^ z?9l1$r;mc-Bjr4X|F|Uvl*ByW7(;__py&Wz0DEx=3T*%&kUBdL#=vfUJOGu;VERB+ zV5hEci{>v9odEBJouM>~QzWg>MZppp<)qL6dZzTA&BiLARhyI6|MjrBwW4Q#j49zn zZ-O!@tU^&@D{TZ-lIPgnOS{J!apphU3lX3u(_}iAix9YC}U-CcdH$QV@ z`$3)sq}qSm4p``^J=^u~-7uKduWnWF2iT!qe{ke~;%}Y;03SZn5&)WG{;~E$MI&Gb z$A3vKY!!TQl=@a``d5Z4u7$=a+Bv!QNeQE7&hp6x$w}%u?c7w-kIZ-NtGTW`BXy3d z`BvGB8%K6L+9i~%-*&F|G;O~E>vQpEUeYhd4`@9Ox^(f`_bN+etP6?%>%$#Xm*rZz znug})=0-*$@3<6=G@GiEP_X|X2R7i(kngmY6ycOJ~q<;^#8Ygegrlf z`=eBT8e9g0g-QcrI7gv_dcb8cnBYtB#F^{c3;O4a%ZsM)i{eWuHA*{SSI+*ug7xJR zIv!-fssE|#-XfS1+JPj?=011$%=SM-zmBIv^By5gW41{H?|L!Yx>c)^$l!;A);_BSuNVHVZ!+A zEC*<=_)Vo!1C*8yuiUy6V+74(r*8F{_jV=A}R%<)HAgQjGy~jD%V( z7WsHm7df3J{hya?bj^j-V?;~{U3rCKjxsC9P}1#r0{Mr1WVHl5U+sXw_Fw<)fg8>Y`Pli=xXT_WrW6`{ z6K7L?XPQglBJP8HiW}e)90c3mp(>Fx4Y~6`jJ@dNx1_p15xp@nNaHax#38MYTj*40;JC= zvtPAsGLp1!Wb$K>Jmmh`k_&pX_K)r5wLu!x|88qfn=1WJ4cd~#|5n{Q1*RPcjQBtG z|1HxjPSCI`_@8RGwU7V(ivPb}c1;1fqfbdva+~$P%o(+#+u9S)`EUPI*WH!7P^RbS ziW-ckf}ME#w`*|ha$Vtnrgs^B0M_IGzsHjPuL-&>c;K>soAC6(-WJ)yv4nq+)fxMf z3X;by(_W4~39A5KiumOw{_p+ygO0XmdAeHtl4;bB%0oAisa&X~_!^wG;8$~zPO86x ze^J;gd%8s{DBPt?gKd?tu`pBgWWUPXK>i$Ul2J{;xmgsOcPZuirS0pjzRRY%4}U?f z%?z*}tXA^O8gk#Tbr>W_9z?fWX7BtuJ@U)FTSO@jyDdAS8oh?)gUC64#SgQ?CSaG` zemPAktqaGlV#xR~K`F5iF~frPgRtWGUp_JO*+Vh%iinAq!)3=Bhm4c3=SsiaqcQEX z>qEHpbp_@R5j7Fl3|COB?sFVLO3uWO8IBS5rgQxHCw=rK%Qd~h^9;6M^`q2`qf@r9 zeLYN;4R7C?h|BL6;Nx5BU@;4nVT3Ll&WA48w}MA%LuYs)VjrG?EqV>f?h5IJeTGYNN@Os+z_m-v}{eft$ME5y*F7Oj5pr9b5*Ir&L$4 zB#O?q1YTx5hTItqcaUZi@C@7m%RH}xbx3yy`|)F&U2o%EpNVXe%p1y7I>&eQBg;!; z@s3dP9W!b}G1xnZhc;cMD4iyLhpPXly=(tVGTYwHbjmZ8Ih`q)N~JT7Lyo0onVAVS z-Lz6GQ%XfDH8U@SH&kww%~+aJnVESZ^Ojf2d!Seu;w3dT@d_l~ML@g&3c`7@X__;i z`Thal&*%8-2Hv&zUh7%wdDiybRS7ibcVr$A7S|2}d#0+!!nEGokJvZ&xL27F-Y~E* z@wjK~<1KB1Lw}u5xR5ufL-(+AYh*fA@d50fFe;BX75*`&WatbiN9BL|t?1=c(D0^v ze`7-;>zUEw3rb?^!nu_i?;o%HwT1oV2Z*%!>tx0JH*LPL)roEow^ZNenb;%w2U_Zzn!WGDCT>98PImd*}pMsru7X zTzWk=iQFSZ=8Tai3 zJ4x$ljccqkeh?(bVOeSXOAo-T{k~M}xK_SN_0@)Fry^a^oF0BaRVd$M(@xlh-W0V_ zOa!jj9VZ^_ZtoPw>lD^2KJOK>x{AEwG9-uzpvZX11&Qo*wPnb;_XgYwNs8Dv@sdiT zAy$j8L#g`Mf3SQi;UU>lBFwVzB#e~qR2vsZlMPX2LpNme_*mS?l4+T#AMDGufpvs9 zZ{@YVBpk$H7eAabzQhFyKT^Yf6TXPe_jWUzYLp^?>uwd^(3v+Ma=l<1VFWo7=3X|M zcignUI0zvj-6+ol(54{>1g3z%UhPlUH<(W+!47|=;o=M|JW=Jb?4>j$<9lOfwSgv<%wD z@zkobG)Q$g*M@O;mXT+@*XD3x&2s~H;ZGZK@ug2dALG4~%T1Alk#41Nf6j@1?EG*w z9AUmr?%ll5cJrG>L*?xZ3%^RknWKkjZE7zqj-j|2(al%@S9+Fna!fI2Y`p~72IhSg zAezjT;JjnHr0AQBhbJl{m<6_s?8|RDX~e~2(rxhz)C^k$siqj~TvdCMS07g>KJe3n z$60nI4Vm+mj>#p0sksGJINe{BoR# z6gwHLkIIu}-Q`g&hVc{nvE|b4x<+FjSpmGEb+p;atraf}YI4|8Of4z>L)gIejsj-5|t*gK{9l@(SS{RKb>%_7&rypD-1=sR?4fW~dpQP+yA_9LV? ziJEsdpg~|H2k9Zvai;;p?=B2K5p>5wfYsp;onWq}ux8t=&#UF5EFyzD>_ zY*reeH*~qQZ2f2|!rg!_P3G#3^^A9rlXrN0l&vc9KAOBDPIYBss4?k z>=?~y&qYC3BKK+t_sy@>7VI;_JsWmL^J~ag-yH8kz%A+01wK3#7g%c4n?7Np3EJj@ zZ8U1Q(B)=nJ;Ss~R+n)@l`$3W`!x0^BoQ$TJt@aM$Ps{pH(=}ppB@sxo!Af`+P@II zXgz3#mPn{p`(9N0N>XW>i*CypF{s(3?G^mnwKQyjXnNoY#5pt7&#v~7Aof@x2wA{D zj`4Z&@_=J$Rt`V8|VejOad|hYM#&0fJ zZO0iy$YjMM`M?9C>I$~=a1RBSrHBt+9M2IUtM+Vwg*9z+ZP}AiWz<{9(Mu#uK6nQ< z@c*nPgvH2MBd(-dGdUtfN6#v6xc@dF8OfPxd#R|@Gm~009xRj*;{nVlHFYq0s!vukT{!XSwY;|{E_A z(>oPOQw_luZBL)13t%+@YZ2CA*r}Eg8tCBQ&*kTFp&lk_K*G~?L|ANAkoak;6xPY_{?=H?R`ns z)`;Wx^>!mR5Q})Xol*v@gW~1RDUo?6-p zj1_ik!78!7{r1WL2M0UE@o3N+B7gj=gFG~Cl@hsT_k zBMs|FDXT-dn@men_tsili$BI;rI`)|Bk2=3G$AL|&ndP!bcJ{MvV&((>Ceqm$qp0K z5bt+mh?m9fq-+Puxk_zbRHC~}_)SoeY2l%o=^H^iRV&}GQ9~zCxyfU~LiTBF|IwnT z8vR-i3C{L`+a=59Z`Z16v9_{PGivwIv#0XbUZ{`?7MZsO-w zB!-6EP3LlVctB z-{X77#%`k6VNI;plyxQ*-Q(ha2aA_&Qsgz#D!)DfSBd%Sx#mpA$evJf5-fGYv)4T> zPoA10W+M&5niqTGT5k$?Ognv$0=D{wVw+=<0hi!86|cK9;6yjY^G8{QRrtnf*6#XW zE*Q61S>-k%spHw45dMmYVV0|fbJbB_JHBcJHNmc~au`AWqxbb%Aei(34HC87xZD)1 zJkHFgTjm_@y*>yHcDt*yxxPucnKCoV#tEis4iuf;mpOL)0glgI9 zn)OTij1(I&F-G?fM4LYX1DC9#`_s9S;8u~G6}Vx~o>45`byO(qqk6c`pA>&Auhir^ z_ip5RwF)iqnkVut)AS37X5#Z0#rV(mTlKf5y}R~ZKK>aMsf)lFZ>;lU`l0Rvj&Bv# zZ0(^;ynzwFR@H8ffUcPLKH+sk0guRP%ZXj1Ot?c>xm*?J4UN@2Rd%wwk0UAfQ1QC8 zak6DZ^lY0goQ`R@&(Yd+rI*-+(6&o+qui-uUTvn<;14_!`|AfkfWEm|tbV{vb~ktq#6AGZJM=y*y=pMSo#7 zM@m7$rs!?wi)-6SsrTpM*Fv9ss!)(_8JAj~(qTo9V2AY_Y*xYhzs;nt4!L*uIO6Qu zD}pAq_*D;rd`QNy0ZHi{ME_O2(Yn1fspP$yG2NN+GYt_B_hpO-O|)9<2**8`__pj> zk^7HQeBdhzI#{~+)V6ev{;~m2Q{`3#)(#ax__~dLnr6Fz*aIlUeZ{MY5h_2T!au(l zK$&f$DLWrX1K44#bCiO!r$VHcf9#?1s!DdMe)t5KYKj>ljxzj!nnwgO7zcoohS(M* zs;>ZV$P9oA4>Ffql20OVcTubxEcdJ5UR&z~a4f;6l53zxze{+W7E_@zrvsv_mB}y! zW1TeF0prXJwO57`pXJEYd1X`L^HO}*RwJ!CtPZNG_d9K2B_-@;Wn9fA3>zp6_h+l2 zk$vNwEkap83ggPzBIk&K@;>L(z{Zo&vO}daGZvh);Wr@^>d!sFU8Sv;l!u=zWvuBQ z27Iesyvuedo54kk1P7>1CsCyDu81r1ENp!Cq;nQ8^$(#B(4laAko{dz*Kgqd)Ol^+ zE$7Pfc*y$z^|C0%vVSLZgy|?u06(XE(sCId;OZcx^?o&t-1(*iFLg@bGms_nhUt&y zw0JzP9mmA4mpiyET)eVfI82EcdliH3bgvRmT&J5rsf!oe8C_Nnde(RraeldwT)xf7 z)F5a|DaY1GtBa4)r+)24u_9hC*GA&d&30{wpGn^elI{=za%=WEh0Ra$2J=5^W_q9j zhJ5XTSN@TZf>!0Ouk*SX71KabueLAI-RiS_)n{)xxJY=LBOOePb;hJQ7FjFgR9PZ{ zV{Y_P+I=#zwPupqzoM=;_{bG23InF!C`(!6r~A`?a@_LWEW zRiHLl6j5)HcNb36u@(VaQM~}`9MO*d3(5WAHF(tmU(JDwr&t0kEY7vkvEOY9s>XR2-X5wzu12q%z;(xQA_i)QbQ5Q!OB2DYcutX4fwT@i+6#^$v zd(0}=pyoTLJ)i;ouQkDwc-g=)5>6a5d<;K-8$vG)^*5tqIiRkKf_#I@4dib<&2|{yI+EvjC9L=F66S zVw?N=Fi5?`!ANcB+{vy?x`kWyLVCN*u_^S#u_HxBMGC^)LB?xQUByv5&RS8;AT7%} z{x$G^XLUfkupXxJAI4gm&%c-(Qp^Kw7w7Py;->qBt?XdOVcDvt#KdS>lSw|cNhG4? ztNala&Zc*k85~mcwowy$%`G@{*|yw~5V2D;_C<>@|E1j2!xSW4@7vtvrkQ>5x$0l? z*P^p!WvuiSX~euBhr-C3%xM>;dJ2Wz_QFs8wIrjIv$mx;MwDIUje(qtCKnTlxzqKt zf zWLhJ!3**=de?ES;txgv=bZ^_}!!>1o?{brCYWB`V9g+VoXdij^Elq~t=je0=iCo*V z@?3^LIa>S6u73$4?ZniDxLcot{E#Xhm4oGwa2`Khl&~b zEpk_RJCrZy@XBQFlySN9Gcl(yl8b)D%FE~s7qLE=%V~KWTAAp%xr5b==rLlKlP9 zA6xa+`7fOlps64fS^lkETgu}#*DQ4#z9_xwBNOj+ptCha%HbKdwdR_@v+j67vs6J! zN+QblZ2fD?q!sZ(7JZJZoLfcw_`Dy-j~x67XYe;2oX{O!bx(gukFPcJnrM$D1+*xz z%mK5dX{)90r6wtGL`JP!EwvOiG;GvL;L_0r4UN;k>uSL9jce=v_woO&%>Q>MXnmgj zp$#~na`V>bzj{|=b*J~FR)NjGRMiH5oLc$8thkL4^Z8S^Zr$+<7JnK1!C(`j>dRn# iJ&;?zjG7hCs}RSYGjeuCL;<0rVSCvAP|+{vZ~O<(0>Tae diff --git a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.processimage.svg b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.processimage.svg index 727409a..9b9ba8f 100644 --- a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.processimage.svg +++ b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.processimage.svg @@ -1,2 +1,2 @@ -MotoristaAnalista de suprimentosLogisticaGerente de lojaSolicitação de TransferênciaValidarLojaAprovarTransferênciaEmitir NFEde TransfReceberProdutosVerificarproblemaColetarProdutoValidarprodutoEntregarProdutoConsultarEntradaVerificarproblema delançamentoGestor IdentificadoLoja sem GestorAprovarReprovarReprovarCancelarValidar produtosrecebidosEnviar para coletaFinalizar +MotoristaAnalista de suprimentosLogisticaGerente de lojaSolicitação de TransferênciaValidarLojaAprovarTransferênciaEmitir NFEde TransfReceberProdutosVerificarproblemaColetarProdutoValidarprodutoEntregarProdutoConsultarEntradaVerificarproblema delançamentoValidarrotaGestor IdentificadoLoja sem GestorAjuste de transferênciaAprovarConfirmar recebimentoReprovarReprovarCancelarValidar produtosrecebidosFinalizarEntregar produtoEnviar para rota diff --git a/Transferência Ginseng/workflow/.resources/teste3.ws.cache b/Transferência Ginseng/workflow/.resources/teste3.ws.cache index c8f2401..f350835 100644 --- a/Transferência Ginseng/workflow/.resources/teste3.ws.cache +++ b/Transferência Ginseng/workflow/.resources/teste3.ws.cache @@ -511,6 +511,197 @@ + + camposFormulario, documentoId = 590 + + + activity + + + centroCusto + + + chaveNfe + + + codigoItem + + + codigoProdutoItem + + + currentUserId + + + currentUsermail + + + currentUserName + + + dataAbertura + + + dataColeta + + + dataEmissaoApiNfe + + + dataEmissaoNfe + + + dataEntradaNfeConsulta + + + dataEntrega + + + dataValidacaoGestor + + + descricao + + + emailSolicitante + + + estabelecimento + + + excelUpload + + + fdAnexo_Coleta + + + fdAnexo_Entrega + + + fdAnexo_recebimento + + + fnAnexo_Nfe + + + formMode + + + fornecedorNfeConsulta + + + gestorEmail + + + gestorEmailE + + + gestorNome + + + gestorNomeE + + + gestor_cc + + + gestor_cce + + + invoiceIdNfeConsulta + + + itensNfeConsulta + + + itensNfeJson + + + justificativa + + + justificativaDecisaoGestor + + + justificativaDecisaoItens + + + lojaNfeConsulta + + + motoristaColetaLogin + + + motoristaColetaNome + + + motoristaEntregaLogin + + + motoristaEntregaNome + + + motoristaEntregaSelecionado + + + numeroNfeConsulta + + + operacaoNfeConsulta + + + productIdItem + + + qtdDivergenciasNfe + + + quantidadeItem + + + requesterId + + + requesterMail + + + requesterName + + + serieNfeConsulta + + + situacaoNfeConsulta + + + storeIdNfeConsulta + + + tipoMotoristaEntrega + + + ufDestino + + + ufOrigem + + + userValidacaoGestor + + + usuarioEmissorNfe + + + validacaoItens + + + valorNfeConsulta + + + WKNumProces + + + mecanismo @@ -636,5 +827,530 @@ + + forms + + + + + FLUIGADHOC + + + FLUIGADHOC + + + 3 + + + + + + + FLUIGADHOCPROCESS + + + FLUIGADHOCPROCESS + + + 4 + + + + + + + totvsflow_dataset_tipo_ocorrencia + + + totvsflow_dataset_tipo_ocorrencia + + + 14 + + + + + + + totvsflow_abertura_chamado + + + totvsflow_abertura_chamado + + + 15 + + + + + + + DSFormulariodeAberturadechamado + + + Formulário de Abertura de chamado + + + 20 + + + + + + + Abertura_de_chamados + + + Solicitação de abertura de chamados + + + 21 + + + + + + + DSvistoriadeServico + + + vistoriadeServico + + + 24 + + + + + + + DSFormulariodeReservadesala + + + Formulário de Reserva de sala + + + 34 + + + + + + + totvsflow_dataset_centrocusto + + + totvsflow_dataset_centrocusto + + + 103 + + + + + + + totvsflow_dataset_cadastro_item + + + totvsflow_dataset_cadastro_item + + + 104 + + + + + + + totvsflow_dataset_estabelecimento + + + totvsflow_dataset_estabelecimento + + + 105 + + + + + + + totvsflow_solicitacao_compras + + + totvsflow_solicitacao_compras + + + 165 + + + + + + + aberturadechamado_manutencao + + + aberturadechamado_manutencao + + + 400 + + + + + + + Solicitacao_transferencia + + + Solicitacao_transferencia + + + 590 + + + + + + + recrutamento + + + recrutamento + + + 823 + + + + + + + kit_aniversariantes + + + Aniversariantes + + + 7690 + + + + + + + kit_cardapio + + + Cardápio do Dia + + + 7695 + + + + + + + kit_convenios + + + Convênios + + + 7703 + + + + + + + kit_news + + + Notícias + + + 7709 + + + + + + + compras_digital + + + compras_digital + + + 9305 + + + + + + + dpf_di_formulario_processo_admissao + + + Digte_Public_Form_Di_Formulario_Processo_Admissao_Protheus + + + 9626 + + + + + + + dpf_cadastro_status + + + Digte_Public_Form_Status + + + 9627 + + + + + + + dpf_configuracoes + + + Digte_Public_Form_Configuracoes + + + 9628 + + + + + + + dpf_cadastro_jornada + + + Digte_Public_Form_Jornada + + + 9629 + + + + + + + dpf_tipo_documento + + + Digte_Public_Form_Tipo_Documento + + + 9630 + + + + + + + dpf_dataset + + + Digte_Public_Form_Dataset + + + 9631 + + + + + + + dpf_di_configuracao + + + Digte_Public_Form_Di_Configuracoes + + + 9632 + + + + + + + dpf_di_beneficio + + + Digte_Public_Form_Di_Beneficios + + + 9633 + + + + + + + dpf_di_compl_contrato + + + Digte_Public_Form_Di_Comp_Contrato + + + 9634 + + + + + + + dpf_di_funcao_jornada + + + Digte_Public_Form_Di_Funcao_Jornada + + + 9635 + + + + + + + dpf_dataset_estrutura + + + Digte_Public_Form_Di_Dataset_Estrutura + + + 9636 + + + + + + + dpf_grupo_tipo_contrato + + + Digte_Public_Form_Grupo_Tipo_Contrato + + + 9637 + + + + + + + dpf_tipo_contrato + + + Digte_Public_Form_Tipo_Contrato + + + 9638 + + + + + + + dpf_di_traducao_campo_valor + + + Digte_Public_Form_Di_Traducao_Campo_Valor + + + 9639 + + + + + + + dpf_di_restricoes_cpf + + + Digte_Public_Form_Di_Formulario_Restricao_CPF + + + 9640 + + + + + + + dpf_di_compl_vt + + + Digte_Public_Form_Di_Compl_VT + + + 9641 + + + + + + + dpf_di_traducao_campo + + + Digte_Public_Form_Di_Traducao_Campo + + + 9995 + + + + + + + desligamento + + + desligamento + + + 12959 + + + + + + + form_param_sla_csc + + + Formulário de Parametrização de SLA - Atendimento de Chamado TI + + + 28647 + + + + + + + totvsflow_lancamento_documento + + + totvsflow_lancamento_documento + + + 32331 + + + + + diff --git a/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process b/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process index c8bf690..c35bfc0 100644 --- a/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process +++ b/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process @@ -1,80 +1,79 @@ - - - - - - + + + + + - - + + - - + + - - - + + + - + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - + - - - + + + - - - + + + - - - + + + @@ -83,100 +82,100 @@ - + - - + + - - + + - + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - - + + + - - - + + + - + @@ -192,9 +191,9 @@ - - - + + + @@ -203,44 +202,44 @@ - + - - + + - - + + - + - - + + - - - + + + - + - + - - - + + + - - - + + + - + @@ -256,54 +255,92 @@ - - - + + + - - - + + + - - + + - - - + + + - + - + - + - - - + + + - - - + + + - - - - - - - - + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -313,20 +350,6 @@ - - - - - - - - - - - - - - @@ -334,146 +357,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -493,26 +516,26 @@ - + - + - + - + - + - + @@ -525,10 +548,10 @@ - + - + @@ -542,146 +565,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -695,146 +718,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -848,146 +871,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1001,146 +1024,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1154,146 +1177,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1307,26 +1330,26 @@ - + - + - + - + - + - + @@ -1339,10 +1362,10 @@ - + - + @@ -1356,26 +1379,26 @@ - + - + - + - + - + - + @@ -1388,26 +1411,26 @@ - + - + - + - + - + - + @@ -1420,146 +1443,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1568,7 +1591,7 @@ - + @@ -1587,26 +1610,26 @@ - + - + - + - + - + - + @@ -1620,26 +1643,26 @@ - + - + - + - + - + - + @@ -1653,10 +1676,10 @@ - + - + @@ -1672,146 +1695,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1820,8 +1843,8 @@ - - + + @@ -1835,146 +1858,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1989,26 +2012,26 @@ - + - + - + - + - + - + @@ -2023,146 +2046,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2179,146 +2202,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2333,26 +2356,26 @@ - + - + - + - + - + - + @@ -2366,146 +2389,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2521,26 +2544,26 @@ - + - + - + - + - + - + @@ -2553,146 +2576,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2709,146 +2732,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2863,26 +2886,26 @@ - + - + - + - + - + - + @@ -2895,146 +2918,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3054,146 +3077,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3214,146 +3237,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3375,10 +3398,10 @@ - + - + @@ -3392,26 +3415,26 @@ - + - + - + - + - + - + @@ -3426,10 +3449,10 @@ - + - + @@ -3446,10 +3469,10 @@ - + - + @@ -3465,26 +3488,26 @@ - + - + - + - + - + - + @@ -3499,26 +3522,26 @@ - + - + - + - + - + - + @@ -3533,146 +3556,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3687,26 +3710,26 @@ - + - + - + - + - + - + @@ -3720,146 +3743,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3874,26 +3897,26 @@ - + - + - + - + - + - + @@ -3906,146 +3929,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4056,323 +4079,358 @@ - - + + + + + + + + + + + + + + + + + + + + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - - - - - - - - - - - - - - - - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Transferência Ginseng/workflow/scripts/Solicitação de transferência.beforeTaskSave.js b/Transferência Ginseng/workflow/scripts/Solicitação de transferência.beforeTaskSave.js new file mode 100644 index 0000000..0220c19 --- /dev/null +++ b/Transferência Ginseng/workflow/scripts/Solicitação de transferência.beforeTaskSave.js @@ -0,0 +1,205 @@ +function beforeTaskSave(colleagueId, nextSequenceId, userList) { + try { + var currentState = parseInt(getValue("WKNumState"), 10); + var completeTask = String(getValue("WKCompletTask") || "false"); + var nextState = parseInt(String(nextSequenceId || "0"), 10); + + if (completeTask !== "true") return; + + if (currentState === 6) { + // Fluxo de cancelamento saindo da atividade 6 nao deve disparar template de nota emitida. + if (nextState === 97) return; + enviarNotificacaoNotaEmitida(); + return; + } + + if (currentState === 31) { + enviarNotificacaoColetaRealizada(); + return; + } + + if (currentState === 57) { + // 61 = cancelamento no diagrama. + if (nextState === 61) return; + enviarNotificacaoEntregaRealizada(); + } + } catch (e) { + log.error("[Transferencia.beforeTaskSave] Erro no beforeTaskSave: " + e); + } +} + +function enviarNotificacaoNotaEmitida() { + var envio = montarContextoEnvio(); + if (!envio.ok) return; + + var params = buildCommonParams(envio.processNumber, envio.chaveNfe, envio.processLink); + notifyTemplate("tpl_nota_emitida", envio.destinoEmail, envio.requesterId, params, envio.processNumber, envio.processLink); +} + +function enviarNotificacaoColetaRealizada() { + var envio = montarContextoEnvio(); + if (!envio.ok) return; + + var motoristaColetaNome = safeTrim(hAPI.getCardValue("motoristaColetaNome")); + var dataColeta = safeTrim(hAPI.getCardValue("dataColeta")); + var motoristaEntregaNome = safeTrim(hAPI.getCardValue("motoristaEntregaNome")); + var tipoMotoristaEntrega = safeTrim(hAPI.getCardValue("tipoMotoristaEntrega")); + + if (motoristaEntregaNome === "" && tipoMotoristaEntrega === "mesmo") { + motoristaEntregaNome = motoristaColetaNome; + } + + var params = buildCommonParams(envio.processNumber, envio.chaveNfe, envio.processLink); + params.put("motoristaColetaNome", motoristaColetaNome); + params.put("dataColeta", dataColeta); + params.put("motoristaEntregaNome", motoristaEntregaNome); + + notifyTemplate("tpl_coleta_realizada", envio.destinoEmail, envio.requesterId, params, envio.processNumber, envio.processLink); +} + +function enviarNotificacaoEntregaRealizada() { + var envio = montarContextoEnvio(); + if (!envio.ok) return; + + var motoristaEntregaNome = safeTrim(hAPI.getCardValue("motoristaEntregaNome")); + var dataEntrega = safeTrim(hAPI.getCardValue("dataEntrega")); + var nomerecebedor = safeTrim(hAPI.getCardValue("nomerecebedor")); + + var params = buildCommonParams(envio.processNumber, envio.chaveNfe, envio.processLink); + params.put("motoristaEntregaNome", motoristaEntregaNome); + params.put("dataEntrega", dataEntrega); + params.put("nomerecebedor", nomerecebedor); + + notifyTemplate("tpl_entrega_realizada", envio.destinoEmail, envio.requesterId, params, envio.processNumber, envio.processLink); +} + +function montarContextoEnvio() { + var requesterId = safeTrim(hAPI.getCardValue("requesterId")); + var requesterMail = safeTrim(hAPI.getCardValue("requesterMail")); + + if (requesterId === "" && requesterMail !== "") { + requesterId = findColleagueIdByMail(requesterMail); + } + + // Prioriza email explicito salvo no formulario; fallback para email do colleague. + var destinoEmail = requesterMail; + if (!isValidEmail(destinoEmail)) { + destinoEmail = resolveEmailByColleagueId(requesterId); + } + + if (!isValidEmail(destinoEmail)) { + log.warn("[Transferencia.beforeTaskSave] Email do solicitante invalido. requesterId=" + requesterId + ", requesterMail=[" + requesterMail + "], destinoEmail=[" + destinoEmail + "]"); + return { ok: false }; + } + + var processNumber = safeTrim(getValue("WKNumProces")); + var chaveNfe = onlyDigits(hAPI.getCardValue("chaveNfe")); + if (chaveNfe === "") chaveNfe = safeTrim(hAPI.getCardValue("chaveNfe")); + var processLink = buildProcessLink(processNumber); + + return { + ok: true, + requesterId: requesterId, + destinoEmail: destinoEmail, + processNumber: processNumber, + chaveNfe: chaveNfe, + processLink: processLink + }; +} + +function buildCommonParams(processNumber, chaveNfe, processLink) { + var params = new java.util.HashMap(); + params.put("WKNumProces", processNumber); + params.put("chaveNfe", chaveNfe); + params.put("linkSolicitacao", processLink); + params.put("link", processLink); + return params; +} + +function notifyTemplate(templateCode, destinoEmail, requesterId, params, processNumber, processLink) { + var NOTIFIER_SENDER_USER = "admin"; + var recipients = new java.util.ArrayList(); + recipients.add(destinoEmail); + + notifier.notify(NOTIFIER_SENDER_USER, templateCode, params, recipients, "text/html"); + log.info("[Transferencia.beforeTaskSave] " + templateCode + " enviado. processo=" + processNumber + ", destino=" + destinoEmail + ", requesterId=" + requesterId + ", link=[" + processLink + "]"); +} + +function buildProcessLink(processNumber) { + var BASE_URL_FALLBACK = "https://comerciode188007.fluig.cloudtotvs.com.br"; + var baseUrl = safeTrim(getValue("WKServerURL")); + var companyId = safeTrim(getValue("WKCompany")); + if (baseUrl === "") baseUrl = BASE_URL_FALLBACK; + if (baseUrl.indexOf("http://") !== 0 && baseUrl.indexOf("https://") !== 0) { + baseUrl = "https://" + baseUrl; + } + if (baseUrl.charAt(baseUrl.length - 1) === "/") baseUrl = baseUrl.substring(0, baseUrl.length - 1); + if (companyId === "") companyId = "1"; + if (baseUrl === "" || safeTrim(processNumber) === "") return ""; + return baseUrl + "/portal/p/" + companyId + "/pageworkflowview?app_ecm_workflowview_detailsProcessInstanceID=" + processNumber; +} + +function findColleagueIdByMail(mail) { + var email = safeTrim(mail); + if (email === "") return ""; + + try { + var cMail = DatasetFactory.createConstraint("mail", email, email, ConstraintType.MUST); + var dsColleague = DatasetFactory.getDataset("colleague", null, [cMail], null); + if (!dsColleague || dsColleague.rowsCount < 1) return ""; + + return safeTrim( + dsColleague.getValue(0, "colleaguePK.colleagueId") || + dsColleague.getValue(0, "colleagueId") || + dsColleague.getValue(0, "login") + ); + } catch (e) { + log.warn("[Transferencia.beforeTaskSave] Falha ao buscar solicitante por mail: " + e); + return ""; + } +} + +function resolveEmailByColleagueId(colleagueId) { + var id = safeTrim(colleagueId); + if (id === "") return ""; + + try { + var cActive = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST); + + var cId = DatasetFactory.createConstraint("colleaguePK.colleagueId", id, id, ConstraintType.MUST); + var byId = DatasetFactory.getDataset("colleague", null, [cId, cActive], null); + if (byId && byId.rowsCount > 0) { + return safeTrim(byId.getValue(0, "mail")); + } + + var cLogin = DatasetFactory.createConstraint("login", id, id, ConstraintType.MUST); + var byLogin = DatasetFactory.getDataset("colleague", null, [cLogin, cActive], null); + if (byLogin && byLogin.rowsCount > 0) { + return safeTrim(byLogin.getValue(0, "mail")); + } + } catch (e) { + log.warn("[Transferencia.beforeTaskSave] Falha ao buscar email do solicitante por colleagueId: " + e); + } + + return ""; +} + +function isValidEmail(email) { + var v = safeTrim(email); + if (v === "") return false; + if (/\s/.test(v)) return false; + + var at = v.indexOf("@"); + if (at <= 0 || at !== v.lastIndexOf("@")) return false; + + var dot = v.lastIndexOf("."); + return dot > at + 1 && dot < (v.length - 1); +} + +function safeTrim(value) { + return String(value == null ? "" : value).trim(); +} + +function onlyDigits(value) { + return String(value == null ? "" : value).replace(/\D/g, ""); +} diff --git a/Transferência Ginseng/workflow/scripts/Solicitação de transferência.onNotify.js b/Transferência Ginseng/workflow/scripts/Solicitação de transferência.onNotify.js new file mode 100644 index 0000000..c6cd4a6 --- /dev/null +++ b/Transferência Ginseng/workflow/scripts/Solicitação de transferência.onNotify.js @@ -0,0 +1,27 @@ +function onNotify(subject, receivers, template, params) { + + log.info("===== onNotify GLOBAL ===== Template: " + template); + + var validos = new java.util.ArrayList(); + + for (var i = 0; i < receivers.size(); i++) { + + var email = receivers.get(i); + + log.info("Receiver original: [" + email + "]"); + + if (email && email.indexOf("@") > 0 && email.indexOf(".") > 0) { + validos.add(email); + } else { + log.warn("REMOVIDO EMAIL INVALIDO: [" + email + "] TEMPLATE: " + template); + } + } + + receivers.clear(); + + for (var j = 0; j < validos.size(); j++) { + receivers.add(validos.get(j)); + } + + log.info("TOTAL FINAL RECEIVERS: " + receivers.size()); +} \ No newline at end of file diff --git a/Transferência Ginseng/workflow/scripts/aberturadeChamado.beforeTaskSave.js b/Transferência Ginseng/workflow/scripts/aberturadeChamado.beforeTaskSave.js index 4fc4d00..cc1a845 100644 --- a/Transferência Ginseng/workflow/scripts/aberturadeChamado.beforeTaskSave.js +++ b/Transferência Ginseng/workflow/scripts/aberturadeChamado.beforeTaskSave.js @@ -18,4 +18,6 @@ function beforeTaskSave(colleagueId,nextSequenceId,userList){ log.error("Erro ao buscar os dados do dataset 'colleague'."); } -} \ No newline at end of file +} + + \ No newline at end of file From c2720400bb490c5dd21427a61eb398cde9017284 Mon Sep 17 00:00:00 2001 From: "Andrey Cunh@" Date: Fri, 27 Mar 2026 08:13:09 -0300 Subject: [PATCH 11/25] =?UTF-8?q?att=20produ=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datasets/{ds_LojasTransfteste.js => ds_LojasTransf.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Transferência Ginseng/datasets/{ds_LojasTransfteste.js => ds_LojasTransf.js} (100%) diff --git a/Transferência Ginseng/datasets/ds_LojasTransfteste.js b/Transferência Ginseng/datasets/ds_LojasTransf.js similarity index 100% rename from Transferência Ginseng/datasets/ds_LojasTransfteste.js rename to Transferência Ginseng/datasets/ds_LojasTransf.js From fb2bec0fd5a12aa7ca426f9e84249c722114b5f0 Mon Sep 17 00:00:00 2001 From: "Andrey Cunh@" Date: Fri, 27 Mar 2026 08:13:35 -0300 Subject: [PATCH 12/25] att --- Transferência Ginseng/.vscode/settings.json | 3 +- .../datasets/ds_LojasTransf.js | 2 +- .../datasets/ds_fiscal_invoice_by_keys.js | 2 +- .../datasets/ds_rgb_products.js | 297 +++- .../datasets/ds_rgb_products_v2.js | 517 +++++++ .../.metadata | Bin 626 -> 709 bytes .../excel.js | 25 +- .../script.js | 44 +- .../totvsflow_solicitacao_transferencia.html | 54 +- .../workflow/.resources/Producao.ws.cache | 839 ++++++++++ .../workflow/.resources/Producao.ws.cache.bkp | 1372 +++++++++++++++++ .../Solicitação de transferência.ecm30.xml | 60 +- .../Solicitação de transferência.png | Bin 50256 -> 56278 bytes ...licitação de transferência.processimage.svg | 2 +- .../Solicitação de transferência.process | 2 +- 15 files changed, 3143 insertions(+), 76 deletions(-) create mode 100644 Transferência Ginseng/datasets/ds_rgb_products_v2.js create mode 100644 Transferência Ginseng/workflow/.resources/Producao.ws.cache create mode 100644 Transferência Ginseng/workflow/.resources/Producao.ws.cache.bkp diff --git a/Transferência Ginseng/.vscode/settings.json b/Transferência Ginseng/.vscode/settings.json index 6def96a..aa86c45 100644 --- a/Transferência Ginseng/.vscode/settings.json +++ b/Transferência Ginseng/.vscode/settings.json @@ -1,3 +1,4 @@ { - "totvsLanguageServer.welcomePage": false + "totvsLanguageServer.welcomePage": false, + "totvsLanguageServer.editor.linter.includes": "C:\\25-04-14-P12-SMARTCLIENT_BUILD 20.3.2.12_WINDOWS_X64\\include" } \ No newline at end of file diff --git a/Transferência Ginseng/datasets/ds_LojasTransf.js b/Transferência Ginseng/datasets/ds_LojasTransf.js index d6c4ad9..1273d55 100644 --- a/Transferência Ginseng/datasets/ds_LojasTransf.js +++ b/Transferência Ginseng/datasets/ds_LojasTransf.js @@ -18,7 +18,7 @@ function createDataset(fields, constraints, sortFields) { var clientService = fluigAPI.getAuthorizeClientService(); var data = { companyId: String(getValue("WKCompany") || "1"), - serviceCode: "GINSENG APITESTE", // ajuste para o codigo do servico cadastrado no Fluig + serviceCode: "GINSENG API", // ajuste para o codigo do servico cadastrado no Fluig endpoint: "/base_pdvs", method: "get", timeoutService: "60000", diff --git a/Transferência Ginseng/datasets/ds_fiscal_invoice_by_keys.js b/Transferência Ginseng/datasets/ds_fiscal_invoice_by_keys.js index ad4ffc2..259ac84 100644 --- a/Transferência Ginseng/datasets/ds_fiscal_invoice_by_keys.js +++ b/Transferência Ginseng/datasets/ds_fiscal_invoice_by_keys.js @@ -236,7 +236,7 @@ function invokeAuthorizedGet(clientService, endpoint, auth) { var data = { companyId: String(getValue("WKCompany") || "1"), - serviceCode: "GINSENG APITESTE", + serviceCode: "GinsengAPI2", endpoint: endpoint, method: "get", timeoutService: "30000", diff --git a/Transferência Ginseng/datasets/ds_rgb_products.js b/Transferência Ginseng/datasets/ds_rgb_products.js index 0fc0eb6..a9daf36 100644 --- a/Transferência Ginseng/datasets/ds_rgb_products.js +++ b/Transferência Ginseng/datasets/ds_rgb_products.js @@ -6,10 +6,16 @@ function defineStructure() { addColumn("sku"); addColumn("brand"); addColumn("ncmId"); + addColumn("categoria"); } function onSync(lastSyncDate) {} +var GB_TOKEN_URL = "https://api.grupoboticario.com.br/global/v2/jwt-token/token"; +var GB_STRATEGICS_URL = "https://api.grupoboticario.com.br/global/v1/franchising/gb-stores-data/product/classification/strategics"; +var DEFAULT_GB_CLIENT_ID = "88ymKwAUNfu06sD85i0RiokCxWGSkFBkx9ytgI5y1ZKxX3OQ"; +var DEFAULT_GB_CLIENT_SECRET = "YDFz43qAzL6ApNIKVCxu3dAmS9GWOqJbcc2aPnFDkmEaBXexSpsHGfcItg56i2dE"; + function createDataset(fields, constraints, sortFields) { var dataset = DatasetBuilder.newDataset(); dataset.addColumn("Code"); @@ -19,6 +25,7 @@ function createDataset(fields, constraints, sortFields) { dataset.addColumn("sku"); dataset.addColumn("brand"); dataset.addColumn("ncmId"); + dataset.addColumn("categoria"); try { var filtro = parseConstraints(constraints); @@ -62,6 +69,8 @@ function createDataset(fields, constraints, sortFields) { var searchNorm = normalize(filtro.search); var maxRows = filtro.maxRows; + var categoryMap = null; + var categoryDiag = ""; for (var i = 0; i < itens.length; i++) { var item = itens[i] || {}; @@ -77,7 +86,17 @@ function createDataset(fields, constraints, sortFields) { var desc = trim(item.description); var codigoDescricao = code + " - " + desc; var brand = trim(item.brand); - var blob = normalize([code, desc, brand, trim(item.id)].join(" ")); + var categoria = trim(item.strategicDescription || item.strategic_description || item.categoria); + if (!categoria) { + if (categoryMap == null) { + var categorization = loadStrategicCategoryMap(constraints, 30000); + categoryMap = categorization.map || {}; + categoryDiag = categorization.diag || ""; + } + var strategicId = resolveStrategicId(item, code); + categoria = resolveCategory(categoryMap, strategicId); + } + var blob = normalize([code, desc, brand, trim(item.id), categoria].join(" ")); if (searchNorm && searchNorm.length >= 2 && blob.indexOf(searchNorm) === -1) { continue; @@ -90,7 +109,8 @@ function createDataset(fields, constraints, sortFields) { desc, code, brand, - trim(item.ncmId) + trim(item.ncmId), + categoria ]); if (dataset.rowsCount >= maxRows) { @@ -99,7 +119,8 @@ function createDataset(fields, constraints, sortFields) { } if (dataset.rowsCount === 0) { - addDiagRow(dataset, "Sem produtos apos filtros (busca: " + filtro.search + ")"); + var suffix = categoryDiag ? " | Categoria: " + categoryDiag : ""; + addDiagRow(dataset, "Sem produtos apos filtros (busca: " + filtro.search + ")" + suffix); } } catch (e) { @@ -126,9 +147,10 @@ function parseConstraints(constraints) { if (!c || !c.fieldName) continue; var name = String(c.fieldName); + var lowerName = name.toLowerCase(); var value = cleanSearchValue(c.initialValue); - if (name === "sqlLimit") { + if (lowerName === "sqllimit") { var n = parseInt(value, 10); if (!isNaN(n) && n > 0 && n <= 1000) { out.maxRows = n; @@ -138,9 +160,13 @@ function parseConstraints(constraints) { if ( value && - name !== "metadata#id" && - name !== "metadata#active" && - name !== "sqlLimit" + lowerName !== "metadata#id" && + lowerName !== "metadata#active" && + lowerName !== "sqllimit" && + lowerName !== "gbclientid" && + lowerName !== "gbclientsecret" && + lowerName !== "clientid" && + lowerName !== "clientsecret" ) { if (!out.search || value.length > out.search.length) { out.search = value; @@ -209,6 +235,205 @@ function extractItems(obj) { return []; } +function getConstraintValue(constraints, fieldName) { + if (!constraints || !fieldName) return ""; + var target = String(fieldName).toLowerCase(); + for (var i = 0; i < constraints.length; i++) { + var c = constraints[i]; + if (!c || !c.fieldName) continue; + if (String(c.fieldName).toLowerCase() === target) { + return c.initialValue; + } + } + return ""; +} + +function resolveGbCredentials(constraints) { + var clientId = trim(getConstraintValue(constraints, "gbClientId")); + if (!clientId) clientId = trim(getConstraintValue(constraints, "clientId")); + if (!clientId) { + try { clientId = trim(java.lang.System.getenv("GB_CLIENT_ID")); } catch (e1) {} + } + if (!clientId) clientId = DEFAULT_GB_CLIENT_ID; + + var clientSecret = trim(getConstraintValue(constraints, "gbClientSecret")); + if (!clientSecret) clientSecret = trim(getConstraintValue(constraints, "clientSecret")); + if (!clientSecret) { + try { clientSecret = trim(java.lang.System.getenv("GB_CLIENT_SECRET")); } catch (e2) {} + } + if (!clientSecret) clientSecret = DEFAULT_GB_CLIENT_SECRET; + + return { + clientId: clientId, + clientSecret: clientSecret + }; +} + +function loadStrategicCategoryMap(constraints, timeoutMs) { + var out = { map: {}, diag: "" }; + + var creds = resolveGbCredentials(constraints); + if (!creds.clientId || !creds.clientSecret) { + out.diag = "credenciais ausentes"; + return out; + } + + var tokenResp = requestGbToken(creds, timeoutMs || 30000); + if (!tokenResp.token) { + out.diag = tokenResp.diag || "falha ao obter token"; + return out; + } + + var strategicsResp = requestStrategics(tokenResp.token, timeoutMs || 30000); + var strategics = strategicsResp.items || []; + if (!strategics.length) { + out.diag = strategicsResp.diag || "sem classificacoes"; + return out; + } + + for (var i = 0; i < strategics.length; i++) { + var item = strategics[i] || {}; + var id = trim(item.strategicId || item.strategicID || item.id || item.code); + var descricao = trim(item.description || item.descricao || item.category || item.name); + if (!id || !descricao) continue; + out.map[id] = descricao; + } + + if (!hasOwnKeys(out.map)) { + out.diag = "classificacoes sem strategicId/description"; + } + + return out; +} + +function requestGbToken(creds, timeoutMs) { + var timeout = timeoutMs || 30000; + var body = "client_id=" + urlEncode(creds.clientId) + + "&client_secret=" + urlEncode(creds.clientSecret); + + var attempts = [ + { + name: "post-query-body", + method: "POST", + url: GB_TOKEN_URL + "?grant_type=client_credentials", + headers: { + "Accept": "application/json", + "Content-Type": "application/x-www-form-urlencoded" + }, + body: body + } + ]; + + var trace = []; + for (var i = 0; i < attempts.length; i++) { + var attempt = attempts[i]; + var resp = httpRequest(attempt.url, attempt.method, attempt.headers, attempt.body, timeout); + trace.push(attempt.name + ":" + trim(resp.status)); + var parsed = normalizeApiBody(resp.body); + var token = trim(parsed && (parsed.access_token || parsed.accessToken || parsed.token)); + if (token) { + return { token: token, diag: "token ok (" + attempt.name + ")" }; + } + } + + return { token: "", diag: "token falhou [" + trace.join(" | ") + "]" }; +} + +function requestStrategics(accessToken, timeoutMs) { + var resp = httpRequest( + GB_STRATEGICS_URL, + "GET", + { + "Accept": "application/json", + "Authorization": "Bearer " + trim(accessToken) + }, + "", + timeoutMs || 30000 + ); + + var parsed = normalizeApiBody(resp.body); + var items = extractItems(parsed); + if ((!items || !items.length) && parsed && parsed.items instanceof Array) { + items = parsed.items; + } + if ((!items || !items.length) && parsed && parsed.strategics instanceof Array) { + items = parsed.strategics; + } + + if (!items || !items.length) { + return { items: [], diag: "strategics HTTP " + trim(resp.status) }; + } + + return { items: items, diag: "ok" }; +} + +function resolveStrategicId(item, fallbackCode) { + var candidates = [ + item && item.strategicId, + item && item.strategicID, + item && item.classificationStrategicId, + item && item.productStrategicId, + item && item.estrategicId, + item && item.strategyId, + item && item.code, + fallbackCode + ]; + + for (var i = 0; i < candidates.length; i++) { + var value = trim(candidates[i]); + if (value) return value; + } + + return ""; +} + +function resolveCategory(map, strategicId) { + var id = trim(strategicId); + if (!id || !map) return ""; + + if (map.hasOwnProperty(id)) { + return trim(map[id]); + } + + var asInt = parseInt(id, 10); + if (!isNaN(asInt)) { + var normalized = String(asInt); + if (map.hasOwnProperty(normalized)) { + return trim(map[normalized]); + } + } + + return ""; +} + +function normalizeApiBody(text) { + var obj = parseJsonSafe(text); + if (!obj) return null; + + if (obj.content && typeof obj.content === "string") { + var parsedContent = parseJsonSafe(obj.content); + if (parsedContent) return parsedContent; + } + + if (obj.result && typeof obj.result === "string") { + var parsedResult = parseJsonSafe(obj.result); + if (parsedResult) return parsedResult; + } + + return obj; +} + +function hasOwnKeys(obj) { + for (var k in obj) { + if (obj.hasOwnProperty(k)) return true; + } + return false; +} + +function urlEncode(value) { + return String(java.net.URLEncoder.encode(String(value || ""), "UTF-8")); +} + function addDiagRow(dataset, msg) { dataset.addRow([ "DEBUG", @@ -223,23 +448,53 @@ function addDiagRow(dataset, msg) { } function fetchDirect(url, timeoutMs) { + return httpRequest( + url, + "GET", + { "Accept": "application/json" }, + "", + timeoutMs || 30000 + ); +} + +function httpRequest(url, method, headers, body, timeoutMs) { var conn = null; var reader = null; + var writer = null; try { var URL = java.net.URL; - var HttpURLConnection = java.net.HttpURLConnection; var InputStreamReader = java.io.InputStreamReader; var BufferedReader = java.io.BufferedReader; + var OutputStreamWriter = java.io.OutputStreamWriter; var StringBuilder = java.lang.StringBuilder; - conn = new URL(url).openConnection(); - conn.setRequestMethod("GET"); - conn.setConnectTimeout(timeoutMs || 30000); - conn.setReadTimeout(timeoutMs || 30000); - conn.setRequestProperty("Accept", "application/json"); + var httpMethod = String(method || "GET").toUpperCase(); + var timeout = timeoutMs || 30000; + var payload = body == null ? "" : String(body); - var status = conn.getResponseCode(); - var stream = (status >= 200 && status < 300) ? conn.getInputStream() : conn.getErrorStream(); + conn = new URL(url).openConnection(); + conn.setRequestMethod(httpMethod); + conn.setConnectTimeout(timeout); + conn.setReadTimeout(timeout); + + if (headers) { + for (var h in headers) { + if (!headers.hasOwnProperty(h)) continue; + if (headers[h] == null || headers[h] === "") continue; + conn.setRequestProperty(String(h), String(headers[h])); + } + } + + if (payload && (httpMethod === "POST" || httpMethod === "PUT" || httpMethod === "PATCH")) { + conn.setDoOutput(true); + writer = new OutputStreamWriter(conn.getOutputStream(), "UTF-8"); + writer.write(payload); + writer.flush(); + } + + var statusCode = conn.getResponseCode(); + var status = String(statusCode); + var stream = (statusCode >= 200 && statusCode < 300) ? conn.getInputStream() : conn.getErrorStream(); if (stream == null) { return { status: status, body: "" }; } @@ -251,14 +506,12 @@ function fetchDirect(url, timeoutMs) { sb.append(line); } - return { - status: status, - body: String(sb.toString()) - }; + return { status: status, body: String(sb.toString()) }; } catch (e) { - return { status: 0, body: "" }; + return { status: "", body: "" }; } finally { - try { if (reader) reader.close(); } catch (e1) {} - try { if (conn) conn.disconnect(); } catch (e2) {} + try { if (writer) writer.close(); } catch (e1) {} + try { if (reader) reader.close(); } catch (e2) {} + try { if (conn) conn.disconnect(); } catch (e3) {} } } diff --git a/Transferência Ginseng/datasets/ds_rgb_products_v2.js b/Transferência Ginseng/datasets/ds_rgb_products_v2.js new file mode 100644 index 0000000..cf0783c --- /dev/null +++ b/Transferência Ginseng/datasets/ds_rgb_products_v2.js @@ -0,0 +1,517 @@ +function defineStructure() { + addColumn("Code"); + addColumn("Description"); + addColumn("codigoDescricao"); + addColumn("descricao"); + addColumn("sku"); + addColumn("brand"); + addColumn("ncmId"); + addColumn("categoria"); +} + +function onSync(lastSyncDate) {} + +var GB_TOKEN_URL = "https://api.grupoboticario.com.br/global/v2/jwt-token/token"; +var GB_STRATEGICS_URL = "https://api.grupoboticario.com.br/global/v1/franchising/gb-stores-data/product/classification/strategics"; +var DEFAULT_GB_CLIENT_ID = "88ymKwAUNfu06sD85i0RiokCxWGSkFBkx9ytgI5y1ZKxX3OQ"; +var DEFAULT_GB_CLIENT_SECRET = "YDFz43qAzL6ApNIKVCxu3dAmS9GWOqJbcc2aPnFDkmEaBXexSpsHGfcItg56i2dE"; + +function createDataset(fields, constraints, sortFields) { + var dataset = DatasetBuilder.newDataset(); + dataset.addColumn("Code"); + dataset.addColumn("Description"); + dataset.addColumn("codigoDescricao"); + dataset.addColumn("descricao"); + dataset.addColumn("sku"); + dataset.addColumn("brand"); + dataset.addColumn("ncmId"); + dataset.addColumn("categoria"); + + try { + var filtro = parseConstraints(constraints); + var clientService = fluigAPI.getAuthorizeClientService(); + var data = { + companyId: String(getValue("WKCompany") || "1"), + serviceCode: "GINSENG APITESTE", + endpoint: "/dados_rgb_products", + method: "get", + timeoutService: "60000", + params: {} + }; + + var vo = clientService.invoke(JSON.stringify(data)); + var statusHttp = vo ? String(vo.getHttpStatusResult() || "") : ""; + var retorno = vo ? String(vo.getResult() || "") : ""; + + // Fallback: se o servico integrado estiver com endpoint/base incorreto, chama URL direta. + if (statusHttp !== "200" || !retorno) { + var direct = fetchDirect("https://api.grupoginseng.com.br/dados_rgb_products", 60000); + statusHttp = String(direct.status || statusHttp); + retorno = direct.body || retorno; + } + + if (!retorno) { + addDiagRow(dataset, "Sem retorno da API (HTTP " + statusHttp + ")"); + return dataset; + } + + var obj = parseJsonSafe(retorno); + if (!obj) { + addDiagRow(dataset, "Falha no JSON da API (HTTP " + statusHttp + ")"); + return dataset; + } + + var itens = extractItems(obj); + if (!itens || !itens.length) { + addDiagRow(dataset, "API sem itens (HTTP " + statusHttp + ")"); + return dataset; + } + + var searchNorm = normalize(filtro.search); + var maxRows = filtro.maxRows; + var categoryMap = null; + var categoryDiag = ""; + + for (var i = 0; i < itens.length; i++) { + var item = itens[i] || {}; + + if (item.discontinued === true) { + continue; + } + if (item.purchaseBlocked === true) { + continue; + } + + var code = trim(item.sku); + var desc = trim(item.description); + var codigoDescricao = code + " - " + desc; + var brand = trim(item.brand); + var categoria = trim(item.strategicDescription || item.strategic_description || item.categoria); + if (!categoria) { + if (categoryMap == null) { + var categorization = loadStrategicCategoryMap(constraints, 30000); + categoryMap = categorization.map || {}; + categoryDiag = categorization.diag || ""; + } + var strategicId = resolveStrategicId(item, code); + categoria = resolveCategory(categoryMap, strategicId); + } + var blob = normalize([code, desc, brand, trim(item.id), categoria].join(" ")); + + if (searchNorm && searchNorm.length >= 2 && blob.indexOf(searchNorm) === -1) { + continue; + } + + dataset.addRow([ + code, + desc, + codigoDescricao, + desc, + code, + brand, + trim(item.ncmId), + categoria + ]); + + if (maxRows > 0 && dataset.rowsCount >= maxRows) { + break; + } + } + + if (dataset.rowsCount === 0) { + var suffix = categoryDiag ? " | Categoria: " + categoryDiag : ""; + addDiagRow(dataset, "Sem produtos apos filtros (busca: " + filtro.search + ")" + suffix); + } + + } catch (e) { + addDiagRow(dataset, "Erro ao consultar API: " + e); + } + + return dataset; +} + +function onMobileSync(user) {} + +function parseConstraints(constraints) { + var out = { + search: "", + maxRows: 0 + }; + + if (!constraints) { + return out; + } + + for (var i = 0; i < constraints.length; i++) { + var c = constraints[i]; + if (!c || !c.fieldName) continue; + + var name = String(c.fieldName); + var lowerName = name.toLowerCase(); + var value = cleanSearchValue(c.initialValue); + + if (lowerName === "sqllimit") { + var n = parseInt(trim(c.initialValue), 10); + if (!isNaN(n) && n > 0) { + out.maxRows = n; + } + continue; + } + + if ( + value && + lowerName !== "metadata#id" && + lowerName !== "metadata#active" && + lowerName !== "sqllimit" && + lowerName !== "gbclientid" && + lowerName !== "gbclientsecret" && + lowerName !== "clientid" && + lowerName !== "clientsecret" + ) { + if (!out.search || value.length > out.search.length) { + out.search = value; + } + } + } + + return out; +} + +function cleanSearchValue(v) { + var s = trim(v); + s = s.replace(/[%*_]/g, ""); + // Evita que flags comuns do Fluig virem termo de busca + if (s === "true" || s === "false" || s === "on" || s === "off" || s === "1") { + return ""; + } + return trim(s); +} + +function normalize(v) { + return trim(v).toLowerCase(); +} + +function trim(v) { + return String(v == null ? "" : v).trim(); +} + +function parseJsonSafe(text) { + try { + return JSON.parse(text); + } catch (e) { + return null; + } +} + +function extractItems(obj) { + if (!obj) return []; + if (obj instanceof Array) return obj; + if (obj.data && obj.data instanceof Array) return obj.data; + + if (obj.content) { + if (obj.content instanceof Array) return obj.content; + if (typeof obj.content === "string") { + var parsedContent = parseJsonSafe(obj.content); + if (parsedContent && parsedContent.data && parsedContent.data instanceof Array) { + return parsedContent.data; + } + if (parsedContent && parsedContent instanceof Array) { + return parsedContent; + } + } + if (obj.content.data && obj.content.data instanceof Array) return obj.content.data; + } + + if (obj.result) { + if (obj.result instanceof Array) return obj.result; + if (typeof obj.result === "string") { + var parsedResult = parseJsonSafe(obj.result); + if (parsedResult && parsedResult.data && parsedResult.data instanceof Array) { + return parsedResult.data; + } + } + } + + return []; +} + +function getConstraintValue(constraints, fieldName) { + if (!constraints || !fieldName) return ""; + var target = String(fieldName).toLowerCase(); + for (var i = 0; i < constraints.length; i++) { + var c = constraints[i]; + if (!c || !c.fieldName) continue; + if (String(c.fieldName).toLowerCase() === target) { + return c.initialValue; + } + } + return ""; +} + +function resolveGbCredentials(constraints) { + var clientId = trim(getConstraintValue(constraints, "gbClientId")); + if (!clientId) clientId = trim(getConstraintValue(constraints, "clientId")); + if (!clientId) { + try { clientId = trim(java.lang.System.getenv("GB_CLIENT_ID")); } catch (e1) {} + } + if (!clientId) clientId = DEFAULT_GB_CLIENT_ID; + + var clientSecret = trim(getConstraintValue(constraints, "gbClientSecret")); + if (!clientSecret) clientSecret = trim(getConstraintValue(constraints, "clientSecret")); + if (!clientSecret) { + try { clientSecret = trim(java.lang.System.getenv("GB_CLIENT_SECRET")); } catch (e2) {} + } + if (!clientSecret) clientSecret = DEFAULT_GB_CLIENT_SECRET; + + return { + clientId: clientId, + clientSecret: clientSecret + }; +} + +function loadStrategicCategoryMap(constraints, timeoutMs) { + var out = { map: {}, diag: "" }; + + var creds = resolveGbCredentials(constraints); + if (!creds.clientId || !creds.clientSecret) { + out.diag = "credenciais ausentes"; + return out; + } + + var tokenResp = requestGbToken(creds, timeoutMs || 30000); + if (!tokenResp.token) { + out.diag = tokenResp.diag || "falha ao obter token"; + return out; + } + + var strategicsResp = requestStrategics(tokenResp.token, timeoutMs || 30000); + var strategics = strategicsResp.items || []; + if (!strategics.length) { + out.diag = strategicsResp.diag || "sem classificacoes"; + return out; + } + + for (var i = 0; i < strategics.length; i++) { + var item = strategics[i] || {}; + var id = trim(item.strategicId || item.strategicID || item.id || item.code); + var descricao = trim(item.description || item.descricao || item.category || item.name); + if (!id || !descricao) continue; + out.map[id] = descricao; + } + + if (!hasOwnKeys(out.map)) { + out.diag = "classificacoes sem strategicId/description"; + } + + return out; +} + +function requestGbToken(creds, timeoutMs) { + var timeout = timeoutMs || 30000; + var body = "client_id=" + urlEncode(creds.clientId) + + "&client_secret=" + urlEncode(creds.clientSecret); + + var attempts = [ + { + name: "post-query-body", + method: "POST", + url: GB_TOKEN_URL + "?grant_type=client_credentials", + headers: { + "Accept": "application/json", + "Content-Type": "application/x-www-form-urlencoded" + }, + body: body + } + ]; + + var trace = []; + for (var i = 0; i < attempts.length; i++) { + var attempt = attempts[i]; + var resp = httpRequest(attempt.url, attempt.method, attempt.headers, attempt.body, timeout); + trace.push(attempt.name + ":" + trim(resp.status)); + var parsed = normalizeApiBody(resp.body); + var token = trim(parsed && (parsed.access_token || parsed.accessToken || parsed.token)); + if (token) { + return { token: token, diag: "token ok (" + attempt.name + ")" }; + } + } + + return { token: "", diag: "token falhou [" + trace.join(" | ") + "]" }; +} + +function requestStrategics(accessToken, timeoutMs) { + var resp = httpRequest( + GB_STRATEGICS_URL, + "GET", + { + "Accept": "application/json", + "Authorization": "Bearer " + trim(accessToken) + }, + "", + timeoutMs || 30000 + ); + + var parsed = normalizeApiBody(resp.body); + var items = extractItems(parsed); + if ((!items || !items.length) && parsed && parsed.items instanceof Array) { + items = parsed.items; + } + if ((!items || !items.length) && parsed && parsed.strategics instanceof Array) { + items = parsed.strategics; + } + + if (!items || !items.length) { + return { items: [], diag: "strategics HTTP " + trim(resp.status) }; + } + + return { items: items, diag: "ok" }; +} + +function resolveStrategicId(item, fallbackCode) { + var candidates = [ + item && item.strategicId, + item && item.strategicID, + item && item.classificationStrategicId, + item && item.productStrategicId, + item && item.estrategicId, + item && item.strategyId, + item && item.code, + fallbackCode + ]; + + for (var i = 0; i < candidates.length; i++) { + var value = trim(candidates[i]); + if (value) return value; + } + + return ""; +} + +function resolveCategory(map, strategicId) { + var id = trim(strategicId); + if (!id || !map) return ""; + + if (map.hasOwnProperty(id)) { + return trim(map[id]); + } + + var asInt = parseInt(id, 10); + if (!isNaN(asInt)) { + var normalized = String(asInt); + if (map.hasOwnProperty(normalized)) { + return trim(map[normalized]); + } + } + + return ""; +} + +function normalizeApiBody(text) { + var obj = parseJsonSafe(text); + if (!obj) return null; + + if (obj.content && typeof obj.content === "string") { + var parsedContent = parseJsonSafe(obj.content); + if (parsedContent) return parsedContent; + } + + if (obj.result && typeof obj.result === "string") { + var parsedResult = parseJsonSafe(obj.result); + if (parsedResult) return parsedResult; + } + + return obj; +} + +function hasOwnKeys(obj) { + for (var k in obj) { + if (obj.hasOwnProperty(k)) return true; + } + return false; +} + +function urlEncode(value) { + return String(java.net.URLEncoder.encode(String(value || ""), "UTF-8")); +} + +function addDiagRow(dataset, msg) { + dataset.addRow([ + "DEBUG", + String(msg), + String(msg), + String(msg), + "", + "", + "", + "" + ]); +} + +function fetchDirect(url, timeoutMs) { + return httpRequest( + url, + "GET", + { "Accept": "application/json" }, + "", + timeoutMs || 30000 + ); +} + +function httpRequest(url, method, headers, body, timeoutMs) { + var conn = null; + var reader = null; + var writer = null; + try { + var URL = java.net.URL; + var InputStreamReader = java.io.InputStreamReader; + var BufferedReader = java.io.BufferedReader; + var OutputStreamWriter = java.io.OutputStreamWriter; + var StringBuilder = java.lang.StringBuilder; + + var httpMethod = String(method || "GET").toUpperCase(); + var timeout = timeoutMs || 30000; + var payload = body == null ? "" : String(body); + + conn = new URL(url).openConnection(); + conn.setRequestMethod(httpMethod); + conn.setConnectTimeout(timeout); + conn.setReadTimeout(timeout); + + if (headers) { + for (var h in headers) { + if (!headers.hasOwnProperty(h)) continue; + if (headers[h] == null || headers[h] === "") continue; + conn.setRequestProperty(String(h), String(headers[h])); + } + } + + if (payload && (httpMethod === "POST" || httpMethod === "PUT" || httpMethod === "PATCH")) { + conn.setDoOutput(true); + writer = new OutputStreamWriter(conn.getOutputStream(), "UTF-8"); + writer.write(payload); + writer.flush(); + } + + var statusCode = conn.getResponseCode(); + var status = String(statusCode); + var stream = (statusCode >= 200 && statusCode < 300) ? conn.getInputStream() : conn.getErrorStream(); + if (stream == null) { + return { status: status, body: "" }; + } + + reader = new BufferedReader(new InputStreamReader(stream, "UTF-8")); + var sb = new StringBuilder(); + var line = null; + while ((line = reader.readLine()) != null) { + sb.append(line); + } + + return { status: status, body: String(sb.toString()) }; + } catch (e) { + return { status: "", body: "" }; + } finally { + try { if (writer) writer.close(); } catch (e1) {} + try { if (reader) reader.close(); } catch (e2) {} + try { if (conn) conn.disconnect(); } catch (e3) {} + } +} diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/.metadata b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/.metadata index d744d9a4c92fc19bfc43edf285c95e04e7c13079..0a702dd8c51b71cedd8d2835ba50b1563b9c1c4b 100644 GIT binary patch delta 112 zcmeywa+Gz#6?Ud_76t|erj57L7$b`d8R{6=N*EYQ7$k%9b25`NOA?b4^W#g367!1F lQj1dak~0&*inxJV{0d4KI0B0DQ%Zqq@ad>1nC#A^4FKQ2B_IF* delta 29 lcmX@g`iW)26?VpQ76t|e#*Mer7}+Wc8R{7LCeLEh1^|jN2yp-a diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/excel.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/excel.js index e1d8155..893d865 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/excel.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/excel.js @@ -97,6 +97,7 @@ function processarArquivoExcel(file) { var codigo = getCellByAliases(item, ["codigoItem", "codigo", "codItem", "sku", "code", "item"]); var quantidade = getCellByAliases(item, ["quantidadeItem", "quantidade", "qtd", "qtde"]); var descricao = getCellByAliases(item, ["descricao", "description", "desc"]); + var categoria = getCellByAliases(item, ["categoria", "category"]); if (!codigo || !quantidade) { return; @@ -105,7 +106,8 @@ function processarArquivoExcel(file) { linhasValidas.push({ codigo: String(codigo).trim(), quantidade: String(quantidade).trim(), - descricao: String(descricao || "").trim() + descricao: String(descricao || "").trim(), + categoria: String(categoria || "").trim() }); }); @@ -141,6 +143,11 @@ function processarArquivoExcel(file) { if (descricaoFinal) { $("#codigoItem___" + idx).val(descricaoFinal); } + + var categoriaFinal = item.categoria || produtoInfo.categoria; + if (categoriaFinal) { + $("#categoriaItem___" + idx).val(categoriaFinal); + } }); if (typeof processarConferenciaNfe === "function") { @@ -192,16 +199,16 @@ function normalizeHeader(text) { function buscarProdutoPorCodigo(codigo) { try { if (typeof DatasetFactory === "undefined" || typeof ConstraintType === "undefined") { - return { descricao: "", id: "" }; + return { descricao: "", id: "", categoria: "" }; } var codigoTxt = String(codigo || "").trim(); - if (!codigoTxt) return { descricao: "", id: "" }; + if (!codigoTxt) return { descricao: "", id: "", categoria: "" }; var cCodigo = DatasetFactory.createConstraint("Code", codigoTxt, codigoTxt, ConstraintType.MUST); - var ds = DatasetFactory.getDataset("ds_rgb_products", null, [cCodigo], null); + var ds = DatasetFactory.getDataset("ds_rgb_products_v2", null, [cCodigo], null); if (!ds || !ds.values || !ds.values.length) { - return { descricao: "", id: "" }; + return { descricao: "", id: "", categoria: "" }; } for (var i = 0; i < ds.values.length; i++) { @@ -209,7 +216,8 @@ function buscarProdutoPorCodigo(codigo) { if (String(row.Code || "").trim() === codigoTxt) { return { descricao: String(row.descricao || row.Description || "").trim(), - id: String(row.id || "").trim() + id: String(row.id || "").trim(), + categoria: String(row.categoria || row.strategicDescription || "").trim() }; } } @@ -217,11 +225,12 @@ function buscarProdutoPorCodigo(codigo) { var first = ds.values[0] || {}; return { descricao: String(first.descricao || first.Description || "").trim(), - id: String(first.id || "").trim() + id: String(first.id || "").trim(), + categoria: String(first.categoria || first.strategicDescription || "").trim() }; } catch (e) { console.error("Erro ao buscar descricao por codigo:", e); - return { descricao: "", id: "" }; + return { descricao: "", id: "", categoria: "" }; } } diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js index 59e9ee1..535fd70 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js @@ -49,13 +49,15 @@ $(document).ready(function () { processarConferenciaNfe(); }); + var activity = String($("#activity").val() || ""); + applyTransferStatus(activity); + if ($("#formMode").val() == "VIEW") { showAndBlock(["all"]); $("#btnConsultarChaveNfe").prop("disabled", true).hide(); - updateConferenciaNfeVisibility($("#activity").val()); + updateConferenciaNfeVisibility(activity); } else { //show the right fields - var activity = $("#activity").val(); var requestDate = getCurrentDate(); if (String(activity) !== "6") { @@ -209,6 +211,40 @@ $(document).ready(function () { }); +function applyTransferStatus(activity) { + var current = String(activity || ""); + var pills = $("#transferStatus .status-pill"); + if (!pills.length) return; + + pills.removeClass("is-active is-done"); + + var activeOrder = -1; + pills.each(function () { + var pill = $(this); + var activities = String(pill.attr("data-activities") || "").split(","); + for (var i = 0; i < activities.length; i++) { + if ($.trim(activities[i]) === current) { + pill.addClass("is-active"); + var order = parseInt(pill.attr("data-order"), 10); + if (!isNaN(order)) { + activeOrder = order; + } + break; + } + } + }); + + if (activeOrder < 0) return; + + pills.each(function () { + var pill = $(this); + var order = parseInt(pill.attr("data-order"), 10); + if (!isNaN(order) && order < activeOrder) { + pill.addClass("is-done"); + } + }); +} + function resolveFormModeFallback() { var mode = ($("#formMode").val() || "").toUpperCase(); if (mode) return mode; @@ -1312,9 +1348,11 @@ function setSelectedZoomItem(selectedItem) { var itemDescricao = selectedItem["descricao"] || selectedItem["Description"] || ""; var itemCode = selectedItem["Code"] || selectedItem["sku"] || ""; var itemProductId = selectedItem["id"] || selectedItem["productId"] || ""; + var itemCategoria = selectedItem["categoria"] || selectedItem["strategicDescription"] || ""; $("#codigoItem" + "___" + indice).val(itemDescricao); $("#codigoProdutoItem" + "___" + indice).val(itemCode); $("#productIdItem" + "___" + indice).val(itemProductId); + $("#categoriaItem" + "___" + indice).val(itemCategoria); processarConferenciaNfe(); } @@ -1355,6 +1393,7 @@ function removedZoomItem(removedItem) { $("#codigoItem___" + linha[1]).val(""); $("#codigoProdutoItem___" + linha[1]).val(""); $("#productIdItem___" + linha[1]).val(""); + $("#categoriaItem___" + linha[1]).val(""); $("#quantidadeItem___" + linha[1]).val(""); processarConferenciaNfe(); } @@ -1364,6 +1403,7 @@ function removedZoomItem(removedItem) { $("#codigoItem" + "___" + indice).val(""); $("#codigoProdutoItem" + "___" + indice).val(""); $("#productIdItem" + "___" + indice).val(""); + $("#categoriaItem" + "___" + indice).val(""); processarConferenciaNfe(); } } diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html index 767928e..d9a87af 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html @@ -25,13 +25,40 @@ } .status-pill { - background: #e9f4ff; - color: #0d5b91; - border: 1px solid #c3def6; + background: #eef2f6; + color: #5f7080; + border: 1px solid #d3dde7; padding: 6px 12px; border-radius: 999px; font-size: 11px; font-weight: 600; + transition: all .2s ease; + } + + .status-pill.is-done { + background: #e8f7ed; + color: #1f6e3e; + border-color: #b8e3c4; + } + + .status-pill.is-active { + background: #e8f2ff; + color: #0e56a2; + border-color: #8fb8e8; + box-shadow: 0 0 0 2px rgba(31, 110, 169, 0.12); + } + + .status-pill.status-pill--problem.is-active { + background: #ffecec; + color: #a12f2f; + border-color: #efb1b1; + box-shadow: 0 0 0 2px rgba(199, 58, 58, 0.12); + } + + .status-pill.status-pill--problem.is-done { + background: #fff4e6; + color: #8a5c12; + border-color: #f2d3a2; } .transfer-main-title { @@ -216,11 +243,15 @@

-
- Solicitação - Coleta - Entrega - Recebimento +
+ Solicitação + Aprovação + Emissão NFe + Coleta + Entrega + Recebimento + Verificar Problema + Finalizada

Formulário de Transferência de Mercadorias

@@ -310,6 +341,7 @@ Código do item Quantidade Descrição + Categoria @@ -319,11 +351,12 @@ + + +
-
-
-
-
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+
+
+ +
+
+
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+
+
+ +
+
+
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+
+
+ +
+
+
+
+ + + +
+
+ + + +
+
+ + + +
@@ -926,7 +1030,35 @@ $("#msgJustificativa").show(); erro++; } - } if (activity == ANALISAR_DOCUMENTO) { + } + if (activity == ANALISAR_DOCUMENTO) { + var camposAnalistaObrigatorios = [ + { valor: $("#FILIAL").val(), classe: ".divFilialAnalista", help: "#filialAnalista" }, + { valor: $("#PREFIXO").val(), classe: ".divPrefixoAnalista", help: "#prefixoAnalista" }, + { valor: $("#NUMERO").val(), classe: ".divNumeroAnalista", help: "#numeroAnalista" }, + { valor: $("#PARCELA").val(), classe: ".divParcelaAnalista", help: "#parcelaAnalista" }, + { valor: $("#TIPO").val(), classe: ".divTipoAnalista", help: "#tipoAnalista" }, + { valor: $("#NATUREZA").val(), classe: ".divNaturezaAnalista", help: "#naturezaAnalista" }, + { valor: $("#COD_FORN").val(), classe: ".divCodFornAnalista", help: "#codFornAnalista" }, + { valor: $("#LOJA").val(), classe: ".divLojaAnalista", help: "#lojaAnalista" }, + { valor: $("#EMISSAO").val(), classe: ".divEmissaoAnalista", help: "#emissaoAnalista" }, + { valor: $("#VENCIMENTO").val(), classe: ".divVencimentoAnalista", help: "#vencimentoAnalista" }, + { valor: $("#VENC_REAL").val(), classe: ".divVencRealAnalista", help: "#vencRealAnalista" }, + { valor: $("#VALOR").val(), classe: ".divValorAnalista", help: "#valorAnalista" }, + { valor: $("#HISTORICO").val(), classe: ".divHistoricoAnalista", help: "#historicoAnalista" }, + { valor: $("#CENTRO_CUSTO").val(), classe: ".divCentroCustoAnalista", help: "#centroCustoAnalista" } + ]; + + for (var i = 0; i < camposAnalistaObrigatorios.length; i++) { + var campo = camposAnalistaObrigatorios[i]; + if (campo.valor == undefined || campo.valor == "" || campo.valor == null) { + $(campo.classe).addClass("has-error"); + $(campo.help).show(); + erro++; + } + } + + var justi_decisao_gestor = $("#justi_decisao_gestor").val(); if (justi_decisao_gestor == undefined || justi_decisao_gestor == "" || justi_decisao_gestor == null) { $(".divJustiDecisaoGestor").addClass("has-error"); $("#justiDecisaoGestor").show(); From 54ab21ef3b7a7571de51233de7c0f1dfe9037a0a Mon Sep 17 00:00:00 2001 From: "Andrey Cunh@" Date: Tue, 14 Apr 2026 08:37:19 -0300 Subject: [PATCH 14/25] att --- Ginseng_chamados/datasets/.project | 17 + .../datasets/.settings/.jsdtscope | 7 + ...rg.eclipse.wst.jsdt.ui.superType.container | 1 + .../org.eclipse.wst.jsdt.ui.superType.name | 1 + Ginseng_chamados/forms/.project | 17 + Ginseng_chamados/forms/.settings/.jsdtscope | 7 + ...rg.eclipse.wst.jsdt.ui.superType.container | 1 + .../org.eclipse.wst.jsdt.ui.superType.name | 1 + Lançamento de documentos/.vscode/servers.json | 7 +- .../.metadata | Bin 730 -> 827 bytes .../totvsflow_lancamento_documento.html | 183 ++++- .../.settings/org.eclipse.core.resources.prefs | 61 ++ Transferência Ginseng/.vscode/servers.json | 13 + .../datasets/ds_LojasTransf.js | 2 +- .../datasets/ds_fiscal_invoice_by_keys.js | 344 ++++++-- .../datasets/ds_rgb_products_v2.js | 2 +- .../.metadata | Bin 709 -> 692 bytes .../events/validateForm.js | 2 +- .../script.js | 523 ++++++++++-- .../totvsflow_solicitacao_transferencia.html | 59 +- .../src/main/resources/application.info | 19 + .../wdtransf/src/main/resources/edit.ftl | 5 + .../wdtransf/src/main/resources/view.ftl | 97 +++ .../src/main/resources/wdtransf.properties | 2 + .../main/resources/wdtransf_en_US.properties | 2 + .../src/main/resources/wdtransf_es.properties | 2 + .../main/resources/wdtransf_pt_BR.properties | 2 + .../src/main/webapp/WEB-INF/jboss-web.xml | 5 + .../wdtransf/src/main/webapp/WEB-INF/web.xml | 12 + .../src/main/webapp/resources/css/wdtransf.css | 277 +++++++ .../src/main/webapp/resources/images/icon.png | Bin 0 -> 7845 bytes .../src/main/webapp/resources/js/wdtransf.js | 570 ++++++++++++++ .../wcm/widget/wdtransf/target/wdtransf.war | Bin 0 -> 16612 bytes .../src/main/resources/application.info | 19 + .../src/main/resources/edit.ftl | 5 + .../src/main/resources/view.ftl | 11 + .../main/resources/wdtransfanalista.properties | 2 + .../wdtransfanalista_en_US.properties | 2 + .../resources/wdtransfanalista_es.properties | 2 + .../wdtransfanalista_pt_BR.properties | 2 + .../src/main/webapp/WEB-INF/jboss-web.xml | 5 + .../src/main/webapp/WEB-INF/web.xml | 12 + .../webapp/resources/css/wdtransfanalista.css | 181 +++++ .../src/main/webapp/resources/images/icon.png | Bin 0 -> 7845 bytes .../webapp/resources/js/wdtransfanalista.js | 446 +++++++++++ .../target/wdtransfanalista.war | Bin 0 -> 15195 bytes .../src/main/resources/application.info | 19 + .../wdtransfloja/src/main/resources/edit.ftl | 5 + .../wdtransfloja/src/main/resources/view.ftl | 11 + .../src/main/resources/wdtransfloja.properties | 2 + .../resources/wdtransfloja_en_US.properties | 2 + .../main/resources/wdtransfloja_es.properties | 2 + .../resources/wdtransfloja_pt_BR.properties | 2 + .../src/main/webapp/WEB-INF/jboss-web.xml | 5 + .../src/main/webapp/WEB-INF/web.xml | 12 + .../main/webapp/resources/css/wdtransfloja.css | 181 +++++ .../src/main/webapp/resources/images/icon.png | Bin 0 -> 7845 bytes .../main/webapp/resources/js/wdtransfloja.js | 447 +++++++++++ .../wdtransfloja/target/wdtransfloja.war | Bin 0 -> 15154 bytes .../src/main/resources/application.info | 19 + .../src/main/resources/edit.ftl | 5 + .../src/main/resources/view.ftl | 11 + .../resources/wdtransfmotorista.properties | 2 + .../wdtransfmotorista_en_US.properties | 2 + .../resources/wdtransfmotorista_es.properties | 2 + .../wdtransfmotorista_pt_BR.properties | 2 + .../src/main/webapp/WEB-INF/jboss-web.xml | 5 + .../src/main/webapp/WEB-INF/web.xml | 12 + .../webapp/resources/css/wdtransfmotorista.css | 181 +++++ .../src/main/webapp/resources/images/icon.png | Bin 0 -> 7845 bytes .../webapp/resources/js/wdtransfmotorista.js | 447 +++++++++++ .../target/wdtransfmotorista.war | Bin 0 -> 15215 bytes .../src/main/resources/application.info | 19 + .../wdtransfreg/src/main/resources/edit.ftl | 5 + .../wdtransfreg/src/main/resources/view.ftl | 11 + .../src/main/resources/wdtransfreg.properties | 2 + .../resources/wdtransfreg_en_US.properties | 2 + .../main/resources/wdtransfreg_es.properties | 2 + .../resources/wdtransfreg_pt_BR.properties | 2 + .../src/main/webapp/WEB-INF/jboss-web.xml | 5 + .../src/main/webapp/WEB-INF/web.xml | 12 + .../main/webapp/resources/css/wdtransfreg.css | 181 +++++ .../src/main/webapp/resources/images/icon.png | Bin 0 -> 7845 bytes .../main/webapp/resources/js/wdtransfreg.js | 447 +++++++++++ .../widget/wdtransfreg/target/wdtransfreg.war | Bin 0 -> 15116 bytes .../workflow/.resources/Producao.ws.cache | 743 ++++++++++++++++++ .../Solicitação de transferência.ecm30.xml | 112 ++- .../Solicitação de transferência.png | Bin 56278 -> 50256 bytes ...licitação de transferência.processimage.svg | 2 +- .../Solicitação de transferência.process | 4 +- ...icitação de transferência.beforeTaskSave.js | 2 +- 91 files changed, 5660 insertions(+), 195 deletions(-) create mode 100644 Ginseng_chamados/datasets/.project create mode 100644 Ginseng_chamados/datasets/.settings/.jsdtscope create mode 100644 Ginseng_chamados/datasets/.settings/org.eclipse.wst.jsdt.ui.superType.container create mode 100644 Ginseng_chamados/datasets/.settings/org.eclipse.wst.jsdt.ui.superType.name create mode 100644 Ginseng_chamados/forms/.project create mode 100644 Ginseng_chamados/forms/.settings/.jsdtscope create mode 100644 Ginseng_chamados/forms/.settings/org.eclipse.wst.jsdt.ui.superType.container create mode 100644 Ginseng_chamados/forms/.settings/org.eclipse.wst.jsdt.ui.superType.name create mode 100644 Transferência Ginseng/.settings/org.eclipse.core.resources.prefs create mode 100644 Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/application.info create mode 100644 Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/edit.ftl create mode 100644 Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/view.ftl create mode 100644 Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/wdtransf.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/wdtransf_en_US.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/wdtransf_es.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/wdtransf_pt_BR.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/WEB-INF/jboss-web.xml create mode 100644 Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/WEB-INF/web.xml create mode 100644 Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/resources/css/wdtransf.css create mode 100644 Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/resources/images/icon.png create mode 100644 Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/resources/js/wdtransf.js create mode 100644 Transferência Ginseng/wcm/widget/wdtransf/target/wdtransf.war create mode 100644 Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/application.info create mode 100644 Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/edit.ftl create mode 100644 Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/view.ftl create mode 100644 Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista_en_US.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista_es.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista_pt_BR.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/WEB-INF/jboss-web.xml create mode 100644 Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/WEB-INF/web.xml create mode 100644 Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/resources/css/wdtransfanalista.css create mode 100644 Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/resources/images/icon.png create mode 100644 Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/resources/js/wdtransfanalista.js create mode 100644 Transferência Ginseng/wcm/widget/wdtransfanalista/target/wdtransfanalista.war create mode 100644 Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/application.info create mode 100644 Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/edit.ftl create mode 100644 Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/view.ftl create mode 100644 Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/wdtransfloja.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/wdtransfloja_en_US.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/wdtransfloja_es.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/wdtransfloja_pt_BR.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/WEB-INF/jboss-web.xml create mode 100644 Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/WEB-INF/web.xml create mode 100644 Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/resources/css/wdtransfloja.css create mode 100644 Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/resources/images/icon.png create mode 100644 Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/resources/js/wdtransfloja.js create mode 100644 Transferência Ginseng/wcm/widget/wdtransfloja/target/wdtransfloja.war create mode 100644 Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/application.info create mode 100644 Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/edit.ftl create mode 100644 Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/view.ftl create mode 100644 Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista_en_US.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista_es.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista_pt_BR.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/WEB-INF/jboss-web.xml create mode 100644 Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/WEB-INF/web.xml create mode 100644 Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/resources/css/wdtransfmotorista.css create mode 100644 Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/resources/images/icon.png create mode 100644 Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/resources/js/wdtransfmotorista.js create mode 100644 Transferência Ginseng/wcm/widget/wdtransfmotorista/target/wdtransfmotorista.war create mode 100644 Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/application.info create mode 100644 Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/edit.ftl create mode 100644 Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/view.ftl create mode 100644 Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/wdtransfreg.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/wdtransfreg_en_US.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/wdtransfreg_es.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/wdtransfreg_pt_BR.properties create mode 100644 Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/WEB-INF/jboss-web.xml create mode 100644 Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/WEB-INF/web.xml create mode 100644 Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/resources/css/wdtransfreg.css create mode 100644 Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/resources/images/icon.png create mode 100644 Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/resources/js/wdtransfreg.js create mode 100644 Transferência Ginseng/wcm/widget/wdtransfreg/target/wdtransfreg.war diff --git a/Ginseng_chamados/datasets/.project b/Ginseng_chamados/datasets/.project new file mode 100644 index 0000000..2fb354a --- /dev/null +++ b/Ginseng_chamados/datasets/.project @@ -0,0 +1,17 @@ + + + datasets + + + + + + org.eclipse.wst.validation.validationbuilder + + + + + + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/Ginseng_chamados/datasets/.settings/.jsdtscope b/Ginseng_chamados/datasets/.settings/.jsdtscope new file mode 100644 index 0000000..cca691f --- /dev/null +++ b/Ginseng_chamados/datasets/.settings/.jsdtscope @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Ginseng_chamados/datasets/.settings/org.eclipse.wst.jsdt.ui.superType.container b/Ginseng_chamados/datasets/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000..49c8cd4 --- /dev/null +++ b/Ginseng_chamados/datasets/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.JRE_CONTAINER \ No newline at end of file diff --git a/Ginseng_chamados/datasets/.settings/org.eclipse.wst.jsdt.ui.superType.name b/Ginseng_chamados/datasets/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 0000000..11006e2 --- /dev/null +++ b/Ginseng_chamados/datasets/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Global \ No newline at end of file diff --git a/Ginseng_chamados/forms/.project b/Ginseng_chamados/forms/.project new file mode 100644 index 0000000..e269f56 --- /dev/null +++ b/Ginseng_chamados/forms/.project @@ -0,0 +1,17 @@ + + + forms + + + + + + org.eclipse.wst.validation.validationbuilder + + + + + + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/Ginseng_chamados/forms/.settings/.jsdtscope b/Ginseng_chamados/forms/.settings/.jsdtscope new file mode 100644 index 0000000..cca691f --- /dev/null +++ b/Ginseng_chamados/forms/.settings/.jsdtscope @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Ginseng_chamados/forms/.settings/org.eclipse.wst.jsdt.ui.superType.container b/Ginseng_chamados/forms/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000..49c8cd4 --- /dev/null +++ b/Ginseng_chamados/forms/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.JRE_CONTAINER \ No newline at end of file diff --git a/Ginseng_chamados/forms/.settings/org.eclipse.wst.jsdt.ui.superType.name b/Ginseng_chamados/forms/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 0000000..11006e2 --- /dev/null +++ b/Ginseng_chamados/forms/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Global \ No newline at end of file diff --git a/Lançamento de documentos/.vscode/servers.json b/Lançamento de documentos/.vscode/servers.json index 9854b91..0c5f368 100644 --- a/Lançamento de documentos/.vscode/servers.json +++ b/Lançamento de documentos/.vscode/servers.json @@ -2,15 +2,16 @@ "version": "1.0.0", "configurations": [ { - "id": "cafi5jey9zammnjzp2n5z2h8lutld7", - "name": "Fluig produção", + "id": "kcd262syqgmnhlewwba1vu2pgu6b", + "name": "Fluig producao", "host": "comerciode188006.fluig.cloudtotvs.com.br", "ssl": true, "port": 443, "username": "andrey.cunha", - "password": "eyJpdiI6ImQwNjBhYWU1NzM3ZjVhNzU0ZWExOWYwZGZiNDEzNWI3Iiwic2FsdCI6IjQ0NmVjYTQ4OTY3ZWViOTc3NmRjY2E4M2UyYzc2NGViIiwidGV4dCI6ImNmZWRiYzFlODFjY2EwOTUzOWZlMGVlMTMzZWIwNzA0In0=", + "password": "eyJpdiI6IjM5OWJjNjRiOGQ3Yjg5ZWEwYzk0Yzk4NWU5YjI5ODk4Iiwic2FsdCI6ImZjMzVmM2FmMDRhNjljNjA1YThiYzJjYTI5ZjU3NTgyIiwidGV4dCI6ImYwNDA2ZWYxOTM1N2FmMzYyYWZiODc4ZThjMmMzM2ZiIn0=", "userCode": "andrey.cunha", "confirmExporting": false, + "hasBrowser": false, "companyId": 1 } ] diff --git a/Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/.metadata b/Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/.metadata index ab065a3796ca7b1c09e8a57a09c94f9c167f3531..6d0b785d06b0e5c99f36e7b85e4a51691ebacef0 100644 GIT binary patch delta 50 zcmcb`x|?mn6?W!w76t|e=8d;6GfsA9GUwn3D9TSMO-`KL!=%n4Rl=Y=c> -

Lançamento de documento

+

Lanamento de documento

@@ -90,7 +90,7 @@

 Dados do documento 

-
Dados referentes ao documento que será lançado.
+
Dados referentes ao documento que ser lanado.

@@ -113,11 +113,11 @@ + obrigatrio

- + *
- + Tipo de cadastro * + obrigatrio

* @@ -176,7 +176,7 @@ mask="00.000.000/0000-00" class="form-control" readonly /> + obrigatrio

@@ -199,7 +199,7 @@ />

@@ -207,8 +207,9 @@
@@ -219,13 +220,13 @@
- * + * + obrigatrio

@@ -245,8 +246,8 @@ * -

Utilize a aba anexos para anexar o documento ou o botão - abaixo. Anexo obrigatório.

+

Utilize a aba anexos para anexar o documento ou o boto + abaixo. Anexo obrigatrio.

@@ -258,21 +259,21 @@

 Descrição dos serviços +  Descrio dos servios  

-
Descrição detalhada dos serviços prestados e as possíveis informações complementares.
+
Descrio detalhada dos servios prestados e as possveis informaes complementares.

- Descrio dos servios * + obrigatrio

@@ -294,10 +295,10 @@
-
-
-
-
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+
+
+ +
+
+
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+
+
+ +
+
+
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+
+
+ +
+
+
+
+ + + +
+
+ + + +
+
+ + + +
@@ -926,7 +1031,35 @@ $("#msgJustificativa").show(); erro++; } - } if (activity == ANALISAR_DOCUMENTO) { + } + if (activity == ANALISAR_DOCUMENTO) { + var camposAnalistaObrigatorios = [ + { valor: $("#FILIAL").val(), classe: ".divFilialAnalista", help: "#filialAnalista" }, + { valor: $("#PREFIXO").val(), classe: ".divPrefixoAnalista", help: "#prefixoAnalista" }, + { valor: $("#NUMERO").val(), classe: ".divNumeroAnalista", help: "#numeroAnalista" }, + { valor: $("#PARCELA").val(), classe: ".divParcelaAnalista", help: "#parcelaAnalista" }, + { valor: $("#TIPO").val(), classe: ".divTipoAnalista", help: "#tipoAnalista" }, + { valor: $("#NATUREZA").val(), classe: ".divNaturezaAnalista", help: "#naturezaAnalista" }, + { valor: $("#COD_FORN").val(), classe: ".divCodFornAnalista", help: "#codFornAnalista" }, + { valor: $("#LOJA").val(), classe: ".divLojaAnalista", help: "#lojaAnalista" }, + { valor: $("#EMISSAO").val(), classe: ".divEmissaoAnalista", help: "#emissaoAnalista" }, + { valor: $("#VENCIMENTO").val(), classe: ".divVencimentoAnalista", help: "#vencimentoAnalista" }, + { valor: $("#VENC_REAL").val(), classe: ".divVencRealAnalista", help: "#vencRealAnalista" }, + { valor: $("#VALOR").val(), classe: ".divValorAnalista", help: "#valorAnalista" }, + { valor: $("#HISTORICO").val(), classe: ".divHistoricoAnalista", help: "#historicoAnalista" }, + { valor: $("#CENTRO_CUSTO").val(), classe: ".divCentroCustoAnalista", help: "#centroCustoAnalista" } + ]; + + for (var i = 0; i < camposAnalistaObrigatorios.length; i++) { + var campo = camposAnalistaObrigatorios[i]; + if (campo.valor == undefined || campo.valor == "" || campo.valor == null) { + $(campo.classe).addClass("has-error"); + $(campo.help).show(); + erro++; + } + } + + var justi_decisao_gestor = $("#justi_decisao_gestor").val(); if (justi_decisao_gestor == undefined || justi_decisao_gestor == "" || justi_decisao_gestor == null) { $(".divJustiDecisaoGestor").addClass("has-error"); $("#justiDecisaoGestor").show(); diff --git a/Transferência Ginseng/.settings/org.eclipse.core.resources.prefs b/Transferência Ginseng/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..5fed4cd --- /dev/null +++ b/Transferência Ginseng/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,61 @@ +eclipse.preferences.version=1 +encoding//wcm/widget/wdtransf/src/main/resources/application.info=utf8 +encoding//wcm/widget/wdtransf/src/main/resources/edit.ftl=utf8 +encoding//wcm/widget/wdtransf/src/main/resources/view.ftl=utf8 +encoding//wcm/widget/wdtransf/src/main/resources/wdtransf.properties=utf8 +encoding//wcm/widget/wdtransf/src/main/resources/wdtransf_en_US.properties=utf8 +encoding//wcm/widget/wdtransf/src/main/resources/wdtransf_es.properties=utf8 +encoding//wcm/widget/wdtransf/src/main/resources/wdtransf_pt_BR.properties=utf8 +encoding//wcm/widget/wdtransf/src/main/webapp/WEB-INF/jboss-web.xml=utf8 +encoding//wcm/widget/wdtransf/src/main/webapp/WEB-INF/web.xml=utf8 +encoding//wcm/widget/wdtransf/src/main/webapp/resources/css/wdtransf.css=utf8 +encoding//wcm/widget/wdtransf/src/main/webapp/resources/images/icon.png=utf8 +encoding//wcm/widget/wdtransf/src/main/webapp/resources/js/wdtransf.js=utf8 +encoding//wcm/widget/wdtransfanalista/src/main/resources/application.info=utf8 +encoding//wcm/widget/wdtransfanalista/src/main/resources/edit.ftl=utf8 +encoding//wcm/widget/wdtransfanalista/src/main/resources/view.ftl=utf8 +encoding//wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista.properties=utf8 +encoding//wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista_en_US.properties=utf8 +encoding//wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista_es.properties=utf8 +encoding//wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista_pt_BR.properties=utf8 +encoding//wcm/widget/wdtransfanalista/src/main/webapp/WEB-INF/jboss-web.xml=utf8 +encoding//wcm/widget/wdtransfanalista/src/main/webapp/WEB-INF/web.xml=utf8 +encoding//wcm/widget/wdtransfanalista/src/main/webapp/resources/css/wdtransfanalista.css=utf8 +encoding//wcm/widget/wdtransfanalista/src/main/webapp/resources/images/icon.png=utf8 +encoding//wcm/widget/wdtransfanalista/src/main/webapp/resources/js/wdtransfanalista.js=utf8 +encoding//wcm/widget/wdtransfloja/src/main/resources/application.info=utf8 +encoding//wcm/widget/wdtransfloja/src/main/resources/edit.ftl=utf8 +encoding//wcm/widget/wdtransfloja/src/main/resources/view.ftl=utf8 +encoding//wcm/widget/wdtransfloja/src/main/resources/wdtransfloja.properties=utf8 +encoding//wcm/widget/wdtransfloja/src/main/resources/wdtransfloja_en_US.properties=utf8 +encoding//wcm/widget/wdtransfloja/src/main/resources/wdtransfloja_es.properties=utf8 +encoding//wcm/widget/wdtransfloja/src/main/resources/wdtransfloja_pt_BR.properties=utf8 +encoding//wcm/widget/wdtransfloja/src/main/webapp/WEB-INF/jboss-web.xml=utf8 +encoding//wcm/widget/wdtransfloja/src/main/webapp/WEB-INF/web.xml=utf8 +encoding//wcm/widget/wdtransfloja/src/main/webapp/resources/css/wdtransfloja.css=utf8 +encoding//wcm/widget/wdtransfloja/src/main/webapp/resources/images/icon.png=utf8 +encoding//wcm/widget/wdtransfloja/src/main/webapp/resources/js/wdtransfloja.js=utf8 +encoding//wcm/widget/wdtransfmotorista/src/main/resources/application.info=utf8 +encoding//wcm/widget/wdtransfmotorista/src/main/resources/edit.ftl=utf8 +encoding//wcm/widget/wdtransfmotorista/src/main/resources/view.ftl=utf8 +encoding//wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista.properties=utf8 +encoding//wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista_en_US.properties=utf8 +encoding//wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista_es.properties=utf8 +encoding//wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista_pt_BR.properties=utf8 +encoding//wcm/widget/wdtransfmotorista/src/main/webapp/WEB-INF/jboss-web.xml=utf8 +encoding//wcm/widget/wdtransfmotorista/src/main/webapp/WEB-INF/web.xml=utf8 +encoding//wcm/widget/wdtransfmotorista/src/main/webapp/resources/css/wdtransfmotorista.css=utf8 +encoding//wcm/widget/wdtransfmotorista/src/main/webapp/resources/images/icon.png=utf8 +encoding//wcm/widget/wdtransfmotorista/src/main/webapp/resources/js/wdtransfmotorista.js=utf8 +encoding//wcm/widget/wdtransfreg/src/main/resources/application.info=utf8 +encoding//wcm/widget/wdtransfreg/src/main/resources/edit.ftl=utf8 +encoding//wcm/widget/wdtransfreg/src/main/resources/view.ftl=utf8 +encoding//wcm/widget/wdtransfreg/src/main/resources/wdtransfreg.properties=utf8 +encoding//wcm/widget/wdtransfreg/src/main/resources/wdtransfreg_en_US.properties=utf8 +encoding//wcm/widget/wdtransfreg/src/main/resources/wdtransfreg_es.properties=utf8 +encoding//wcm/widget/wdtransfreg/src/main/resources/wdtransfreg_pt_BR.properties=utf8 +encoding//wcm/widget/wdtransfreg/src/main/webapp/WEB-INF/jboss-web.xml=utf8 +encoding//wcm/widget/wdtransfreg/src/main/webapp/WEB-INF/web.xml=utf8 +encoding//wcm/widget/wdtransfreg/src/main/webapp/resources/css/wdtransfreg.css=utf8 +encoding//wcm/widget/wdtransfreg/src/main/webapp/resources/images/icon.png=utf8 +encoding//wcm/widget/wdtransfreg/src/main/webapp/resources/js/wdtransfreg.js=utf8 diff --git a/Transferência Ginseng/.vscode/servers.json b/Transferência Ginseng/.vscode/servers.json index 4a764ca..a51223c 100644 --- a/Transferência Ginseng/.vscode/servers.json +++ b/Transferência Ginseng/.vscode/servers.json @@ -13,6 +13,19 @@ "confirmExporting": false, "hasBrowser": false, "companyId": 1 + }, + { + "id": "ktaxtphdhzqmn8tbsn4t14t2skqwo", + "name": "Producao", + "host": "comerciode188006.fluig.cloudtotvs.com.br", + "ssl": true, + "port": 443, + "username": "andrey.cunha", + "password": "eyJpdiI6ImFmYzY2MWIzNmNmMTNhYTRkZTUyZGVjZjFhOWJjMmI2Iiwic2FsdCI6ImNhMTQ4ZWIxMjAzMDQyZDM5MGY0YzVlM2Y3ZjUyMmUwIiwidGV4dCI6IjRhZjUwNjcxMzFkZjljYmVlOGI5Y2JjNzU2ZmRiMWYyIn0=", + "userCode": "andrey.cunha", + "confirmExporting": false, + "hasBrowser": false, + "companyId": 1 } ] } \ No newline at end of file diff --git a/Transferência Ginseng/datasets/ds_LojasTransf.js b/Transferência Ginseng/datasets/ds_LojasTransf.js index 1273d55..63db996 100644 --- a/Transferência Ginseng/datasets/ds_LojasTransf.js +++ b/Transferência Ginseng/datasets/ds_LojasTransf.js @@ -119,7 +119,7 @@ function parseConstraints(constraints) { var out = { pdv: "", loja: "", - onlyAtivo: true, + onlyAtivo: false, termoLivre: "" }; diff --git a/Transferência Ginseng/datasets/ds_fiscal_invoice_by_keys.js b/Transferência Ginseng/datasets/ds_fiscal_invoice_by_keys.js index 259ac84..99642cf 100644 --- a/Transferência Ginseng/datasets/ds_fiscal_invoice_by_keys.js +++ b/Transferência Ginseng/datasets/ds_fiscal_invoice_by_keys.js @@ -38,14 +38,14 @@ function createDataset(fields, constraints, sortFields) { } var auth = resolveAuth(constraints); + var authVariants = buildAuthVariants(auth); var diagnostics = []; + var query = "page=1&page_size=50&key=" + key + "&sort_by=updatedAt&sort_order=desc"; var endpoints = [ - "/fiscal-invoices?key=" + key, - "fiscal-invoices?key=" + key, - "/fiscal/invoices?key=" + key, - "/fiscal/invoice?key=" + key, - "/invoice?key=" + key + "/v2/vendas/rgb-transferencias?" + query, + "v2/vendas/rgb-transferencias?" + query, + "/rgb-transferencias?" + query ]; var apiObj = null; @@ -56,15 +56,21 @@ function createDataset(fields, constraints, sortFields) { var clientService = fluigAPI.getAuthorizeClientService(); for (var i = 0; i < endpoints.length; i++) { var endpoint = endpoints[i]; - var resp = invokeAuthorizedGet(clientService, endpoint, auth); - diagnostics.push(endpoint + " => HTTP " + trim(resp.status)); - var parsed = parseApiPayload(resp.body); - if (parsed && trim(parsed.message)) { - lastApiMessage = trim(parsed.message); + for (var a = 0; a < authVariants.length; a++) { + var authVariant = authVariants[a]; + var resp = invokeAuthorizedGet(clientService, endpoint, authVariant); + diagnostics.push(endpoint + " [" + authVariant.name + "] => HTTP " + trim(resp.status)); + var parsed = parseApiPayload(resp.body); + if (parsed && trim(parsed.message)) { + lastApiMessage = trim(parsed.message); + } + if (String(resp.status) === "200" && isApiSuccess(parsed)) { + apiObj = parsed; + hitInfo = endpoint + " [" + authVariant.name + "]"; + break; + } } - if (String(resp.status) === "200" && isApiSuccess(parsed)) { - apiObj = parsed; - hitInfo = endpoint; + if (apiObj) { break; } } @@ -74,21 +80,26 @@ function createDataset(fields, constraints, sortFields) { if (!apiObj) { var directUrls = [ - "https://api.grupoginseng.com.br/fiscal-invoices?key=" + key, - "https://api.grupoginseng.com.br/fiscal/invoice?key=" + key + "https://api.grupoginseng.com.br/v2/vendas/rgb-transferencias?" + query ]; for (var d = 0; d < directUrls.length; d++) { var url = directUrls[d]; - var directResp = fetchDirect(url, 30000, auth); - diagnostics.push(url + " => HTTP " + trim(directResp.status)); - var parsedDirect = parseApiPayload(directResp.body); - if (parsedDirect && trim(parsedDirect.message)) { - lastApiMessage = trim(parsedDirect.message); + for (var da = 0; da < authVariants.length; da++) { + var directAuthVariant = authVariants[da]; + var directResp = fetchDirect(url, 30000, directAuthVariant); + diagnostics.push(url + " [" + directAuthVariant.name + "] => HTTP " + trim(directResp.status)); + var parsedDirect = parseApiPayload(directResp.body); + if (parsedDirect && trim(parsedDirect.message)) { + lastApiMessage = trim(parsedDirect.message); + } + if (String(directResp.status) === "200" && isApiSuccess(parsedDirect)) { + apiObj = parsedDirect; + hitInfo = url + " [" + directAuthVariant.name + "]"; + break; + } } - if (String(directResp.status) === "200" && isApiSuccess(parsedDirect)) { - apiObj = parsedDirect; - hitInfo = url; + if (apiObj) { break; } } @@ -103,34 +114,33 @@ function createDataset(fields, constraints, sortFields) { return dataset; } - if (!apiObj.success || !apiObj.data) { + var dataNfe = extractInvoiceData(apiObj, key); + if (!dataNfe) { addErrorRow(dataset, trim(apiObj.message) || "NFe nao encontrada. Fonte: " + hitInfo); return dataset; } - - var dataNfe = apiObj.data || {}; - var itens = dataNfe.itens || []; + var itens = resolveItems(dataNfe); var itensJson = JSON.stringify(buildNfeItems(itens)); dataset.addRow([ "true", "OK (" + hitInfo + ")", - trim(dataNfe.key), - trim(dataNfe.invoiceNumber), - trim(dataNfe.serie), - formatIsoDate(dataNfe.emissionDate), - formatIsoDate(dataNfe.operationDate), - trim(dataNfe.supplierName), - trim(dataNfe.documentValue), - trim(dataNfe.totalItemsValue), - trim(dataNfe.situation), - trim(dataNfe.fiscalOperationDescription), + trim(dataNfe.key || dataNfe.nfeKey || dataNfe.chave || key), + trim(dataNfe.invoiceNumber || dataNfe.numeroNota || dataNfe.numero || dataNfe.number), + trim(dataNfe.serie || dataNfe.series), + formatIsoDate(dataNfe.emissionDate || dataNfe.issueDate || dataNfe.invoiceDate), + formatIsoDate(dataNfe.operationDate || dataNfe.transactionDate || dataNfe.operation_at), + trim(dataNfe.supplierName || dataNfe.supplier || dataNfe.fornecedor || dataNfe.emitente), + trim(dataNfe.documentValue || dataNfe.totalValue || dataNfe.valorDocumento || dataNfe.amount), + trim(dataNfe.totalItemsValue || dataNfe.itemsValue || dataNfe.valorItens || dataNfe.totalValue), + trim(dataNfe.situation || dataNfe.status), + trim(dataNfe.fiscalOperationDescription || dataNfe.operationDescription || dataNfe.naturezaOperacao), String(itens.length), itensJson, - trim(dataNfe.storeId), - trim(dataNfe.invoiceId), - trim(dataNfe.emitterEmployeeId), - formatIsoDateTime(dataNfe.updatedAt) + trim(dataNfe.storeId || dataNfe.pdv || dataNfe.storeCode || dataNfe.lojaId), + trim(dataNfe.invoiceId || dataNfe.id_venda || dataNfe.id || dataNfe.transferId), + trim(dataNfe.emitterEmployeeId || dataNfe.emitterId || dataNfe.usuarioEmissor), + formatIsoDateTime(dataNfe.updatedAt || dataNfe.modifiedAt || dataNfe.lastUpdate) ]); } catch (e) { addErrorRow(dataset, "Erro ao consultar a NFe: " + e); @@ -187,11 +197,12 @@ function addErrorRow(dataset, message) { function getConstraintValue(constraints, fieldName) { if (!constraints || !fieldName) return ""; + var target = String(fieldName).toLowerCase(); for (var i = 0; i < constraints.length; i++) { var c = constraints[i]; if (!c || !c.fieldName) continue; - if (String(c.fieldName) === String(fieldName)) { + if (String(c.fieldName).toLowerCase() === target) { return c.initialValue; } } @@ -199,7 +210,13 @@ function getConstraintValue(constraints, fieldName) { } function resolveAuth(constraints) { - var token = trim(getConstraintValue(constraints, "token")); + var token = trim(getFirstConstraintValue(constraints, [ + "token", + "accessToken", + "xAccessToken", + "bearerToken", + "access_token" + ])); if (!token) { try { token = trim(java.lang.System.getenv("GINSENG_FISCAL_TOKEN")); @@ -210,8 +227,16 @@ function resolveAuth(constraints) { token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhcGlnaW5zZW5nIiwiZXhwIjoxNzg3NDQ4MDY3fQ.GJqcIJBkMIfp_q_KRzgGuAHWWo93j3FWo3TObKqlAwA"; } - var basicUser = trim(getConstraintValue(constraints, "basicUser")); - var basicPass = trim(getConstraintValue(constraints, "basicPass")); + var basicUser = trim(getFirstConstraintValue(constraints, [ + "basicUser", + "username", + "user" + ])); + var basicPass = trim(getFirstConstraintValue(constraints, [ + "basicPass", + "password", + "pass" + ])); // Fallback operacional para homologacao, conforme credenciais validadas em teste manual. if (!basicUser) basicUser = "fluig"; @@ -224,19 +249,84 @@ function resolveAuth(constraints) { }; } -function invokeAuthorizedGet(clientService, endpoint, auth) { - var authHeader = resolveAuthHeader(auth); - var headers = { "Accept": "application/json" }; - if (authHeader) { - headers.Authorization = authHeader; - if (auth && auth.token) { - headers["x-access-token"] = auth.token; +function getFirstConstraintValue(constraints, names) { + if (!names || !(names instanceof Array)) return ""; + for (var i = 0; i < names.length; i++) { + var val = getConstraintValue(constraints, names[i]); + if (trim(val)) return val; + } + return ""; +} + +function buildAuthVariants(auth) { + auth = auth || {}; + var variants = []; + + var token = trim(auth.token); + var basicUser = trim(auth.basicUser); + var basicPass = trim(auth.basicPass); + var basicHeader = buildBasicAuthHeader(basicUser, basicPass); + + if (token) { + variants.push({ + name: "Bearer+XToken", + authorization: "Bearer " + token, + xAccessToken: token + }); + variants.push({ + name: "XToken", + xAccessToken: token + }); + variants.push({ + name: "Bearer", + authorization: "Bearer " + token + }); + } + + if (basicHeader) { + variants.push({ + name: "Basic", + authorization: basicHeader + }); + if (token) { + variants.push({ + name: "Basic+XToken", + authorization: basicHeader, + xAccessToken: token + }); } } + variants.push({ name: "NoAuth" }); + return dedupeAuthVariants(variants); +} + +function dedupeAuthVariants(variants) { + var out = []; + var seen = {}; + + for (var i = 0; i < variants.length; i++) { + var v = variants[i] || {}; + var signature = trim(v.authorization) + "|" + trim(v.xAccessToken); + if (seen[signature]) continue; + seen[signature] = true; + out.push(v); + } + + if (!out.length) { + out.push({ name: "NoAuth" }); + } + + return out; +} + +function invokeAuthorizedGet(clientService, endpoint, authVariant) { + var headers = { "Accept": "application/json" }; + applyAuthHeaders(headers, authVariant); + var data = { companyId: String(getValue("WKCompany") || "1"), - serviceCode: "GinsengAPI2", + serviceCode: "Fastapi", endpoint: endpoint, method: "get", timeoutService: "30000", @@ -284,12 +374,113 @@ function parseApiPayload(bodyText) { } function isApiSuccess(obj) { - if (!obj || !obj.data) return false; + if (!obj) return false; if (obj.success === true) return true; if (String(obj.success).toLowerCase() === "true") return true; + if (obj.data || obj.items || obj.result || obj.content) return true; return false; } +function extractInvoiceData(apiObj, expectedKey) { + if (!apiObj) return null; + var normalizedKey = normalizeDigits(expectedKey); + return extractInvoiceFromNode(apiObj, normalizedKey); +} + +function extractInvoiceFromNode(node, normalizedKey) { + if (!node) return null; + + if (typeof node === "string") { + var parsed = parseJsonSafe(node); + if (!parsed) return null; + return extractInvoiceFromNode(parsed, normalizedKey); + } + + if (node instanceof Array) { + return extractInvoiceFromArray(node, normalizedKey); + } + + if (matchesInvoiceObject(node, normalizedKey)) { + return node; + } + + var nestedCandidates = [ + node.data, + node.items, + node.rows, + node.results, + node.content, + node.result, + node.list, + node.transferencias, + node.rgbTransferencias + ]; + + for (var i = 0; i < nestedCandidates.length; i++) { + var nested = extractInvoiceFromNode(nestedCandidates[i], normalizedKey); + if (nested) return nested; + } + + return null; +} + +function extractInvoiceFromArray(list, normalizedKey) { + if (!list || !(list instanceof Array) || list.length === 0) return null; + + for (var i = 0; i < list.length; i++) { + var item = list[i]; + if (matchesInvoiceObject(item, normalizedKey)) { + return item; + } + } + + return list[0] || null; +} + +function matchesInvoiceObject(item, normalizedKey) { + if (!item || item instanceof Array || typeof item !== "object") return false; + + var keyCandidate = normalizeDigits(item.key || item.nfeKey || item.chave || item.invoiceKey || item.nfe_key); + if (normalizedKey && keyCandidate) { + return keyCandidate === normalizedKey; + } + + if (keyCandidate) return true; + + var hasIdentity = trim(item.invoiceNumber || item.numeroNota || item.invoiceId || item.transferId); + return !!hasIdentity; +} + +function resolveItems(dataNfe) { + if (!dataNfe || typeof dataNfe !== "object") return []; + + var candidates = [ + dataNfe.itens, + dataNfe.itensJson, + dataNfe.items, + dataNfe.products, + dataNfe.produtos + ]; + + for (var i = 0; i < candidates.length; i++) { + var raw = candidates[i]; + if (!raw) continue; + + if (raw instanceof Array) { + return raw; + } + + if (typeof raw === "string") { + var parsed = parseJsonSafe(raw); + if (parsed instanceof Array) { + return parsed; + } + } + } + + return []; +} + function fetchDirect(url, timeoutMs, auth) { var conn = null; var reader = null; @@ -305,10 +496,12 @@ function fetchDirect(url, timeoutMs, auth) { conn.setReadTimeout(timeoutMs || 30000); conn.setRequestProperty("Accept", "application/json"); - var authHeader = resolveAuthHeader(auth); - if (authHeader) { - conn.setRequestProperty("Authorization", authHeader); - if (auth.token) conn.setRequestProperty("x-access-token", auth.token); + var authHeaders = {}; + applyAuthHeaders(authHeaders, auth); + for (var h in authHeaders) { + if (!authHeaders.hasOwnProperty(h)) continue; + if (!authHeaders[h]) continue; + conn.setRequestProperty(h, String(authHeaders[h])); } var status = conn.getResponseCode(); @@ -331,18 +524,30 @@ function fetchDirect(url, timeoutMs, auth) { } } -function resolveAuthHeader(auth) { - auth = auth || {}; - if (auth.basicUser && auth.basicPass) { - var raw = String(auth.basicUser) + ":" + String(auth.basicPass); - var bytes = new java.lang.String(raw).getBytes("UTF-8"); - var encoded = java.util.Base64.getEncoder().encodeToString(bytes); - return "Basic " + String(encoded); +function applyAuthHeaders(headers, authVariant) { + headers = headers || {}; + authVariant = authVariant || {}; + + var authorization = trim(authVariant.authorization); + var xAccessToken = trim(authVariant.xAccessToken); + + if (authorization) { + headers.Authorization = authorization; } - if (auth.token) { - return "Bearer " + String(auth.token); + if (xAccessToken) { + headers["x-access-token"] = xAccessToken; } - return ""; +} + +function buildBasicAuthHeader(basicUser, basicPass) { + var user = trim(basicUser); + var pass = trim(basicPass); + if (!user || !pass) return ""; + + var raw = String(user) + ":" + String(pass); + var bytes = new java.lang.String(raw).getBytes("UTF-8"); + var encoded = java.util.Base64.getEncoder().encodeToString(bytes); + return "Basic " + String(encoded); } function buildNfeItems(items) { @@ -354,7 +559,8 @@ function buildNfeItems(items) { out.push({ productId: trim(item.productId), quantity: toNumber(item.quantity || item.completeQuantity), - code: trim(item.code || item.sku || item.productCode || item.codigo) + code: trim(item.code || item.sku || item.productCode || item.codigo || item.productId), + unitValue: toNumber(item.unitValue || item.unit_value || item.value) }); } diff --git a/Transferência Ginseng/datasets/ds_rgb_products_v2.js b/Transferência Ginseng/datasets/ds_rgb_products_v2.js index cf0783c..d3bbc87 100644 --- a/Transferência Ginseng/datasets/ds_rgb_products_v2.js +++ b/Transferência Ginseng/datasets/ds_rgb_products_v2.js @@ -32,7 +32,7 @@ function createDataset(fields, constraints, sortFields) { var clientService = fluigAPI.getAuthorizeClientService(); var data = { companyId: String(getValue("WKCompany") || "1"), - serviceCode: "GINSENG APITESTE", + serviceCode: "GinsengAPI2", endpoint: "/dados_rgb_products", method: "get", timeoutService: "60000", diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/.metadata b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/.metadata index 0a702dd8c51b71cedd8d2835ba50b1563b9c1c4b..826ba41f2a3f2e76ec883ac163aa0767387b2c3f 100644 GIT binary patch delta 73 zcmX@gx`lOv50folNl{{6aawB8;Z=FbnTf@P40R0L3=FI63Q8C_0*dleN|O`wOBncJ T%2Gk9%8V*N>O>~bV$ucxyX_er delta 63 zcmdnOdX#m857T6ICV72s1_ma-f)WOffTH}A(&WVa5(dfO{G80>%#uVPFTSKGF|Rl+ RwJ0?&IWw`MU~(suHUMPH6#W1I diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js index f99f2af..fdcf849 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js @@ -39,7 +39,7 @@ function validateForm(form) { } var qtdDivergenciasNfe = parseInt(String(form.getValue("qtdDivergenciasNfe") || "0"), 10); if (!isNaN(qtdDivergenciasNfe) && qtdDivergenciasNfe > 0) { - message += "Existem " + qtdDivergenciasNfe + " divergencia(s) entre a solicitacao e a NFe.
"; + message += "Existem " + qtdDivergenciasNfe + " divergencia(s) entre a base aprovada e a NFe.
"; hasErros = true; } if (form.getValue("usuarioEmissorNfe") == "") { diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js index 535fd70..1adb2af 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js @@ -1,8 +1,34 @@ +var EXCEL_ATTACHMENT_DESCRIPTION = "Planilha de Itens Excel"; +var EXCEL_ATTACHMENT_INPUT_ID = "fnAnexo_PlanilhaItens"; + +function updateExcelImportUi(filename) { + var name = String(filename || "").trim(); + if (name) { + $("#nomeArquivoExcel").text("Arquivo selecionado: " + name); + $("#btnAdicionarExcel").hide(); + $("#btnRemoverExcel").show(); + return; + } + $("#nomeArquivoExcel").text("Nenhum arquivo selecionado"); + $("#btnAdicionarExcel").show(); + $("#btnRemoverExcel").hide(); +} + +function getExcelAttachmentField() { + var $field = $("#" + EXCEL_ATTACHMENT_INPUT_ID); + if ($field.length) return $field; + return $("#_" + EXCEL_ATTACHMENT_INPUT_ID); +} + $(document).ready(function () { // Quando clicar em "Adicionar arquivo" $('#btnAdicionarExcel').on('click', function () { - $('#excelUpload').click(); // aciona o input escondido + if (typeof uploadFile === "function" && getExcelAttachmentField().length) { + uploadFile(EXCEL_ATTACHMENT_DESCRIPTION, EXCEL_ATTACHMENT_INPUT_ID); + return; + } + $('#excelUpload').click(); // fallback: aciona o input escondido }); // Quando um arquivo for selecionado @@ -10,10 +36,7 @@ $(document).ready(function () { const file = this.files[0]; if (file) { - $('#nomeArquivoExcel').text('Arquivo selecionado: ' + file.name); - $('#btnAdicionarExcel').hide(); - $('#btnRemoverExcel').show(); - + updateExcelImportUi(file.name); carregarItensDoExcel('excelUpload'); // chama sua função } }); @@ -21,9 +44,17 @@ $(document).ready(function () { // Quando clicar em "Remover arquivo" $('#btnRemoverExcel').on('click', function () { $('#excelUpload').val(''); - $('#nomeArquivoExcel').text('Nenhum arquivo selecionado'); - $('#btnAdicionarExcel').show(); - $('#btnRemoverExcel').hide(); + updateExcelImportUi(""); + getExcelAttachmentField().val(""); + + try { + removeFile(EXCEL_ATTACHMENT_DESCRIPTION); + if (typeof setFilePhisicalName === "function") { + setFilePhisicalName(EXCEL_ATTACHMENT_INPUT_ID, ""); + } + } catch (e) { + console.error("Falha ao remover anexo da planilha:", e); + } }); $('#chaveNfe').on('input', function () { @@ -45,8 +76,28 @@ $(document).ready(function () { applySelectedMotoristaEntregaOption(); }); - $(document).on("input", "input[name^='quantidadeItem___']", function () { + $(document).on("input", "input[name^='quantidadeItem___'], input[name^='_quantidadeItem___'], input[name='quantidadeItem'], input[name='_quantidadeItem'], input[id^='quantidadeItem___'], input[id^='_quantidadeItem___'], #quantidadeItem, #_quantidadeItem", function () { + syncQuantidadeAprovadaFromSolicitada(this); processarConferenciaNfe(); + toggleQuantidadeAprovadaGestorByActivity($("#activity").val()); + }); + + $(document).on("input", ".input-qtd-aprov-gestor-view", function () { + var linha = String($(this).attr("data-linha") || ""); + var indice = String($(this).attr("data-indice") || ""); + if (!linha) return; + + var normalized = normalizeQuantidadeCampo($(this).val()); + $(this).val(normalized); + var $row = $("#tabelaAprovacaoGestorItensBody tr[data-linha='" + linha + "']"); + var $hidden = getCampoItem("quantidadeAprovadaGestor", indice, $row); + if (!$hidden.length) { + $hidden = getCampoItem("quantidadeAprovadaGestor", indice); + } + if ($hidden.length) { + $hidden.val(normalized); + } + atualizarStatusLinhaAprovacaoGestor(linha); }); var activity = String($("#activity").val() || ""); @@ -194,11 +245,17 @@ $(document).ready(function () { updateConferenciaNfeVisibility(activity); } + syncQuantidadeAprovadaAllRows(); + toggleQuantidadeAprovadaGestorByActivity(activity); + agendarRefreshTabelaAprovacao(activity); + updateExcelImportUi(getExcelAttachmentField().val()); + formatarMoedasTabela("preco___"); //formatarMoedasTabela("precoIndica___"); formatarMoedasTabela("ValorTotal"); displayBtnFiles(); + invisibleBtnUpload("fnAnexo_PlanilhaItens"); invisibleBtnUpload("fnAnexo_Nfe"); invisibleBtnUpload("fdAnexo_Coleta"); invisibleBtnUpload("fdAnexo_Entrega"); @@ -211,6 +268,20 @@ $(document).ready(function () { }); +function agendarRefreshTabelaAprovacao(activity) { + var state = String(activity || $("#activity").val() || ""); + var retries = [250, 800, 1800]; + + for (var i = 0; i < retries.length; i++) { + (function (delay) { + setTimeout(function () { + syncQuantidadeAprovadaAllRows(); + toggleQuantidadeAprovadaGestorByActivity(state); + }, delay); + })(retries[i]); + } +} + function applyTransferStatus(activity) { var current = String(activity || ""); var pills = $("#transferStatus .status-pill"); @@ -331,6 +402,296 @@ function getCurrentDate() { return currentDate; } +function normalizeQuantidadeCampo(value) { + var txt = String(value == null ? "" : value).trim(); + if (txt === "") return ""; + + txt = txt.replace(",", "."); + var n = parseFloat(txt); + if (isNaN(n) || n < 0) return ""; + + if (Math.floor(n) === n) return String(parseInt(n, 10)); + return String(n); +} + +function toNumberQuantidade(value) { + var txt = normalizeQuantidadeCampo(value); + if (txt === "") return NaN; + return parseFloat(txt); +} + +function getIndiceCampoPaiFilho($el) { + var raw = String($el.attr("name") || $el.attr("id") || ""); + if (raw.indexOf("___") < 0) return ""; + return String(raw.split("___")[1] || ""); +} + +function collectQuantidadeItemFields() { + var out = []; + var seen = {}; + var selector = [ + "input[name^='quantidadeItem___']", + "input[name^='_quantidadeItem___']", + "input[name='quantidadeItem']", + "input[name='_quantidadeItem']", + "input[id^='quantidadeItem___']", + "input[id^='_quantidadeItem___']", + "#quantidadeItem", + "#_quantidadeItem" + ].join(", "); + + $(selector).each(function () { + var $field = $(this); + var key = String($field.attr("name") || $field.attr("id") || ""); + if (!key) { + key = "anon_" + out.length; + } + if (seen[key]) return; + seen[key] = true; + out.push(this); + }); + + return out; +} + +function getCampoItem(baseName, indice, $scopeRow) { + var idx = String(indice == null ? "" : indice).trim(); + var selectors = []; + + if (idx !== "") { + selectors.push("#" + baseName + "___" + idx); + selectors.push("#_" + baseName + "___" + idx); + selectors.push("[name='" + baseName + "___" + idx + "']"); + selectors.push("[name='_" + baseName + "___" + idx + "']"); + } + + selectors.push("#" + baseName); + selectors.push("#_" + baseName); + selectors.push("[name='" + baseName + "']"); + selectors.push("[name='_" + baseName + "']"); + + for (var i = 0; i < selectors.length; i++) { + var selector = selectors[i]; + var $field = $(); + + if ($scopeRow && $scopeRow.length) { + $field = $scopeRow.find(selector).first(); + } + + if (!$field.length) { + $field = $(selector).first(); + } + + if ($field.length) return $field; + } + + return $(); +} + +function syncQuantidadeAprovadaFromSolicitada(inputSolicitada) { + var $solicitada = $(inputSolicitada); + var idx = getIndiceCampoPaiFilho($solicitada); + var $row = $solicitada.closest("tr"); + + var $aprovada = getCampoItem("quantidadeAprovadaGestor", idx, $row); + if (!$aprovada.length) return; + + var currentAprovada = normalizeQuantidadeCampo($aprovada.val()); + if (currentAprovada !== "") return; + + var solicitada = normalizeQuantidadeCampo($solicitada.val()); + if (solicitada !== "") { + $aprovada.val(solicitada); + } +} + +function syncQuantidadeAprovadaAllRows() { + $(collectQuantidadeItemFields()).each(function () { + syncQuantidadeAprovadaFromSolicitada(this); + }); +} + +function toggleQuantidadeAprovadaGestorByActivity(activity) { + var state = String(activity || ""); + var isGestorApproval = state === "4"; + var $tbody = $("#tabelaAprovacaoGestorItensBody"); + if (!$tbody.length) return; + + var html = []; + var rowsFound = 0; + + $(collectQuantidadeItemFields()).each(function (idx, el) { + var $qtdSolicitadaField = $(el); + var $row = $qtdSolicitadaField.closest("tr"); + var linha = getIndiceCampoPaiFilho($qtdSolicitadaField); + var linhaKey = linha !== "" ? linha : ("base_" + idx); + + var codigo = $.trim(String(getCampoItem("descricao", linha, $row).val() || "")); + var descricao = $.trim(String(getCampoItem("codigoItem", linha, $row).val() || "")); + var categoria = $.trim(String(getCampoItem("categoriaItem", linha, $row).val() || "")); + var qtdSolicitadaNorm = normalizeQuantidadeCampo($qtdSolicitadaField.val()); + + var hasData = qtdSolicitadaNorm !== "" || codigo !== "" || descricao !== "" || categoria !== ""; + if (!hasData) return; + + rowsFound++; + var qtdSolicitadaLabel = qtdSolicitadaNorm || "-"; + + var itemLabel = codigo || descricao || ("Item " + rowsFound); + if (descricao && descricao !== codigo) itemLabel += " - " + descricao; + if (categoria) itemLabel += " (" + categoria + ")"; + + var $hiddenAprovada = getCampoItem("quantidadeAprovadaGestor", linha, $row); + var qtdAprovadaAtual = normalizeQuantidadeCampo($hiddenAprovada.val()); + if (qtdAprovadaAtual === "" && qtdSolicitadaNorm !== "") { + qtdAprovadaAtual = qtdSolicitadaNorm; + $hiddenAprovada.val(qtdAprovadaAtual); + } + + var status = "Sem divergência"; + var statusClass = "label label-success"; + if (qtdSolicitadaNorm === "" || qtdAprovadaAtual === "") { + status = "Aprovado"; + statusClass = "label label-default"; + } else { + var nSolicitada = toNumberQuantidade(qtdSolicitadaNorm); + var nAprovada = toNumberQuantidade(qtdAprovadaAtual); + if (isNaN(nSolicitada) || isNaN(nAprovada)) { + status = "Inválido"; + statusClass = "label label-danger"; + } else if (nAprovada > nSolicitada) { + status = "Maior que solicitada"; + statusClass = "label label-danger"; + } else if (nAprovada === 0) { + status = "Sem estoque"; + statusClass = "label label-warning"; + } else if (nAprovada < nSolicitada) { + status = "Divergente"; + statusClass = "label label-warning"; + } + } + + var disabledAttr = isGestorApproval ? "" : " readonly disabled "; + + html.push( + "" + + "" + rowsFound + "" + + "" + escapeHtml(itemLabel) + "" + + "" + escapeHtml(qtdSolicitadaLabel) + "" + + "" + + "" + + "" + + "" + escapeHtml(status) + "" + + "" + ); + }); + + if (!rowsFound) { + html.push("Sem itens para validação."); + } + + $tbody.html(html.join("")); + $(".hint-qtd-aprov-gestor").toggle(isGestorApproval); +} + +function atualizarStatusLinhaAprovacaoGestor(linha) { + var rowSelector = "#tabelaAprovacaoGestorItensBody tr[data-linha='" + linha + "']"; + var $row = $(rowSelector); + if (!$row.length) return; + + var $status = $row.find(".status-aprov-gestor"); + if (!$status.length) return; + + var qtdSolicitada = toNumberQuantidade($row.attr("data-qtd-solicitada")); + var qtdAprovada = toNumberQuantidade($row.find(".input-qtd-aprov-gestor-view").val()); + + $status.removeClass("label-success label-warning label-danger label-default"); + + if (isNaN(qtdSolicitada) || isNaN(qtdAprovada)) { + $status.addClass("label-default").text("Pendente"); + return; + } + + if (qtdAprovada > qtdSolicitada) { + $status.addClass("label-danger").text("Maior que solicitada"); + return; + } + + if (qtdAprovada === 0) { + $status.addClass("label-warning").text("Sem estoque"); + return; + } + + if (qtdAprovada < qtdSolicitada) { + $status.addClass("label-warning").text("Divergente"); + return; + } + + $status.addClass("label-success").text("Sem divergência"); +} + +function validarQuantidadeAprovadaGestor() { + var divergencias = 0; + var itemContador = 0; + + $(collectQuantidadeItemFields()).each(function () { + var $qtdSolicitada = $(this); + var $row = $qtdSolicitada.closest("tr"); + var linha = getIndiceCampoPaiFilho($qtdSolicitada); + + var codigo = $.trim(String(getCampoItem("descricao", linha, $row).val() || "")); + var descricao = $.trim(String(getCampoItem("codigoItem", linha, $row).val() || "")); + var qtdSolicitadaRaw = $.trim(String($qtdSolicitada.val() || "")); + + if (qtdSolicitadaRaw === "" && !codigo && !descricao) { + return; + } + + itemContador++; + + var $qtdAprovada = getCampoItem("quantidadeAprovadaGestor", linha, $row); + if (!$qtdAprovada.length) return; + + var qtdSolicitada = toNumberQuantidade(qtdSolicitadaRaw); + if (isNaN(qtdSolicitada) || qtdSolicitada <= 0) { + $qtdSolicitada.closest("td, div").addClass("errorValidate"); + throw "Quantidade solicitada inválida no item " + itemContador + "."; + } + + var qtdAprovadaRaw = $.trim(String($qtdAprovada.val() || "")); + if (qtdAprovadaRaw === "") { + $qtdAprovada.val(normalizeQuantidadeCampo($qtdSolicitada.val())); + qtdAprovadaRaw = $.trim(String($qtdAprovada.val() || "")); + } + + var qtdAprovada = toNumberQuantidade(qtdAprovadaRaw); + if (isNaN(qtdAprovada) || qtdAprovada < 0) { + $qtdAprovada.closest("td, div").addClass("errorValidate"); + throw "Preencha a quantidade aprovada do item " + itemContador + " com valor maior ou igual a zero."; + } + + if (qtdAprovada > qtdSolicitada) { + $qtdAprovada.closest("td, div").addClass("errorValidate"); + throw "A quantidade aprovada do item " + itemContador + " não pode ser maior que a solicitada."; + } + + if (qtdAprovada !== qtdSolicitada) { + divergencias++; + } + }); + + $("#qtdDivergenciasGestor").val(String(divergencias)); + + if (divergencias > 0 && $.trim($("#justificativaDecisaoGestor").val()) === "") { + $("#justificativaDecisaoGestor").parent("div").addClass("errorValidate"); + throw "Informe a justificativa da decisão quando houver divergência de quantidade."; + } +} + function initMotoristaEntregaEscolha() { var escolha = String($("input[name='tipoMotoristaEntrega']:checked").val() || ""); if (!escolha) { @@ -607,6 +968,10 @@ function updateConferenciaNfeVisibility(activity) { } var ATTACHMENT_PLUGIN_CONFIG = { + fnAnexo_PlanilhaItens: { + filename: EXCEL_ATTACHMENT_DESCRIPTION, + accept: ".xlsx,.xls" + }, fnAnexo_Nfe: { filename: "Nota Fiscal", accept: ".pdf,.xml,image/*" @@ -666,6 +1031,10 @@ function initAttachmentPlugins() { } function resolveAttachmentFilename(inputId, fallback) { + if (inputId === EXCEL_ATTACHMENT_INPUT_ID) { + var numProcExcel = String($("#WKNumProces").val() || "").trim(); + return numProcExcel ? (EXCEL_ATTACHMENT_DESCRIPTION + " - " + numProcExcel) : EXCEL_ATTACHMENT_DESCRIPTION; + } if (inputId !== "fnAnexo_Nfe") return fallback; var solicitacao = String($("#WKNumProces").val() || "").trim(); if (!solicitacao) return "Nota Fiscal"; @@ -785,7 +1154,7 @@ function processarConferenciaNfe() { if (req.qty === 0 && nfe.qty > 0) { status = "Somente NFe"; } else if (nfe.qty === 0 && req.qty > 0) { - status = "Somente solicitacao"; + status = "Somente base"; } else if (Math.abs(req.qty - nfe.qty) > 0.00001) { status = "Quantidade divergente"; } @@ -821,20 +1190,21 @@ function parseItensNfeJson() { function buildSolicitacaoMap() { var out = {}; - $("input[name^='quantidadeItem___']").each(function () { - var name = $(this).attr("name") || ""; - var indice = name.split("___")[1]; - if (!indice) return; + $(collectQuantidadeItemFields()).each(function (i) { + var $qtd = $(this); + var $row = $qtd.closest("tr"); + var indice = getIndiceCampoPaiFilho($qtd); + var rowKey = indice || ("BASE_" + (i + 1)); - var qty = toFloatSafe($(this).val()); + var qty = getQuantidadeBaseConferencia($qtd, indice, $row); if (qty <= 0) return; - var productId = String($("#productIdItem___" + indice).val() || "").trim(); - var code = resolveSolicitacaoItemCode(indice, $(this)); - var descricao = String($("#codigoItem___" + indice).val() || "").trim(); + var productId = String(getCampoItem("productIdItem", indice, $row).val() || "").trim(); + var code = resolveSolicitacaoItemCode(indice, $qtd); + var descricao = String(getCampoItem("codigoItem", indice, $row).val() || "").trim(); - var key = resolveConferenciaKey(productId, code, "ROW:" + indice); - var label = productId ? ("PID " + productId) : (code || descricao || ("Linha " + indice)); + var key = resolveConferenciaKey(productId, code, "ROW:" + rowKey); + var label = productId ? ("PID " + productId) : (code || descricao || ("Linha " + rowKey)); if (!out[key]) { out[key] = { qty: 0, label: label }; @@ -844,6 +1214,21 @@ function buildSolicitacaoMap() { return out; } +function getQuantidadeBaseConferencia($qtdSolicitada, indice, $row) { + var qtdSolicitada = toFloatSafe($qtdSolicitada.val()); + var $qtdAprovada = getCampoItem("quantidadeAprovadaGestor", indice, $row); + + if ($qtdAprovada.length) { + var qtdAprovadaRaw = String($qtdAprovada.val() == null ? "" : $qtdAprovada.val()).trim(); + // Regra: se o gestor preencheu, a conferencia da NFe usa a quantidade aprovada (inclusive 0). + if (qtdAprovadaRaw !== "") { + return toFloatSafe(qtdAprovadaRaw); + } + } + + return qtdSolicitada; +} + function resolveSolicitacaoItemCode(indice, qtyInput) { var code = String($("#codigoProdutoItem___" + indice).val() || "").trim(); if (code) return normalizeCodigoComparacao(code); @@ -975,7 +1360,7 @@ function renderTabelaConferencia(rows, totalItens, divergencias, mensagem, tipo) var itemNfe = row.key; var qtdNfe = formatConferenciaNumero(row.nfeQty); - if (row.status === "Somente solicitacao") { + if (row.status === "Somente base") { itemNfe = "-"; qtdNfe = "0"; } else if (row.status === "Somente NFe") { @@ -1018,7 +1403,7 @@ function montarResumoDivergenciasConferencia(limit) { var itemNfe = String($(cols[2]).text() || "").trim(); var qtdNfe = String($(cols[3]).text() || "").trim(); - linhas.push("Item solicitado: " + itemSolicitado + " / Quantidade: " + qtdSolicitada + " | Item emitido na nota: " + itemNfe + " / Quantidade: " + qtdNfe); + linhas.push("Item base: " + itemSolicitado + " / Quantidade: " + qtdSolicitada + " | Item emitido na nota: " + itemNfe + " / Quantidade: " + qtdNfe); }); if (!linhas.length) return ""; @@ -1138,35 +1523,52 @@ var beforeSendValidate = function (numState, nextState) { } else if ($("#justificativa").val() == "") { $("#justificativa").parent("div").addClass("errorValidate"); throw "'Qual o motivo da transferência?' é obrigatório."; + } else if (String($("#analistasup").val() || "").trim() == "") { + $("#analistasup").parent("div").addClass("errorValidate"); + throw "'Analista solicitante' é obrigatório."; } else { - $("input[id^='quantidadeItem___']").each(function (index, value) { - var linha = $(value).attr("name").split("___")[1]; + $(collectQuantidadeItemFields()).each(function () { + var $qtd = $(this); + var $row = $qtd.closest("tr"); + var linha = getIndiceCampoPaiFilho($qtd); + if (!linha) return; - if ( - $("#descricao___" + linha).val() == "" && - $("#quantidadeItem___" + linha).val() == "" - ) { - remove_row(value); + var $descricao = getCampoItem("descricao", linha, $row); + var descricaoValor = $.trim(String($descricao.val() || "")); + var qtdValor = $.trim(String($qtd.val() || "")); + if (!descricaoValor && !qtdValor) { + var $btnRemove = $row.find("button[onclick*='remove_row']"); + if ($btnRemove.length) { + remove_row($btnRemove.get(0)); + } } }); - $("input[id^='quantidadeItem___']").each(function (index, value) { - var linha = $(value).attr("name").split("___")[1]; + var itensInformados = 0; + $(collectQuantidadeItemFields()).each(function () { + var $qtd = $(this); + var $row = $qtd.closest("tr"); + var linha = getIndiceCampoPaiFilho($qtd); + var $descricao = getCampoItem("descricao", linha, $row); - if ($("#descricao___" + linha).val() == "") { - $("#descricao___" + linha) - .parent("div") - .addClass("errorValidate"); - throw "Selecione o item " + (index + 1) + "."; - } else if ($("#quantidadeItem___" + linha).val() == "") { - $("#quantidadeItem___" + linha) - .parent("div") - .addClass("errorValidate"); - throw "Preencha a quantidade do item " + (index + 1) + "."; + var descricaoValor = $.trim(String($descricao.val() || "")); + var qtdValor = $.trim(String($qtd.val() || "")); + if (!descricaoValor && !qtdValor) return; + + itensInformados++; + + if (!descricaoValor) { + $descricao.parent("div").addClass("errorValidate"); + throw "Selecione o item " + itensInformados + "."; + } + + if (!qtdValor) { + $qtd.parent("div").addClass("errorValidate"); + throw "Preencha a quantidade do item " + itensInformados + "."; } }); - if ($("input[name^='quantidadeItem___']").length == 0) { + if (itensInformados === 0) { throw "Ao menos um item é necessário para iniciar a solicitação."; } } @@ -1176,6 +1578,8 @@ var beforeSendValidate = function (numState, nextState) { $("#justificativaDecisaoGestor").parent("div").addClass("errorValidate"); throw "'Justificativa da decisão' é obrigatória para reprovar."; } + } else { + validarQuantidadeAprovadaGestor(); } } else if (numState == 6) { var chaveNfe = normalizeNfeKey($("#chaveNfe").val()); @@ -1199,7 +1603,7 @@ var beforeSendValidate = function (numState, nextState) { var qtdDivergencias = parseInt($("#qtdDivergenciasNfe").val() || "0", 10); if (!isNaN(qtdDivergencias) && qtdDivergencias > 0) { var produtos = listarProdutosDivergentes(10); - var msg = "A nota tem produtos divergentes da solicitacao."; + var msg = "A nota tem produtos divergentes da base aprovada para emissão."; if (produtos) { msg += " Produtos: " + produtos + "."; } @@ -1247,6 +1651,7 @@ var beforeSendValidate = function (numState, nextState) { throw "'Data da entrega' é obrigatória."; } if (String($("#nomerecebedor").val() || "").trim() == "") { + $("#nomerecebedor").parent("div").addClass("errorValidate"); throw "'Nome de quem recebeu a mercadoria' é obrigatório."; } } else if (numState == 18) { @@ -1354,6 +1759,7 @@ function setSelectedZoomItem(selectedItem) { $("#productIdItem" + "___" + indice).val(itemProductId); $("#categoriaItem" + "___" + indice).val(itemCategoria); processarConferenciaNfe(); + toggleQuantidadeAprovadaGestorByActivity($("#activity").val()); } } @@ -1395,7 +1801,9 @@ function removedZoomItem(removedItem) { $("#productIdItem___" + linha[1]).val(""); $("#categoriaItem___" + linha[1]).val(""); $("#quantidadeItem___" + linha[1]).val(""); + $("#quantidadeAprovadaGestor___" + linha[1]).val(""); processarConferenciaNfe(); + toggleQuantidadeAprovadaGestorByActivity($("#activity").val()); } } @@ -1404,13 +1812,17 @@ function removedZoomItem(removedItem) { $("#codigoProdutoItem" + "___" + indice).val(""); $("#productIdItem" + "___" + indice).val(""); $("#categoriaItem" + "___" + indice).val(""); + $("#quantidadeAprovadaGestor" + "___" + indice).val(""); processarConferenciaNfe(); + toggleQuantidadeAprovadaGestorByActivity($("#activity").val()); } } function add_new_row(table) { var row = wdkAddChild(table); updt_line(); + toggleQuantidadeAprovadaGestorByActivity($("#activity").val()); + syncQuantidadeAprovadaAllRows(); } function updt_line() { @@ -1424,6 +1836,7 @@ function remove_row(element) { fnWdkRemoveChild(element); updt_line(); processarConferenciaNfe(); + toggleQuantidadeAprovadaGestorByActivity($("#activity").val()); } @@ -1820,6 +2233,10 @@ function getAllowedAttachmentInputs() { return []; } + if (activity === "0" || activity === "1") { + return ["fnAnexo_PlanilhaItens"]; + } + if (activity === "6") { return ["fnAnexo_Nfe"]; } @@ -1958,18 +2375,22 @@ function hasFileFluig(fileDescription){ //Quando o Fluig finalizar o upload e o anexo for escolhido window.parent.$("#ecm-navigation-inputFile-clone").on('change', function () { - const fileDescription = this.getAttribute("data-file-name-camera"); + const fileDescription = String(this.getAttribute("data-file-name-camera") || ""); const file = this.files[0]; + if (!file) return; - if (fileDescription === "Planilha de Itens Excel") { + if (fileDescription === EXCEL_ATTACHMENT_DESCRIPTION || fileDescription.indexOf(EXCEL_ATTACHMENT_DESCRIPTION + " - ") === 0) { // Copia o arquivo para o input técnico const dt = new DataTransfer(); dt.items.add(file); - document.getElementById("excelUpload").files = dt.files; + var excelInput = document.getElementById("excelUpload"); + if (!excelInput) return; + excelInput.files = dt.files; // Atualiza nome mostrado - $("#nomeArquivoExcel").text("Arquivo selecionado: " + file.name); + updateExcelImportUi(file.name); + getExcelAttachmentField().val(file.name); // Agora sim o arquivo está dentro do input e pode ser lido carregarItensDoExcel("excelUpload"); @@ -1978,5 +2399,9 @@ window.parent.$("#ecm-navigation-inputFile-clone").on('change', function () { - - +function getChaveNfeLimpa() { + return (document.getElementById("chaveNfe").value || "") + .replace(/\s+/g, "") // tira espaços + .replace(/\D/g, "") // garante só dígitos + .slice(0, 44); // limite oficial +} diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html index d9a87af..bafdf34 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/totvsflow_solicitacao_transferencia.html @@ -315,6 +315,10 @@
+
+ + +
@@ -322,7 +326,7 @@

Itens da Transferência

- Colunas esperadas: codigo/codigoItem e quantidade/quantidadeItem. + Colunas esperadas: codigo e quantidade. Coloque a planilha no botão verde com seta para cima.
Nenhum arquivo selecionado +
+ + +
@@ -338,10 +346,10 @@ # - Código do item - Quantidade + Código do item + Quantidade Descrição - Categoria + Categoria @@ -364,6 +372,7 @@ + @@ -393,6 +402,37 @@

Aprovação Filial Emitente

+
+
+
+ Se a quantidade de algum item estiver diferente, preencha a coluna Qtd. aprovada gestor nesta validação. + Campo em branco = mesma quantidade solicitada. Valor 0 = sem estoque. +
+
+
+
+
+ +
+ + + + + + + + + + + + + + + +
#ItemQtd. solicitadaQtd. aprovada gestorStatus
Sem itens para validação.
+
+
+
@@ -432,7 +472,7 @@
- + Campo rastreável para consulta posterior da nota fiscal.
@@ -556,7 +596,7 @@
- +
@@ -565,7 +605,7 @@

Validação do Recebimento

-

Conferência da NFe x Solicitação

+

Conferência da NFe x Base Aprovada

Consulte a chave da NFe para gerar o confronto dos itens.
@@ -573,8 +613,8 @@ - - + + @@ -636,6 +676,7 @@ + diff --git a/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/application.info b/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/application.info new file mode 100644 index 0000000..0f74423 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/application.info @@ -0,0 +1,19 @@ +application.type=widget +application.code=wdtransf +application.title=wdtransf +application.description=wdtransf +application.fluig.version=null +application.category=SYSTEM +application.renderer=freemarker +developer.code=Andrey Cunha +developer.name=Andrey cunha +developer.url=http://www.fluig.com +application.uiwidget=true +application.mobileapp=false +application.version=${build.version}-${build.revision} +view.file=view.ftl +edit.file=edit.ftl +locale.file.base.name=wdtransf +application.resource.js.1=/resources/js/wdtransf.js +application.resource.css.2=/resources/css/wdtransf.css +hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2 diff --git a/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/edit.ftl b/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/edit.ftl new file mode 100644 index 0000000..ce2d0ae --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/edit.ftl @@ -0,0 +1,5 @@ +
+ +
+ + diff --git a/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/view.ftl b/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/view.ftl new file mode 100644 index 0000000..195c487 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/view.ftl @@ -0,0 +1,97 @@ +
+
+
+
+

Monitor de Transferencias

+

Fonte: dataset transferenciav2

+
+ Atualizando... +
+ +
+
+ + +
+
+ + +
+
+ +
+
+ + + +
+
+
+
Total carregado
+
0
+
+
+
+
+
Em transito
+
0
+
+
+
+
+
Aguard. recebimento
+
0
+
+
+
+
+
Em problema
+
0
+
+
+
+
+
Finalizadas
+
0
+
+
+
+ +
+
Funil por etapa
+
+
+ +
+
Detalhes das transferencias
+
+
Item solicitadoQtd. solicitadaItem baseQtd. base Item emitido na NFe Qtd. emitida na NFe Status
+ + + + + + + + + + + + + + + +
ProcessoSolicitanteOrigemDestinoData aberturaAtividade
Carregando dados...
+
+
+
Exibindo 0 de 0
+
+ + Pagina 0 de 0 + +
+
+
+ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/wdtransf.properties b/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/wdtransf.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/wdtransf.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/wdtransf_en_US.properties b/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/wdtransf_en_US.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/wdtransf_en_US.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/wdtransf_es.properties b/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/wdtransf_es.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/wdtransf_es.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/wdtransf_pt_BR.properties b/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/wdtransf_pt_BR.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransf/src/main/resources/wdtransf_pt_BR.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/WEB-INF/jboss-web.xml b/Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..b9da1d9 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /wdtransf + false + diff --git a/Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/WEB-INF/web.xml b/Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..6797e41 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,12 @@ + + + + + + 30 + + + diff --git a/Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/resources/css/wdtransf.css b/Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/resources/css/wdtransf.css new file mode 100644 index 0000000..1513620 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/resources/css/wdtransf.css @@ -0,0 +1,277 @@ +.wdtransf-widget .wdtransf-shell { + background: #f4f7fb; + border: 1px solid #d8e3ee; + border-radius: 12px; + padding: 14px; +} + +.wdtransf-widget .wdtransf-head { + display: flex; + justify-content: space-between; + align-items: flex-start; + gap: 12px; + margin-bottom: 12px; +} + +.wdtransf-widget .wdtransf-title { + margin: 0; + color: #0f4a77; + font-size: 22px; + font-weight: 700; +} + +.wdtransf-widget .wdtransf-subtitle { + margin: 4px 0 0; + color: #5a6c7f; + font-size: 12px; +} + +.wdtransf-widget .wdtransf-updated { + color: #4f6274; + font-size: 11px; + white-space: nowrap; +} + +.wdtransf-widget .wdtransf-label { + display: block; + margin-bottom: 4px; + color: #3e5a73; + font-size: 11px; + font-weight: 700; + text-transform: uppercase; +} + +.wdtransf-widget .wdtransf-filters { + margin-bottom: 10px; +} + +.wdtransf-widget .wdtransf-filters .form-control { + height: 36px; + border-radius: 8px; +} + +.wdtransf-widget .wdtransf-actions { + display: flex; + align-items: flex-end; + gap: 6px; + padding-top: 18px; +} + +.wdtransf-widget .wdtransf-message { + margin-bottom: 10px; + border-radius: 8px; + padding: 8px 10px; + font-size: 12px; + border: 1px solid transparent; +} + +.wdtransf-widget .wdtransf-message.is-info { + background: #e8f1fb; + color: #1d4f7d; + border-color: #bed6ee; +} + +.wdtransf-widget .wdtransf-message.is-success { + background: #e8f6ea; + color: #2b6a3b; + border-color: #bde0c3; +} + +.wdtransf-widget .wdtransf-message.is-warning { + background: #fff5e8; + color: #8f6219; + border-color: #f0d8b5; +} + +.wdtransf-widget .wdtransf-message.is-danger { + background: #fdecec; + color: #9a2f2f; + border-color: #e8b8b8; +} + +.wdtransf-widget .wdtransf-kpis { + margin-bottom: 12px; +} + +.wdtransf-widget .wdtransf-kpi { + background: #ffffff; + border: 1px solid #dbe6f1; + border-radius: 10px; + padding: 10px 12px; + min-height: 72px; +} + +.wdtransf-widget .wdtransf-kpi-label { + color: #4b647b; + font-size: 11px; + font-weight: 700; + text-transform: uppercase; +} + +.wdtransf-widget .wdtransf-kpi-value { + margin-top: 4px; + color: #0f4a77; + font-size: 24px; + font-weight: 700; + line-height: 1.1; +} + +.wdtransf-widget .wdtransf-panel { + background: #ffffff; + border: 1px solid #dbe6f1; + border-radius: 10px; + padding: 10px 12px; + margin-bottom: 12px; +} + +.wdtransf-widget .wdtransf-panel-title { + color: #1a537f; + font-size: 13px; + font-weight: 700; + margin-bottom: 8px; + text-transform: uppercase; + letter-spacing: 0.02em; +} + +.wdtransf-widget .wdtransf-stage-list { + display: flex; + flex-direction: column; + gap: 8px; +} + +.wdtransf-widget .wdtransf-stage-item { + display: grid; + grid-template-columns: 180px 1fr 62px; + gap: 8px; + align-items: center; +} + +.wdtransf-widget .wdtransf-stage-label { + color: #3f5d75; + font-size: 12px; + font-weight: 600; +} + +.wdtransf-widget .wdtransf-stage-bar-wrap { + background: #edf2f7; + border: 1px solid #d5e0eb; + border-radius: 999px; + height: 14px; + overflow: hidden; +} + +.wdtransf-widget .wdtransf-stage-bar { + background: linear-gradient(90deg, #2f84bf 0%, #0f5b91 100%); + height: 100%; + min-width: 0; +} + +.wdtransf-widget .wdtransf-stage-value { + text-align: right; + color: #244d70; + font-size: 12px; + font-weight: 700; +} + +.wdtransf-widget .wdtransf-table { + margin-bottom: 0; +} + +.wdtransf-widget .wdtransf-table thead th { + background: #eef4fb; + color: #3f5d75; + font-size: 11px; + border-bottom: 1px solid #d6e1ed; +} + +.wdtransf-widget .wdtransf-table tbody td { + font-size: 12px; + vertical-align: middle; +} + +.wdtransf-widget .wdtransf-pagination { + margin-top: 10px; + padding-top: 8px; + border-top: 1px solid #e1e9f2; + display: flex; + justify-content: space-between; + align-items: center; + gap: 10px; + flex-wrap: wrap; +} + +.wdtransf-widget .wdtransf-pagination-info { + color: #536b81; + font-size: 12px; +} + +.wdtransf-widget .wdtransf-pagination-controls { + display: flex; + align-items: center; + gap: 6px; +} + +.wdtransf-widget .wdtransf-page-status { + min-width: 110px; + text-align: center; + color: #2d5679; + font-size: 12px; + font-weight: 600; +} + +.wdtransf-widget .wdtransf-status { + display: inline-block; + padding: 2px 8px; + border-radius: 999px; + font-size: 11px; + font-weight: 700; + border: 1px solid transparent; +} + +.wdtransf-widget .wdtransf-status.is-progress { + color: #1d6095; + background: #e8f2fb; + border-color: #c3dbef; +} + +.wdtransf-widget .wdtransf-status.is-problem { + color: #a53333; + background: #feecec; + border-color: #efb9b9; +} + +.wdtransf-widget .wdtransf-status.is-done { + color: #2f6f41; + background: #e9f8ed; + border-color: #bfe4c7; +} + +.wdtransf-widget .wdtransf-status.is-cancel { + color: #8c651f; + background: #fff5e8; + border-color: #f0dcba; +} + +.wdtransf-widget.is-loading .wdtransf-panel, +.wdtransf-widget.is-loading .wdtransf-kpi { + opacity: 0.85; +} + +@media (max-width: 767px) { + .wdtransf-widget .wdtransf-head { + flex-direction: column; + align-items: flex-start; + } + + .wdtransf-widget .wdtransf-actions { + padding-top: 6px; + } + + .wdtransf-widget .wdtransf-stage-item { + grid-template-columns: 1fr; + } + + .wdtransf-widget .wdtransf-stage-value { + text-align: left; + } +} diff --git a/Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/resources/images/icon.png b/Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/resources/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..102160cdd282b0d62712b3c7e6bef86fcd538496 GIT binary patch literal 7845 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 D*xqLB literal 0 HcmV?d00001 diff --git a/Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/resources/js/wdtransf.js b/Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/resources/js/wdtransf.js new file mode 100644 index 0000000..a22e539 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransf/src/main/webapp/resources/js/wdtransf.js @@ -0,0 +1,570 @@ +var WdTransfWidget = SuperWidget.extend({ + datasetName: "transferenciav2", + pageSize: 10, + batchSize: 1000, + currentPage: 1, + rowsCache: [], + isIncrementalLoading: false, + loadOffset: 0, + batchToken: 0, + lastChunkMarker: "", + noPagingMode: false, + + stageDefs: [ + { label: "Solicitacao", activities: ["0", "1"] }, + { label: "Aprovacao", activities: ["4"] }, + { label: "Emissao NFe", activities: ["6"] }, + { label: "Coleta", activities: ["31"] }, + { label: "Entrega", activities: ["57"] }, + { label: "Recebimento", activities: ["18"] }, + { label: "Consultar Entrada", activities: ["99"] }, + { label: "Verificar Problema", activities: ["24", "104"] }, + { label: "Finalizada", activities: ["96", "101"] }, + { label: "Cancelada", activities: ["39", "60"] } + ], + + bindings: { + local: {}, + global: {} + }, + + init: function() { + this.$widget = $("#MyWidget_" + this.instanceId); + this.bindEvents(); + this.populateActivityFilter(); + this.currentPage = 1; + this.loadData(); + }, + + bindEvents: function() { + var self = this; + + self.$widget.on("click", "[data-action='reload']", function() { + self.currentPage = 1; + self.loadData(); + }); + + self.$widget.on("change", "[data-role='activityFilter']", function() { + self.currentPage = 1; + self.render(); + }); + + self.$widget.on("keypress", "[data-role='search']", function(e) { + if (e.which === 13) { + e.preventDefault(); + self.currentPage = 1; + self.render(); + } + }); + + self.$widget.on("click", "[data-action='prevPage']", function() { + self.setPage(self.currentPage - 1); + }); + + self.$widget.on("click", "[data-action='nextPage']", function() { + self.setPage(self.currentPage + 1); + }); + }, + + populateActivityFilter: function() { + var added = {}; + var options = [""]; + + for (var i = 0; i < this.stageDefs.length; i++) { + var stage = this.stageDefs[i]; + for (var j = 0; j < stage.activities.length; j++) { + var code = String(stage.activities[j]); + if (added[code]) continue; + added[code] = true; + options.push( + "" + ); + } + } + + this.$widget.find("[data-role='activityFilter']").html(options.join("")); + }, + + loadData: function() { + this.batchToken++; + this.rowsCache = []; + this.currentPage = 1; + this.loadOffset = 0; + this.lastChunkMarker = ""; + this.noPagingMode = false; + this.isIncrementalLoading = true; + + this.setLoading(true); + this.setMessage("Carregando solicitacoes...", "info"); + this.render(); + this.loadNextBatch(this.batchToken); + }, + + loadNextBatch: function(token) { + var self = this; + if (token !== self.batchToken) return; + + self.fetchDatasetBatch(self.batchSize, self.loadOffset, function(err, rows) { + if (token !== self.batchToken) return; + + if (err) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Erro ao carregar dataset: " + err, "danger"); + return; + } + + rows = rows || []; + if (!rows.length) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Dados carregados: " + self.formatNumber(self.rowsCache.length) + " registro(s).", "success"); + return; + } + + var chunkMarker = self.buildChunkMarker(rows[0]); + if (self.loadOffset > 0 && chunkMarker && chunkMarker === self.lastChunkMarker) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Paginacao do dataset nao evoluiu (sqlStart/offset). Verifique suporte no ambiente.", "warning"); + return; + } + + self.lastChunkMarker = chunkMarker; + self.rowsCache = self.rowsCache.concat(rows); + self.loadOffset += rows.length; + self.render(); + self.setMessage("Carregando solicitacoes... " + self.formatNumber(self.rowsCache.length) + " registro(s).", "info"); + + if (self.noPagingMode) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Dados carregados: " + self.formatNumber(self.rowsCache.length) + " registro(s).", "success"); + return; + } + + if (rows.length < self.batchSize) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Dados carregados: " + self.formatNumber(self.rowsCache.length) + " registro(s).", "success"); + return; + } + + setTimeout(function() { + self.loadNextBatch(token); + }, 0); + }); + }, + + fetchDatasetBatch: function(limit, offset, callback) { + var self = this; + if (self.noPagingMode && offset > 0) { + callback(null, []); + return; + } + + try { + if (typeof DatasetFactory !== "undefined" && typeof DatasetFactory.getDataset === "function" && + typeof ConstraintType !== "undefined" && typeof DatasetFactory.createConstraint === "function") { + var constraints = self.noPagingMode ? null : self.buildFactoryPagingConstraints(limit, offset); + var ds = DatasetFactory.getDataset(self.datasetName, null, constraints, null); + var rows = (ds && ds.values) ? ds.values : []; + + // Fallback para datasets (card/form) que nao suportam sqlLimit/sqlStart como MUST. + if (!rows.length && offset === 0 && !self.noPagingMode) { + var dsNoPaging = DatasetFactory.getDataset(self.datasetName, null, null, null); + var rowsNoPaging = (dsNoPaging && dsNoPaging.values) ? dsNoPaging.values : []; + if (rowsNoPaging.length) { + self.noPagingMode = true; + callback(null, rowsNoPaging); + return; + } + } + + callback(null, rows); + return; + } + } catch (e) { + // fallback REST + } + + this.fetchDatasetBatchViaRest(limit, offset, callback); + }, + + buildFactoryPagingConstraints: function(limit, offset) { + var constraints = []; + constraints.push(DatasetFactory.createConstraint("sqlLimit", String(limit), String(limit), ConstraintType.MUST)); + constraints.push(DatasetFactory.createConstraint("sqlStart", String(offset), String(offset), ConstraintType.MUST)); + constraints.push(DatasetFactory.createConstraint("offset", String(offset), String(offset), ConstraintType.MUST)); + constraints.push(DatasetFactory.createConstraint("sqlOffset", String(offset), String(offset), ConstraintType.MUST)); + return constraints; + }, + + fetchDatasetBatchViaRest: function(limit, offset, callback) { + var self = this; + if (self.noPagingMode && offset > 0) { + callback(null, []); + return; + } + + function readRows(resp) { + if (resp && resp.content && resp.content.values) return resp.content.values; + if (resp && resp.values) return resp.values; + return []; + } + + function request(usePaging, done) { + var constraints = usePaging ? self.buildRestPagingConstraints(limit, offset) : []; + $.ajax({ + url: "/api/public/ecm/dataset/datasets", + type: "POST", + contentType: "application/json; charset=UTF-8", + dataType: "json", + data: JSON.stringify({ + name: self.datasetName, + fields: [], + constraints: constraints, + order: [] + }) + }).done(function(resp) { + done(null, readRows(resp) || []); + }).fail(function(xhr) { + var detail = xhr && (xhr.responseText || xhr.statusText || xhr.status); + done(detail || "falha na API REST de datasets", []); + }); + } + + request(!self.noPagingMode, function(err, rows) { + if (err) { + callback(err); + return; + } + + if (!rows.length && offset === 0 && !self.noPagingMode) { + request(false, function(err2, rows2) { + if (err2) { + callback(err2); + return; + } + if (rows2.length) { + self.noPagingMode = true; + } + callback(null, rows2 || []); + }); + return; + } + + callback(null, rows || []); + }); + }, + + buildRestPagingConstraints: function(limit, offset) { + return [ + { _field: "sqlLimit", _initialValue: String(limit), _finalValue: String(limit), _type: 1 }, + { _field: "sqlStart", _initialValue: String(offset), _finalValue: String(offset), _type: 1 }, + { _field: "offset", _initialValue: String(offset), _finalValue: String(offset), _type: 1 }, + { _field: "sqlOffset", _initialValue: String(offset), _finalValue: String(offset), _type: 1 } + ]; + }, + + buildChunkMarker: function(row) { + if (!row) return ""; + var id = this.pick(row, ["metadata#id", "id", "WKNumProces", "processInstanceId"]); + var state = this.pick(row, ["activity", "WKNumState", "state"]); + return (id || "-") + "|" + (state || "-"); + }, + + render: function() { + var rows = this.getFilteredRows(this.rowsCache); + this.renderKpis(rows); + this.renderStageBars(rows); + this.renderTable(rows); + this.renderUpdatedAt(); + }, + + getFilteredRows: function(rows) { + var out = []; + var search = $.trim(String(this.$widget.find("[data-role='search']").val() || "")).toLowerCase(); + var activityFilter = $.trim(String(this.$widget.find("[data-role='activityFilter']").val() || "")); + + for (var i = 0; i < (rows || []).length; i++) { + var row = rows[i] || {}; + var activityCode = this.getActivityCode(row); + + if (activityFilter && activityCode !== activityFilter) { + continue; + } + + if (search) { + var base = this.extractRow(row); + var blob = [ + base.processo, + base.solicitante, + base.origem, + base.destino, + base.dataAbertura, + base.atividadeCode + ].join(" ").toLowerCase(); + + if (blob.indexOf(search) === -1) { + continue; + } + } + + out.push(row); + } + + return out; + }, + + renderKpis: function(rows) { + var total = rows.length; + var transit = this.countByActivities(rows, ["31", "57"]); + var pendingReceipt = this.countByActivities(rows, ["18"]); + var problem = this.countByActivities(rows, ["24", "104"]); + var done = this.countByActivities(rows, ["96", "101"]); + + this.$widget.find("[data-role='kpiTotal']").text(this.formatNumber(total)); + this.$widget.find("[data-role='kpiTransit']").text(this.formatNumber(transit)); + this.$widget.find("[data-role='kpiPendingReceipt']").text(this.formatNumber(pendingReceipt)); + this.$widget.find("[data-role='kpiProblem']").text(this.formatNumber(problem)); + this.$widget.find("[data-role='kpiDone']").text(this.formatNumber(done)); + }, + + renderStageBars: function(rows) { + var total = rows.length; + var html = []; + + for (var i = 0; i < this.stageDefs.length; i++) { + var stage = this.stageDefs[i]; + var count = this.countByActivities(rows, stage.activities); + var percent = total > 0 ? ((count * 100) / total) : 0; + + html.push( + "
" + + "" + this.escapeHtml(stage.label) + "" + + "
" + + "
" + + "
" + + "" + this.formatNumber(count) + "" + + "
" + ); + } + + this.$widget.find("[data-role='stageBars']").html(html.join("")); + }, + + renderTable: function(rows) { + var html = []; + var totalRows = rows.length; + var totalPages = totalRows > 0 ? Math.ceil(totalRows / this.pageSize) : 1; + + if (this.currentPage > totalPages) { + this.currentPage = totalPages; + } + if (this.currentPage < 1) { + this.currentPage = 1; + } + + var startIndex = totalRows > 0 ? ((this.currentPage - 1) * this.pageSize) : 0; + var endIndex = totalRows > 0 ? Math.min(startIndex + this.pageSize, totalRows) : 0; + var pageRows = rows.slice(startIndex, endIndex); + + if (!totalRows) { + var emptyMsg = this.isIncrementalLoading ? + "Carregando dados..." : + "Nenhum registro para os filtros informados."; + html.push("" + this.escapeHtml(emptyMsg) + ""); + this.$widget.find("[data-role='tableBody']").html(html.join("")); + this.renderPagination(0, 0, 0, 0); + return; + } + + for (var i = 0; i < pageRows.length; i++) { + var base = this.extractRow(pageRows[i]); + html.push( + "" + + "" + this.escapeHtml(base.processo) + "" + + "" + this.escapeHtml(base.solicitante) + "" + + "" + this.escapeHtml(base.origem) + "" + + "" + this.escapeHtml(base.destino) + "" + + "" + this.escapeHtml(base.dataAbertura) + "" + + "" + this.escapeHtml(base.atividadeCode) + "" + + "" + ); + } + + this.$widget.find("[data-role='tableBody']").html(html.join("")); + this.renderPagination(totalRows, totalPages, startIndex + 1, endIndex); + }, + + renderPagination: function(totalRows, totalPages, firstRow, lastRow) { + var info = "Exibindo " + this.formatNumber(firstRow) + "-" + this.formatNumber(lastRow) + + " de " + this.formatNumber(totalRows); + if (totalRows === 0) { + info = "Exibindo 0-0 de 0"; + } + + this.$widget.find("[data-role='pageInfo']").text(info); + this.$widget.find("[data-role='pageStatus']").text( + "Pagina " + this.formatNumber(this.currentPage) + " de " + + this.formatNumber(totalPages || 1) + + (this.isIncrementalLoading ? " (carregando...)" : "") + ); + + var disablePrev = (this.currentPage <= 1 || totalRows === 0); + var disableNext = (this.currentPage >= (totalPages || 1) && !this.isIncrementalLoading) || totalRows === 0; + this.$widget.find("[data-action='prevPage']").prop("disabled", disablePrev); + this.$widget.find("[data-action='nextPage']").prop("disabled", disableNext); + }, + + setPage: function(page) { + var n = parseInt(page, 10); + if (isNaN(n)) return; + if (n < 1) n = 1; + var totalPages = Math.ceil(this.getFilteredRows(this.rowsCache).length / this.pageSize) || 1; + if (n > totalPages) { + if (this.isIncrementalLoading) { + this.setMessage("Aguarde: ainda carregando mais registros...", "info"); + return; + } + n = totalPages; + } + this.currentPage = n; + this.render(); + }, + + extractRow: function(row) { + var activityCode = this.getActivityCode(row); + var solicitante = this.pick(row, ["requesterName"]) || "-"; + var origem = this.pick(row, ["ufOrigem"]) || "-"; + var destino = this.pick(row, ["ufDestino"]) || "-"; + return { + processo: this.pick(row, ["WKNumProces"]) || "-", + solicitante: solicitante, + origem: origem, + destino: destino, + dataAbertura: this.formatDate(this.pick(row, ["dataAbertura"])) || "-", + atividadeCode: activityCode || "-", + atividadeLabel: this.getActivityLabel(activityCode) + }; + }, + + getActivityCode: function(row) { + var raw = this.pick(row, ["Activity", "activity", "WKNumState", "state", "statusAtividade"]); + var text = $.trim(String(raw || "")); + if (!text) return ""; + var parsed = parseInt(text, 10); + return isNaN(parsed) ? text : String(parsed); + }, + + getActivityLabel: function(code) { + var map = { + "0": "Solicitacao", + "1": "Solicitacao", + "4": "Aprovacao", + "6": "Emissao NFe", + "18": "Recebimento", + "24": "Verificar Problema", + "31": "Coleta", + "39": "Cancelada", + "57": "Entrega", + "60": "Cancelada", + "99": "Consultar Entrada", + "96": "Finalizada", + "101": "Finalizada", + "104": "Problema de Lancamento" + }; + + return map[String(code || "")] || "Nao mapeada"; + }, + + countByActivities: function(rows, activities) { + var set = {}; + for (var i = 0; i < activities.length; i++) { + set[String(activities[i])] = true; + } + + var count = 0; + for (var j = 0; j < rows.length; j++) { + var code = this.getActivityCode(rows[j]); + if (set[String(code)]) count++; + } + return count; + }, + + pick: function(row, keys) { + for (var i = 0; i < keys.length; i++) { + var value = row[keys[i]]; + if (value !== null && value !== undefined && String(value).trim() !== "") { + return String(value).trim(); + } + } + return ""; + }, + + formatDate: function(value) { + var text = $.trim(String(value || "")); + if (!text) return ""; + + var iso = /^(\d{4})-(\d{2})-(\d{2})/.exec(text); + if (iso) { + return iso[3] + "/" + iso[2] + "/" + iso[1]; + } + return text; + }, + + formatNumber: function(value) { + var n = Number(value || 0); + if (isNaN(n)) return "0"; + return n.toLocaleString("pt-BR"); + }, + + renderUpdatedAt: function() { + var now = new Date(); + var stamp = now.toLocaleDateString("pt-BR") + " " + now.toLocaleTimeString("pt-BR"); + this.$widget.find("[data-role='updatedAt']").text("Atualizado em: " + stamp); + }, + + setLoading: function(isLoading) { + this.$widget.toggleClass("is-loading", !!isLoading); + if (isLoading) { + this.setMessage("Carregando dados...", "info"); + } + }, + + setMessage: function(text, type) { + var $msg = this.$widget.find("[data-role='message']"); + $msg.removeClass("is-info is-success is-warning is-danger"); + + if (!text) { + $msg.hide().text(""); + return; + } + + var className = "is-info"; + if (type === "success") className = "is-success"; + if (type === "warning") className = "is-warning"; + if (type === "danger") className = "is-danger"; + + $msg.addClass(className).text(text).show(); + }, + + escapeHtml: function(text) { + return String(text == null ? "" : text) + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); + } +}); + + diff --git a/Transferência Ginseng/wcm/widget/wdtransf/target/wdtransf.war b/Transferência Ginseng/wcm/widget/wdtransf/target/wdtransf.war new file mode 100644 index 0000000000000000000000000000000000000000..4a9e6a519b3b550fd88d2a0acf145555266d70c4 GIT binary patch literal 16612 zcmbWe1yEf}yDf^lO9&1D0tpCVrMgCcvt@jPSv90nJRk~T5mUfCb4G!irAQV4!H zZ$b2jN)D@C z;rtqO`1|)Iv#~k=#3~nO?b`F%>8|q@Or@}(VFU_SE{Wn-dw!rtf%z&q6|9`=MMLiFNnav&Vn+mub``?k7 zi12QLjRObgxL$u2QKTUhBB5ve2#P}2zW{SYA}AiPSx=v87YDlzoRm@>E2Tr~N`p^m z*CFYcR9h5*eNinWwd`%SLNw7y#%Jm+kGB55TRVXFeQ+hKb_KRJHtYC-@`%|8v;I+{E>d z!}IFawkxbCZ(VuY4fdo#7Y2p4F$em%oa}L%2I^BR!vUNnW)Z zQ&n;0f<}oC0Xw-}xz_>77QIP$m#(ATNm-yiFL#6{U~q~3T90(5t)Gaa+$iuLc1jHm zrSS16+`B?{9?r?GlvN%()U?~D9mm4v8T*7clYx5EXz1uo|2T6v8 zJh}qf5=B?d2fB|M@t`u@It#7`&+& zN3%5KnoraT@vT*4yzqW-a64cl_ zAh~J2<{~pIE9a~w6O)UVHK%lrw4h+TyYwD452*|CUZ=&!&cul0wehF=z zM|%l-pU7(F2-2@sHvU7Ro0)eNpIa zL-w|Uen?I&^yJfm(MkEqtGlhVZW_H~(T2?r@==cfU^td)8@B62}qyZ>jeYSUrE-o zj}+PtdmpRUJDvy)5mO|yE)f+^GHpYbv7zElKBO!Ar6p!3n#}0ZZZZ#}l9R7s zn9Y!;bSav_RXGMo*f9*5&R-G(%#;Ij-NdtHJ60XyPgg0Gf<FRK&evgp`QGesTzN-a}C+$m~j$aF7nptFpYW6PtxFOu1wyMn<6?9bKsNS91Ox(V&{5y#pp!iqI8RKH6x* zn^_v+!d%7H*|`!BtiU!f28#~s#XDR)1UuX= z#Tz8{H8TQW&MS5D%;~E_URp`U?U=?lNM+*$^h;_j9Wv>n6F**|*<3V&$8Y0BT+UNe zi9=XQ>D) z;=i8)jhRMW$%AzpxP(2RN=SC8R{;W|i8@0Utibr{1(jk8*ge29a?2phMZU`O+s9_* z`9aM^AOIG8wSJwmXi3fC790&>ZKQ3VKruW*An34)aF1f^ovI z#PmbFb0{!#`+V_9FZ7|pgCEc>58pC!$WozaAL4t^%Cb-feFs86c%?ORpL>K0*vdOK z%%1~|#KzeXuAVlXwB7?|oJ(oeD^1pW;Ws;$V=1zK)0#$W(y?1d6H5zfr8^jH>}tzU zPQ=X2Y^D8R83K?Um#4l>&dVJ*uLV0%?9I*GMU^;hZ)J%tiHJ};fr7Tq+DM(@n+qo# z2pqO?HM)t7E(#iu>deY%P(e*|rdNnLK@jL$3Y%&y%;G3o{t~)GC*9r7;35|dGcR*R zYqVotE~lYDtZ}(m93zqUSqzRYA})%#-)%Qx-s}7B|hW_nVeU zS;I9HXLHS1@s!sYh@;t_PoEwvVD@!l(vtiK7*f{vI3BSo_gWz&Wu8+(z5OS9;7#O&g3 zMRZvA%OHb;m1^`tI`?=s&+MexX#+YwREtrR(mNlbU1GE?$>4gpzJYcJJfd`4>FAVg zwEI!)divf5hN(C|+JMBJXQSf|v-(6?Q+k?ox)9Hzc%)rj*e<%v{CkEn=Ub6;RUySL zJ3|zc#ED6>*LOKo&_+3g0fl?^8-Q8%^*(l;jqHtyKoNb@)pb+$HiGGMe0a&8i~_$A z&J$}OQ%2v2lPEED!fOp=S%ip=TqOI|;R-O%oP!ASvxYw+64o!_wGQl;uInv(e$*m! zrSC=NQtj?1)l4WMS=FXD)B6T!A(9>cBM07} z97?v|oLmhYOh5#TZ4FI`M9m#cTx}gJ9f^dLSnL~ttRNuxuM)xn%5GWXS*}_5V%eMB z^IO60iDLP%lKIBN5vny-!zm<#5=|O(@YIK&R(|=D;M>_XdwQ-CjP{{@S^|f*x~N^H zm7<5rvS&p~2#llANQq}oz!aT{`o>JxeO6WWn*Z#4@5w|WHOQ*=bi+Na?Cd<>?AxvP z>VugxrFmT}SxNY$G5NB-M@BAV-Zhu#As{rP&7*0Di&rYH@s;NkfI!Te7UFhiHr>i) zl$qJ>JU-&jr{X!V0&Ds7#ATYp-Domju(wlMiR~$2G;(Gso`ydhv}~LiLIYCRn;cO` z1xVq6!;Cc)X)_rbr5cYjiQq{wuwp>WVVJ_TeSXMzYc7Aa<)}D3KF@0Q(A`gF;$%{j zHkYeDv5?8krjhu~$ciWdzru(j=(j+DC~2OwAYN$4BQhMnBS{dr%m^JKb;75(BVH8% zl%Q4;AEnO$zoZ&Pab3T=oL^ZV>FO}4p?%Op?zUVWyR(!#vi2An8;(|$^UNqp3Wm~_ z+mZ|}c7hQDL@&I(H{Owr*=C3mdFApiCnK1Q-Vlz|U+c%jdqE1pP@|KfbYlvxdOed* zKJ02u7qj6nnCSVOc$dp%+_Z|!YNbvd*%Xi&0VQPylEpFo!u&6{9ux~P8Pxp?%<%cOT_Q+CTgwEDLz~;GSJ5Xo61B8tbW~)t9or_tGBhqsbG44ww>&<)0pI| zNL#D*u#rQDm6CTNRUFLon}MqoD5pgDqRvwGIf>Y>bWjkYh6a35=>+dr-EAZ4l}T)n ziE8F;l)=IKUA|oQ?Lp@B5Fbv8`bFiQoR`a~+5~s&_0xy15}Hs05f#Zem=ba-ok=rh zU+B9a2J!|9V^NfE4x6lleyC7iu4VR;(88=yzOAtlEF6$Lq!EDVpJj(aLLlNxvh=-Ku=g+mY}lIhC${Y zlmL8ijixhfk$eV(Enkb;S>~TlEAOMfLpNO1311eJzPFlboG+$MT8Np83@B}dsX}gg zzy*PPxs8w#UDZ_q9k_PJFQCjlaK+aVeuN#>*Dv^0gx^n52+jqSiz?{5CH9?TzuXqL z0@ud;gMj@kW0V8l3?lB?MBtml@u2pY&M=sv9Zc|%9ecgKdcT5q#Ecm1`Q6u`-7)k1}-__VE?{J9hZ zhuv3#O=88^@tuC<&ZL$GJd9H$Te-w76q`!KOkTj6DV3|`~(jZ5lD6QIJ)JsC=c=_U!3h$hF(Q5FZpOKt()UF9Ap%9U{d0+RAM zqV70{0AsuFeD`FBHGazBi)n}6n z`Rzi+-}y0>;OQoU179tBZZ--?8DWCFnAnojcj=|F(&n1vwQORqhfDRXS;?L(hUzuM zeCgsSj*k)Sy11#v&;~lVE)rKfKB^xU^bkeW*JVDYf z{gtfaLO4-xCW=e7|KRJW9i9NE)N>}}{)D^>lD5A5YdNybo?BudS-nVqGzayAokDNF z^V%}blABN@b>v=C)~IlTV2H=hm82miFdSYM+*oU?Jav?jiYk^ChysGCScuFd$pd=D zP$g19XyP&m^{(ZRS#szroD{u`T;yh>Vv0xyB7UL-oIZtj!7&WS9?yUid=5V+g>eT>=f_UkhQ2~7ga$wnXp(N1Q8NeGB;1wU#h zaprH{_aq6E$i3^Qq@a@>4`M2AbVGK!Hu<_}R{=iJ6pvP!H=5@-Q zqCWUW);s zu#2aYNl2*gr?ZNglMJz&HT~qBw-5L4<%I3*QE#@E6AG(Q{gw6njyApsHM#WpiB-V( zPK0jSyB7$azKt!Dl&MP`O`DOZn1(YUHzrt|f3`AcP)0mmTmeel4XArg-!+(L5p$D4 zZW56bLogHuSnw3wZmBOXtvcb`Ao{ti#$H+1geaw~zEB?$1p=s?EuVDP4j6qa*?911 z@q^(RB?1JpErEW+W{`7EcSCAXl*sUBRI)7=L(;pU>bbQgXM8hUE>TMp}V}^J!4>x7f!W=2NHc(7Lte(8B1Gq z$KEgL`~-)AwKUNE&qYqg?5+~Xg>|7*@)Yf>*Q@In<7C!}k*d-I_TDg zq#96|I_u+S_gxccIF^d^?|Z3ZyFM>hFY}C7u$!Z`{=fx`C|8@GjeViTmWanHDcf(Z zE`vlR!gqfKy`jwgZN_7m*Qooja}B*910zNG3OkC?U~Huar%ZY`oq30Ai3=5L#oM!$ z#+hAT5L&gs{8%T|$LQuY3gU^h|KnwV=ccK6I8{3#Ww<{Rx#nG*c&yuQfH`A^)nw>; z|DfMgExH{+z^ykjGRlkeb;~;kX)V00dJl?@2m+(Gv=t<2<~ttN!u*DZSCR4+zQhWV zc_zE=NuIM%LotS=8D-9n+T=+uY=`44N(GlS4%qvtMPci8>6)_kMm9Y{?{4w!qkq$! zTh4Z>++FC=@3@8*yItlhGB)N-#*5-r`5zWyBlIB^*AFBmjCiC4t^$s+DTzPXE%Xs{Sjym z0~LeOdcI8IJ5qpPN_+CHVYB@Bt~39Iwy3InPv)D8Eqdz@^fEP;v&izjmL`B7j)aLb zb23Z3e-f}C8#;@a2NUNBC1vJHvXB&Z^!p*ghNeslYBaCPwA^w4Vm01gVcM%Ei!I~F z8!MTblf?4Z?iG(XwR=Lu>q$M<;HoC(0e+qH^_Ea81{@wbzD_!@9~RbX81l~vhfsbN z+L37(!TF^T+VH;9#$KgpoEM}4Qk2dnh!y2;hqa}e$0oT9GN=bGQ{r?s%HI3R08HHN zSN94%zRvbRofbo9!W2LWMDHD4&H-|u`3hsp%MErC9`Y34aLVKOY3vg;*92*u zh$-H1c)tQ_97 z_oEw>l!Yv)w{gis`GD=X?I&GALpR0525H@gew4|fZ&(YoM+T~{B&~+Q1=bfmj-DLM zictl&u}|c^qVX_b{$a0~CsBo9g?@H)_?$a3JjkPIcEx=)&JXbmhZTCIuf*WA9;V>|U+(m?+ zld(c$X<*tbJ;=IdE4kll18ccyRP{cd9x~>5zKI+U)Z{bQASk|8<6x)~GDS|(LL}%| zKmNW9CD&Cw5obe4konY-{_~kX+$XFg+Z&S$Pv=)T^XNIw2BTc;i4*`Afz&q{u-r<9 zVY{Y2s%m_)?7Afu`jHOvN~fkG&@|T8cri9Ym}0M(y^#u?lc7u*MA$pz-Q^}zh|w!k zj#uYl&f&bSYtE7ni^opAZ*?QXpDtwDuo+h)!+MUly?i>YJW*JDJN?=1 zEaupL2squzA@>4lTM7V~R#2-KoVBtqf9p&1%4^~QA- zZPt^$8pKzE63TGBqNAFTp8d<0(hMwD{H?=O64UD+O2xCw2|tuwPt6;b%W?I$rcmI+T}_X?*3>?=upSQmW%bS{3?Q0psln*&hC<}1JSRA;}QZ_&O`=*-@QMRPIc1KyP;c_9d`Q`S6K+}y_ebGK`W(aW) zBSJ{Mi7qU{YY`vbVEJ{nu3B9{X{u45J3jyA(?~F*=nP0er{dc#7DZB)cw5IqfhKiX zwd|rQi6>_8XGMVTx`lp{7@Nq9^H%BXp_%NKBp*T>$+z}zw@p*)NpSP+CvF&21l`^? z$cTXBv}|lD9tJ3K5YsQNeT>Y51$za>WuD$;A?O<%<5*Pw8HX7PQ}~Mpl^#oQl^^c{ zz9~10a;I>nBAHAQ>$QeBtpP$tBYWwo&`Y0}s-#DXN_#~mMK}%elJ+d$@2KE)wcrH{KqZn_hOu9Zqo z5`uq}!EZ?h|2RW821!MmvzswIi!jPMzXxOCNsyqt&GsV#?irDIRwfK zQBr}Nx}P0P#rraFd8n2dORZpjqg>8S#%Z>jmx>u&EQtp8mf8kcKH57&;EoldX1M@s$9;6JCAKtR$L_4Tr6eP_=9lc6Db2*1=pN%i zf*00)?CLd~Xs0z2Rr4LlyvA>9x6Qm$^sW0~#KO_5$}3#DBGrpw;a3qRSOAugtx)k4 zlQ>yTTSC0<9(9_q-T74Kx_;yh@9U>)8W5GzjvbC<_zGp5N|n!o(xg09`_-?2-E%0` zAi^h#Q@X@Lt9sesFT>L0l{L;e%F1}LR#kX&Bz><%MFw$_bMua4Z{J&Pq+uvh3if~S z+>3y~^Gmq~s!zbznjuza&{nrf8tEzDNO#DT@43Guc6dk8azSLsqDqul zUh4Ik0|uajuq&|NI>Ytzb70Cl2*He^JprnfZyJ(PVz4hQ%GeWvtnKy^bSHRCC_hR! zvzC^f8gV}%9J46nfgqZzy$7Vu@H+!I-e0n+|rzWSLM1){z zX;Me-%-F6#Sm`T6p2TN4j~FqB7)TvJuoESv!4>mQ)=k};cwZmZwdKwkn_u$ym?oQF z$4+d%ZH*zJ)OZq&ZpDAeQEo6!7|Wa<)Q~E6xQdElK<1)P+lO}T{+UmALS~*hc4BRC zc_OitGHe-I_wk%SkBGex2*;wvT9-p**>o;Ixb*08ao&k}T5)M!g(MIqB1^NQ#S51m=||1-0<6=w zzP=oFL9Q^fTMHnoRcigbsoG>gx6`Su;4ZW}aDEOIu8MQ&{>Dbfv;*xH$ z$79i%ZJd(J!Ba>rmW(>Hs6oc)_qPi(z)eG7KiXWZrlwHUPMm~>*Uc4~cH6hRw9s?h zu}jxxo`D!|k_OhouU2NfOH`Lzkyux$Sk#{r`PdbAj^Ay;arFpt3mFbWzezqf)gC!_ zfDT^?ar**LAVwVR>-rg!>G#*%XPvn~$LM@6BSAWB*GA$A-yQm~HIF%5grF)}NLm>s z&8hogns=n9AQWNI0W7hdHL2Ru2J-m?~n3(t?4}S0Sr4mY*49N)o@fYT1MQ zWaB39 zikCboMyIv0O9Ro%YaKoU|Czr+&IW5wS#T$F5jxB5SoXq1da*Qc%Ff?Av<@LQ1uS%t z&*Mt~iIYJ86b|?9_ioxG{2)Ijx%7$l3C{4hSFz6|qKs=#d z1b#Z3oXnNwp14tGE)Jwtae4N6d=Rml!?iA}6%YUWTRz@+ve1wQkWjydCa@?3LWwg| zouNC_QFUVT!{76_XU7wsq(X*7;S{Ns0R^j3k8_=k?ziGg(Rx9z$1K)E?DX#?0VGrJj_l*thLxKkeSFO}m_Ut8~L)#o(4Q$0` zwmHAZ%VmNSMtiro`}4`*$gnC|5CNGBMHp-N(G3v1+xO>g{@=N4Fh`js$Y_$1T3S&d zo?1T!QmxYQF+SFU$>LhaZvdBEdMR`1oh;#mu%9k@5(!~$9iLU(WjFl)rJIxJ=j4_FbY*}X`zeSZuMR=V9Tc=$?oS@U7x3wRCoKK zT;DpW9+q>>!RJAHnwaDq??;e#pLf+iM~M~EWCU3)7=KEvixCm&*_St-=Jgt%j%V_q z+Z?&IoZ)ZqT8)ZK3D)@Pr3gR$?G0;Fh|=6?+OuknDbIO*d8PJUWR_}Q137Zs&H0dd zRwk+1WA!uMPK4*HN3if!$IkaU&$W9Z9(mIC9`*^5@BuaU$36tBHIb<)0+A^Bb><{vMQIQQK9osVrbPg~a${lpt(`oxQ-6lK-l+yb-^ccf^G zh|_o)lOLHl4-U;pvl}Rqys`B6-%#%mq8Kx(A<*>a$7)rS@^<_}x&W19=g0bzrs#;~ znTi9zi+Hg1yVxmT{h)X&Y_2pov@c!nI=MVU(2(jW?sq!P+V>B_8ZMoz+xUi zHz0^;`L}<%_(D{i?VQ%a?+s7P90GWCWwFWv>%o{KMW%73cZ8wj-d}3gsiH9c);OeA z=>1_*I?itrL2nqEMrnJd=dHI-ws?^P_SwdrI~nI|UklqLVFc<5@$-??y@BM?_TP)U zh*=&XQ0Ik@@aeSQ0Y?>rt7;XWE(J;zF_SL)J#9L-%EEC8R$V$K_6F2^&uuE_$Us~i zsZ`5Ad3yUymED>5Idw}f?*P(CKRP&n_$>fs$D$Yt!Mx;cAT?+o9Cbr3dpeuf?6!iC zV+w)1cPnf29){6x*PM0PhNW{qv6*H6I=Pyn zvKsm#5BswV8cDpcdddcVB{{*2rEheF(%4`$eDRZ(erMy=lrH2h2QeuK@lToP^c^gp zyX^9Jrws=Tx#NWmx2B}0^Tq{J5QP^r4H&BM8Z?-9W#b*8Xiz8W`LZ^gFF#6O@o6>N z%nox+?A|zoekK+fyo~>$!D+VqSlcJI`pV~n=<`HLUs=meyj+V}6sSJ>-Uig7V0r{X z0>h}AIZ0XWSyz&V_eSC_QULZfx}d~wU*N7{*{!A{aqp9H zGy$AH3X~?qRM0tUuuE}SrV62Sx&CGtBEgpzP@>>XpILgF*5l{J_oK>#S*trjM|!x8`(8Whm|eYVF- zHgB$YsM7Og%3E_5)EESp{@A9p?UYs?BY=eHNx+r?(J0^GGp>*Kbz}QR)m?XG&C#qF z?>q3!s;i;pq$QGOHfx2a^iW7F<`d&Uf)uC8EKBJyE_cGaLg}`Z3~5EGCXSMp&%-?O z`*0WNJs-%TFX4`AjMJa*%pejXvcgq@`T>7Fc+X)Yhm{e4fE0eDf8V9~*S;T%zis=m za2&w3be(0t^YjhAteIObatG;0@V1wPH(mCh5gHu}wQ-HHpbC#L^0X>0RC?OD*Oh3x ztxKF)TP8q~sCbS$(^9*_9PUJB>#jAEl(Jpq(lBPm>V~?plt`p#(YfBF`$7gVa~Ixo z8oidANeiwZC6@4|b4#z`F6;x)Nfv3ivgBf4!bT67ci3X3s#CDHN= zw3a&r)Quu%_t4p%zYm+6gX_Hd(o_T%CDci=hv^OE-KH~5drJL#?8d#gdL5N2W5m=O zOwNPR`)d0!7yW%bcc;TPkFAh9lc|V+;`sqhW1MaSF@6C9O*rIxg|ne;0%NffE^z4k zZ+hP8INchKuvy))hyA;7GRP9RF%XV~UwaQ%Cb(zS%%TlM|9vllZwFp&`& z6ar7|b~Z;s{!&JLYUy*d5*j{OtObEXVQc5yWjoRo%n$p_!`V|ArC z(a2ssDnC{y*4ynzfG`d7Qkw$Z(Fj7Q0N8o}Lw}otX}spmF4Yv}L4mlo9Kk@5Mwmey zwREm5

8EV9`75ore)#aO?V=R-9)Sp#oe&wl8yhtHKNu_H_LqKIg_XZ5fFLRkVeD z{>hx4!u0v~5`F4KzY+jJc!<+zzfEK=iWV|oO8;jbvJr2Evr zJwvdR!%gN%OOP(S5J^@q^;Nlf-Xjdvj1+hC&;8Nm4szA0zDS#4Pauh$64l*K zRyVDzc7Nd^w$Gcc5^~IGkJ1#LE{hU_=6xrGFm^5?B3of2ZCs!GF7Nts3kMFN^V zEPk=?IZ?c;QmXUWyo`kFFtA0K(>g*?Y}~bLuSQ`cHQrU??VVL#>u%^Z>n8iuYl9cZEzUKXEl8$ zn~-eT$YE1tC!9+wzRm)D|FG=eEp4@aA^zM-9z^l=KcZ_JqppkxLEIV zB!%bo;N|e!vCjEnJX>iMRkBsZ)B$?t2J=a`E)3Y!=63mOx1{eUm_BG-Yy{|}B+4&c z7QPOe;s~m8LL{-tBIb`O?M#wU z^WJr9H!O*4sYcj8tgE}_K1Y*;iA5JK)3?}vBi)m*8m-~R8Zb6dziFqjt)P-bG>={- zME*tgXhCfdZ$xe&&d56U2}_tJjmuwJA7Ox`Z%5NZc)S;)(`7#EFXsxiAymELiFHKss8gZxKsCUBo0Zs|n_+Ha*v zeanw^btPYZZwXH=|D>R$iS#0@O+czA5Z1t+q^i1pm8>!>1q7hQ2hpznD?8TtlsGQ7g)Gh~EqcWV)PP=X^YF{|+S(Fy}y6qV*T zumq76@>ulW;xsLX<-357&Eth3*0*Z>9QrlesKfvPN}G?`A0P{D|Jd#s z>uu_YUS>fhM8~f%f78q0sE<%YYI-IdHVe;8V#*OR2c?l?Nb~(}MF7rS6b!TmoN|0Q zX@U#n3k8?@%m56c8R6X*dH#4L`hb}jap6aTjR3AxF3ZVggjJ2k{3s~>-kakg2^!yu zCbl7b6&I<|ohqr`&DkHHW-yER!?#gEb^KBD7ZYj}ipatX`IK`$xG)db7A;KGyG?v# zk?q-eHcaU>68!7Z(N3C8X(pek(4*S_o~oxOmwN}r?v=HLUaQnVcJS#-%<`T#5Y$l5mr@0FP(Day^zUaCO5FNa) z;l}EJXT=EQS=x<>iVF)cGsk`4LT$h5OT!pAdvYe7IAeRvV%30knf~2!>lzV7N>lQ} zp90iG)UDM;>RFNJ5-OPOE%FY)BHieikXYay#-ykSgtD13>&+Nl{v@k0f;%&&b(bvK ztHe9qZC!nSir}w0q@9Z3DjsEvg%NH((TCY7t%-Txn6f^0M057zs;8)ZT&AS3u@YlS zN?Y|(d^C}7xKqh8M2P4l^HVaR9l{nop*ROF|4n4zH)9I9(OrCWr>NTP&m9|P1eWIj zE9rgLEPuA1vNSG^6E`3xOl-DA;ubmGhJgkUMM(d;pF|J_HHAX7%}F5GTDa9}Ki56@ zHbk~&gNVb7B&lo->`1mu{&;cKGsK4gU~H=;n9;4Y=gDOPG0iHvv83~E?tLEiwSJ)E z%&s59VY@Jx&0mo>R4&EtJz~bNhKZWw!jj040EGH70S)oZ8E4JOGu(&{Ho^eb77Q}K zi~JpX^IP|26<4SVqi#y4W)lu3X90uQ8!CPPc$C%%?QwxS&H*I%SuO%&HUP$C1BXd~ ztBU!@se`c@M(&1y*fJbXQqmF~Pg2CHGEZ7m-L(e=jZFIpY^Bk8)0grECzx+!vh^74 zR{o^|aIINq02}|6Z;_f`M4CLJE zuux5@$2xihhZ?&mfMG%>(3^Cg{%{EDG{Q>m)S1jsWSdtt=cJXmrT=Z}PiKny=l?yHDL1LT~^rT|?wb}PE31#s{a-kFBT)NhC3K}uAc7P{lf2*;47;Z<=e+z7rxb|?i(P`IgO}A)hbPBC-sN;4VQGbA(uCcyeq0?^}^1^#&L%Y)P zhWGiFNub4~#^R0&+;l-EMVWpUEk z{ty2Wh4scO4D5|wqzii7nVPP^Q=!*k@t1g`&2#on(knH1XAM~PU%*c+a>$>8C7%I>>Ld(*LB#p#$G^C{c|a81YO)M`cvv8DXZ9 ze@bu2tGV*-9-4f5A(4lRQZhEvNZIa|I-#_(nWp@Z_rVTeQlmg1jq0_W47w)GbJ+_- z!_iU{30U6%e?pMVwD79QTL#wQp`9#{NRXPWej)6#ezM%@kC3t2-_T*xHK60shT{G4A{7=*V`K7zIGo; z8|2=}#c1onW&%N{5 zGM03}MAJ-kXxF8&P6wHSpoclDP+=*!4~O8{-5_(_6*qQ&4mq@XHIUcY%4t73=`JN% zx)?O-@v&Jixg75;xGu`z=z6anD~7(Ys#h0gfb=!qYg9*AH=p}~R2zW@joGy`X$Ch1 ziAQP0Iro-@iNLIJ(>u+}3GPy<%6l{y^bGc2Z1i^jSlM^&lzH*`?S%w=Lxt$BVM4>p zGG0{GFjH^3-*QN}9Yg5LJMSAa$<=}2-Wo*m8*=n#phaSIuqMSQYn6K8GTin(lOUQB zz=)5EP0#l#8?oX^S0z+|{DoFtu$rffj$y=*B6DAz7fgBl^A^HhM{!|*0Iy_04Hl}M`le=agN0dhX^|oPL~ZI#gY%06 zg+ObIF@eUSiY^5^qII$!0?nUtqEIiDAXa|nsn27{;$Rl<@wQ|avK6JnL)V6yg;_4c z6ObZFmi<@?&>Y#tY7r1__sG1vM%eoYq-6k2&j|pttJ}jn@BJ+tAideWq>uO_hQTnP~Zjq{`+o4-vvTi zyD9JlHqIP6jE?_Jy#Sy880;X_l&<;sp(*5E?;ZTlOkVndZ6F941Vmim-)8b3``Z6o zk!xXS>*z@1YGO$1W^GkpTm5TXfkKLga$;<y`{Z2kX%VFwDfEHJJ+Rnj zzSw=0brRN^TqF=bvLUdZ2I>LRO$*!g-e^XKT1?@ES?uMF!~1(uBKe<|3$_YP{`K*Q z;UDr|c_~mZ43NLn)PI-#5`E2bcX5;_n0O j510I9V%&d0{4ZvamxBE0E+8NXAHM)_5D;meKUe<`^eA9D literal 0 HcmV?d00001 diff --git a/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/application.info b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/application.info new file mode 100644 index 0000000..731ef14 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/application.info @@ -0,0 +1,19 @@ +application.type=widget +application.code=wdtransfanalista +application.title=wdtransfanalista +application.description=wdtransfanalista +application.fluig.version=null +application.category=SYSTEM +application.renderer=freemarker +developer.code=Andrey Cunha +developer.name=Andrey Cunha +developer.url=http://www.fluig.com +application.uiwidget=true +application.mobileapp=false +application.version=${build.version}-${build.revision} +view.file=view.ftl +edit.file=edit.ftl +locale.file.base.name=wdtransfanalista +application.resource.js.1=/resources/js/wdtransfanalista.js +application.resource.css.2=/resources/css/wdtransfanalista.css +hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2 diff --git a/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/edit.ftl b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/edit.ftl new file mode 100644 index 0000000..8bbc59a --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/edit.ftl @@ -0,0 +1,5 @@ +

+ +
+ + diff --git a/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/view.ftl b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/view.ftl new file mode 100644 index 0000000..9867032 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/view.ftl @@ -0,0 +1,11 @@ +
+
+
+

Transferencias por Analista

+
+
Carregando dados...
+
+
+
+
+ diff --git a/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista.properties b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista_en_US.properties b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista_en_US.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista_en_US.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista_es.properties b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista_es.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista_es.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista_pt_BR.properties b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista_pt_BR.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/resources/wdtransfanalista_pt_BR.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/WEB-INF/jboss-web.xml b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..0503b47 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /wdtransfanalista + false + diff --git a/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/WEB-INF/web.xml b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..6797e41 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,12 @@ + + + + + + 30 + + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/resources/css/wdtransfanalista.css b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/resources/css/wdtransfanalista.css new file mode 100644 index 0000000..3bddf18 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/resources/css/wdtransfanalista.css @@ -0,0 +1,181 @@ +.wdtransf-agg-widget .wdtransf-agg-shell { + background: #f4f7fb; + border: 1px solid #d8e3ee; + border-radius: 12px; + padding: 8px; +} + +.wdtransf-agg-widget .wdtransf-agg-chart-wrap { + background: #e8ecf1; + border: 1px solid #d3dde8; + border-radius: 16px; + padding: 10px 12px; +} + +.wdtransf-agg-widget .wdtransf-agg-title { + margin: 0 0 8px; + color: #00507c; + font-size: 18px; + font-weight: 700; + text-align: center; +} + +.wdtransf-agg-widget .wdtransf-agg-chart { + display: flex; + flex-direction: column; + gap: 6px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-legend { + margin-bottom: 4px; + color: #486680; + font-size: 12px; + font-weight: 600; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-legend-item { + display: inline-flex; + align-items: center; + gap: 6px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-legend-swatch { + display: inline-block; + width: 16px; + height: 10px; + border-radius: 2px; + background: #0f678a; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart { + display: grid; + grid-template-columns: 36px 1fr; + gap: 8px; + align-items: end; + min-height: 195px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-axis { + height: 160px; + display: flex; + flex-direction: column; + justify-content: space-between; + color: #57728b; + font-size: 11px; + text-align: right; + padding-right: 2px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-scroll { + overflow-x: auto; + overflow-y: hidden; + padding-bottom: 2px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-plot { + position: relative; + height: 160px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-grid { + position: absolute; + left: 0; + right: 0; + border-top: 1px solid #ced9e4; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-grid.grid-100 { top: 0; } +.wdtransf-agg-widget .wdtransf-agg-vchart-grid.grid-50 { top: 50%; } +.wdtransf-agg-widget .wdtransf-agg-vchart-grid.grid-0 { bottom: 0; } + +.wdtransf-agg-widget .wdtransf-agg-vchart-bars { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + display: flex; + align-items: flex-end; + gap: 10px; + padding: 0 6px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-item { + width: 64px; + display: flex; + flex-direction: column; + align-items: center; + gap: 4px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-value { + color: #1e4e71; + font-size: 11px; + font-weight: 700; + line-height: 1; + min-height: 12px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-bar-wrap { + width: 30px; + height: 120px; + display: flex; + align-items: flex-end; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-bar { + width: 100%; + border-radius: 4px 4px 0 0; + background: #0f678a; + min-height: 2px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-label { + color: #3c5c75; + font-size: 11px; + font-weight: 600; + text-align: center; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + transform: rotate(-12deg); + transform-origin: center top; +} + +.wdtransf-agg-widget .wdtransf-agg-chart-empty { + color: #4f6880; + font-size: 12px; + padding: 8px 0; +} + +@media (max-width: 767px) { + .wdtransf-agg-widget .wdtransf-agg-chart-wrap { + padding: 8px; + } + + .wdtransf-agg-widget .wdtransf-agg-title { + font-size: 16px; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart { + grid-template-columns: 1fr; + min-height: 170px; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart-axis { + display: none; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart-plot { + height: 145px; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart-bar-wrap { + height: 108px; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart-label { + transform: none; + } +} diff --git a/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/resources/images/icon.png b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/resources/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..102160cdd282b0d62712b3c7e6bef86fcd538496 GIT binary patch literal 7845 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 D*xqLB literal 0 HcmV?d00001 diff --git a/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/resources/js/wdtransfanalista.js b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/resources/js/wdtransfanalista.js new file mode 100644 index 0000000..bf8b3b9 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfanalista/src/main/webapp/resources/js/wdtransfanalista.js @@ -0,0 +1,446 @@ +var WdTransfAnalistaWidget = SuperWidget.extend({ + datasetName: "transferenciav2", + batchSize: 1000, + rowsCache: [], + isIncrementalLoading: false, + loadOffset: 0, + batchToken: 0, + lastChunkMarker: "", + noPagingMode: false, + groupKeyCandidates: ["requesterName", "solicitante", "currentUserName", "requesterId", "nome"], + emptyLabel: "Nao informado", + + bindings: { + local: {}, + global: {} + }, + + init: function() { + this.$widget = $("#MyWidget_" + this.instanceId); + this.bindEvents(); + this.loadData(); + }, + + bindEvents: function() { + var self = this; + + self.$widget.on("click", "[data-action='reload']", function() { + self.loadData(); + }); + + self.$widget.on("change", "[data-role='topN']", function() { + self.render(); + }); + + self.$widget.on("input", "[data-role='search']", function() { + self.render(); + }); + + self.$widget.on("keypress", "[data-role='search']", function(e) { + if (e.which === 13) { + e.preventDefault(); + self.render(); + } + }); + }, + + loadData: function() { + this.batchToken++; + this.rowsCache = []; + this.loadOffset = 0; + this.lastChunkMarker = ""; + this.noPagingMode = false; + this.isIncrementalLoading = true; + + this.setLoading(true); + this.setMessage("Carregando solicitacoes...", "info"); + this.render(); + this.loadNextBatch(this.batchToken); + }, + + loadNextBatch: function(token) { + var self = this; + if (token !== self.batchToken) return; + + self.fetchDatasetBatch(self.batchSize, self.loadOffset, function(err, rows) { + if (token !== self.batchToken) return; + + if (err) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Erro ao carregar dataset: " + err, "danger"); + return; + } + + rows = rows || []; + if (!rows.length) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Dados carregados: " + self.formatNumber(self.rowsCache.length) + " registro(s).", "success"); + return; + } + + var chunkMarker = self.buildChunkMarker(rows[0]); + if (self.loadOffset > 0 && chunkMarker && chunkMarker === self.lastChunkMarker) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Paginacao do dataset nao evoluiu (sqlStart/offset). Verifique suporte no ambiente.", "warning"); + return; + } + + self.lastChunkMarker = chunkMarker; + self.rowsCache = self.rowsCache.concat(rows); + self.loadOffset += rows.length; + self.render(); + self.setMessage("Carregando solicitacoes... " + self.formatNumber(self.rowsCache.length) + " registro(s).", "info"); + + if (self.noPagingMode) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Dados carregados: " + self.formatNumber(self.rowsCache.length) + " registro(s).", "success"); + return; + } + + if (rows.length < self.batchSize) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Dados carregados: " + self.formatNumber(self.rowsCache.length) + " registro(s).", "success"); + return; + } + + setTimeout(function() { + self.loadNextBatch(token); + }, 0); + }); + }, + + fetchDatasetBatch: function(limit, offset, callback) { + var self = this; + if (self.noPagingMode && offset > 0) { + callback(null, []); + return; + } + + try { + if (typeof DatasetFactory !== "undefined" && typeof DatasetFactory.getDataset === "function" && + typeof ConstraintType !== "undefined" && typeof DatasetFactory.createConstraint === "function") { + var constraints = self.noPagingMode ? null : self.buildFactoryPagingConstraints(limit, offset); + var ds = DatasetFactory.getDataset(self.datasetName, null, constraints, null); + var rows = (ds && ds.values) ? ds.values : []; + + if (!rows.length && offset === 0 && !self.noPagingMode) { + var dsNoPaging = DatasetFactory.getDataset(self.datasetName, null, null, null); + var rowsNoPaging = (dsNoPaging && dsNoPaging.values) ? dsNoPaging.values : []; + if (rowsNoPaging.length) { + self.noPagingMode = true; + callback(null, rowsNoPaging); + return; + } + } + + callback(null, rows); + return; + } + } catch (e) { + // fallback REST + } + + this.fetchDatasetBatchViaRest(limit, offset, callback); + }, + + buildFactoryPagingConstraints: function(limit, offset) { + var constraints = []; + constraints.push(DatasetFactory.createConstraint("sqlLimit", String(limit), String(limit), ConstraintType.MUST)); + constraints.push(DatasetFactory.createConstraint("sqlStart", String(offset), String(offset), ConstraintType.MUST)); + constraints.push(DatasetFactory.createConstraint("offset", String(offset), String(offset), ConstraintType.MUST)); + constraints.push(DatasetFactory.createConstraint("sqlOffset", String(offset), String(offset), ConstraintType.MUST)); + return constraints; + }, + + fetchDatasetBatchViaRest: function(limit, offset, callback) { + var self = this; + if (self.noPagingMode && offset > 0) { + callback(null, []); + return; + } + + function readRows(resp) { + if (resp && resp.content && resp.content.values) return resp.content.values; + if (resp && resp.values) return resp.values; + return []; + } + + function request(usePaging, done) { + var constraints = usePaging ? self.buildRestPagingConstraints(limit, offset) : []; + $.ajax({ + url: "/api/public/ecm/dataset/datasets", + type: "POST", + contentType: "application/json; charset=UTF-8", + dataType: "json", + data: JSON.stringify({ + name: self.datasetName, + fields: [], + constraints: constraints, + order: [] + }) + }).done(function(resp) { + done(null, readRows(resp) || []); + }).fail(function(xhr) { + var detail = xhr && (xhr.responseText || xhr.statusText || xhr.status); + done(detail || "falha na API REST de datasets", []); + }); + } + + request(!self.noPagingMode, function(err, rows) { + if (err) { + callback(err); + return; + } + + if (!rows.length && offset === 0 && !self.noPagingMode) { + request(false, function(err2, rows2) { + if (err2) { + callback(err2); + return; + } + if (rows2.length) { + self.noPagingMode = true; + } + callback(null, rows2 || []); + }); + return; + } + + callback(null, rows || []); + }); + }, + + buildRestPagingConstraints: function(limit, offset) { + return [ + { _field: "sqlLimit", _initialValue: String(limit), _finalValue: String(limit), _type: 1 }, + { _field: "sqlStart", _initialValue: String(offset), _finalValue: String(offset), _type: 1 }, + { _field: "offset", _initialValue: String(offset), _finalValue: String(offset), _type: 1 }, + { _field: "sqlOffset", _initialValue: String(offset), _finalValue: String(offset), _type: 1 } + ]; + }, + + buildChunkMarker: function(row) { + if (!row) return ""; + var id = this.pick(row, ["metadata#id", "id", "WKNumProces", "processInstanceId"]); + var state = this.pick(row, ["activity", "WKNumState", "state"]); + return (id || "-") + "|" + (state || "-"); + }, + + render: function() { + var grouped = this.aggregateRows(this.rowsCache); + var filteredGroups = this.filterGroups(grouped); + var shownGroups = this.applyTopN(filteredGroups); + + this.renderChart(shownGroups, this.rowsCache.length); + }, + + aggregateRows: function(rows) { + var map = {}; + var key; + + for (var i = 0; i < (rows || []).length; i++) { + key = this.resolveGroupValue(rows[i]) || this.emptyLabel; + + if (!map[key]) { + map[key] = { + name: key, + count: 0 + }; + } + map[key].count++; + } + + var list = []; + for (var name in map) { + if (map.hasOwnProperty(name)) { + list.push(map[name]); + } + } + + list.sort(function(a, b) { + if (b.count !== a.count) return b.count - a.count; + return String(a.name).localeCompare(String(b.name)); + }); + + return list; + }, + + filterGroups: function(groups) { + var $search = this.$widget.find("[data-role='search']"); + if (!$search.length) return groups.slice(0); + + var search = $.trim(String($search.val() || "")).toLowerCase(); + if (!search) return groups.slice(0); + + var out = []; + for (var i = 0; i < groups.length; i++) { + var g = groups[i]; + if (String(g.name || "").toLowerCase().indexOf(search) !== -1) { + out.push(g); + } + } + return out; + }, + + applyTopN: function(groups) { + var $top = this.$widget.find("[data-role='topN']"); + if (!$top.length) return groups.slice(0); + + var raw = $.trim(String($top.val() || "0")); + var topN = parseInt(raw, 10); + + if (isNaN(topN) || topN < 0) topN = 0; + if (topN === 0) return groups.slice(0); + + return groups.slice(0, topN); + }, + + renderKpis: function(allGroups, shownGroups) { + var totalSolicitacoes = this.rowsCache.length; + var totalGrupos = allGroups.length; + var solicitacoesExibidas = 0; + + for (var i = 0; i < shownGroups.length; i++) { + solicitacoesExibidas += Number(shownGroups[i].count || 0); + } + + this.$widget.find("[data-role='kpiTotalSolicitacoes']").text(this.formatNumber(totalSolicitacoes)); + this.$widget.find("[data-role='kpiTotalGrupos']").text(this.formatNumber(totalGrupos)); + this.$widget.find("[data-role='kpiSolicitacoesExibidas']").text(this.formatNumber(solicitacoesExibidas)); + }, + + renderChart: function(groups, totalRows) { + var html = []; + + if (!groups.length) { + var emptyMsg = this.isIncrementalLoading ? + "Carregando dados..." : + "Nenhum registro para os filtros informados."; + html.push("
" + this.escapeHtml(emptyMsg) + "
"); + this.$widget.find("[data-role='chartBars']").html(html.join("")); + return; + } + var bars = []; + for (var i = 0; i < groups.length; i++) { + var item = groups[i]; + var count = Number(item.count || 0); + var percentTotal = totalRows > 0 ? (count * 100 / totalRows) : 0; + + bars.push( + "
" + + "
" + this.escapeHtml(this.formatPercent(percentTotal)) + "
" + + "
" + + "
" + + "
" + + "
" + this.escapeHtml(item.name) + "
" + + "
" + ); + } + + var minWidth = Math.max(groups.length * 86, 360); + + html.push( + "
" + + "" + + "Participacao (%)" + + "" + + "
" + + "
" + + "
" + + "100%50%0%" + + "
" + + "
" + + "
" + + "
" + + "
" + + "
" + + "
" + bars.join("") + "
" + + "
" + + "
" + + "
" + ); + + this.$widget.find("[data-role='chartBars']").html(html.join("")); + }, + + resolveGroupValue: function(row) { + return this.pick(row || {}, this.groupKeyCandidates); + }, + + pick: function(row, keys) { + for (var i = 0; i < keys.length; i++) { + var value = row[keys[i]]; + if (value !== null && value !== undefined && String(value).trim() !== "") { + return String(value).trim(); + } + } + return ""; + }, + + formatNumber: function(value) { + var n = Number(value || 0); + if (isNaN(n)) return "0"; + return n.toLocaleString("pt-BR"); + }, + + formatPercent: function(value) { + var n = Number(value || 0); + if (isNaN(n)) n = 0; + return n.toLocaleString("pt-BR", { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + "%"; + }, + + renderUpdatedAt: function() { + var now = new Date(); + var stamp = now.toLocaleDateString("pt-BR") + " " + now.toLocaleTimeString("pt-BR"); + this.$widget.find("[data-role='updatedAt']").text("Atualizado em: " + stamp); + }, + + setLoading: function(isLoading) { + this.$widget.toggleClass("is-loading", !!isLoading); + if (isLoading) { + this.setMessage("Carregando dados...", "info"); + } + }, + + setMessage: function(text, type) { + var $msg = this.$widget.find("[data-role='message']"); + $msg.removeClass("is-info is-success is-warning is-danger"); + + if (!text) { + $msg.hide().text(""); + return; + } + + var className = "is-info"; + if (type === "success") className = "is-success"; + if (type === "warning") className = "is-warning"; + if (type === "danger") className = "is-danger"; + + $msg.addClass(className).text(text).show(); + }, + + escapeHtml: function(text) { + return String(text == null ? "" : text) + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/\"/g, """) + .replace(/'/g, "'"); + } +}); + + + + + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfanalista/target/wdtransfanalista.war b/Transferência Ginseng/wcm/widget/wdtransfanalista/target/wdtransfanalista.war new file mode 100644 index 0000000000000000000000000000000000000000..2b3397b1dd2126b4d8ff97307cba6391febda44f GIT binary patch literal 15195 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 literal 0 HcmV?d00001 diff --git a/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/application.info b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/application.info new file mode 100644 index 0000000..22e266b --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/application.info @@ -0,0 +1,19 @@ +application.type=widget +application.code=wdtransfloja +application.title=wdtransfloja +application.description=wdtransfloja +application.fluig.version=null +application.category=SYSTEM +application.renderer=freemarker +developer.code=Andrey Cunha +developer.name=Andrey Cunha +developer.url=http://www.fluig.com +application.uiwidget=true +application.mobileapp=false +application.version=${build.version}-${build.revision} +view.file=view.ftl +edit.file=edit.ftl +locale.file.base.name=wdtransfloja +application.resource.js.1=/resources/js/wdtransfloja.js +application.resource.css.2=/resources/css/wdtransfloja.css +hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2 diff --git a/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/edit.ftl b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/edit.ftl new file mode 100644 index 0000000..7fc0b61 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/edit.ftl @@ -0,0 +1,5 @@ +
+ +
+ + diff --git a/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/view.ftl b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/view.ftl new file mode 100644 index 0000000..61157c2 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/view.ftl @@ -0,0 +1,11 @@ +
+
+
+

Transferencias por Loja

+
+
Carregando dados...
+
+
+
+
+ diff --git a/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/wdtransfloja.properties b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/wdtransfloja.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/wdtransfloja.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/wdtransfloja_en_US.properties b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/wdtransfloja_en_US.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/wdtransfloja_en_US.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/wdtransfloja_es.properties b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/wdtransfloja_es.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/wdtransfloja_es.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/wdtransfloja_pt_BR.properties b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/wdtransfloja_pt_BR.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/resources/wdtransfloja_pt_BR.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/WEB-INF/jboss-web.xml b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..2b51b44 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /wdtransfloja + false + diff --git a/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/WEB-INF/web.xml b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..6797e41 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,12 @@ + + + + + + 30 + + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/resources/css/wdtransfloja.css b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/resources/css/wdtransfloja.css new file mode 100644 index 0000000..3bddf18 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/resources/css/wdtransfloja.css @@ -0,0 +1,181 @@ +.wdtransf-agg-widget .wdtransf-agg-shell { + background: #f4f7fb; + border: 1px solid #d8e3ee; + border-radius: 12px; + padding: 8px; +} + +.wdtransf-agg-widget .wdtransf-agg-chart-wrap { + background: #e8ecf1; + border: 1px solid #d3dde8; + border-radius: 16px; + padding: 10px 12px; +} + +.wdtransf-agg-widget .wdtransf-agg-title { + margin: 0 0 8px; + color: #00507c; + font-size: 18px; + font-weight: 700; + text-align: center; +} + +.wdtransf-agg-widget .wdtransf-agg-chart { + display: flex; + flex-direction: column; + gap: 6px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-legend { + margin-bottom: 4px; + color: #486680; + font-size: 12px; + font-weight: 600; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-legend-item { + display: inline-flex; + align-items: center; + gap: 6px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-legend-swatch { + display: inline-block; + width: 16px; + height: 10px; + border-radius: 2px; + background: #0f678a; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart { + display: grid; + grid-template-columns: 36px 1fr; + gap: 8px; + align-items: end; + min-height: 195px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-axis { + height: 160px; + display: flex; + flex-direction: column; + justify-content: space-between; + color: #57728b; + font-size: 11px; + text-align: right; + padding-right: 2px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-scroll { + overflow-x: auto; + overflow-y: hidden; + padding-bottom: 2px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-plot { + position: relative; + height: 160px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-grid { + position: absolute; + left: 0; + right: 0; + border-top: 1px solid #ced9e4; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-grid.grid-100 { top: 0; } +.wdtransf-agg-widget .wdtransf-agg-vchart-grid.grid-50 { top: 50%; } +.wdtransf-agg-widget .wdtransf-agg-vchart-grid.grid-0 { bottom: 0; } + +.wdtransf-agg-widget .wdtransf-agg-vchart-bars { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + display: flex; + align-items: flex-end; + gap: 10px; + padding: 0 6px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-item { + width: 64px; + display: flex; + flex-direction: column; + align-items: center; + gap: 4px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-value { + color: #1e4e71; + font-size: 11px; + font-weight: 700; + line-height: 1; + min-height: 12px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-bar-wrap { + width: 30px; + height: 120px; + display: flex; + align-items: flex-end; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-bar { + width: 100%; + border-radius: 4px 4px 0 0; + background: #0f678a; + min-height: 2px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-label { + color: #3c5c75; + font-size: 11px; + font-weight: 600; + text-align: center; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + transform: rotate(-12deg); + transform-origin: center top; +} + +.wdtransf-agg-widget .wdtransf-agg-chart-empty { + color: #4f6880; + font-size: 12px; + padding: 8px 0; +} + +@media (max-width: 767px) { + .wdtransf-agg-widget .wdtransf-agg-chart-wrap { + padding: 8px; + } + + .wdtransf-agg-widget .wdtransf-agg-title { + font-size: 16px; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart { + grid-template-columns: 1fr; + min-height: 170px; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart-axis { + display: none; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart-plot { + height: 145px; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart-bar-wrap { + height: 108px; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart-label { + transform: none; + } +} diff --git a/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/resources/images/icon.png b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/resources/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..102160cdd282b0d62712b3c7e6bef86fcd538496 GIT binary patch literal 7845 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 D*xqLB literal 0 HcmV?d00001 diff --git a/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/resources/js/wdtransfloja.js b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/resources/js/wdtransfloja.js new file mode 100644 index 0000000..55c3ceb --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfloja/src/main/webapp/resources/js/wdtransfloja.js @@ -0,0 +1,447 @@ +var WdTransfLojaWidget = SuperWidget.extend({ + datasetName: "transferenciav2", + batchSize: 1000, + rowsCache: [], + isIncrementalLoading: false, + loadOffset: 0, + batchToken: 0, + lastChunkMarker: "", + noPagingMode: false, + groupKeyCandidates: ["estabelecimento", "filialOrigem", "lojaOrigem", "centroCusto", "filialDestino", "lojaDestino"], + emptyLabel: "Nao informado", + + bindings: { + local: {}, + global: {} + }, + + init: function() { + this.$widget = $("#MyWidget_" + this.instanceId); + this.bindEvents(); + this.loadData(); + }, + + bindEvents: function() { + var self = this; + + self.$widget.on("click", "[data-action='reload']", function() { + self.loadData(); + }); + + self.$widget.on("change", "[data-role='topN']", function() { + self.render(); + }); + + self.$widget.on("input", "[data-role='search']", function() { + self.render(); + }); + + self.$widget.on("keypress", "[data-role='search']", function(e) { + if (e.which === 13) { + e.preventDefault(); + self.render(); + } + }); + }, + + loadData: function() { + this.batchToken++; + this.rowsCache = []; + this.loadOffset = 0; + this.lastChunkMarker = ""; + this.noPagingMode = false; + this.isIncrementalLoading = true; + + this.setLoading(true); + this.setMessage("Carregando solicitacoes...", "info"); + this.render(); + this.loadNextBatch(this.batchToken); + }, + + loadNextBatch: function(token) { + var self = this; + if (token !== self.batchToken) return; + + self.fetchDatasetBatch(self.batchSize, self.loadOffset, function(err, rows) { + if (token !== self.batchToken) return; + + if (err) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Erro ao carregar dataset: " + err, "danger"); + return; + } + + rows = rows || []; + if (!rows.length) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Dados carregados: " + self.formatNumber(self.rowsCache.length) + " registro(s).", "success"); + return; + } + + var chunkMarker = self.buildChunkMarker(rows[0]); + if (self.loadOffset > 0 && chunkMarker && chunkMarker === self.lastChunkMarker) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Paginacao do dataset nao evoluiu (sqlStart/offset). Verifique suporte no ambiente.", "warning"); + return; + } + + self.lastChunkMarker = chunkMarker; + self.rowsCache = self.rowsCache.concat(rows); + self.loadOffset += rows.length; + self.render(); + self.setMessage("Carregando solicitacoes... " + self.formatNumber(self.rowsCache.length) + " registro(s).", "info"); + + if (self.noPagingMode) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Dados carregados: " + self.formatNumber(self.rowsCache.length) + " registro(s).", "success"); + return; + } + + if (rows.length < self.batchSize) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Dados carregados: " + self.formatNumber(self.rowsCache.length) + " registro(s).", "success"); + return; + } + + setTimeout(function() { + self.loadNextBatch(token); + }, 0); + }); + }, + + fetchDatasetBatch: function(limit, offset, callback) { + var self = this; + if (self.noPagingMode && offset > 0) { + callback(null, []); + return; + } + + try { + if (typeof DatasetFactory !== "undefined" && typeof DatasetFactory.getDataset === "function" && + typeof ConstraintType !== "undefined" && typeof DatasetFactory.createConstraint === "function") { + var constraints = self.noPagingMode ? null : self.buildFactoryPagingConstraints(limit, offset); + var ds = DatasetFactory.getDataset(self.datasetName, null, constraints, null); + var rows = (ds && ds.values) ? ds.values : []; + + if (!rows.length && offset === 0 && !self.noPagingMode) { + var dsNoPaging = DatasetFactory.getDataset(self.datasetName, null, null, null); + var rowsNoPaging = (dsNoPaging && dsNoPaging.values) ? dsNoPaging.values : []; + if (rowsNoPaging.length) { + self.noPagingMode = true; + callback(null, rowsNoPaging); + return; + } + } + + callback(null, rows); + return; + } + } catch (e) { + // fallback REST + } + + this.fetchDatasetBatchViaRest(limit, offset, callback); + }, + + buildFactoryPagingConstraints: function(limit, offset) { + var constraints = []; + constraints.push(DatasetFactory.createConstraint("sqlLimit", String(limit), String(limit), ConstraintType.MUST)); + constraints.push(DatasetFactory.createConstraint("sqlStart", String(offset), String(offset), ConstraintType.MUST)); + constraints.push(DatasetFactory.createConstraint("offset", String(offset), String(offset), ConstraintType.MUST)); + constraints.push(DatasetFactory.createConstraint("sqlOffset", String(offset), String(offset), ConstraintType.MUST)); + return constraints; + }, + + fetchDatasetBatchViaRest: function(limit, offset, callback) { + var self = this; + if (self.noPagingMode && offset > 0) { + callback(null, []); + return; + } + + function readRows(resp) { + if (resp && resp.content && resp.content.values) return resp.content.values; + if (resp && resp.values) return resp.values; + return []; + } + + function request(usePaging, done) { + var constraints = usePaging ? self.buildRestPagingConstraints(limit, offset) : []; + $.ajax({ + url: "/api/public/ecm/dataset/datasets", + type: "POST", + contentType: "application/json; charset=UTF-8", + dataType: "json", + data: JSON.stringify({ + name: self.datasetName, + fields: [], + constraints: constraints, + order: [] + }) + }).done(function(resp) { + done(null, readRows(resp) || []); + }).fail(function(xhr) { + var detail = xhr && (xhr.responseText || xhr.statusText || xhr.status); + done(detail || "falha na API REST de datasets", []); + }); + } + + request(!self.noPagingMode, function(err, rows) { + if (err) { + callback(err); + return; + } + + if (!rows.length && offset === 0 && !self.noPagingMode) { + request(false, function(err2, rows2) { + if (err2) { + callback(err2); + return; + } + if (rows2.length) { + self.noPagingMode = true; + } + callback(null, rows2 || []); + }); + return; + } + + callback(null, rows || []); + }); + }, + + buildRestPagingConstraints: function(limit, offset) { + return [ + { _field: "sqlLimit", _initialValue: String(limit), _finalValue: String(limit), _type: 1 }, + { _field: "sqlStart", _initialValue: String(offset), _finalValue: String(offset), _type: 1 }, + { _field: "offset", _initialValue: String(offset), _finalValue: String(offset), _type: 1 }, + { _field: "sqlOffset", _initialValue: String(offset), _finalValue: String(offset), _type: 1 } + ]; + }, + + buildChunkMarker: function(row) { + if (!row) return ""; + var id = this.pick(row, ["metadata#id", "id", "WKNumProces", "processInstanceId"]); + var state = this.pick(row, ["activity", "WKNumState", "state"]); + return (id || "-") + "|" + (state || "-"); + }, + + render: function() { + var grouped = this.aggregateRows(this.rowsCache); + var filteredGroups = this.filterGroups(grouped); + var shownGroups = this.applyTopN(filteredGroups); + + this.renderChart(shownGroups, this.rowsCache.length); + }, + + aggregateRows: function(rows) { + var map = {}; + var key; + + for (var i = 0; i < (rows || []).length; i++) { + key = this.resolveGroupValue(rows[i]) || this.emptyLabel; + + if (!map[key]) { + map[key] = { + name: key, + count: 0 + }; + } + map[key].count++; + } + + var list = []; + for (var name in map) { + if (map.hasOwnProperty(name)) { + list.push(map[name]); + } + } + + list.sort(function(a, b) { + if (b.count !== a.count) return b.count - a.count; + return String(a.name).localeCompare(String(b.name)); + }); + + return list; + }, + + filterGroups: function(groups) { + var $search = this.$widget.find("[data-role='search']"); + if (!$search.length) return groups.slice(0); + + var search = $.trim(String($search.val() || "")).toLowerCase(); + if (!search) return groups.slice(0); + + var out = []; + for (var i = 0; i < groups.length; i++) { + var g = groups[i]; + if (String(g.name || "").toLowerCase().indexOf(search) !== -1) { + out.push(g); + } + } + return out; + }, + + applyTopN: function(groups) { + var $top = this.$widget.find("[data-role='topN']"); + if (!$top.length) return groups.slice(0); + + var raw = $.trim(String($top.val() || "0")); + var topN = parseInt(raw, 10); + + if (isNaN(topN) || topN < 0) topN = 0; + if (topN === 0) return groups.slice(0); + + return groups.slice(0, topN); + }, + + renderKpis: function(allGroups, shownGroups) { + var totalSolicitacoes = this.rowsCache.length; + var totalGrupos = allGroups.length; + var solicitacoesExibidas = 0; + + for (var i = 0; i < shownGroups.length; i++) { + solicitacoesExibidas += Number(shownGroups[i].count || 0); + } + + this.$widget.find("[data-role='kpiTotalSolicitacoes']").text(this.formatNumber(totalSolicitacoes)); + this.$widget.find("[data-role='kpiTotalGrupos']").text(this.formatNumber(totalGrupos)); + this.$widget.find("[data-role='kpiSolicitacoesExibidas']").text(this.formatNumber(solicitacoesExibidas)); + }, + + renderChart: function(groups, totalRows) { + var html = []; + + if (!groups.length) { + var emptyMsg = this.isIncrementalLoading ? + "Carregando dados..." : + "Nenhum registro para os filtros informados."; + html.push("
" + this.escapeHtml(emptyMsg) + "
"); + this.$widget.find("[data-role='chartBars']").html(html.join("")); + return; + } + var bars = []; + for (var i = 0; i < groups.length; i++) { + var item = groups[i]; + var count = Number(item.count || 0); + var percentTotal = totalRows > 0 ? (count * 100 / totalRows) : 0; + + bars.push( + "
" + + "
" + this.escapeHtml(this.formatPercent(percentTotal)) + "
" + + "
" + + "
" + + "
" + + "
" + this.escapeHtml(item.name) + "
" + + "
" + ); + } + + var minWidth = Math.max(groups.length * 86, 360); + + html.push( + "
" + + "" + + "Participacao (%)" + + "" + + "
" + + "
" + + "
" + + "100%50%0%" + + "
" + + "
" + + "
" + + "
" + + "
" + + "
" + + "
" + bars.join("") + "
" + + "
" + + "
" + + "
" + ); + + this.$widget.find("[data-role='chartBars']").html(html.join("")); + }, + + resolveGroupValue: function(row) { + return this.pick(row || {}, this.groupKeyCandidates); + }, + + pick: function(row, keys) { + for (var i = 0; i < keys.length; i++) { + var value = row[keys[i]]; + if (value !== null && value !== undefined && String(value).trim() !== "") { + return String(value).trim(); + } + } + return ""; + }, + + formatNumber: function(value) { + var n = Number(value || 0); + if (isNaN(n)) return "0"; + return n.toLocaleString("pt-BR"); + }, + + formatPercent: function(value) { + var n = Number(value || 0); + if (isNaN(n)) n = 0; + return n.toLocaleString("pt-BR", { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + "%"; + }, + + renderUpdatedAt: function() { + var now = new Date(); + var stamp = now.toLocaleDateString("pt-BR") + " " + now.toLocaleTimeString("pt-BR"); + this.$widget.find("[data-role='updatedAt']").text("Atualizado em: " + stamp); + }, + + setLoading: function(isLoading) { + this.$widget.toggleClass("is-loading", !!isLoading); + if (isLoading) { + this.setMessage("Carregando dados...", "info"); + } + }, + + setMessage: function(text, type) { + var $msg = this.$widget.find("[data-role='message']"); + $msg.removeClass("is-info is-success is-warning is-danger"); + + if (!text) { + $msg.hide().text(""); + return; + } + + var className = "is-info"; + if (type === "success") className = "is-success"; + if (type === "warning") className = "is-warning"; + if (type === "danger") className = "is-danger"; + + $msg.addClass(className).text(text).show(); + }, + + escapeHtml: function(text) { + return String(text == null ? "" : text) + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/\"/g, """) + .replace(/'/g, "'"); + } +}); + + + + + + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfloja/target/wdtransfloja.war b/Transferência Ginseng/wcm/widget/wdtransfloja/target/wdtransfloja.war new file mode 100644 index 0000000000000000000000000000000000000000..1de0a6fb82d1e75c22b0a5d9bc47c9267b9364ac GIT binary patch literal 15154 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 + + + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/view.ftl b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/view.ftl new file mode 100644 index 0000000..a966b90 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/view.ftl @@ -0,0 +1,11 @@ +
+
+
+

Transferencias por Motorista

+
+
Carregando dados...
+
+
+
+
+ diff --git a/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista.properties b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista_en_US.properties b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista_en_US.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista_en_US.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista_es.properties b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista_es.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista_es.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista_pt_BR.properties b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista_pt_BR.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/resources/wdtransfmotorista_pt_BR.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/WEB-INF/jboss-web.xml b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..fcc943a --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /wdtransfmotorista + false + diff --git a/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/WEB-INF/web.xml b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..6797e41 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,12 @@ + + + + + + 30 + + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/resources/css/wdtransfmotorista.css b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/resources/css/wdtransfmotorista.css new file mode 100644 index 0000000..3bddf18 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/resources/css/wdtransfmotorista.css @@ -0,0 +1,181 @@ +.wdtransf-agg-widget .wdtransf-agg-shell { + background: #f4f7fb; + border: 1px solid #d8e3ee; + border-radius: 12px; + padding: 8px; +} + +.wdtransf-agg-widget .wdtransf-agg-chart-wrap { + background: #e8ecf1; + border: 1px solid #d3dde8; + border-radius: 16px; + padding: 10px 12px; +} + +.wdtransf-agg-widget .wdtransf-agg-title { + margin: 0 0 8px; + color: #00507c; + font-size: 18px; + font-weight: 700; + text-align: center; +} + +.wdtransf-agg-widget .wdtransf-agg-chart { + display: flex; + flex-direction: column; + gap: 6px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-legend { + margin-bottom: 4px; + color: #486680; + font-size: 12px; + font-weight: 600; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-legend-item { + display: inline-flex; + align-items: center; + gap: 6px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-legend-swatch { + display: inline-block; + width: 16px; + height: 10px; + border-radius: 2px; + background: #0f678a; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart { + display: grid; + grid-template-columns: 36px 1fr; + gap: 8px; + align-items: end; + min-height: 195px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-axis { + height: 160px; + display: flex; + flex-direction: column; + justify-content: space-between; + color: #57728b; + font-size: 11px; + text-align: right; + padding-right: 2px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-scroll { + overflow-x: auto; + overflow-y: hidden; + padding-bottom: 2px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-plot { + position: relative; + height: 160px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-grid { + position: absolute; + left: 0; + right: 0; + border-top: 1px solid #ced9e4; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-grid.grid-100 { top: 0; } +.wdtransf-agg-widget .wdtransf-agg-vchart-grid.grid-50 { top: 50%; } +.wdtransf-agg-widget .wdtransf-agg-vchart-grid.grid-0 { bottom: 0; } + +.wdtransf-agg-widget .wdtransf-agg-vchart-bars { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + display: flex; + align-items: flex-end; + gap: 10px; + padding: 0 6px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-item { + width: 64px; + display: flex; + flex-direction: column; + align-items: center; + gap: 4px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-value { + color: #1e4e71; + font-size: 11px; + font-weight: 700; + line-height: 1; + min-height: 12px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-bar-wrap { + width: 30px; + height: 120px; + display: flex; + align-items: flex-end; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-bar { + width: 100%; + border-radius: 4px 4px 0 0; + background: #0f678a; + min-height: 2px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-label { + color: #3c5c75; + font-size: 11px; + font-weight: 600; + text-align: center; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + transform: rotate(-12deg); + transform-origin: center top; +} + +.wdtransf-agg-widget .wdtransf-agg-chart-empty { + color: #4f6880; + font-size: 12px; + padding: 8px 0; +} + +@media (max-width: 767px) { + .wdtransf-agg-widget .wdtransf-agg-chart-wrap { + padding: 8px; + } + + .wdtransf-agg-widget .wdtransf-agg-title { + font-size: 16px; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart { + grid-template-columns: 1fr; + min-height: 170px; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart-axis { + display: none; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart-plot { + height: 145px; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart-bar-wrap { + height: 108px; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart-label { + transform: none; + } +} diff --git a/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/resources/images/icon.png b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/resources/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..102160cdd282b0d62712b3c7e6bef86fcd538496 GIT binary patch literal 7845 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 D*xqLB literal 0 HcmV?d00001 diff --git a/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/resources/js/wdtransfmotorista.js b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/resources/js/wdtransfmotorista.js new file mode 100644 index 0000000..7cff568 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfmotorista/src/main/webapp/resources/js/wdtransfmotorista.js @@ -0,0 +1,447 @@ +var WdTransfMotoristaWidget = SuperWidget.extend({ + datasetName: "transferenciav2", + batchSize: 1000, + rowsCache: [], + isIncrementalLoading: false, + loadOffset: 0, + batchToken: 0, + lastChunkMarker: "", + noPagingMode: false, + groupKeyCandidates: ["motoristaEntregaNome", "motoristaColetaNome", "motoristaEntregaLogin", "motoristaColetaLogin", "motoristaNome"], + emptyLabel: "Nao informado", + + bindings: { + local: {}, + global: {} + }, + + init: function() { + this.$widget = $("#MyWidget_" + this.instanceId); + this.bindEvents(); + this.loadData(); + }, + + bindEvents: function() { + var self = this; + + self.$widget.on("click", "[data-action='reload']", function() { + self.loadData(); + }); + + self.$widget.on("change", "[data-role='topN']", function() { + self.render(); + }); + + self.$widget.on("input", "[data-role='search']", function() { + self.render(); + }); + + self.$widget.on("keypress", "[data-role='search']", function(e) { + if (e.which === 13) { + e.preventDefault(); + self.render(); + } + }); + }, + + loadData: function() { + this.batchToken++; + this.rowsCache = []; + this.loadOffset = 0; + this.lastChunkMarker = ""; + this.noPagingMode = false; + this.isIncrementalLoading = true; + + this.setLoading(true); + this.setMessage("Carregando solicitacoes...", "info"); + this.render(); + this.loadNextBatch(this.batchToken); + }, + + loadNextBatch: function(token) { + var self = this; + if (token !== self.batchToken) return; + + self.fetchDatasetBatch(self.batchSize, self.loadOffset, function(err, rows) { + if (token !== self.batchToken) return; + + if (err) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Erro ao carregar dataset: " + err, "danger"); + return; + } + + rows = rows || []; + if (!rows.length) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Dados carregados: " + self.formatNumber(self.rowsCache.length) + " registro(s).", "success"); + return; + } + + var chunkMarker = self.buildChunkMarker(rows[0]); + if (self.loadOffset > 0 && chunkMarker && chunkMarker === self.lastChunkMarker) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Paginacao do dataset nao evoluiu (sqlStart/offset). Verifique suporte no ambiente.", "warning"); + return; + } + + self.lastChunkMarker = chunkMarker; + self.rowsCache = self.rowsCache.concat(rows); + self.loadOffset += rows.length; + self.render(); + self.setMessage("Carregando solicitacoes... " + self.formatNumber(self.rowsCache.length) + " registro(s).", "info"); + + if (self.noPagingMode) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Dados carregados: " + self.formatNumber(self.rowsCache.length) + " registro(s).", "success"); + return; + } + + if (rows.length < self.batchSize) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Dados carregados: " + self.formatNumber(self.rowsCache.length) + " registro(s).", "success"); + return; + } + + setTimeout(function() { + self.loadNextBatch(token); + }, 0); + }); + }, + + fetchDatasetBatch: function(limit, offset, callback) { + var self = this; + if (self.noPagingMode && offset > 0) { + callback(null, []); + return; + } + + try { + if (typeof DatasetFactory !== "undefined" && typeof DatasetFactory.getDataset === "function" && + typeof ConstraintType !== "undefined" && typeof DatasetFactory.createConstraint === "function") { + var constraints = self.noPagingMode ? null : self.buildFactoryPagingConstraints(limit, offset); + var ds = DatasetFactory.getDataset(self.datasetName, null, constraints, null); + var rows = (ds && ds.values) ? ds.values : []; + + if (!rows.length && offset === 0 && !self.noPagingMode) { + var dsNoPaging = DatasetFactory.getDataset(self.datasetName, null, null, null); + var rowsNoPaging = (dsNoPaging && dsNoPaging.values) ? dsNoPaging.values : []; + if (rowsNoPaging.length) { + self.noPagingMode = true; + callback(null, rowsNoPaging); + return; + } + } + + callback(null, rows); + return; + } + } catch (e) { + // fallback REST + } + + this.fetchDatasetBatchViaRest(limit, offset, callback); + }, + + buildFactoryPagingConstraints: function(limit, offset) { + var constraints = []; + constraints.push(DatasetFactory.createConstraint("sqlLimit", String(limit), String(limit), ConstraintType.MUST)); + constraints.push(DatasetFactory.createConstraint("sqlStart", String(offset), String(offset), ConstraintType.MUST)); + constraints.push(DatasetFactory.createConstraint("offset", String(offset), String(offset), ConstraintType.MUST)); + constraints.push(DatasetFactory.createConstraint("sqlOffset", String(offset), String(offset), ConstraintType.MUST)); + return constraints; + }, + + fetchDatasetBatchViaRest: function(limit, offset, callback) { + var self = this; + if (self.noPagingMode && offset > 0) { + callback(null, []); + return; + } + + function readRows(resp) { + if (resp && resp.content && resp.content.values) return resp.content.values; + if (resp && resp.values) return resp.values; + return []; + } + + function request(usePaging, done) { + var constraints = usePaging ? self.buildRestPagingConstraints(limit, offset) : []; + $.ajax({ + url: "/api/public/ecm/dataset/datasets", + type: "POST", + contentType: "application/json; charset=UTF-8", + dataType: "json", + data: JSON.stringify({ + name: self.datasetName, + fields: [], + constraints: constraints, + order: [] + }) + }).done(function(resp) { + done(null, readRows(resp) || []); + }).fail(function(xhr) { + var detail = xhr && (xhr.responseText || xhr.statusText || xhr.status); + done(detail || "falha na API REST de datasets", []); + }); + } + + request(!self.noPagingMode, function(err, rows) { + if (err) { + callback(err); + return; + } + + if (!rows.length && offset === 0 && !self.noPagingMode) { + request(false, function(err2, rows2) { + if (err2) { + callback(err2); + return; + } + if (rows2.length) { + self.noPagingMode = true; + } + callback(null, rows2 || []); + }); + return; + } + + callback(null, rows || []); + }); + }, + + buildRestPagingConstraints: function(limit, offset) { + return [ + { _field: "sqlLimit", _initialValue: String(limit), _finalValue: String(limit), _type: 1 }, + { _field: "sqlStart", _initialValue: String(offset), _finalValue: String(offset), _type: 1 }, + { _field: "offset", _initialValue: String(offset), _finalValue: String(offset), _type: 1 }, + { _field: "sqlOffset", _initialValue: String(offset), _finalValue: String(offset), _type: 1 } + ]; + }, + + buildChunkMarker: function(row) { + if (!row) return ""; + var id = this.pick(row, ["metadata#id", "id", "WKNumProces", "processInstanceId"]); + var state = this.pick(row, ["activity", "WKNumState", "state"]); + return (id || "-") + "|" + (state || "-"); + }, + + render: function() { + var grouped = this.aggregateRows(this.rowsCache); + var filteredGroups = this.filterGroups(grouped); + var shownGroups = this.applyTopN(filteredGroups); + + this.renderChart(shownGroups, this.rowsCache.length); + }, + + aggregateRows: function(rows) { + var map = {}; + var key; + + for (var i = 0; i < (rows || []).length; i++) { + key = this.resolveGroupValue(rows[i]) || this.emptyLabel; + + if (!map[key]) { + map[key] = { + name: key, + count: 0 + }; + } + map[key].count++; + } + + var list = []; + for (var name in map) { + if (map.hasOwnProperty(name)) { + list.push(map[name]); + } + } + + list.sort(function(a, b) { + if (b.count !== a.count) return b.count - a.count; + return String(a.name).localeCompare(String(b.name)); + }); + + return list; + }, + + filterGroups: function(groups) { + var $search = this.$widget.find("[data-role='search']"); + if (!$search.length) return groups.slice(0); + + var search = $.trim(String($search.val() || "")).toLowerCase(); + if (!search) return groups.slice(0); + + var out = []; + for (var i = 0; i < groups.length; i++) { + var g = groups[i]; + if (String(g.name || "").toLowerCase().indexOf(search) !== -1) { + out.push(g); + } + } + return out; + }, + + applyTopN: function(groups) { + var $top = this.$widget.find("[data-role='topN']"); + if (!$top.length) return groups.slice(0); + + var raw = $.trim(String($top.val() || "0")); + var topN = parseInt(raw, 10); + + if (isNaN(topN) || topN < 0) topN = 0; + if (topN === 0) return groups.slice(0); + + return groups.slice(0, topN); + }, + + renderKpis: function(allGroups, shownGroups) { + var totalSolicitacoes = this.rowsCache.length; + var totalGrupos = allGroups.length; + var solicitacoesExibidas = 0; + + for (var i = 0; i < shownGroups.length; i++) { + solicitacoesExibidas += Number(shownGroups[i].count || 0); + } + + this.$widget.find("[data-role='kpiTotalSolicitacoes']").text(this.formatNumber(totalSolicitacoes)); + this.$widget.find("[data-role='kpiTotalGrupos']").text(this.formatNumber(totalGrupos)); + this.$widget.find("[data-role='kpiSolicitacoesExibidas']").text(this.formatNumber(solicitacoesExibidas)); + }, + + renderChart: function(groups, totalRows) { + var html = []; + + if (!groups.length) { + var emptyMsg = this.isIncrementalLoading ? + "Carregando dados..." : + "Nenhum registro para os filtros informados."; + html.push("
" + this.escapeHtml(emptyMsg) + "
"); + this.$widget.find("[data-role='chartBars']").html(html.join("")); + return; + } + var bars = []; + for (var i = 0; i < groups.length; i++) { + var item = groups[i]; + var count = Number(item.count || 0); + var percentTotal = totalRows > 0 ? (count * 100 / totalRows) : 0; + + bars.push( + "
" + + "
" + this.escapeHtml(this.formatPercent(percentTotal)) + "
" + + "
" + + "
" + + "
" + + "
" + this.escapeHtml(item.name) + "
" + + "
" + ); + } + + var minWidth = Math.max(groups.length * 86, 360); + + html.push( + "
" + + "" + + "Participacao (%)" + + "" + + "
" + + "
" + + "
" + + "100%50%0%" + + "
" + + "
" + + "
" + + "
" + + "
" + + "
" + + "
" + bars.join("") + "
" + + "
" + + "
" + + "
" + ); + + this.$widget.find("[data-role='chartBars']").html(html.join("")); + }, + + resolveGroupValue: function(row) { + return this.pick(row || {}, this.groupKeyCandidates); + }, + + pick: function(row, keys) { + for (var i = 0; i < keys.length; i++) { + var value = row[keys[i]]; + if (value !== null && value !== undefined && String(value).trim() !== "") { + return String(value).trim(); + } + } + return ""; + }, + + formatNumber: function(value) { + var n = Number(value || 0); + if (isNaN(n)) return "0"; + return n.toLocaleString("pt-BR"); + }, + + formatPercent: function(value) { + var n = Number(value || 0); + if (isNaN(n)) n = 0; + return n.toLocaleString("pt-BR", { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + "%"; + }, + + renderUpdatedAt: function() { + var now = new Date(); + var stamp = now.toLocaleDateString("pt-BR") + " " + now.toLocaleTimeString("pt-BR"); + this.$widget.find("[data-role='updatedAt']").text("Atualizado em: " + stamp); + }, + + setLoading: function(isLoading) { + this.$widget.toggleClass("is-loading", !!isLoading); + if (isLoading) { + this.setMessage("Carregando dados...", "info"); + } + }, + + setMessage: function(text, type) { + var $msg = this.$widget.find("[data-role='message']"); + $msg.removeClass("is-info is-success is-warning is-danger"); + + if (!text) { + $msg.hide().text(""); + return; + } + + var className = "is-info"; + if (type === "success") className = "is-success"; + if (type === "warning") className = "is-warning"; + if (type === "danger") className = "is-danger"; + + $msg.addClass(className).text(text).show(); + }, + + escapeHtml: function(text) { + return String(text == null ? "" : text) + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/\"/g, """) + .replace(/'/g, "'"); + } +}); + + + + + + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfmotorista/target/wdtransfmotorista.war b/Transferência Ginseng/wcm/widget/wdtransfmotorista/target/wdtransfmotorista.war new file mode 100644 index 0000000000000000000000000000000000000000..251a191c9013782339f8e7e2583b7dda33e86b93 GIT binary patch literal 15215 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 Lc;{lSKWG03Qo6Z( literal 0 HcmV?d00001 diff --git a/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/application.info b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/application.info new file mode 100644 index 0000000..1a11a57 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/application.info @@ -0,0 +1,19 @@ +application.type=widget +application.code=wdtransfreg +application.title=wdtransfreg +application.description=wdtransfreg +application.fluig.version=null +application.category=SYSTEM +application.renderer=freemarker +developer.code=Andrey Cunha +developer.name=Andrey Cunha +developer.url=http://www.fluig.com +application.uiwidget=true +application.mobileapp=false +application.version=${build.version}-${build.revision} +view.file=view.ftl +edit.file=edit.ftl +locale.file.base.name=wdtransfreg +application.resource.js.1=/resources/js/wdtransfreg.js +application.resource.css.2=/resources/css/wdtransfreg.css +hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2 diff --git a/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/edit.ftl b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/edit.ftl new file mode 100644 index 0000000..960b2aa --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/edit.ftl @@ -0,0 +1,5 @@ +
+ +
+ + diff --git a/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/view.ftl b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/view.ftl new file mode 100644 index 0000000..c0538ae --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/view.ftl @@ -0,0 +1,11 @@ +
+
+
+

Transferencias por UF de Origem

+
+
Carregando dados...
+
+
+
+
+ diff --git a/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/wdtransfreg.properties b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/wdtransfreg.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/wdtransfreg.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/wdtransfreg_en_US.properties b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/wdtransfreg_en_US.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/wdtransfreg_en_US.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/wdtransfreg_es.properties b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/wdtransfreg_es.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/wdtransfreg_es.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/wdtransfreg_pt_BR.properties b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/wdtransfreg_pt_BR.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/resources/wdtransfreg_pt_BR.properties @@ -0,0 +1,2 @@ + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/WEB-INF/jboss-web.xml b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..3b62310 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /wdtransfreg + false + diff --git a/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/WEB-INF/web.xml b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..6797e41 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,12 @@ + + + + + + 30 + + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/resources/css/wdtransfreg.css b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/resources/css/wdtransfreg.css new file mode 100644 index 0000000..3bddf18 --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/resources/css/wdtransfreg.css @@ -0,0 +1,181 @@ +.wdtransf-agg-widget .wdtransf-agg-shell { + background: #f4f7fb; + border: 1px solid #d8e3ee; + border-radius: 12px; + padding: 8px; +} + +.wdtransf-agg-widget .wdtransf-agg-chart-wrap { + background: #e8ecf1; + border: 1px solid #d3dde8; + border-radius: 16px; + padding: 10px 12px; +} + +.wdtransf-agg-widget .wdtransf-agg-title { + margin: 0 0 8px; + color: #00507c; + font-size: 18px; + font-weight: 700; + text-align: center; +} + +.wdtransf-agg-widget .wdtransf-agg-chart { + display: flex; + flex-direction: column; + gap: 6px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-legend { + margin-bottom: 4px; + color: #486680; + font-size: 12px; + font-weight: 600; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-legend-item { + display: inline-flex; + align-items: center; + gap: 6px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-legend-swatch { + display: inline-block; + width: 16px; + height: 10px; + border-radius: 2px; + background: #0f678a; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart { + display: grid; + grid-template-columns: 36px 1fr; + gap: 8px; + align-items: end; + min-height: 195px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-axis { + height: 160px; + display: flex; + flex-direction: column; + justify-content: space-between; + color: #57728b; + font-size: 11px; + text-align: right; + padding-right: 2px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-scroll { + overflow-x: auto; + overflow-y: hidden; + padding-bottom: 2px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-plot { + position: relative; + height: 160px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-grid { + position: absolute; + left: 0; + right: 0; + border-top: 1px solid #ced9e4; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-grid.grid-100 { top: 0; } +.wdtransf-agg-widget .wdtransf-agg-vchart-grid.grid-50 { top: 50%; } +.wdtransf-agg-widget .wdtransf-agg-vchart-grid.grid-0 { bottom: 0; } + +.wdtransf-agg-widget .wdtransf-agg-vchart-bars { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + display: flex; + align-items: flex-end; + gap: 10px; + padding: 0 6px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-item { + width: 64px; + display: flex; + flex-direction: column; + align-items: center; + gap: 4px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-value { + color: #1e4e71; + font-size: 11px; + font-weight: 700; + line-height: 1; + min-height: 12px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-bar-wrap { + width: 30px; + height: 120px; + display: flex; + align-items: flex-end; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-bar { + width: 100%; + border-radius: 4px 4px 0 0; + background: #0f678a; + min-height: 2px; +} + +.wdtransf-agg-widget .wdtransf-agg-vchart-label { + color: #3c5c75; + font-size: 11px; + font-weight: 600; + text-align: center; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + transform: rotate(-12deg); + transform-origin: center top; +} + +.wdtransf-agg-widget .wdtransf-agg-chart-empty { + color: #4f6880; + font-size: 12px; + padding: 8px 0; +} + +@media (max-width: 767px) { + .wdtransf-agg-widget .wdtransf-agg-chart-wrap { + padding: 8px; + } + + .wdtransf-agg-widget .wdtransf-agg-title { + font-size: 16px; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart { + grid-template-columns: 1fr; + min-height: 170px; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart-axis { + display: none; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart-plot { + height: 145px; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart-bar-wrap { + height: 108px; + } + + .wdtransf-agg-widget .wdtransf-agg-vchart-label { + transform: none; + } +} diff --git a/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/resources/images/icon.png b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/resources/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..102160cdd282b0d62712b3c7e6bef86fcd538496 GIT binary patch literal 7845 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 D*xqLB literal 0 HcmV?d00001 diff --git a/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/resources/js/wdtransfreg.js b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/resources/js/wdtransfreg.js new file mode 100644 index 0000000..259481a --- /dev/null +++ b/Transferência Ginseng/wcm/widget/wdtransfreg/src/main/webapp/resources/js/wdtransfreg.js @@ -0,0 +1,447 @@ +var WdTransfRegWidget = SuperWidget.extend({ + datasetName: "transferenciav2", + batchSize: 1000, + rowsCache: [], + isIncrementalLoading: false, + loadOffset: 0, + batchToken: 0, + lastChunkMarker: "", + noPagingMode: false, + groupKeyCandidates: ["ufOrigem", "UF_ORIGEM", "UF", "uf"], + emptyLabel: "Nao informado", + + bindings: { + local: {}, + global: {} + }, + + init: function() { + this.$widget = $("#MyWidget_" + this.instanceId); + this.bindEvents(); + this.loadData(); + }, + + bindEvents: function() { + var self = this; + + self.$widget.on("click", "[data-action='reload']", function() { + self.loadData(); + }); + + self.$widget.on("change", "[data-role='topN']", function() { + self.render(); + }); + + self.$widget.on("input", "[data-role='search']", function() { + self.render(); + }); + + self.$widget.on("keypress", "[data-role='search']", function(e) { + if (e.which === 13) { + e.preventDefault(); + self.render(); + } + }); + }, + + loadData: function() { + this.batchToken++; + this.rowsCache = []; + this.loadOffset = 0; + this.lastChunkMarker = ""; + this.noPagingMode = false; + this.isIncrementalLoading = true; + + this.setLoading(true); + this.setMessage("Carregando solicitacoes...", "info"); + this.render(); + this.loadNextBatch(this.batchToken); + }, + + loadNextBatch: function(token) { + var self = this; + if (token !== self.batchToken) return; + + self.fetchDatasetBatch(self.batchSize, self.loadOffset, function(err, rows) { + if (token !== self.batchToken) return; + + if (err) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Erro ao carregar dataset: " + err, "danger"); + return; + } + + rows = rows || []; + if (!rows.length) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Dados carregados: " + self.formatNumber(self.rowsCache.length) + " registro(s).", "success"); + return; + } + + var chunkMarker = self.buildChunkMarker(rows[0]); + if (self.loadOffset > 0 && chunkMarker && chunkMarker === self.lastChunkMarker) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Paginacao do dataset nao evoluiu (sqlStart/offset). Verifique suporte no ambiente.", "warning"); + return; + } + + self.lastChunkMarker = chunkMarker; + self.rowsCache = self.rowsCache.concat(rows); + self.loadOffset += rows.length; + self.render(); + self.setMessage("Carregando solicitacoes... " + self.formatNumber(self.rowsCache.length) + " registro(s).", "info"); + + if (self.noPagingMode) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Dados carregados: " + self.formatNumber(self.rowsCache.length) + " registro(s).", "success"); + return; + } + + if (rows.length < self.batchSize) { + self.isIncrementalLoading = false; + self.setLoading(false); + self.render(); + self.setMessage("Dados carregados: " + self.formatNumber(self.rowsCache.length) + " registro(s).", "success"); + return; + } + + setTimeout(function() { + self.loadNextBatch(token); + }, 0); + }); + }, + + fetchDatasetBatch: function(limit, offset, callback) { + var self = this; + if (self.noPagingMode && offset > 0) { + callback(null, []); + return; + } + + try { + if (typeof DatasetFactory !== "undefined" && typeof DatasetFactory.getDataset === "function" && + typeof ConstraintType !== "undefined" && typeof DatasetFactory.createConstraint === "function") { + var constraints = self.noPagingMode ? null : self.buildFactoryPagingConstraints(limit, offset); + var ds = DatasetFactory.getDataset(self.datasetName, null, constraints, null); + var rows = (ds && ds.values) ? ds.values : []; + + if (!rows.length && offset === 0 && !self.noPagingMode) { + var dsNoPaging = DatasetFactory.getDataset(self.datasetName, null, null, null); + var rowsNoPaging = (dsNoPaging && dsNoPaging.values) ? dsNoPaging.values : []; + if (rowsNoPaging.length) { + self.noPagingMode = true; + callback(null, rowsNoPaging); + return; + } + } + + callback(null, rows); + return; + } + } catch (e) { + // fallback REST + } + + this.fetchDatasetBatchViaRest(limit, offset, callback); + }, + + buildFactoryPagingConstraints: function(limit, offset) { + var constraints = []; + constraints.push(DatasetFactory.createConstraint("sqlLimit", String(limit), String(limit), ConstraintType.MUST)); + constraints.push(DatasetFactory.createConstraint("sqlStart", String(offset), String(offset), ConstraintType.MUST)); + constraints.push(DatasetFactory.createConstraint("offset", String(offset), String(offset), ConstraintType.MUST)); + constraints.push(DatasetFactory.createConstraint("sqlOffset", String(offset), String(offset), ConstraintType.MUST)); + return constraints; + }, + + fetchDatasetBatchViaRest: function(limit, offset, callback) { + var self = this; + if (self.noPagingMode && offset > 0) { + callback(null, []); + return; + } + + function readRows(resp) { + if (resp && resp.content && resp.content.values) return resp.content.values; + if (resp && resp.values) return resp.values; + return []; + } + + function request(usePaging, done) { + var constraints = usePaging ? self.buildRestPagingConstraints(limit, offset) : []; + $.ajax({ + url: "/api/public/ecm/dataset/datasets", + type: "POST", + contentType: "application/json; charset=UTF-8", + dataType: "json", + data: JSON.stringify({ + name: self.datasetName, + fields: [], + constraints: constraints, + order: [] + }) + }).done(function(resp) { + done(null, readRows(resp) || []); + }).fail(function(xhr) { + var detail = xhr && (xhr.responseText || xhr.statusText || xhr.status); + done(detail || "falha na API REST de datasets", []); + }); + } + + request(!self.noPagingMode, function(err, rows) { + if (err) { + callback(err); + return; + } + + if (!rows.length && offset === 0 && !self.noPagingMode) { + request(false, function(err2, rows2) { + if (err2) { + callback(err2); + return; + } + if (rows2.length) { + self.noPagingMode = true; + } + callback(null, rows2 || []); + }); + return; + } + + callback(null, rows || []); + }); + }, + + buildRestPagingConstraints: function(limit, offset) { + return [ + { _field: "sqlLimit", _initialValue: String(limit), _finalValue: String(limit), _type: 1 }, + { _field: "sqlStart", _initialValue: String(offset), _finalValue: String(offset), _type: 1 }, + { _field: "offset", _initialValue: String(offset), _finalValue: String(offset), _type: 1 }, + { _field: "sqlOffset", _initialValue: String(offset), _finalValue: String(offset), _type: 1 } + ]; + }, + + buildChunkMarker: function(row) { + if (!row) return ""; + var id = this.pick(row, ["metadata#id", "id", "WKNumProces", "processInstanceId"]); + var state = this.pick(row, ["activity", "WKNumState", "state"]); + return (id || "-") + "|" + (state || "-"); + }, + + render: function() { + var grouped = this.aggregateRows(this.rowsCache); + var filteredGroups = this.filterGroups(grouped); + var shownGroups = this.applyTopN(filteredGroups); + + this.renderChart(shownGroups, this.rowsCache.length); + }, + + aggregateRows: function(rows) { + var map = {}; + var key; + + for (var i = 0; i < (rows || []).length; i++) { + key = this.resolveGroupValue(rows[i]) || this.emptyLabel; + + if (!map[key]) { + map[key] = { + name: key, + count: 0 + }; + } + map[key].count++; + } + + var list = []; + for (var name in map) { + if (map.hasOwnProperty(name)) { + list.push(map[name]); + } + } + + list.sort(function(a, b) { + if (b.count !== a.count) return b.count - a.count; + return String(a.name).localeCompare(String(b.name)); + }); + + return list; + }, + + filterGroups: function(groups) { + var $search = this.$widget.find("[data-role='search']"); + if (!$search.length) return groups.slice(0); + + var search = $.trim(String($search.val() || "")).toLowerCase(); + if (!search) return groups.slice(0); + + var out = []; + for (var i = 0; i < groups.length; i++) { + var g = groups[i]; + if (String(g.name || "").toLowerCase().indexOf(search) !== -1) { + out.push(g); + } + } + return out; + }, + + applyTopN: function(groups) { + var $top = this.$widget.find("[data-role='topN']"); + if (!$top.length) return groups.slice(0); + + var raw = $.trim(String($top.val() || "0")); + var topN = parseInt(raw, 10); + + if (isNaN(topN) || topN < 0) topN = 0; + if (topN === 0) return groups.slice(0); + + return groups.slice(0, topN); + }, + + renderKpis: function(allGroups, shownGroups) { + var totalSolicitacoes = this.rowsCache.length; + var totalGrupos = allGroups.length; + var solicitacoesExibidas = 0; + + for (var i = 0; i < shownGroups.length; i++) { + solicitacoesExibidas += Number(shownGroups[i].count || 0); + } + + this.$widget.find("[data-role='kpiTotalSolicitacoes']").text(this.formatNumber(totalSolicitacoes)); + this.$widget.find("[data-role='kpiTotalGrupos']").text(this.formatNumber(totalGrupos)); + this.$widget.find("[data-role='kpiSolicitacoesExibidas']").text(this.formatNumber(solicitacoesExibidas)); + }, + + renderChart: function(groups, totalRows) { + var html = []; + + if (!groups.length) { + var emptyMsg = this.isIncrementalLoading ? + "Carregando dados..." : + "Nenhum registro para os filtros informados."; + html.push("
" + this.escapeHtml(emptyMsg) + "
"); + this.$widget.find("[data-role='chartBars']").html(html.join("")); + return; + } + var bars = []; + for (var i = 0; i < groups.length; i++) { + var item = groups[i]; + var count = Number(item.count || 0); + var percentTotal = totalRows > 0 ? (count * 100 / totalRows) : 0; + + bars.push( + "
" + + "
" + this.escapeHtml(this.formatPercent(percentTotal)) + "
" + + "
" + + "
" + + "
" + + "
" + this.escapeHtml(item.name) + "
" + + "
" + ); + } + + var minWidth = Math.max(groups.length * 86, 360); + + html.push( + "
" + + "" + + "Participacao (%)" + + "" + + "
" + + "
" + + "
" + + "100%50%0%" + + "
" + + "
" + + "
" + + "
" + + "
" + + "
" + + "
" + bars.join("") + "
" + + "
" + + "
" + + "
" + ); + + this.$widget.find("[data-role='chartBars']").html(html.join("")); + }, + + resolveGroupValue: function(row) { + return this.pick(row || {}, this.groupKeyCandidates); + }, + + pick: function(row, keys) { + for (var i = 0; i < keys.length; i++) { + var value = row[keys[i]]; + if (value !== null && value !== undefined && String(value).trim() !== "") { + return String(value).trim(); + } + } + return ""; + }, + + formatNumber: function(value) { + var n = Number(value || 0); + if (isNaN(n)) return "0"; + return n.toLocaleString("pt-BR"); + }, + + formatPercent: function(value) { + var n = Number(value || 0); + if (isNaN(n)) n = 0; + return n.toLocaleString("pt-BR", { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + "%"; + }, + + renderUpdatedAt: function() { + var now = new Date(); + var stamp = now.toLocaleDateString("pt-BR") + " " + now.toLocaleTimeString("pt-BR"); + this.$widget.find("[data-role='updatedAt']").text("Atualizado em: " + stamp); + }, + + setLoading: function(isLoading) { + this.$widget.toggleClass("is-loading", !!isLoading); + if (isLoading) { + this.setMessage("Carregando dados...", "info"); + } + }, + + setMessage: function(text, type) { + var $msg = this.$widget.find("[data-role='message']"); + $msg.removeClass("is-info is-success is-warning is-danger"); + + if (!text) { + $msg.hide().text(""); + return; + } + + var className = "is-info"; + if (type === "success") className = "is-success"; + if (type === "warning") className = "is-warning"; + if (type === "danger") className = "is-danger"; + + $msg.addClass(className).text(text).show(); + }, + + escapeHtml: function(text) { + return String(text == null ? "" : text) + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/\"/g, """) + .replace(/'/g, "'"); + } +}); + + + + + + + diff --git a/Transferência Ginseng/wcm/widget/wdtransfreg/target/wdtransfreg.war b/Transferência Ginseng/wcm/widget/wdtransfreg/target/wdtransfreg.war new file mode 100644 index 0000000000000000000000000000000000000000..0b828d6036ebda15d2820b6b141ab57e17e0654d GIT binary patch literal 15116 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 + + volume + + + Default + + + mecanismoGrupo @@ -710,6 +718,203 @@ + + camposFormulario, documentoId = 43582 + + + activity + + + categoriaItem + + + centroCusto + + + chaveNfe + + + codigoItem + + + codigoProdutoItem + + + currentUserId + + + currentUsermail + + + currentUserName + + + dataAbertura + + + dataColeta + + + dataEmissaoApiNfe + + + dataEmissaoNfe + + + dataEntradaNfeConsulta + + + dataEntrega + + + dataValidacaoGestor + + + descricao + + + emailSolicitante + + + estabelecimento + + + excelUpload + + + fdAnexo_Coleta + + + fdAnexo_Entrega + + + fdAnexo_recebimento + + + fnAnexo_Nfe + + + formMode + + + fornecedorNfeConsulta + + + gestorEmail + + + gestorEmailE + + + gestorNome + + + gestorNomeE + + + gestor_cc + + + gestor_cce + + + invoiceIdNfeConsulta + + + itensNfeConsulta + + + itensNfeJson + + + justificativa + + + justificativaDecisaoGestor + + + justificativaDecisaoItens + + + lojaNfeConsulta + + + motoristaColetaLogin + + + motoristaColetaNome + + + motoristaEntregaLogin + + + motoristaEntregaNome + + + motoristaEntregaSelecionado + + + nomerecebedor + + + numeroNfeConsulta + + + operacaoNfeConsulta + + + productIdItem + + + qtdDivergenciasNfe + + + quantidadeItem + + + requesterId + + + requesterMail + + + requesterName + + + serieNfeConsulta + + + situacaoNfeConsulta + + + storeIdNfeConsulta + + + tipoMotoristaEntrega + + + ufDestino + + + ufOrigem + + + userValidacaoGestor + + + usuarioEmissorNfe + + + validacaoItens + + + valorNfeConsulta + + + WKNumProces + + + mecanismo @@ -835,5 +1040,543 @@ + + forms + + + + + FLUIGADHOC + + + FLUIGADHOC + + + 3 + + + + + + + FLUIGADHOCPROCESS + + + FLUIGADHOCPROCESS + + + 4 + + + + + + + totvsflow_dataset_tipo_ocorrencia + + + totvsflow_dataset_tipo_ocorrencia + + + 14 + + + + + + + totvsflow_abertura_chamado + + + totvsflow_abertura_chamado + + + 15 + + + + + + + DSFormulariodeAberturadechamado + + + Formulário de Abertura de chamado + + + 20 + + + + + + + Abertura_de_chamados + + + Solicitação de abertura de chamados + + + 21 + + + + + + + DSvistoriadeServico + + + vistoriadeServico + + + 24 + + + + + + + DSFormulariodeReservadesala + + + Formulário de Reserva de sala + + + 34 + + + + + + + totvsflow_dataset_centrocusto + + + totvsflow_dataset_centrocusto + + + 103 + + + + + + + totvsflow_dataset_cadastro_item + + + totvsflow_dataset_cadastro_item + + + 104 + + + + + + + totvsflow_dataset_estabelecimento + + + totvsflow_dataset_estabelecimento + + + 105 + + + + + + + totvsflow_solicitacao_compras + + + totvsflow_solicitacao_compras + + + 165 + + + + + + + aberturadechamado_manutencao + + + aberturadechamado_manutencao + + + 400 + + + + + + + Solicitacao_transferencia + + + Solicitacao_transferencia + + + 590 + + + + + + + recrutamento + + + recrutamento + + + 823 + + + + + + + kit_aniversariantes + + + Aniversariantes + + + 7690 + + + + + + + kit_cardapio + + + Cardápio do Dia + + + 7695 + + + + + + + kit_convenios + + + Convênios + + + 7703 + + + + + + + kit_news + + + Notícias + + + 7709 + + + + + + + compras_digital + + + compras_digital + + + 9305 + + + + + + + dpf_di_formulario_processo_admissao + + + Digte_Public_Form_Di_Formulario_Processo_Admissao_Protheus + + + 9626 + + + + + + + dpf_cadastro_status + + + Digte_Public_Form_Status + + + 9627 + + + + + + + dpf_configuracoes + + + Digte_Public_Form_Configuracoes + + + 9628 + + + + + + + dpf_cadastro_jornada + + + Digte_Public_Form_Jornada + + + 9629 + + + + + + + dpf_tipo_documento + + + Digte_Public_Form_Tipo_Documento + + + 9630 + + + + + + + dpf_dataset + + + Digte_Public_Form_Dataset + + + 9631 + + + + + + + dpf_di_configuracao + + + Digte_Public_Form_Di_Configuracoes + + + 9632 + + + + + + + dpf_di_beneficio + + + Digte_Public_Form_Di_Beneficios + + + 9633 + + + + + + + dpf_di_compl_contrato + + + Digte_Public_Form_Di_Comp_Contrato + + + 9634 + + + + + + + dpf_di_funcao_jornada + + + Digte_Public_Form_Di_Funcao_Jornada + + + 9635 + + + + + + + dpf_dataset_estrutura + + + Digte_Public_Form_Di_Dataset_Estrutura + + + 9636 + + + + + + + dpf_grupo_tipo_contrato + + + Digte_Public_Form_Grupo_Tipo_Contrato + + + 9637 + + + + + + + dpf_tipo_contrato + + + Digte_Public_Form_Tipo_Contrato + + + 9638 + + + + + + + dpf_di_traducao_campo_valor + + + Digte_Public_Form_Di_Traducao_Campo_Valor + + + 9639 + + + + + + + dpf_di_restricoes_cpf + + + Digte_Public_Form_Di_Formulario_Restricao_CPF + + + 9640 + + + + + + + dpf_di_compl_vt + + + Digte_Public_Form_Di_Compl_VT + + + 9641 + + + + + + + dpf_di_traducao_campo + + + Digte_Public_Form_Di_Traducao_Campo + + + 9995 + + + + + + + desligamento + + + desligamento + + + 12959 + + + + + + + checklist + + + checklist + + + 40213 + + + + + + + totvsflow_lancamento_documento + + + totvsflow_lancamento_documento + + + 41254 + + + + + + + transferência + + + transferência + + + 43582 + + + + + diff --git a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml index 538ae9c..3997177 100644 --- a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml +++ b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml @@ -29,10 +29,10 @@ 1 Transferência Ginseng - 46 + 49 - 590 + 43582 true true false @@ -826,7 +826,7 @@ 1 Transferência Ginseng 1 - 46 + 49 2 hAPI.getCardValue("gestor_cce") != "" @@ -840,7 +840,7 @@ 1 Transferência Ginseng 2 - 46 + 49 2 true @@ -854,7 +854,7 @@ 1 Transferência Ginseng 1 - 46 + 49 46 hAPI.getCardValue("validacaoItens") == "entregue" && hAPI.getCardValue("dataEntradaNfeConsulta") != "" @@ -866,7 +866,7 @@ 1 Transferência Ginseng 2 - 46 + 49 46 true @@ -878,7 +878,7 @@ 1 Transferência Ginseng 1 - 46 + 49 107 hAPI.getCardValue("ufOrigem") == "AL" @@ -892,7 +892,7 @@ 1 Transferência Ginseng 2 - 46 + 49 107 hAPI.getCardValue("ufOrigem") == "BA" @@ -906,7 +906,7 @@ 1 Transferência Ginseng 3 - 46 + 49 107 hAPI.getCardValue("ufOrigem") == "SE" @@ -920,7 +920,7 @@ 1 Transferência Ginseng 4 - 46 + 49 107 hAPI.getCardValue("ufOrigem") == "" @@ -929,6 +929,34 @@ Pool Grupo 0 + + + 1 + Transferência Ginseng + 5 + 49 + 107 + + hAPI.getCardValue("ufOrigem") == "VDC" + 31 + <AssignmentController><Group>motoristaBA</Group></AssignmentController> + Pool Grupo + 0 + + + + 1 + Transferência Ginseng + 6 + 49 + 107 + + hAPI.getCardValue("ufOrigem") == "SE" + 31 + <AssignmentController><Group>motoristaSE</Group></AssignmentController> + Pool Grupo + 0 + @@ -1378,7 +1406,7 @@ function notifyTemplate(templateCode, destinoEmail, requesterId, params, process } function buildProcessLink(processNumber) { - var BASE_URL_FALLBACK = "https://comerciode188007.fluig.cloudtotvs.com.br"; + var BASE_URL_FALLBACK = "https://comerciode188006.fluig.cloudtotvs.com.br"; var baseUrl = safeTrim(getValue("WKServerURL")); var companyId = safeTrim(getValue("WKCompany")); if (baseUrl === "") baseUrl = BASE_URL_FALLBACK; @@ -1640,7 +1668,7 @@ function onlyDigits(value) { 1 Transferência Ginseng - 46 + 49 5 1 @@ -1651,7 +1679,7 @@ function onlyDigits(value) { 1 Transferência Ginseng - 46 + 49 5 2 @@ -1662,7 +1690,7 @@ function onlyDigits(value) { 1 Transferência Ginseng - 46 + 49 7 1 @@ -1673,7 +1701,7 @@ function onlyDigits(value) { 1 Transferência Ginseng - 46 + 49 26 1 @@ -1684,7 +1712,7 @@ function onlyDigits(value) { 1 Transferência Ginseng - 46 + 49 61 1 @@ -1695,7 +1723,7 @@ function onlyDigits(value) { 1 Transferência Ginseng - 46 + 49 85 1 @@ -1751,6 +1779,24 @@ function onlyDigits(value) { Justificativa 5 + + + 1 + Transferência Ginseng + motoristaColetaNome + + Motorista Coleta + 6 + + + + 1 + Transferência Ginseng + motoristaEntregaNome + + Motorista Entrega + 7 + 1 @@ -1758,7 +1804,7 @@ function onlyDigits(value) { requesterName requesterName - 6 + 8 @@ -1780,7 +1826,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 49 4 approval title @@ -1790,7 +1836,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 49 4 approval description @@ -1800,7 +1846,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 49 4 approval highlight @@ -1810,7 +1856,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 49 4 approval approve @@ -1820,7 +1866,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 49 4 approval reject @@ -1830,7 +1876,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 49 6 approval title @@ -1840,7 +1886,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 49 6 approval description @@ -1850,7 +1896,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 49 6 approval highlight @@ -1860,7 +1906,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 49 6 approval approve @@ -1870,7 +1916,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 49 6 approval reject @@ -1880,7 +1926,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 49 24 approval title @@ -1890,7 +1936,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 49 24 approval description @@ -1900,7 +1946,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 49 24 approval highlight @@ -1910,7 +1956,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 49 24 approval approve @@ -1920,7 +1966,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 46 + 49 24 approval reject diff --git a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.png b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.png index 51df293ea3a14d879deeb0d04d257b391daec1dc..d5bc181d6cf4de942b855d1262a31021eac14646 100644 GIT binary patch literal 50256 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

PG3U(}c=h(x(~gYH%1UA+=xYeQ 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 diff --git a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.processimage.svg b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.processimage.svg index de42702..c285733 100644 --- a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.processimage.svg +++ b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.processimage.svg @@ -1,2 +1,2 @@ -MotoristaAnalista de suprimentosLogisticaGerente de lojaSolicitação de TransferênciaValidarLojaAprovarTransferênciaEmitir NFEde TransfReceberProdutosVerificarproblemaColetarProdutoValidarprodutoEntregarProdutoConsultarEntradaVerificarproblema delançamentoValidarrotaGestor IdentificadoLoja sem GestorAjuste de transferênciaAprovarConfirmar recebimentoReprovarReprovarCancelarValidar produtosrecebidosFinalizarEntregar produtoEnviar para rota +MotoristaAnalista de suprimentosLogisticaGerente de lojaSolicitação de TransferênciaValidarLojaAprovarTransferênciaEmitir NFEde TransfReceberProdutosVerificarproblemaColetarProdutoValidarprodutoEntregarProdutoConsultarEntradaVerificarproblema delançamentoValidarrotaGestor IdentificadoLoja sem GestorAjuste de transferênciaAprovarConfirmar recebimentoReprovarReprovarCancelarValidar produtosrecebidosFinalizarEntregar produtoEnviar para rota diff --git a/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process b/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process index 1444688..116949b 100644 --- a/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process +++ b/Transferência Ginseng/workflow/diagrams/Solicitação de transferência.process @@ -4405,7 +4405,7 @@ - + @@ -4430,7 +4430,7 @@ - + \ No newline at end of file diff --git a/Transferência Ginseng/workflow/scripts/Solicitação de transferência.beforeTaskSave.js b/Transferência Ginseng/workflow/scripts/Solicitação de transferência.beforeTaskSave.js index 0220c19..9501070 100644 --- a/Transferência Ginseng/workflow/scripts/Solicitação de transferência.beforeTaskSave.js +++ b/Transferência Ginseng/workflow/scripts/Solicitação de transferência.beforeTaskSave.js @@ -126,7 +126,7 @@ function notifyTemplate(templateCode, destinoEmail, requesterId, params, process } function buildProcessLink(processNumber) { - var BASE_URL_FALLBACK = "https://comerciode188007.fluig.cloudtotvs.com.br"; + var BASE_URL_FALLBACK = "https://comerciode188006.fluig.cloudtotvs.com.br"; var baseUrl = safeTrim(getValue("WKServerURL")); var companyId = safeTrim(getValue("WKCompany")); if (baseUrl === "") baseUrl = BASE_URL_FALLBACK; From 83d83351807f0dbb65ad6824b26b45949005c3c9 Mon Sep 17 00:00:00 2001 From: "Andrey Cunh@" Date: Wed, 15 Apr 2026 14:40:55 -0300 Subject: [PATCH 15/25] att --- .metadata/.log | 7930 +++++++++++++++++ .../.indexes/bf/0/properties.index | Bin 560 -> 0 bytes .../.projects/Ginseng_chamados/.markers | Bin 8069 -> 0 bytes .../.projects/Ginseng_chamados/.markers.snap | Bin 1040 -> 0 bytes .../.projects/Ginseng_chamados/.syncinfo.snap | Bin 1040 -> 0 bytes .../.indexes/bf/0/properties.index | Bin 169 -> 0 bytes .../Recrutamento e Seleção/.markers.snap | Bin 1040 -> 0 bytes .../Recrutamento e Seleção/.syncinfo.snap | Bin 1040 -> 0 bytes .../.root/.indexes/properties.index | Bin 282 -> 282 bytes .../.root/.markers.snap | Bin 1328 -> 0 bytes .../.safetable/org.eclipse.core.resources | Bin 50914 -> 1553 bytes .../org.eclipse.core.resources.prefs | 1 + .../.settings/org.eclipse.ui.ide.prefs | 2 +- .../.settings/org.eclipse.wst.jsdt.ui.prefs | 2 +- .../org.eclipse.wst.jsdt.web.core.prefs | 2 +- .../org.eclipse.e4.workbench/workbench.xmi | 370 +- .../assumedExternalFilesCache | Bin 938 -> 4 bytes .../variablesAndContainers.dat | Bin 129 -> 41665 bytes .../0.log | 2 + .../.cache/clean-cache.properties | 2 +- .../org.eclipse.ui.ide/dialog_settings.xml | 11 + .../dialog_settings.xml | 4 +- .../externalLibsTimeStamps | Bin 1958 -> 3880 bytes .../indexes/17091598.index | Bin 1356 -> 0 bytes .../indexes/3371662347.index | Bin 6588 -> 0 bytes .../indexes/3528551409.index | Bin 7556 -> 0 bytes .../indexes/4202715187.index | Bin 9399 -> 0 bytes .../indexes/707046764.index | Bin 23126 -> 0 bytes .../indexes/savedIndexNames.txt | 27 +- .../libraries/fluigAPI.js | 592 +- .../variablesAndContainers.dat | Bin 2722 -> 3281 bytes .../task-tags.properties | 4 +- .../system_catalog.xml | 2 +- .metadata/version.ini | 2 +- .../forms/Desligamento/Desligamento.html | 208 +- Desligamento/forms/Desligamento/script.js | 15 +- Desligamento/forms/desligamentov2/.metadata | Bin 0 -> 569 bytes .../forms/desligamentov2/desligamento.css | 17 + .../forms/desligamentov2/desligamentov2.html | 973 ++ .../desligamentov2/events/displayFields.js | 39 + Desligamento/forms/desligamentov2/script.js | 385 + .../.resources/Ginseng Produção.ws.cache | 925 +- .../.resources/Ginseng Produção.ws.cache.bkp | 839 +- .../desligamentoColaborador.ecm30.xml | 485 +- .../.resources/desligamentoColaborador.png | Bin 43420 -> 48137 bytes .../desligamentoColaborador.processimage.svg | 2 +- .../workflow/.resources/producao.ws.cache | 650 ++ .../workflow/.resources/producao.ws.cache.bkp | 650 ++ .../diagrams/desligamentoColaborador.process | 2055 +++-- .../datasets/dsPortalFornecedorStartProcess.js | 7 + .../totvsflow_lancamento_documento.html | 201 +- .../portalfornecedor_endpoint_contract.md | 1 + .../portalfornecedor_proxy_example.py | 7 + .../src/main/resources/view.ftl | 39 +- .../webapp/resources/js/portalfornecedor.js | 92 +- .../target/portalfornecedor.war | Bin 31285 -> 31792 bytes ...owEssentials_LancamentodeDocumento.ecm30.xml | 917 +- .../FlowEssentials_LancamentodeDocumento.png | Bin 17244 -> 26158 bytes ...tials_LancamentodeDocumento.processimage.svg | 2 +- .../workflow/.resources/Fluig prod.ws.cache | 3 + .../workflow/.resources/Fluig prod.ws.cache.bkp | 3 + .../workflow/.resources/Producao.ws.cache | 155 + .../workflow/.resources/Producao.ws.cache.bkp | 155 + ...FlowEssentials_LancamentodeDocumento.process | 981 +- ...tials_LancamentodeDocumento.servicetask15.js | 182 + .../workflow/.resources/Producao.ws.cache | 411 +- .../workflow/.resources/Producao.ws.cache.bkp | 1227 +-- .../Solicitação de transferência.ecm30.xml | 66 +- .../Solicitação de transferência.png | Bin 50256 -> 52748 bytes .../Solicitação de transferência.process | 2313 ++--- com.totvs.tds.ecm.dataservers | Bin 938 -> 1314 bytes 71 files changed, 16697 insertions(+), 6261 deletions(-) delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/Ginseng_chamados/.indexes/bf/0/properties.index delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/Ginseng_chamados/.markers delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/Ginseng_chamados/.markers.snap delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/Ginseng_chamados/.syncinfo.snap delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/Recrutamento e Seleção/.indexes/bf/0/properties.index delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/Recrutamento e Seleção/.markers.snap delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/Recrutamento e Seleção/.syncinfo.snap delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap delete mode 100644 .metadata/.plugins/org.eclipse.wst.jsdt.core/indexes/17091598.index delete mode 100644 .metadata/.plugins/org.eclipse.wst.jsdt.core/indexes/3371662347.index delete mode 100644 .metadata/.plugins/org.eclipse.wst.jsdt.core/indexes/3528551409.index delete mode 100644 .metadata/.plugins/org.eclipse.wst.jsdt.core/indexes/4202715187.index delete mode 100644 .metadata/.plugins/org.eclipse.wst.jsdt.core/indexes/707046764.index create mode 100644 Desligamento/forms/desligamentov2/.metadata create mode 100644 Desligamento/forms/desligamentov2/desligamento.css create mode 100644 Desligamento/forms/desligamentov2/desligamentov2.html create mode 100644 Desligamento/forms/desligamentov2/events/displayFields.js create mode 100644 Desligamento/forms/desligamentov2/script.js create mode 100644 Desligamento/workflow/.resources/producao.ws.cache create mode 100644 Desligamento/workflow/.resources/producao.ws.cache.bkp create mode 100644 Lançamento de documentos/lançamentos/workflow/.resources/Producao.ws.cache create mode 100644 Lançamento de documentos/lançamentos/workflow/.resources/Producao.ws.cache.bkp create mode 100644 Lançamento de documentos/lançamentos/workflow/scripts/FlowEssentials_LancamentodeDocumento.servicetask15.js diff --git a/.metadata/.log b/.metadata/.log index 4e567e6..b952b3d 100644 --- a/.metadata/.log +++ b/.metadata/.log @@ -3600,3 +3600,7933 @@ java.lang.NullPointerException at com.totvs.tds.ecm.designer.eclipse.ui.ExportMarshallerRunnable.invokeExportMarshaller(ExportMarshallerRunnable.java:238) at com.totvs.tds.ecm.designer.eclipse.ui.ExportMarshallerRunnable.run(ExportMarshallerRunnable.java:125) at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:122) +!SESSION 2026-04-15 13:05:36.463 ----------------------------------------------- +eclipse.buildId=4.13.0.I20190916-1045 +java.version=1.8.0_202 +java.vendor=Oracle Corporation +BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=pt_BR +Framework arguments: -product org.eclipse.epp.package.jee.product +Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product + +!ENTRY org.eclipse.core.runtime 4 0 2026-04-15 13:07:43.617 +!MESSAGE Invalid input url:platform:/plugin/com.totvs.tds.ecm/icons/icon.png +!STACK 0 +java.io.IOException: Unable to resolve plug-in "com.totvs.tds.ecm". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.FindSupport.find(FindSupport.java:293) + at org.eclipse.core.runtime.FileLocator.find(FileLocator.java:206) + at org.eclipse.jface.resource.URLImageDescriptor.getFilePath(URLImageDescriptor.java:228) + at org.eclipse.jface.resource.URLImageDescriptor.access$2(URLImageDescriptor.java:220) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageFileNameProvider.getImagePath(URLImageDescriptor.java:57) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImagePathAtZoom(DPIUtil.java:419) + at org.eclipse.swt.graphics.Image.(Image.java:687) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:263) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:182) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.jface 4 0 2026-04-15 13:07:43.627 +!MESSAGE Unable to resolve plug-in "com.totvs.tds.ecm". +!STACK 0 +java.io.IOException: Unable to resolve plug-in "com.totvs.tds.ecm". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.resolve(PlatformURLPluginConnection.java:73) + at org.eclipse.core.internal.boot.PlatformURLHandler.openConnection(PlatformURLHandler.java:69) + at org.eclipse.osgi.internal.url.URLStreamHandlerProxy.openConnection(URLStreamHandlerProxy.java:123) + at java.net.URL.openConnection(Unknown Source) + at org.eclipse.core.internal.runtime.PlatformURLConverter.toFileURL(PlatformURLConverter.java:34) + at org.eclipse.core.runtime.FileLocator.toFileURL(FileLocator.java:261) + at org.eclipse.jface.resource.URLImageDescriptor.getFilePath(URLImageDescriptor.java:232) + at org.eclipse.jface.resource.URLImageDescriptor.access$2(URLImageDescriptor.java:220) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageFileNameProvider.getImagePath(URLImageDescriptor.java:57) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImagePathAtZoom(DPIUtil.java:419) + at org.eclipse.swt.graphics.Image.(Image.java:687) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:263) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:182) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.core.runtime 4 0 2026-04-15 13:07:43.633 +!MESSAGE Invalid input url:platform:/plugin/com.totvs.tds.ecm/icons/icon.png +!STACK 0 +java.io.IOException: Unable to resolve plug-in "com.totvs.tds.ecm". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.FindSupport.find(FindSupport.java:293) + at org.eclipse.core.runtime.FileLocator.find(FileLocator.java:206) + at org.eclipse.jface.resource.URLImageDescriptor.getStream(URLImageDescriptor.java:155) + at org.eclipse.jface.resource.URLImageDescriptor.getImageData(URLImageDescriptor.java:123) + at org.eclipse.jface.resource.URLImageDescriptor.access$3(URLImageDescriptor.java:121) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageDataProvider.getImageData(URLImageDescriptor.java:77) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImageDataAtZoom(DPIUtil.java:404) + at org.eclipse.swt.graphics.Image.(Image.java:732) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:271) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:182) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.jface 2 0 2026-04-15 13:07:43.637 +!MESSAGE The image could not be loaded: URLImageDescriptor(platform:/plugin/com.totvs.tds.ecm/icons/icon.png) +!STACK 0 +org.eclipse.jface.resource.DeviceResourceException: Unable to create resource URLImageDescriptor(platform:/plugin/com.totvs.tds.ecm/icons/icon.png) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:184) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 2 2 2026-04-15 13:07:46.092 +!MESSAGE Perspective with name 'Fluig' and id 'com.totvs.tds.ecm.designer.eclipse.perspective.TotvsBpmnPerspective' has been made into a local copy + +!ENTRY org.eclipse.core.runtime 4 0 2026-04-15 13:07:49.165 +!MESSAGE Invalid input url:platform:/plugin/com.totvs.tds.ecm.designer.eclipse/icons/icon.png +!STACK 0 +java.io.IOException: Unable to resolve plug-in "com.totvs.tds.ecm.designer.eclipse". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.FindSupport.find(FindSupport.java:293) + at org.eclipse.core.runtime.FileLocator.find(FileLocator.java:206) + at org.eclipse.jface.resource.URLImageDescriptor.getFilePath(URLImageDescriptor.java:228) + at org.eclipse.jface.resource.URLImageDescriptor.access$2(URLImageDescriptor.java:220) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageFileNameProvider.getImagePath(URLImageDescriptor.java:57) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImagePathAtZoom(DPIUtil.java:419) + at org.eclipse.swt.graphics.Image.(Image.java:687) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:263) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:182) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:547) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531) + at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.lambda$0(LazyStackRenderer.java:75) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:152) + at org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:1) + at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:4006) + at org.eclipse.ui.internal.WorkbenchWindow.setup(WorkbenchWindow.java:877) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:998) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:139) + at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:95) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.inject(ContextInjectionFactory.java:83) + at org.eclipse.ui.internal.Workbench.createWorkbenchWindow(Workbench.java:1486) + at org.eclipse.ui.internal.Workbench.openWorkbenchWindow(Workbench.java:2516) + at org.eclipse.ui.internal.Workbench.getWorkbenchPage(Workbench.java:1986) + at org.eclipse.ui.internal.Workbench.setReference(Workbench.java:2031) + at org.eclipse.ui.internal.Workbench.lambda$11(Workbench.java:1922) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.basic.impl.PartImpl.setContext(PartImpl.java:469) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:637) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:547) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531) + at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1293) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.jface 4 0 2026-04-15 13:07:49.171 +!MESSAGE Unable to resolve plug-in "com.totvs.tds.ecm.designer.eclipse". +!STACK 0 +java.io.IOException: Unable to resolve plug-in "com.totvs.tds.ecm.designer.eclipse". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.resolve(PlatformURLPluginConnection.java:73) + at org.eclipse.core.internal.boot.PlatformURLHandler.openConnection(PlatformURLHandler.java:69) + at org.eclipse.osgi.internal.url.URLStreamHandlerProxy.openConnection(URLStreamHandlerProxy.java:123) + at java.net.URL.openConnection(Unknown Source) + at org.eclipse.core.internal.runtime.PlatformURLConverter.toFileURL(PlatformURLConverter.java:34) + at org.eclipse.core.runtime.FileLocator.toFileURL(FileLocator.java:261) + at org.eclipse.jface.resource.URLImageDescriptor.getFilePath(URLImageDescriptor.java:232) + at org.eclipse.jface.resource.URLImageDescriptor.access$2(URLImageDescriptor.java:220) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageFileNameProvider.getImagePath(URLImageDescriptor.java:57) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImagePathAtZoom(DPIUtil.java:419) + at org.eclipse.swt.graphics.Image.(Image.java:687) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:263) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:182) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:547) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531) + at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.lambda$0(LazyStackRenderer.java:75) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:152) + at org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:1) + at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:4006) + at org.eclipse.ui.internal.WorkbenchWindow.setup(WorkbenchWindow.java:877) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:998) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:139) + at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:95) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.inject(ContextInjectionFactory.java:83) + at org.eclipse.ui.internal.Workbench.createWorkbenchWindow(Workbench.java:1486) + at org.eclipse.ui.internal.Workbench.openWorkbenchWindow(Workbench.java:2516) + at org.eclipse.ui.internal.Workbench.getWorkbenchPage(Workbench.java:1986) + at org.eclipse.ui.internal.Workbench.setReference(Workbench.java:2031) + at org.eclipse.ui.internal.Workbench.lambda$11(Workbench.java:1922) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.basic.impl.PartImpl.setContext(PartImpl.java:469) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:637) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:547) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531) + at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1293) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.core.runtime 4 0 2026-04-15 13:07:49.177 +!MESSAGE Invalid input url:platform:/plugin/com.totvs.tds.ecm.designer.eclipse/icons/icon.png +!STACK 0 +java.io.IOException: Unable to resolve plug-in "com.totvs.tds.ecm.designer.eclipse". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.FindSupport.find(FindSupport.java:293) + at org.eclipse.core.runtime.FileLocator.find(FileLocator.java:206) + at org.eclipse.jface.resource.URLImageDescriptor.getStream(URLImageDescriptor.java:155) + at org.eclipse.jface.resource.URLImageDescriptor.getImageData(URLImageDescriptor.java:123) + at org.eclipse.jface.resource.URLImageDescriptor.access$3(URLImageDescriptor.java:121) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageDataProvider.getImageData(URLImageDescriptor.java:77) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImageDataAtZoom(DPIUtil.java:404) + at org.eclipse.swt.graphics.Image.(Image.java:732) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:271) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:182) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:547) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531) + at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.lambda$0(LazyStackRenderer.java:75) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:152) + at org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:1) + at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:4006) + at org.eclipse.ui.internal.WorkbenchWindow.setup(WorkbenchWindow.java:877) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:998) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:139) + at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:95) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.inject(ContextInjectionFactory.java:83) + at org.eclipse.ui.internal.Workbench.createWorkbenchWindow(Workbench.java:1486) + at org.eclipse.ui.internal.Workbench.openWorkbenchWindow(Workbench.java:2516) + at org.eclipse.ui.internal.Workbench.getWorkbenchPage(Workbench.java:1986) + at org.eclipse.ui.internal.Workbench.setReference(Workbench.java:2031) + at org.eclipse.ui.internal.Workbench.lambda$11(Workbench.java:1922) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.basic.impl.PartImpl.setContext(PartImpl.java:469) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:637) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:547) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531) + at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1293) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.jface 2 0 2026-04-15 13:07:49.185 +!MESSAGE The image could not be loaded: URLImageDescriptor(platform:/plugin/com.totvs.tds.ecm.designer.eclipse/icons/icon.png) +!STACK 0 +org.eclipse.jface.resource.DeviceResourceException: Unable to create resource URLImageDescriptor(platform:/plugin/com.totvs.tds.ecm.designer.eclipse/icons/icon.png) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:184) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:547) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531) + at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.lambda$0(LazyStackRenderer.java:75) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:152) + at org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:1) + at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:4006) + at org.eclipse.ui.internal.WorkbenchWindow.setup(WorkbenchWindow.java:877) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:998) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:139) + at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:95) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.inject(ContextInjectionFactory.java:83) + at org.eclipse.ui.internal.Workbench.createWorkbenchWindow(Workbench.java:1486) + at org.eclipse.ui.internal.Workbench.openWorkbenchWindow(Workbench.java:2516) + at org.eclipse.ui.internal.Workbench.getWorkbenchPage(Workbench.java:1986) + at org.eclipse.ui.internal.Workbench.setReference(Workbench.java:2031) + at org.eclipse.ui.internal.Workbench.lambda$11(Workbench.java:1922) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.basic.impl.PartImpl.setContext(PartImpl.java:469) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:637) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:547) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531) + at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1293) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 4 2026-04-15 13:07:49.195 +!MESSAGE Unable to find element factory: org.eclipse.graphiti.ui.editor.DiagramEditorInputFactory + +!ENTRY org.eclipse.ui 4 4 2026-04-15 13:07:49.204 +!MESSAGE Unable to create part +!STACK 1 +org.eclipse.ui.PartInitException: Cannot instantiate input element factory org.eclipse.graphiti.ui.editor.DiagramEditorInputFactory for editor id=com.totvs.tds.ecm.designer.bpmneditor name=null + at org.eclipse.ui.internal.EditorReference.getEditorInput(EditorReference.java:302) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor.createPart(CompatibilityEditor.java:62) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:338) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:998) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:963) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:139) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:408) + at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:331) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:202) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:91) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:60) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:42) + at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:132) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1293) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:547) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531) + at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.lambda$0(LazyStackRenderer.java:75) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:152) + at org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:1) + at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:4006) + at org.eclipse.ui.internal.WorkbenchWindow.setup(WorkbenchWindow.java:877) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:998) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:139) + at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:95) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.inject(ContextInjectionFactory.java:83) + at org.eclipse.ui.internal.Workbench.createWorkbenchWindow(Workbench.java:1486) + at org.eclipse.ui.internal.Workbench.openWorkbenchWindow(Workbench.java:2516) + at org.eclipse.ui.internal.Workbench.getWorkbenchPage(Workbench.java:1986) + at org.eclipse.ui.internal.Workbench.setReference(Workbench.java:2031) + at org.eclipse.ui.internal.Workbench.lambda$11(Workbench.java:1922) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.basic.impl.PartImpl.setContext(PartImpl.java:469) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:637) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:547) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531) + at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1293) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) +!SUBENTRY 1 org.eclipse.ui 4 0 2026-04-15 13:07:49.205 +!MESSAGE Cannot instantiate input element factory org.eclipse.graphiti.ui.editor.DiagramEditorInputFactory for editor id=com.totvs.tds.ecm.designer.bpmneditor name=null + +!ENTRY org.eclipse.ui 4 4 2026-04-15 13:07:49.215 +!MESSAGE Unable to find element factory: org.eclipse.graphiti.ui.editor.DiagramEditorInputFactory + +!ENTRY org.eclipse.core.runtime 4 0 2026-04-15 13:07:49.305 +!MESSAGE Invalid input url:platform:/plugin/com.totvs.tds.ecm.designer.dsviewer/icons/icon.png +!STACK 0 +java.io.IOException: Unable to resolve plug-in "com.totvs.tds.ecm.designer.dsviewer". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.FindSupport.find(FindSupport.java:293) + at org.eclipse.core.runtime.FileLocator.find(FileLocator.java:206) + at org.eclipse.jface.resource.URLImageDescriptor.getFilePath(URLImageDescriptor.java:228) + at org.eclipse.jface.resource.URLImageDescriptor.access$2(URLImageDescriptor.java:220) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageFileNameProvider.getImagePath(URLImageDescriptor.java:57) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImagePathAtZoom(DPIUtil.java:419) + at org.eclipse.swt.graphics.Image.(Image.java:687) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:263) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:182) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.lambda$0(LazyStackRenderer.java:75) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:152) + at org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:1) + at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:4006) + at org.eclipse.ui.internal.WorkbenchWindow.setup(WorkbenchWindow.java:877) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:998) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:139) + at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:95) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.inject(ContextInjectionFactory.java:83) + at org.eclipse.ui.internal.Workbench.createWorkbenchWindow(Workbench.java:1486) + at org.eclipse.ui.internal.Workbench.openWorkbenchWindow(Workbench.java:2516) + at org.eclipse.ui.internal.Workbench.getWorkbenchPage(Workbench.java:1986) + at org.eclipse.ui.internal.Workbench.setReference(Workbench.java:2031) + at org.eclipse.ui.internal.Workbench.lambda$11(Workbench.java:1922) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.basic.impl.PartImpl.setContext(PartImpl.java:469) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:637) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:547) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531) + at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1293) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.jface 4 0 2026-04-15 13:07:49.313 +!MESSAGE Unable to resolve plug-in "com.totvs.tds.ecm.designer.dsviewer". +!STACK 0 +java.io.IOException: Unable to resolve plug-in "com.totvs.tds.ecm.designer.dsviewer". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.resolve(PlatformURLPluginConnection.java:73) + at org.eclipse.core.internal.boot.PlatformURLHandler.openConnection(PlatformURLHandler.java:69) + at org.eclipse.osgi.internal.url.URLStreamHandlerProxy.openConnection(URLStreamHandlerProxy.java:123) + at java.net.URL.openConnection(Unknown Source) + at org.eclipse.core.internal.runtime.PlatformURLConverter.toFileURL(PlatformURLConverter.java:34) + at org.eclipse.core.runtime.FileLocator.toFileURL(FileLocator.java:261) + at org.eclipse.jface.resource.URLImageDescriptor.getFilePath(URLImageDescriptor.java:232) + at org.eclipse.jface.resource.URLImageDescriptor.access$2(URLImageDescriptor.java:220) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageFileNameProvider.getImagePath(URLImageDescriptor.java:57) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImagePathAtZoom(DPIUtil.java:419) + at org.eclipse.swt.graphics.Image.(Image.java:687) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:263) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:182) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.lambda$0(LazyStackRenderer.java:75) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:152) + at org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:1) + at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:4006) + at org.eclipse.ui.internal.WorkbenchWindow.setup(WorkbenchWindow.java:877) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:998) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:139) + at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:95) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.inject(ContextInjectionFactory.java:83) + at org.eclipse.ui.internal.Workbench.createWorkbenchWindow(Workbench.java:1486) + at org.eclipse.ui.internal.Workbench.openWorkbenchWindow(Workbench.java:2516) + at org.eclipse.ui.internal.Workbench.getWorkbenchPage(Workbench.java:1986) + at org.eclipse.ui.internal.Workbench.setReference(Workbench.java:2031) + at org.eclipse.ui.internal.Workbench.lambda$11(Workbench.java:1922) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.basic.impl.PartImpl.setContext(PartImpl.java:469) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:637) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:547) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531) + at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1293) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.core.runtime 4 0 2026-04-15 13:07:49.350 +!MESSAGE Invalid input url:platform:/plugin/com.totvs.tds.ecm.designer.dsviewer/icons/icon.png +!STACK 0 +java.io.IOException: Unable to resolve plug-in "com.totvs.tds.ecm.designer.dsviewer". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.FindSupport.find(FindSupport.java:293) + at org.eclipse.core.runtime.FileLocator.find(FileLocator.java:206) + at org.eclipse.jface.resource.URLImageDescriptor.getStream(URLImageDescriptor.java:155) + at org.eclipse.jface.resource.URLImageDescriptor.getImageData(URLImageDescriptor.java:123) + at org.eclipse.jface.resource.URLImageDescriptor.access$3(URLImageDescriptor.java:121) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageDataProvider.getImageData(URLImageDescriptor.java:77) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImageDataAtZoom(DPIUtil.java:404) + at org.eclipse.swt.graphics.Image.(Image.java:732) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:271) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:182) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.lambda$0(LazyStackRenderer.java:75) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:152) + at org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:1) + at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:4006) + at org.eclipse.ui.internal.WorkbenchWindow.setup(WorkbenchWindow.java:877) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:998) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:139) + at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:95) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.inject(ContextInjectionFactory.java:83) + at org.eclipse.ui.internal.Workbench.createWorkbenchWindow(Workbench.java:1486) + at org.eclipse.ui.internal.Workbench.openWorkbenchWindow(Workbench.java:2516) + at org.eclipse.ui.internal.Workbench.getWorkbenchPage(Workbench.java:1986) + at org.eclipse.ui.internal.Workbench.setReference(Workbench.java:2031) + at org.eclipse.ui.internal.Workbench.lambda$11(Workbench.java:1922) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.basic.impl.PartImpl.setContext(PartImpl.java:469) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:637) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:547) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531) + at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1293) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.jface 2 0 2026-04-15 13:07:49.357 +!MESSAGE The image could not be loaded: URLImageDescriptor(platform:/plugin/com.totvs.tds.ecm.designer.dsviewer/icons/icon.png) +!STACK 0 +org.eclipse.jface.resource.DeviceResourceException: Unable to create resource URLImageDescriptor(platform:/plugin/com.totvs.tds.ecm.designer.dsviewer/icons/icon.png) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:184) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.lambda$0(LazyStackRenderer.java:75) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:152) + at org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:1) + at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:4006) + at org.eclipse.ui.internal.WorkbenchWindow.setup(WorkbenchWindow.java:877) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:998) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:139) + at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:95) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.inject(ContextInjectionFactory.java:83) + at org.eclipse.ui.internal.Workbench.createWorkbenchWindow(Workbench.java:1486) + at org.eclipse.ui.internal.Workbench.openWorkbenchWindow(Workbench.java:2516) + at org.eclipse.ui.internal.Workbench.getWorkbenchPage(Workbench.java:1986) + at org.eclipse.ui.internal.Workbench.setReference(Workbench.java:2031) + at org.eclipse.ui.internal.Workbench.lambda$11(Workbench.java:1922) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:146) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4622) + at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:219) + at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38) + at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) + at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132) + at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) + at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) + at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) + at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) + at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) + at org.eclipse.e4.ui.model.application.ui.basic.impl.PartImpl.setContext(PartImpl.java:469) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:637) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:547) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531) + at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1293) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.core.runtime 4 0 2026-04-15 13:07:49.928 +!MESSAGE Invalid input url:platform:/plugin/org.eclipse.graphiti.ui/icons/outline/thumbnail.gif +!STACK 0 +java.io.IOException: Unable to resolve plug-in "org.eclipse.graphiti.ui". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.FindSupport.find(FindSupport.java:293) + at org.eclipse.core.runtime.FileLocator.find(FileLocator.java:206) + at org.eclipse.jface.resource.URLImageDescriptor.getFilePath(URLImageDescriptor.java:228) + at org.eclipse.jface.resource.URLImageDescriptor.access$2(URLImageDescriptor.java:220) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageFileNameProvider.getImagePath(URLImageDescriptor.java:57) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImagePathAtZoom(DPIUtil.java:419) + at org.eclipse.swt.graphics.Image.(Image.java:687) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:263) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:182) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.jface 4 0 2026-04-15 13:07:49.935 +!MESSAGE Unable to resolve plug-in "org.eclipse.graphiti.ui". +!STACK 0 +java.io.IOException: Unable to resolve plug-in "org.eclipse.graphiti.ui". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.resolve(PlatformURLPluginConnection.java:73) + at org.eclipse.core.internal.boot.PlatformURLHandler.openConnection(PlatformURLHandler.java:69) + at org.eclipse.osgi.internal.url.URLStreamHandlerProxy.openConnection(URLStreamHandlerProxy.java:123) + at java.net.URL.openConnection(Unknown Source) + at org.eclipse.core.internal.runtime.PlatformURLConverter.toFileURL(PlatformURLConverter.java:34) + at org.eclipse.core.runtime.FileLocator.toFileURL(FileLocator.java:261) + at org.eclipse.jface.resource.URLImageDescriptor.getFilePath(URLImageDescriptor.java:232) + at org.eclipse.jface.resource.URLImageDescriptor.access$2(URLImageDescriptor.java:220) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageFileNameProvider.getImagePath(URLImageDescriptor.java:57) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImagePathAtZoom(DPIUtil.java:419) + at org.eclipse.swt.graphics.Image.(Image.java:687) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:263) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:182) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.core.runtime 4 0 2026-04-15 13:07:49.941 +!MESSAGE Invalid input url:platform:/plugin/org.eclipse.graphiti.ui/icons/outline/thumbnail.gif +!STACK 0 +java.io.IOException: Unable to resolve plug-in "org.eclipse.graphiti.ui". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.FindSupport.find(FindSupport.java:293) + at org.eclipse.core.runtime.FileLocator.find(FileLocator.java:206) + at org.eclipse.jface.resource.URLImageDescriptor.getStream(URLImageDescriptor.java:155) + at org.eclipse.jface.resource.URLImageDescriptor.getImageData(URLImageDescriptor.java:123) + at org.eclipse.jface.resource.URLImageDescriptor.access$3(URLImageDescriptor.java:121) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageDataProvider.getImageData(URLImageDescriptor.java:77) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImageDataAtZoom(DPIUtil.java:404) + at org.eclipse.swt.graphics.Image.(Image.java:732) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:271) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:182) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.jface 2 0 2026-04-15 13:07:49.947 +!MESSAGE The image could not be loaded: URLImageDescriptor(platform:/plugin/org.eclipse.graphiti.ui/icons/outline/thumbnail.gif) +!STACK 0 +org.eclipse.jface.resource.DeviceResourceException: Unable to create resource URLImageDescriptor(platform:/plugin/org.eclipse.graphiti.ui/icons/outline/thumbnail.gif) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:184) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.core.runtime 4 0 2026-04-15 13:07:49.968 +!MESSAGE Invalid input url:platform:/plugin/com.totvs.tds.ecm.designer.serviceview/icons/icon.png +!STACK 0 +java.io.IOException: Unable to resolve plug-in "com.totvs.tds.ecm.designer.serviceview". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.FindSupport.find(FindSupport.java:293) + at org.eclipse.core.runtime.FileLocator.find(FileLocator.java:206) + at org.eclipse.jface.resource.URLImageDescriptor.getFilePath(URLImageDescriptor.java:228) + at org.eclipse.jface.resource.URLImageDescriptor.access$2(URLImageDescriptor.java:220) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageFileNameProvider.getImagePath(URLImageDescriptor.java:57) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImagePathAtZoom(DPIUtil.java:419) + at org.eclipse.swt.graphics.Image.(Image.java:687) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:263) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:182) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.jface 4 0 2026-04-15 13:07:49.974 +!MESSAGE Unable to resolve plug-in "com.totvs.tds.ecm.designer.serviceview". +!STACK 0 +java.io.IOException: Unable to resolve plug-in "com.totvs.tds.ecm.designer.serviceview". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.resolve(PlatformURLPluginConnection.java:73) + at org.eclipse.core.internal.boot.PlatformURLHandler.openConnection(PlatformURLHandler.java:69) + at org.eclipse.osgi.internal.url.URLStreamHandlerProxy.openConnection(URLStreamHandlerProxy.java:123) + at java.net.URL.openConnection(Unknown Source) + at org.eclipse.core.internal.runtime.PlatformURLConverter.toFileURL(PlatformURLConverter.java:34) + at org.eclipse.core.runtime.FileLocator.toFileURL(FileLocator.java:261) + at org.eclipse.jface.resource.URLImageDescriptor.getFilePath(URLImageDescriptor.java:232) + at org.eclipse.jface.resource.URLImageDescriptor.access$2(URLImageDescriptor.java:220) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageFileNameProvider.getImagePath(URLImageDescriptor.java:57) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImagePathAtZoom(DPIUtil.java:419) + at org.eclipse.swt.graphics.Image.(Image.java:687) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:263) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:182) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.core.runtime 4 0 2026-04-15 13:07:49.979 +!MESSAGE Invalid input url:platform:/plugin/com.totvs.tds.ecm.designer.serviceview/icons/icon.png +!STACK 0 +java.io.IOException: Unable to resolve plug-in "com.totvs.tds.ecm.designer.serviceview". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.FindSupport.find(FindSupport.java:293) + at org.eclipse.core.runtime.FileLocator.find(FileLocator.java:206) + at org.eclipse.jface.resource.URLImageDescriptor.getStream(URLImageDescriptor.java:155) + at org.eclipse.jface.resource.URLImageDescriptor.getImageData(URLImageDescriptor.java:123) + at org.eclipse.jface.resource.URLImageDescriptor.access$3(URLImageDescriptor.java:121) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageDataProvider.getImageData(URLImageDescriptor.java:77) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImageDataAtZoom(DPIUtil.java:404) + at org.eclipse.swt.graphics.Image.(Image.java:732) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:271) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:182) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.jface 2 0 2026-04-15 13:07:49.984 +!MESSAGE The image could not be loaded: URLImageDescriptor(platform:/plugin/com.totvs.tds.ecm.designer.serviceview/icons/icon.png) +!STACK 0 +org.eclipse.jface.resource.DeviceResourceException: Unable to create resource URLImageDescriptor(platform:/plugin/com.totvs.tds.ecm.designer.serviceview/icons/icon.png) + at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:184) + at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) + at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) + at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195) + at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:206) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImageFromURI(SWTPartRenderer.java:221) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.getImage(SWTPartRenderer.java:231) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.createTab(StackRenderer.java:876) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.processContents(LazyStackRenderer.java:145) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.core.runtime 4 0 2026-04-15 13:08:08.527 +!MESSAGE Invalid input url:platform:/plugin/org.eclipse.graphiti.ui/icons/outline/thumbnail.gif +!STACK 0 +java.io.IOException: Unable to resolve plug-in "org.eclipse.graphiti.ui". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.FindSupport.find(FindSupport.java:293) + at org.eclipse.core.runtime.FileLocator.find(FileLocator.java:206) + at org.eclipse.jface.resource.URLImageDescriptor.getFilePath(URLImageDescriptor.java:228) + at org.eclipse.jface.resource.URLImageDescriptor.access$2(URLImageDescriptor.java:220) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageFileNameProvider.getImagePath(URLImageDescriptor.java:57) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImagePathAtZoom(DPIUtil.java:419) + at org.eclipse.swt.graphics.Image.(Image.java:687) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:263) + at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:242) + at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:220) + at org.eclipse.e4.ui.workbench.addons.minmax.TrimStack.getImage(TrimStack.java:798) + at org.eclipse.e4.ui.workbench.addons.minmax.TrimStack.updateTrimStackItems(TrimStack.java:863) + at org.eclipse.e4.ui.workbench.addons.minmax.TrimStack.createWidget(TrimStack.java:618) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:998) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:139) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:408) + at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:345) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:227) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:94) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:60) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:37) + at org.eclipse.e4.ui.workbench.renderers.swt.ToolControlRenderer.createWidget(ToolControlRenderer.java:129) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.TrimBarRenderer.processContents(TrimBarRenderer.java:134) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:547) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:687) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.jface 4 0 2026-04-15 13:08:08.534 +!MESSAGE Unable to resolve plug-in "org.eclipse.graphiti.ui". +!STACK 0 +java.io.IOException: Unable to resolve plug-in "org.eclipse.graphiti.ui". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.resolve(PlatformURLPluginConnection.java:73) + at org.eclipse.core.internal.boot.PlatformURLHandler.openConnection(PlatformURLHandler.java:69) + at org.eclipse.osgi.internal.url.URLStreamHandlerProxy.openConnection(URLStreamHandlerProxy.java:123) + at java.net.URL.openConnection(Unknown Source) + at org.eclipse.core.internal.runtime.PlatformURLConverter.toFileURL(PlatformURLConverter.java:34) + at org.eclipse.core.runtime.FileLocator.toFileURL(FileLocator.java:261) + at org.eclipse.jface.resource.URLImageDescriptor.getFilePath(URLImageDescriptor.java:232) + at org.eclipse.jface.resource.URLImageDescriptor.access$2(URLImageDescriptor.java:220) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageFileNameProvider.getImagePath(URLImageDescriptor.java:57) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImagePathAtZoom(DPIUtil.java:419) + at org.eclipse.swt.graphics.Image.(Image.java:687) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:263) + at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:242) + at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:220) + at org.eclipse.e4.ui.workbench.addons.minmax.TrimStack.getImage(TrimStack.java:798) + at org.eclipse.e4.ui.workbench.addons.minmax.TrimStack.updateTrimStackItems(TrimStack.java:863) + at org.eclipse.e4.ui.workbench.addons.minmax.TrimStack.createWidget(TrimStack.java:618) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:998) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:139) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:408) + at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:345) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:227) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:94) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:60) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:37) + at org.eclipse.e4.ui.workbench.renderers.swt.ToolControlRenderer.createWidget(ToolControlRenderer.java:129) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.TrimBarRenderer.processContents(TrimBarRenderer.java:134) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:547) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:687) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.core.runtime 4 0 2026-04-15 13:08:08.539 +!MESSAGE Invalid input url:platform:/plugin/org.eclipse.graphiti.ui/icons/outline/thumbnail.gif +!STACK 0 +java.io.IOException: Unable to resolve plug-in "org.eclipse.graphiti.ui". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.FindSupport.find(FindSupport.java:293) + at org.eclipse.core.runtime.FileLocator.find(FileLocator.java:206) + at org.eclipse.jface.resource.URLImageDescriptor.getStream(URLImageDescriptor.java:155) + at org.eclipse.jface.resource.URLImageDescriptor.getImageData(URLImageDescriptor.java:123) + at org.eclipse.jface.resource.URLImageDescriptor.access$3(URLImageDescriptor.java:121) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageDataProvider.getImageData(URLImageDescriptor.java:77) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImageDataAtZoom(DPIUtil.java:404) + at org.eclipse.swt.graphics.Image.(Image.java:732) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:271) + at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:242) + at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:220) + at org.eclipse.e4.ui.workbench.addons.minmax.TrimStack.getImage(TrimStack.java:798) + at org.eclipse.e4.ui.workbench.addons.minmax.TrimStack.updateTrimStackItems(TrimStack.java:863) + at org.eclipse.e4.ui.workbench.addons.minmax.TrimStack.createWidget(TrimStack.java:618) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:998) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:139) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:408) + at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:345) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:227) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:94) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:60) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:37) + at org.eclipse.e4.ui.workbench.renderers.swt.ToolControlRenderer.createWidget(ToolControlRenderer.java:129) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:73) + at org.eclipse.e4.ui.workbench.renderers.swt.TrimBarRenderer.processContents(TrimBarRenderer.java:134) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:547) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:687) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.egit.ui 2 0 2026-04-15 13:08:09.482 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\andrey.cunha'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. + +!ENTRY org.eclipse.e4.ui.workbench 2 0 2026-04-15 13:08:09.767 +!MESSAGE Removing part descriptor with the 'com.totvs.tds.ecm.server.FluigServersManagerViewExtension' id and the 'Fluig Servers' description. Points to the invalid 'bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView' class. + +!ENTRY org.eclipse.e4.ui.workbench 2 0 2026-04-15 13:08:09.782 +!MESSAGE Removing part descriptor with the 'com.totvs.tds.ecm.dsviewer.views.DatasetView' id and the 'Visualização de Dataset' description. Points to the invalid 'bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView' class. + +!ENTRY org.eclipse.e4.ui.workbench 2 0 2026-04-15 13:08:09.789 +!MESSAGE Removing part descriptor with the 'com.totvs.tds.ecm.designer.eclipse.ui.MechanismView' id and the 'Visualização de Mecanismos Customizados' description. Points to the invalid 'bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView' class. + +!ENTRY org.eclipse.e4.ui.workbench 2 0 2026-04-15 13:08:09.793 +!MESSAGE Removing part descriptor with the 'com.totvs.tds.ecm.designer.eclipse.debug.ScriptTestsView' id and the 'Script Tests' description. Points to the invalid 'bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView' class. + +!ENTRY org.eclipse.e4.ui.workbench 2 0 2026-04-15 13:08:09.798 +!MESSAGE Removing part descriptor with the 'com.totvs.tds.ecm.serviceview.views.ServiceView' id and the 'Visualização de Serviços' description. Points to the invalid 'bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView' class. + +!ENTRY org.eclipse.e4.ui.workbench 2 0 2026-04-15 13:08:09.803 +!MESSAGE Removing part descriptor with the 'org.eclipse.graphiti.ui.internal.editor.thumbnailview' id and the 'Miniature View' description. Points to the invalid 'bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView' class. + +!ENTRY org.eclipse.ui 4 4 2026-04-15 13:08:30.218 +!MESSAGE Plug-in 'org.eclipse.egit.ui' contributed an invalid Menu Extension (Path: 'org.eclipse.search.menu' is invalid): org.eclipse.egit.ui.actions.OpenCommitSearchPage + +!ENTRY org.eclipse.core.runtime 4 0 2026-04-15 13:08:36.426 +!MESSAGE Invalid input url:platform:/plugin/com.totvs.tds.ecm.designer.eclipse/icons/icon.png +!STACK 0 +java.io.IOException: Unable to resolve plug-in "com.totvs.tds.ecm.designer.eclipse". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.FindSupport.find(FindSupport.java:293) + at org.eclipse.core.runtime.FileLocator.find(FileLocator.java:206) + at org.eclipse.jface.resource.URLImageDescriptor.getFilePath(URLImageDescriptor.java:228) + at org.eclipse.jface.resource.URLImageDescriptor.access$2(URLImageDescriptor.java:220) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageFileNameProvider.getImagePath(URLImageDescriptor.java:57) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImagePathAtZoom(DPIUtil.java:419) + at org.eclipse.swt.graphics.Image.(Image.java:687) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:263) + at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:242) + at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:220) + at org.eclipse.ui.model.PerspectiveLabelProvider.getImage(PerspectiveLabelProvider.java:82) + at org.eclipse.ui.model.PerspectiveLabelProvider.getColumnImage(PerspectiveLabelProvider.java:119) + at org.eclipse.jface.viewers.TableColumnViewerLabelProvider.update(TableColumnViewerLabelProvider.java:70) + at org.eclipse.jface.viewers.ViewerColumn.refresh(ViewerColumn.java:144) + at org.eclipse.jface.viewers.AbstractTableViewer.doUpdateItem(AbstractTableViewer.java:396) + at org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:422) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:2097) + at org.eclipse.jface.viewers.AbstractTableViewer.createItem(AbstractTableViewer.java:288) + at org.eclipse.jface.viewers.AbstractTableViewer.internalRefreshAll(AbstractTableViewer.java:726) + at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:618) + at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:610) + at org.eclipse.jface.viewers.AbstractTableViewer.lambda$0(AbstractTableViewer.java:572) + at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1393) + at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1354) + at org.eclipse.jface.viewers.AbstractTableViewer.inputChanged(AbstractTableViewer.java:572) + at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:282) + at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1627) + at org.eclipse.ui.internal.dialogs.SelectPerspectiveDialog.createViewer(SelectPerspectiveDialog.java:192) + at org.eclipse.ui.internal.dialogs.SelectPerspectiveDialog.createDialogArea(SelectPerspectiveDialog.java:137) + at org.eclipse.jface.dialogs.Dialog.createContents(Dialog.java:767) + at org.eclipse.jface.window.Window.create(Window.java:431) + at org.eclipse.jface.dialogs.Dialog.create(Dialog.java:1094) + at org.eclipse.jface.window.Window.open(Window.java:788) + at org.eclipse.ui.handlers.ShowPerspectiveHandler.openOther(ShowPerspectiveHandler.java:95) + at org.eclipse.ui.handlers.ShowPerspectiveHandler.execute(ShowPerspectiveHandler.java:57) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:283) + at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:95) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) + at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:318) + at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:252) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:173) + at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:156) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:498) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:487) + at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:213) + at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:195) + at org.eclipse.e4.ui.workbench.addons.perspectiveswitcher.PerspectiveSwitcher.selectPerspective(PerspectiveSwitcher.java:570) + at org.eclipse.e4.ui.workbench.addons.perspectiveswitcher.PerspectiveSwitcher.access$1(PerspectiveSwitcher.java:566) + at org.eclipse.e4.ui.workbench.addons.perspectiveswitcher.PerspectiveSwitcher$2.widgetSelected(PerspectiveSwitcher.java:316) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:252) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3986) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3585) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.jface 4 0 2026-04-15 13:08:36.433 +!MESSAGE Unable to resolve plug-in "com.totvs.tds.ecm.designer.eclipse". +!STACK 0 +java.io.IOException: Unable to resolve plug-in "com.totvs.tds.ecm.designer.eclipse". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.resolve(PlatformURLPluginConnection.java:73) + at org.eclipse.core.internal.boot.PlatformURLHandler.openConnection(PlatformURLHandler.java:69) + at org.eclipse.osgi.internal.url.URLStreamHandlerProxy.openConnection(URLStreamHandlerProxy.java:123) + at java.net.URL.openConnection(Unknown Source) + at org.eclipse.core.internal.runtime.PlatformURLConverter.toFileURL(PlatformURLConverter.java:34) + at org.eclipse.core.runtime.FileLocator.toFileURL(FileLocator.java:261) + at org.eclipse.jface.resource.URLImageDescriptor.getFilePath(URLImageDescriptor.java:232) + at org.eclipse.jface.resource.URLImageDescriptor.access$2(URLImageDescriptor.java:220) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageFileNameProvider.getImagePath(URLImageDescriptor.java:57) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImagePathAtZoom(DPIUtil.java:419) + at org.eclipse.swt.graphics.Image.(Image.java:687) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:263) + at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:242) + at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:220) + at org.eclipse.ui.model.PerspectiveLabelProvider.getImage(PerspectiveLabelProvider.java:82) + at org.eclipse.ui.model.PerspectiveLabelProvider.getColumnImage(PerspectiveLabelProvider.java:119) + at org.eclipse.jface.viewers.TableColumnViewerLabelProvider.update(TableColumnViewerLabelProvider.java:70) + at org.eclipse.jface.viewers.ViewerColumn.refresh(ViewerColumn.java:144) + at org.eclipse.jface.viewers.AbstractTableViewer.doUpdateItem(AbstractTableViewer.java:396) + at org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:422) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:2097) + at org.eclipse.jface.viewers.AbstractTableViewer.createItem(AbstractTableViewer.java:288) + at org.eclipse.jface.viewers.AbstractTableViewer.internalRefreshAll(AbstractTableViewer.java:726) + at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:618) + at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:610) + at org.eclipse.jface.viewers.AbstractTableViewer.lambda$0(AbstractTableViewer.java:572) + at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1393) + at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1354) + at org.eclipse.jface.viewers.AbstractTableViewer.inputChanged(AbstractTableViewer.java:572) + at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:282) + at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1627) + at org.eclipse.ui.internal.dialogs.SelectPerspectiveDialog.createViewer(SelectPerspectiveDialog.java:192) + at org.eclipse.ui.internal.dialogs.SelectPerspectiveDialog.createDialogArea(SelectPerspectiveDialog.java:137) + at org.eclipse.jface.dialogs.Dialog.createContents(Dialog.java:767) + at org.eclipse.jface.window.Window.create(Window.java:431) + at org.eclipse.jface.dialogs.Dialog.create(Dialog.java:1094) + at org.eclipse.jface.window.Window.open(Window.java:788) + at org.eclipse.ui.handlers.ShowPerspectiveHandler.openOther(ShowPerspectiveHandler.java:95) + at org.eclipse.ui.handlers.ShowPerspectiveHandler.execute(ShowPerspectiveHandler.java:57) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:283) + at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:95) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) + at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:318) + at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:252) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:173) + at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:156) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:498) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:487) + at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:213) + at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:195) + at org.eclipse.e4.ui.workbench.addons.perspectiveswitcher.PerspectiveSwitcher.selectPerspective(PerspectiveSwitcher.java:570) + at org.eclipse.e4.ui.workbench.addons.perspectiveswitcher.PerspectiveSwitcher.access$1(PerspectiveSwitcher.java:566) + at org.eclipse.e4.ui.workbench.addons.perspectiveswitcher.PerspectiveSwitcher$2.widgetSelected(PerspectiveSwitcher.java:316) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:252) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3986) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3585) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.core.runtime 4 0 2026-04-15 13:08:36.441 +!MESSAGE Invalid input url:platform:/plugin/com.totvs.tds.ecm.designer.eclipse/icons/icon.png +!STACK 0 +java.io.IOException: Unable to resolve plug-in "com.totvs.tds.ecm.designer.eclipse". + at org.eclipse.core.internal.runtime.PlatformURLPluginConnection.parse(PlatformURLPluginConnection.java:64) + at org.eclipse.core.internal.runtime.FindSupport.find(FindSupport.java:293) + at org.eclipse.core.runtime.FileLocator.find(FileLocator.java:206) + at org.eclipse.jface.resource.URLImageDescriptor.getStream(URLImageDescriptor.java:155) + at org.eclipse.jface.resource.URLImageDescriptor.getImageData(URLImageDescriptor.java:123) + at org.eclipse.jface.resource.URLImageDescriptor.access$3(URLImageDescriptor.java:121) + at org.eclipse.jface.resource.URLImageDescriptor$URLImageDataProvider.getImageData(URLImageDescriptor.java:77) + at org.eclipse.swt.internal.DPIUtil.validateAndGetImageDataAtZoom(DPIUtil.java:404) + at org.eclipse.swt.graphics.Image.(Image.java:732) + at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:271) + at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:242) + at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:220) + at org.eclipse.ui.model.PerspectiveLabelProvider.getImage(PerspectiveLabelProvider.java:82) + at org.eclipse.ui.model.PerspectiveLabelProvider.getColumnImage(PerspectiveLabelProvider.java:119) + at org.eclipse.jface.viewers.TableColumnViewerLabelProvider.update(TableColumnViewerLabelProvider.java:70) + at org.eclipse.jface.viewers.ViewerColumn.refresh(ViewerColumn.java:144) + at org.eclipse.jface.viewers.AbstractTableViewer.doUpdateItem(AbstractTableViewer.java:396) + at org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:422) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:2097) + at org.eclipse.jface.viewers.AbstractTableViewer.createItem(AbstractTableViewer.java:288) + at org.eclipse.jface.viewers.AbstractTableViewer.internalRefreshAll(AbstractTableViewer.java:726) + at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:618) + at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:610) + at org.eclipse.jface.viewers.AbstractTableViewer.lambda$0(AbstractTableViewer.java:572) + at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1393) + at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1354) + at org.eclipse.jface.viewers.AbstractTableViewer.inputChanged(AbstractTableViewer.java:572) + at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:282) + at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1627) + at org.eclipse.ui.internal.dialogs.SelectPerspectiveDialog.createViewer(SelectPerspectiveDialog.java:192) + at org.eclipse.ui.internal.dialogs.SelectPerspectiveDialog.createDialogArea(SelectPerspectiveDialog.java:137) + at org.eclipse.jface.dialogs.Dialog.createContents(Dialog.java:767) + at org.eclipse.jface.window.Window.create(Window.java:431) + at org.eclipse.jface.dialogs.Dialog.create(Dialog.java:1094) + at org.eclipse.jface.window.Window.open(Window.java:788) + at org.eclipse.ui.handlers.ShowPerspectiveHandler.openOther(ShowPerspectiveHandler.java:95) + at org.eclipse.ui.handlers.ShowPerspectiveHandler.execute(ShowPerspectiveHandler.java:57) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:283) + at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:95) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) + at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:318) + at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:252) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:173) + at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:156) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:498) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:487) + at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:213) + at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:195) + at org.eclipse.e4.ui.workbench.addons.perspectiveswitcher.PerspectiveSwitcher.selectPerspective(PerspectiveSwitcher.java:570) + at org.eclipse.e4.ui.workbench.addons.perspectiveswitcher.PerspectiveSwitcher.access$1(PerspectiveSwitcher.java:566) + at org.eclipse.e4.ui.workbench.addons.perspectiveswitcher.PerspectiveSwitcher$2.widgetSelected(PerspectiveSwitcher.java:316) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:252) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3986) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3585) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) +!SESSION 2026-04-15 13:15:51.721 ----------------------------------------------- +eclipse.buildId=4.13.0.I20190916-1045 +java.version=1.8.0_202 +java.vendor=Oracle Corporation +BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=pt_BR +Framework arguments: -product org.eclipse.epp.package.jee.product +Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product + +!ENTRY org.eclipse.egit.ui 2 0 2026-04-15 13:16:27.258 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\andrey.cunha'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:28:11.225 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:823) + at org.eclipse.jface.window.Window.open(Window.java:799) + at org.eclipse.jface.dialogs.MessageDialog.open(MessageDialog.java:394) + at org.eclipse.jface.dialogs.MessageDialog.openQuestion(MessageDialog.java:504) + at com.fluig.ws.WSFileCacheProvider$1.run(WSFileCacheProvider.java:120) + at com.fluig.ws.WSFileCacheProvider.catchException(WSFileCacheProvider.java:136) + at com.fluig.ws.WSFileCacheProvider.getListaCamposFormulario(WSFileCacheProvider.java:240) + at com.totvs.tds.ecm.designer.util.FormFieldUtil.getList(FormFieldUtil.java:86) + at com.totvs.tds.ecm.designer.util.FormFieldUtil.getList(FormFieldUtil.java:32) + at com.totvs.tds.ecm.designer.property.bpmn.PropertyBpmnNormalTaskSection.refresh(PropertyBpmnNormalTaskSection.java:293) + at org.eclipse.ui.views.properties.tabbed.TabContents$6.run(TabContents.java:220) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.ui.views.properties.tabbed.TabContents.refresh(TabContents.java:223) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage$SelectionChangedListener.selectionChanged(TabbedPropertySheetPage.java:231) + at org.eclipse.jface.viewers.Viewer$1.run(Viewer.java:151) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.jface.viewers.Viewer.fireSelectionChanged(Viewer.java:148) + at org.eclipse.jface.viewers.StructuredViewer.updateSelection(StructuredViewer.java:2118) + at org.eclipse.jface.viewers.StructuredViewer.handleSelect(StructuredViewer.java:1170) + at org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(StructuredViewer.java:1199) + at org.eclipse.jface.util.OpenStrategy.fireSelectionEvent(OpenStrategy.java:242) + at org.eclipse.jface.util.OpenStrategy.access$4(OpenStrategy.java:237) + at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:402) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1081) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:780) + at org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyList.select(TabbedPropertyList.java:844) + at org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyViewer.setSelectionToWidget(TabbedPropertyViewer.java:134) + at org.eclipse.jface.viewers.StructuredViewer.setSelectionToWidget(StructuredViewer.java:1697) + at org.eclipse.jface.viewers.StructuredViewer.setSelection(StructuredViewer.java:1653) + at org.eclipse.jface.viewers.Viewer.setSelection(Viewer.java:376) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.setInput(TabbedPropertySheetPage.java:763) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.selectionChanged(TabbedPropertySheetPage.java:571) + at org.eclipse.ui.views.properties.PropertySheet.showSelectionAndDescription(PropertySheet.java:569) + at org.eclipse.ui.views.properties.PropertySheet.selectionChanged(PropertySheet.java:549) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.notifyListeners(SelectionService.java:240) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.handlePostSelectionChanged(SelectionService.java:119) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.lambda$2(SelectionService.java:74) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$3.run(SelectionAggregator.java:163) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.notifyPostListeners(SelectionAggregator.java:160) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.access$7(SelectionAggregator.java:158) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.lambda$0(SelectionAggregator.java:250) + at org.eclipse.e4.core.contexts.RunAndTrack.runExternalCode(RunAndTrack.java:59) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.changed(SelectionAggregator.java:250) + at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:108) + at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:364) + at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:379) + at org.eclipse.e4.ui.internal.workbench.SelectionServiceImpl.setPostSelection(SelectionServiceImpl.java:39) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.lambda$2(CompatibilityPart.java:128) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.fireSelectionChanged(AbstractEditPartViewer.java:247) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer$1.run(AbstractEditPartViewer.java:131) + at org.eclipse.gef.SelectionManager.fireSelectionChanged(SelectionManager.java:156) + at org.eclipse.gef.SelectionManager.appendSelection(SelectionManager.java:91) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.appendSelection(AbstractEditPartViewer.java:190) + at org.eclipse.graphiti.ui.internal.editor.GraphitiScrollingGraphicalViewer.appendSelection(GraphitiScrollingGraphicalViewer.java:153) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.select(AbstractEditPartViewer.java:599) + at org.eclipse.graphiti.ui.internal.editor.GraphitiScrollingGraphicalViewer.select(GraphitiScrollingGraphicalViewer.java:68) + at org.eclipse.gef.tools.SelectEditPartTracker.performSelection(SelectEditPartTracker.java:221) + at org.eclipse.gef.tools.SelectEditPartTracker.performConditionalSelection(SelectEditPartTracker.java:167) + at org.eclipse.gef.tools.SelectEditPartTracker.handleButtonDown(SelectEditPartTracker.java:92) + at org.eclipse.gef.tools.AbstractTool.mouseDown(AbstractTool.java:1091) + at org.eclipse.gef.tools.SelectionTool.mouseDown(SelectionTool.java:514) + at org.eclipse.gef.EditDomain.mouseDown(EditDomain.java:245) + at org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchMousePressed(DomainEventDispatcher.java:348) + at org.eclipse.draw2d.LightweightSystem$EventHandler.mouseDown(LightweightSystem.java:523) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:196) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3986) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3585) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:28:11.227 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:823) + at org.eclipse.jface.window.Window.open(Window.java:799) + at org.eclipse.jface.dialogs.MessageDialog.open(MessageDialog.java:394) + at org.eclipse.jface.dialogs.MessageDialog.openQuestion(MessageDialog.java:504) + at com.fluig.ws.WSFileCacheProvider$1.run(WSFileCacheProvider.java:120) + at com.fluig.ws.WSFileCacheProvider.catchException(WSFileCacheProvider.java:136) + at com.fluig.ws.WSFileCacheProvider.getListaCamposFormulario(WSFileCacheProvider.java:240) + at com.totvs.tds.ecm.designer.util.FormFieldUtil.getList(FormFieldUtil.java:86) + at com.totvs.tds.ecm.designer.util.FormFieldUtil.getList(FormFieldUtil.java:32) + at com.totvs.tds.ecm.designer.property.bpmn.PropertyBpmnNormalTaskSection.refresh(PropertyBpmnNormalTaskSection.java:293) + at org.eclipse.ui.views.properties.tabbed.TabContents$6.run(TabContents.java:220) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.ui.views.properties.tabbed.TabContents.refresh(TabContents.java:223) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage$SelectionChangedListener.selectionChanged(TabbedPropertySheetPage.java:231) + at org.eclipse.jface.viewers.Viewer$1.run(Viewer.java:151) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.jface.viewers.Viewer.fireSelectionChanged(Viewer.java:148) + at org.eclipse.jface.viewers.StructuredViewer.updateSelection(StructuredViewer.java:2118) + at org.eclipse.jface.viewers.StructuredViewer.handleSelect(StructuredViewer.java:1170) + at org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(StructuredViewer.java:1199) + at org.eclipse.jface.util.OpenStrategy.fireSelectionEvent(OpenStrategy.java:242) + at org.eclipse.jface.util.OpenStrategy.access$4(OpenStrategy.java:237) + at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:402) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1081) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:780) + at org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyList.select(TabbedPropertyList.java:844) + at org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyViewer.setSelectionToWidget(TabbedPropertyViewer.java:134) + at org.eclipse.jface.viewers.StructuredViewer.setSelectionToWidget(StructuredViewer.java:1697) + at org.eclipse.jface.viewers.StructuredViewer.setSelection(StructuredViewer.java:1653) + at org.eclipse.jface.viewers.Viewer.setSelection(Viewer.java:376) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.setInput(TabbedPropertySheetPage.java:763) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.selectionChanged(TabbedPropertySheetPage.java:571) + at org.eclipse.ui.views.properties.PropertySheet.showSelectionAndDescription(PropertySheet.java:569) + at org.eclipse.ui.views.properties.PropertySheet.selectionChanged(PropertySheet.java:549) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.notifyListeners(SelectionService.java:240) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.handlePostSelectionChanged(SelectionService.java:119) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.lambda$2(SelectionService.java:74) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$3.run(SelectionAggregator.java:163) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.notifyPostListeners(SelectionAggregator.java:160) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.access$7(SelectionAggregator.java:158) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.lambda$0(SelectionAggregator.java:250) + at org.eclipse.e4.core.contexts.RunAndTrack.runExternalCode(RunAndTrack.java:59) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.changed(SelectionAggregator.java:250) + at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:108) + at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:364) + at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:379) + at org.eclipse.e4.ui.internal.workbench.SelectionServiceImpl.setPostSelection(SelectionServiceImpl.java:39) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.lambda$2(CompatibilityPart.java:128) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.fireSelectionChanged(AbstractEditPartViewer.java:247) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer$1.run(AbstractEditPartViewer.java:131) + at org.eclipse.gef.SelectionManager.fireSelectionChanged(SelectionManager.java:156) + at org.eclipse.gef.SelectionManager.appendSelection(SelectionManager.java:91) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.appendSelection(AbstractEditPartViewer.java:190) + at org.eclipse.graphiti.ui.internal.editor.GraphitiScrollingGraphicalViewer.appendSelection(GraphitiScrollingGraphicalViewer.java:153) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.select(AbstractEditPartViewer.java:599) + at org.eclipse.graphiti.ui.internal.editor.GraphitiScrollingGraphicalViewer.select(GraphitiScrollingGraphicalViewer.java:68) + at org.eclipse.gef.tools.SelectEditPartTracker.performSelection(SelectEditPartTracker.java:221) + at org.eclipse.gef.tools.SelectEditPartTracker.performConditionalSelection(SelectEditPartTracker.java:167) + at org.eclipse.gef.tools.SelectEditPartTracker.handleButtonDown(SelectEditPartTracker.java:92) + at org.eclipse.gef.tools.AbstractTool.mouseDown(AbstractTool.java:1091) + at org.eclipse.gef.tools.SelectionTool.mouseDown(SelectionTool.java:514) + at org.eclipse.gef.EditDomain.mouseDown(EditDomain.java:245) + at org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchMousePressed(DomainEventDispatcher.java:348) + at org.eclipse.draw2d.LightweightSystem$EventHandler.mouseDown(LightweightSystem.java:523) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:196) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3986) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3585) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:28:11.229 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:823) + at org.eclipse.jface.window.Window.open(Window.java:799) + at org.eclipse.jface.dialogs.MessageDialog.open(MessageDialog.java:394) + at org.eclipse.jface.dialogs.MessageDialog.openQuestion(MessageDialog.java:504) + at com.fluig.ws.WSFileCacheProvider$1.run(WSFileCacheProvider.java:120) + at com.fluig.ws.WSFileCacheProvider.catchException(WSFileCacheProvider.java:136) + at com.fluig.ws.WSFileCacheProvider.getListaCamposFormulario(WSFileCacheProvider.java:240) + at com.totvs.tds.ecm.designer.util.FormFieldUtil.getList(FormFieldUtil.java:86) + at com.totvs.tds.ecm.designer.util.FormFieldUtil.getList(FormFieldUtil.java:32) + at com.totvs.tds.ecm.designer.property.bpmn.PropertyBpmnNormalTaskSection.refresh(PropertyBpmnNormalTaskSection.java:293) + at org.eclipse.ui.views.properties.tabbed.TabContents$6.run(TabContents.java:220) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.ui.views.properties.tabbed.TabContents.refresh(TabContents.java:223) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage$SelectionChangedListener.selectionChanged(TabbedPropertySheetPage.java:231) + at org.eclipse.jface.viewers.Viewer$1.run(Viewer.java:151) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.jface.viewers.Viewer.fireSelectionChanged(Viewer.java:148) + at org.eclipse.jface.viewers.StructuredViewer.updateSelection(StructuredViewer.java:2118) + at org.eclipse.jface.viewers.StructuredViewer.handleSelect(StructuredViewer.java:1170) + at org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(StructuredViewer.java:1199) + at org.eclipse.jface.util.OpenStrategy.fireSelectionEvent(OpenStrategy.java:242) + at org.eclipse.jface.util.OpenStrategy.access$4(OpenStrategy.java:237) + at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:402) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1081) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:780) + at org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyList.select(TabbedPropertyList.java:844) + at org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyViewer.setSelectionToWidget(TabbedPropertyViewer.java:134) + at org.eclipse.jface.viewers.StructuredViewer.setSelectionToWidget(StructuredViewer.java:1697) + at org.eclipse.jface.viewers.StructuredViewer.setSelection(StructuredViewer.java:1653) + at org.eclipse.jface.viewers.Viewer.setSelection(Viewer.java:376) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.setInput(TabbedPropertySheetPage.java:763) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.selectionChanged(TabbedPropertySheetPage.java:571) + at org.eclipse.ui.views.properties.PropertySheet.showSelectionAndDescription(PropertySheet.java:569) + at org.eclipse.ui.views.properties.PropertySheet.selectionChanged(PropertySheet.java:549) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.notifyListeners(SelectionService.java:240) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.handlePostSelectionChanged(SelectionService.java:119) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.lambda$2(SelectionService.java:74) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$3.run(SelectionAggregator.java:163) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.notifyPostListeners(SelectionAggregator.java:160) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.access$7(SelectionAggregator.java:158) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.lambda$0(SelectionAggregator.java:250) + at org.eclipse.e4.core.contexts.RunAndTrack.runExternalCode(RunAndTrack.java:59) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.changed(SelectionAggregator.java:250) + at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:108) + at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:364) + at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:379) + at org.eclipse.e4.ui.internal.workbench.SelectionServiceImpl.setPostSelection(SelectionServiceImpl.java:39) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.lambda$2(CompatibilityPart.java:128) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.fireSelectionChanged(AbstractEditPartViewer.java:247) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer$1.run(AbstractEditPartViewer.java:131) + at org.eclipse.gef.SelectionManager.fireSelectionChanged(SelectionManager.java:156) + at org.eclipse.gef.SelectionManager.appendSelection(SelectionManager.java:91) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.appendSelection(AbstractEditPartViewer.java:190) + at org.eclipse.graphiti.ui.internal.editor.GraphitiScrollingGraphicalViewer.appendSelection(GraphitiScrollingGraphicalViewer.java:153) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.select(AbstractEditPartViewer.java:599) + at org.eclipse.graphiti.ui.internal.editor.GraphitiScrollingGraphicalViewer.select(GraphitiScrollingGraphicalViewer.java:68) + at org.eclipse.gef.tools.SelectEditPartTracker.performSelection(SelectEditPartTracker.java:221) + at org.eclipse.gef.tools.SelectEditPartTracker.performConditionalSelection(SelectEditPartTracker.java:167) + at org.eclipse.gef.tools.SelectEditPartTracker.handleButtonDown(SelectEditPartTracker.java:92) + at org.eclipse.gef.tools.AbstractTool.mouseDown(AbstractTool.java:1091) + at org.eclipse.gef.tools.SelectionTool.mouseDown(SelectionTool.java:514) + at org.eclipse.gef.EditDomain.mouseDown(EditDomain.java:245) + at org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchMousePressed(DomainEventDispatcher.java:348) + at org.eclipse.draw2d.LightweightSystem$EventHandler.mouseDown(LightweightSystem.java:523) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:196) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3986) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3585) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:28:11.230 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:823) + at org.eclipse.jface.window.Window.open(Window.java:799) + at org.eclipse.jface.dialogs.MessageDialog.open(MessageDialog.java:394) + at org.eclipse.jface.dialogs.MessageDialog.openQuestion(MessageDialog.java:504) + at com.fluig.ws.WSFileCacheProvider$1.run(WSFileCacheProvider.java:120) + at com.fluig.ws.WSFileCacheProvider.catchException(WSFileCacheProvider.java:136) + at com.fluig.ws.WSFileCacheProvider.getListaCamposFormulario(WSFileCacheProvider.java:240) + at com.totvs.tds.ecm.designer.util.FormFieldUtil.getList(FormFieldUtil.java:86) + at com.totvs.tds.ecm.designer.util.FormFieldUtil.getList(FormFieldUtil.java:32) + at com.totvs.tds.ecm.designer.property.bpmn.PropertyBpmnNormalTaskSection.refresh(PropertyBpmnNormalTaskSection.java:293) + at org.eclipse.ui.views.properties.tabbed.TabContents$6.run(TabContents.java:220) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.ui.views.properties.tabbed.TabContents.refresh(TabContents.java:223) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage$SelectionChangedListener.selectionChanged(TabbedPropertySheetPage.java:231) + at org.eclipse.jface.viewers.Viewer$1.run(Viewer.java:151) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.jface.viewers.Viewer.fireSelectionChanged(Viewer.java:148) + at org.eclipse.jface.viewers.StructuredViewer.updateSelection(StructuredViewer.java:2118) + at org.eclipse.jface.viewers.StructuredViewer.handleSelect(StructuredViewer.java:1170) + at org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(StructuredViewer.java:1199) + at org.eclipse.jface.util.OpenStrategy.fireSelectionEvent(OpenStrategy.java:242) + at org.eclipse.jface.util.OpenStrategy.access$4(OpenStrategy.java:237) + at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:402) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1081) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:780) + at org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyList.select(TabbedPropertyList.java:844) + at org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyViewer.setSelectionToWidget(TabbedPropertyViewer.java:134) + at org.eclipse.jface.viewers.StructuredViewer.setSelectionToWidget(StructuredViewer.java:1697) + at org.eclipse.jface.viewers.StructuredViewer.setSelection(StructuredViewer.java:1653) + at org.eclipse.jface.viewers.Viewer.setSelection(Viewer.java:376) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.setInput(TabbedPropertySheetPage.java:763) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.selectionChanged(TabbedPropertySheetPage.java:571) + at org.eclipse.ui.views.properties.PropertySheet.showSelectionAndDescription(PropertySheet.java:569) + at org.eclipse.ui.views.properties.PropertySheet.selectionChanged(PropertySheet.java:549) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.notifyListeners(SelectionService.java:240) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.handlePostSelectionChanged(SelectionService.java:119) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.lambda$2(SelectionService.java:74) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$3.run(SelectionAggregator.java:163) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.notifyPostListeners(SelectionAggregator.java:160) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.access$7(SelectionAggregator.java:158) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.lambda$0(SelectionAggregator.java:250) + at org.eclipse.e4.core.contexts.RunAndTrack.runExternalCode(RunAndTrack.java:59) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.changed(SelectionAggregator.java:250) + at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:108) + at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:364) + at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:379) + at org.eclipse.e4.ui.internal.workbench.SelectionServiceImpl.setPostSelection(SelectionServiceImpl.java:39) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.lambda$2(CompatibilityPart.java:128) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.fireSelectionChanged(AbstractEditPartViewer.java:247) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer$1.run(AbstractEditPartViewer.java:131) + at org.eclipse.gef.SelectionManager.fireSelectionChanged(SelectionManager.java:156) + at org.eclipse.gef.SelectionManager.appendSelection(SelectionManager.java:91) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.appendSelection(AbstractEditPartViewer.java:190) + at org.eclipse.graphiti.ui.internal.editor.GraphitiScrollingGraphicalViewer.appendSelection(GraphitiScrollingGraphicalViewer.java:153) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.select(AbstractEditPartViewer.java:599) + at org.eclipse.graphiti.ui.internal.editor.GraphitiScrollingGraphicalViewer.select(GraphitiScrollingGraphicalViewer.java:68) + at org.eclipse.gef.tools.SelectEditPartTracker.performSelection(SelectEditPartTracker.java:221) + at org.eclipse.gef.tools.SelectEditPartTracker.performConditionalSelection(SelectEditPartTracker.java:167) + at org.eclipse.gef.tools.SelectEditPartTracker.handleButtonDown(SelectEditPartTracker.java:92) + at org.eclipse.gef.tools.AbstractTool.mouseDown(AbstractTool.java:1091) + at org.eclipse.gef.tools.SelectionTool.mouseDown(SelectionTool.java:514) + at org.eclipse.gef.EditDomain.mouseDown(EditDomain.java:245) + at org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchMousePressed(DomainEventDispatcher.java:348) + at org.eclipse.draw2d.LightweightSystem$EventHandler.mouseDown(LightweightSystem.java:523) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:196) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3986) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3585) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:28:17.084 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:823) + at org.eclipse.jface.window.Window.open(Window.java:799) + at org.eclipse.jface.dialogs.MessageDialog.open(MessageDialog.java:394) + at org.eclipse.jface.dialogs.MessageDialog.openQuestion(MessageDialog.java:504) + at com.fluig.ws.WSFileCacheProvider$1.run(WSFileCacheProvider.java:120) + at com.fluig.ws.WSFileCacheProvider.catchException(WSFileCacheProvider.java:136) + at com.fluig.ws.WSFileCacheProvider.getListaCamposFormulario(WSFileCacheProvider.java:240) + at com.totvs.tds.ecm.designer.util.FormFieldUtil.getList(FormFieldUtil.java:86) + at com.totvs.tds.ecm.designer.util.FormFieldUtil.getList(FormFieldUtil.java:32) + at com.totvs.tds.ecm.designer.property.bpmn.PropertyBpmnNormalTaskSection.refresh(PropertyBpmnNormalTaskSection.java:293) + at org.eclipse.ui.views.properties.tabbed.TabContents$6.run(TabContents.java:220) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.ui.views.properties.tabbed.TabContents.refresh(TabContents.java:223) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage$SelectionChangedListener.selectionChanged(TabbedPropertySheetPage.java:231) + at org.eclipse.jface.viewers.Viewer$1.run(Viewer.java:151) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.jface.viewers.Viewer.fireSelectionChanged(Viewer.java:148) + at org.eclipse.jface.viewers.StructuredViewer.updateSelection(StructuredViewer.java:2118) + at org.eclipse.jface.viewers.StructuredViewer.handleSelect(StructuredViewer.java:1170) + at org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(StructuredViewer.java:1199) + at org.eclipse.jface.util.OpenStrategy.fireSelectionEvent(OpenStrategy.java:242) + at org.eclipse.jface.util.OpenStrategy.access$4(OpenStrategy.java:237) + at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:402) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1081) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:780) + at org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyList.select(TabbedPropertyList.java:844) + at org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyViewer.setSelectionToWidget(TabbedPropertyViewer.java:134) + at org.eclipse.jface.viewers.StructuredViewer.setSelectionToWidget(StructuredViewer.java:1697) + at org.eclipse.jface.viewers.StructuredViewer.setSelection(StructuredViewer.java:1653) + at org.eclipse.jface.viewers.Viewer.setSelection(Viewer.java:376) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.setInput(TabbedPropertySheetPage.java:763) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.selectionChanged(TabbedPropertySheetPage.java:571) + at org.eclipse.ui.views.properties.PropertySheet.showSelectionAndDescription(PropertySheet.java:569) + at org.eclipse.ui.views.properties.PropertySheet.selectionChanged(PropertySheet.java:549) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.notifyListeners(SelectionService.java:240) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.handlePostSelectionChanged(SelectionService.java:119) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.lambda$2(SelectionService.java:74) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$3.run(SelectionAggregator.java:163) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.notifyPostListeners(SelectionAggregator.java:160) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.access$7(SelectionAggregator.java:158) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.lambda$0(SelectionAggregator.java:250) + at org.eclipse.e4.core.contexts.RunAndTrack.runExternalCode(RunAndTrack.java:59) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.changed(SelectionAggregator.java:250) + at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:108) + at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:364) + at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:379) + at org.eclipse.e4.ui.internal.workbench.SelectionServiceImpl.setPostSelection(SelectionServiceImpl.java:39) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.lambda$2(CompatibilityPart.java:128) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.fireSelectionChanged(AbstractEditPartViewer.java:247) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer$1.run(AbstractEditPartViewer.java:131) + at org.eclipse.gef.SelectionManager.fireSelectionChanged(SelectionManager.java:156) + at org.eclipse.gef.SelectionManager.appendSelection(SelectionManager.java:91) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.appendSelection(AbstractEditPartViewer.java:190) + at org.eclipse.graphiti.ui.internal.editor.GraphitiScrollingGraphicalViewer.appendSelection(GraphitiScrollingGraphicalViewer.java:153) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.select(AbstractEditPartViewer.java:599) + at org.eclipse.graphiti.ui.internal.editor.GraphitiScrollingGraphicalViewer.select(GraphitiScrollingGraphicalViewer.java:68) + at org.eclipse.gef.tools.SelectEditPartTracker.performSelection(SelectEditPartTracker.java:221) + at org.eclipse.gef.tools.SelectEditPartTracker.handleButtonUp(SelectEditPartTracker.java:115) + at org.eclipse.gef.tools.DragEditPartsTracker.handleButtonUp(DragEditPartsTracker.java:396) + at org.eclipse.gef.tools.AbstractTool.mouseUp(AbstractTool.java:1200) + at org.eclipse.gef.tools.SelectionTool.mouseUp(SelectionTool.java:574) + at org.eclipse.gef.EditDomain.mouseUp(EditDomain.java:301) + at org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchMouseReleased(DomainEventDispatcher.java:380) + at org.eclipse.draw2d.LightweightSystem$EventHandler.mouseUp(LightweightSystem.java:548) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:224) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3986) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3585) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:28:17.085 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:823) + at org.eclipse.jface.window.Window.open(Window.java:799) + at org.eclipse.jface.dialogs.MessageDialog.open(MessageDialog.java:394) + at org.eclipse.jface.dialogs.MessageDialog.openQuestion(MessageDialog.java:504) + at com.fluig.ws.WSFileCacheProvider$1.run(WSFileCacheProvider.java:120) + at com.fluig.ws.WSFileCacheProvider.catchException(WSFileCacheProvider.java:136) + at com.fluig.ws.WSFileCacheProvider.getListaCamposFormulario(WSFileCacheProvider.java:240) + at com.totvs.tds.ecm.designer.util.FormFieldUtil.getList(FormFieldUtil.java:86) + at com.totvs.tds.ecm.designer.util.FormFieldUtil.getList(FormFieldUtil.java:32) + at com.totvs.tds.ecm.designer.property.bpmn.PropertyBpmnNormalTaskSection.refresh(PropertyBpmnNormalTaskSection.java:293) + at org.eclipse.ui.views.properties.tabbed.TabContents$6.run(TabContents.java:220) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.ui.views.properties.tabbed.TabContents.refresh(TabContents.java:223) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage$SelectionChangedListener.selectionChanged(TabbedPropertySheetPage.java:231) + at org.eclipse.jface.viewers.Viewer$1.run(Viewer.java:151) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.jface.viewers.Viewer.fireSelectionChanged(Viewer.java:148) + at org.eclipse.jface.viewers.StructuredViewer.updateSelection(StructuredViewer.java:2118) + at org.eclipse.jface.viewers.StructuredViewer.handleSelect(StructuredViewer.java:1170) + at org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(StructuredViewer.java:1199) + at org.eclipse.jface.util.OpenStrategy.fireSelectionEvent(OpenStrategy.java:242) + at org.eclipse.jface.util.OpenStrategy.access$4(OpenStrategy.java:237) + at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:402) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1081) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:780) + at org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyList.select(TabbedPropertyList.java:844) + at org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyViewer.setSelectionToWidget(TabbedPropertyViewer.java:134) + at org.eclipse.jface.viewers.StructuredViewer.setSelectionToWidget(StructuredViewer.java:1697) + at org.eclipse.jface.viewers.StructuredViewer.setSelection(StructuredViewer.java:1653) + at org.eclipse.jface.viewers.Viewer.setSelection(Viewer.java:376) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.setInput(TabbedPropertySheetPage.java:763) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.selectionChanged(TabbedPropertySheetPage.java:571) + at org.eclipse.ui.views.properties.PropertySheet.showSelectionAndDescription(PropertySheet.java:569) + at org.eclipse.ui.views.properties.PropertySheet.selectionChanged(PropertySheet.java:549) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.notifyListeners(SelectionService.java:240) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.handlePostSelectionChanged(SelectionService.java:119) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.lambda$2(SelectionService.java:74) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$3.run(SelectionAggregator.java:163) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.notifyPostListeners(SelectionAggregator.java:160) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.access$7(SelectionAggregator.java:158) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.lambda$0(SelectionAggregator.java:250) + at org.eclipse.e4.core.contexts.RunAndTrack.runExternalCode(RunAndTrack.java:59) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.changed(SelectionAggregator.java:250) + at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:108) + at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:364) + at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:379) + at org.eclipse.e4.ui.internal.workbench.SelectionServiceImpl.setPostSelection(SelectionServiceImpl.java:39) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.lambda$2(CompatibilityPart.java:128) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.fireSelectionChanged(AbstractEditPartViewer.java:247) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer$1.run(AbstractEditPartViewer.java:131) + at org.eclipse.gef.SelectionManager.fireSelectionChanged(SelectionManager.java:156) + at org.eclipse.gef.SelectionManager.appendSelection(SelectionManager.java:91) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.appendSelection(AbstractEditPartViewer.java:190) + at org.eclipse.graphiti.ui.internal.editor.GraphitiScrollingGraphicalViewer.appendSelection(GraphitiScrollingGraphicalViewer.java:153) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.select(AbstractEditPartViewer.java:599) + at org.eclipse.graphiti.ui.internal.editor.GraphitiScrollingGraphicalViewer.select(GraphitiScrollingGraphicalViewer.java:68) + at org.eclipse.gef.tools.SelectEditPartTracker.performSelection(SelectEditPartTracker.java:221) + at org.eclipse.gef.tools.SelectEditPartTracker.handleButtonUp(SelectEditPartTracker.java:115) + at org.eclipse.gef.tools.DragEditPartsTracker.handleButtonUp(DragEditPartsTracker.java:396) + at org.eclipse.gef.tools.AbstractTool.mouseUp(AbstractTool.java:1200) + at org.eclipse.gef.tools.SelectionTool.mouseUp(SelectionTool.java:574) + at org.eclipse.gef.EditDomain.mouseUp(EditDomain.java:301) + at org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchMouseReleased(DomainEventDispatcher.java:380) + at org.eclipse.draw2d.LightweightSystem$EventHandler.mouseUp(LightweightSystem.java:548) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:224) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3986) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3585) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:28:21.336 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NullPointerException + at org.eclipse.gef.tools.SelectEditPartTracker.handleButtonUp(SelectEditPartTracker.java:120) + at org.eclipse.gef.tools.DragEditPartsTracker.handleButtonUp(DragEditPartsTracker.java:396) + at org.eclipse.gef.tools.AbstractTool.mouseUp(AbstractTool.java:1200) + at org.eclipse.gef.tools.SelectionTool.mouseUp(SelectionTool.java:574) + at org.eclipse.gef.EditDomain.mouseUp(EditDomain.java:301) + at org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchMouseReleased(DomainEventDispatcher.java:380) + at org.eclipse.draw2d.LightweightSystem$EventHandler.mouseUp(LightweightSystem.java:548) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:224) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3986) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3585) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:28:49.281 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:29:56.924 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:29:56.931 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:31:17.629 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:823) + at org.eclipse.jface.window.Window.open(Window.java:799) + at org.eclipse.jface.dialogs.MessageDialog.open(MessageDialog.java:394) + at org.eclipse.jface.dialogs.MessageDialog.openQuestion(MessageDialog.java:504) + at com.fluig.ws.WSFileCacheProvider$1.run(WSFileCacheProvider.java:120) + at com.fluig.ws.WSFileCacheProvider.catchException(WSFileCacheProvider.java:136) + at com.fluig.ws.WSFileCacheProvider.getListaCamposFormulario(WSFileCacheProvider.java:240) + at com.totvs.tds.ecm.designer.util.FormFieldUtil.getList(FormFieldUtil.java:86) + at com.totvs.tds.ecm.designer.util.FormFieldUtil.getList(FormFieldUtil.java:32) + at com.totvs.tds.ecm.designer.property.bpmn.PropertyBpmnNormalTaskSection.refresh(PropertyBpmnNormalTaskSection.java:293) + at org.eclipse.ui.views.properties.tabbed.TabContents$6.run(TabContents.java:220) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.ui.views.properties.tabbed.TabContents.refresh(TabContents.java:223) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage$SelectionChangedListener.selectionChanged(TabbedPropertySheetPage.java:231) + at org.eclipse.jface.viewers.Viewer$1.run(Viewer.java:151) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.jface.viewers.Viewer.fireSelectionChanged(Viewer.java:148) + at org.eclipse.jface.viewers.StructuredViewer.updateSelection(StructuredViewer.java:2118) + at org.eclipse.jface.viewers.StructuredViewer.handleSelect(StructuredViewer.java:1170) + at org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(StructuredViewer.java:1199) + at org.eclipse.jface.util.OpenStrategy.fireSelectionEvent(OpenStrategy.java:242) + at org.eclipse.jface.util.OpenStrategy.access$4(OpenStrategy.java:237) + at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:402) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1081) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:780) + at org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyList.select(TabbedPropertyList.java:844) + at org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyViewer.setSelectionToWidget(TabbedPropertyViewer.java:134) + at org.eclipse.jface.viewers.StructuredViewer.setSelectionToWidget(StructuredViewer.java:1697) + at org.eclipse.jface.viewers.StructuredViewer.setSelection(StructuredViewer.java:1653) + at org.eclipse.jface.viewers.Viewer.setSelection(Viewer.java:376) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.setInput(TabbedPropertySheetPage.java:763) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.selectionChanged(TabbedPropertySheetPage.java:571) + at org.eclipse.ui.views.properties.PropertySheet.showSelectionAndDescription(PropertySheet.java:569) + at org.eclipse.ui.views.properties.PropertySheet.selectionChanged(PropertySheet.java:549) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.notifyListeners(SelectionService.java:240) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.handlePostSelectionChanged(SelectionService.java:119) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.lambda$2(SelectionService.java:74) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$3.run(SelectionAggregator.java:163) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.notifyPostListeners(SelectionAggregator.java:160) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.access$7(SelectionAggregator.java:158) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.lambda$0(SelectionAggregator.java:250) + at org.eclipse.e4.core.contexts.RunAndTrack.runExternalCode(RunAndTrack.java:59) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.changed(SelectionAggregator.java:250) + at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:108) + at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:364) + at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:379) + at org.eclipse.e4.ui.internal.workbench.SelectionServiceImpl.setPostSelection(SelectionServiceImpl.java:39) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.lambda$2(CompatibilityPart.java:128) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.fireSelectionChanged(AbstractEditPartViewer.java:247) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer$1.run(AbstractEditPartViewer.java:131) + at org.eclipse.gef.SelectionManager.fireSelectionChanged(SelectionManager.java:156) + at org.eclipse.gef.SelectionManager.appendSelection(SelectionManager.java:91) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.appendSelection(AbstractEditPartViewer.java:190) + at org.eclipse.graphiti.ui.internal.editor.GraphitiScrollingGraphicalViewer.appendSelection(GraphitiScrollingGraphicalViewer.java:153) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.select(AbstractEditPartViewer.java:599) + at org.eclipse.graphiti.ui.internal.editor.GraphitiScrollingGraphicalViewer.select(GraphitiScrollingGraphicalViewer.java:68) + at org.eclipse.gef.tools.SelectEditPartTracker.performSelection(SelectEditPartTracker.java:221) + at org.eclipse.gef.tools.SelectEditPartTracker.handleButtonUp(SelectEditPartTracker.java:115) + at org.eclipse.gef.tools.DragEditPartsTracker.handleButtonUp(DragEditPartsTracker.java:396) + at org.eclipse.gef.tools.AbstractTool.mouseMove(AbstractTool.java:1159) + at org.eclipse.gef.tools.SelectionTool.mouseMove(SelectionTool.java:562) + at org.eclipse.gef.EditDomain.mouseMove(EditDomain.java:287) + at org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchMouseMoved(DomainEventDispatcher.java:365) + at org.eclipse.draw2d.LightweightSystem$EventHandler.mouseMove(LightweightSystem.java:543) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:216) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3986) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3585) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:31:17.635 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:823) + at org.eclipse.jface.window.Window.open(Window.java:799) + at org.eclipse.jface.dialogs.MessageDialog.open(MessageDialog.java:394) + at org.eclipse.jface.dialogs.MessageDialog.openQuestion(MessageDialog.java:504) + at com.fluig.ws.WSFileCacheProvider$1.run(WSFileCacheProvider.java:120) + at com.fluig.ws.WSFileCacheProvider.catchException(WSFileCacheProvider.java:136) + at com.fluig.ws.WSFileCacheProvider.getListaCamposFormulario(WSFileCacheProvider.java:240) + at com.totvs.tds.ecm.designer.util.FormFieldUtil.getList(FormFieldUtil.java:86) + at com.totvs.tds.ecm.designer.util.FormFieldUtil.getList(FormFieldUtil.java:32) + at com.totvs.tds.ecm.designer.property.bpmn.PropertyBpmnNormalTaskSection.refresh(PropertyBpmnNormalTaskSection.java:293) + at org.eclipse.ui.views.properties.tabbed.TabContents$6.run(TabContents.java:220) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.ui.views.properties.tabbed.TabContents.refresh(TabContents.java:223) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage$SelectionChangedListener.selectionChanged(TabbedPropertySheetPage.java:231) + at org.eclipse.jface.viewers.Viewer$1.run(Viewer.java:151) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.jface.viewers.Viewer.fireSelectionChanged(Viewer.java:148) + at org.eclipse.jface.viewers.StructuredViewer.updateSelection(StructuredViewer.java:2118) + at org.eclipse.jface.viewers.StructuredViewer.handleSelect(StructuredViewer.java:1170) + at org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(StructuredViewer.java:1199) + at org.eclipse.jface.util.OpenStrategy.fireSelectionEvent(OpenStrategy.java:242) + at org.eclipse.jface.util.OpenStrategy.access$4(OpenStrategy.java:237) + at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:402) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1081) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:780) + at org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyList.select(TabbedPropertyList.java:844) + at org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyViewer.setSelectionToWidget(TabbedPropertyViewer.java:134) + at org.eclipse.jface.viewers.StructuredViewer.setSelectionToWidget(StructuredViewer.java:1697) + at org.eclipse.jface.viewers.StructuredViewer.setSelection(StructuredViewer.java:1653) + at org.eclipse.jface.viewers.Viewer.setSelection(Viewer.java:376) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.setInput(TabbedPropertySheetPage.java:763) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.selectionChanged(TabbedPropertySheetPage.java:571) + at org.eclipse.ui.views.properties.PropertySheet.showSelectionAndDescription(PropertySheet.java:569) + at org.eclipse.ui.views.properties.PropertySheet.selectionChanged(PropertySheet.java:549) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.notifyListeners(SelectionService.java:240) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.handlePostSelectionChanged(SelectionService.java:119) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.lambda$2(SelectionService.java:74) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$3.run(SelectionAggregator.java:163) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.notifyPostListeners(SelectionAggregator.java:160) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.access$7(SelectionAggregator.java:158) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.lambda$0(SelectionAggregator.java:250) + at org.eclipse.e4.core.contexts.RunAndTrack.runExternalCode(RunAndTrack.java:59) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.changed(SelectionAggregator.java:250) + at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:108) + at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:364) + at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:379) + at org.eclipse.e4.ui.internal.workbench.SelectionServiceImpl.setPostSelection(SelectionServiceImpl.java:39) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.lambda$2(CompatibilityPart.java:128) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.fireSelectionChanged(AbstractEditPartViewer.java:247) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer$1.run(AbstractEditPartViewer.java:131) + at org.eclipse.gef.SelectionManager.fireSelectionChanged(SelectionManager.java:156) + at org.eclipse.gef.SelectionManager.appendSelection(SelectionManager.java:91) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.appendSelection(AbstractEditPartViewer.java:190) + at org.eclipse.graphiti.ui.internal.editor.GraphitiScrollingGraphicalViewer.appendSelection(GraphitiScrollingGraphicalViewer.java:153) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.select(AbstractEditPartViewer.java:599) + at org.eclipse.graphiti.ui.internal.editor.GraphitiScrollingGraphicalViewer.select(GraphitiScrollingGraphicalViewer.java:68) + at org.eclipse.gef.tools.SelectEditPartTracker.performSelection(SelectEditPartTracker.java:221) + at org.eclipse.gef.tools.SelectEditPartTracker.handleButtonUp(SelectEditPartTracker.java:115) + at org.eclipse.gef.tools.DragEditPartsTracker.handleButtonUp(DragEditPartsTracker.java:396) + at org.eclipse.gef.tools.AbstractTool.mouseMove(AbstractTool.java:1159) + at org.eclipse.gef.tools.SelectionTool.mouseMove(SelectionTool.java:562) + at org.eclipse.gef.EditDomain.mouseMove(EditDomain.java:287) + at org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchMouseMoved(DomainEventDispatcher.java:365) + at org.eclipse.draw2d.LightweightSystem$EventHandler.mouseMove(LightweightSystem.java:543) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:216) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3986) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3585) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:31:17.639 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:823) + at org.eclipse.jface.window.Window.open(Window.java:799) + at org.eclipse.jface.dialogs.MessageDialog.open(MessageDialog.java:394) + at org.eclipse.jface.dialogs.MessageDialog.openQuestion(MessageDialog.java:504) + at com.fluig.ws.WSFileCacheProvider$1.run(WSFileCacheProvider.java:120) + at com.fluig.ws.WSFileCacheProvider.catchException(WSFileCacheProvider.java:136) + at com.fluig.ws.WSFileCacheProvider.getListaCamposFormulario(WSFileCacheProvider.java:240) + at com.totvs.tds.ecm.designer.util.FormFieldUtil.getList(FormFieldUtil.java:86) + at com.totvs.tds.ecm.designer.util.FormFieldUtil.getList(FormFieldUtil.java:32) + at com.totvs.tds.ecm.designer.property.bpmn.PropertyBpmnNormalTaskSection.refresh(PropertyBpmnNormalTaskSection.java:293) + at org.eclipse.ui.views.properties.tabbed.TabContents$6.run(TabContents.java:220) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.ui.views.properties.tabbed.TabContents.refresh(TabContents.java:223) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage$SelectionChangedListener.selectionChanged(TabbedPropertySheetPage.java:231) + at org.eclipse.jface.viewers.Viewer$1.run(Viewer.java:151) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174) + at org.eclipse.jface.viewers.Viewer.fireSelectionChanged(Viewer.java:148) + at org.eclipse.jface.viewers.StructuredViewer.updateSelection(StructuredViewer.java:2118) + at org.eclipse.jface.viewers.StructuredViewer.handleSelect(StructuredViewer.java:1170) + at org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(StructuredViewer.java:1199) + at org.eclipse.jface.util.OpenStrategy.fireSelectionEvent(OpenStrategy.java:242) + at org.eclipse.jface.util.OpenStrategy.access$4(OpenStrategy.java:237) + at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:402) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1081) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:780) + at org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyList.select(TabbedPropertyList.java:844) + at org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyViewer.setSelectionToWidget(TabbedPropertyViewer.java:134) + at org.eclipse.jface.viewers.StructuredViewer.setSelectionToWidget(StructuredViewer.java:1697) + at org.eclipse.jface.viewers.StructuredViewer.setSelection(StructuredViewer.java:1653) + at org.eclipse.jface.viewers.Viewer.setSelection(Viewer.java:376) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.setInput(TabbedPropertySheetPage.java:763) + at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.selectionChanged(TabbedPropertySheetPage.java:571) + at org.eclipse.ui.views.properties.PropertySheet.showSelectionAndDescription(PropertySheet.java:569) + at org.eclipse.ui.views.properties.PropertySheet.selectionChanged(PropertySheet.java:549) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.notifyListeners(SelectionService.java:240) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.handlePostSelectionChanged(SelectionService.java:119) + at org.eclipse.ui.internal.e4.compatibility.SelectionService.lambda$2(SelectionService.java:74) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$3.run(SelectionAggregator.java:163) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.notifyPostListeners(SelectionAggregator.java:160) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.access$7(SelectionAggregator.java:158) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.lambda$0(SelectionAggregator.java:250) + at org.eclipse.e4.core.contexts.RunAndTrack.runExternalCode(RunAndTrack.java:59) + at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.changed(SelectionAggregator.java:250) + at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:108) + at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:364) + at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:379) + at org.eclipse.e4.ui.internal.workbench.SelectionServiceImpl.setPostSelection(SelectionServiceImpl.java:39) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.lambda$2(CompatibilityPart.java:128) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.fireSelectionChanged(AbstractEditPartViewer.java:247) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer$1.run(AbstractEditPartViewer.java:131) + at org.eclipse.gef.SelectionManager.fireSelectionChanged(SelectionManager.java:156) + at org.eclipse.gef.SelectionManager.appendSelection(SelectionManager.java:91) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.appendSelection(AbstractEditPartViewer.java:190) + at org.eclipse.graphiti.ui.internal.editor.GraphitiScrollingGraphicalViewer.appendSelection(GraphitiScrollingGraphicalViewer.java:153) + at org.eclipse.gef.ui.parts.AbstractEditPartViewer.select(AbstractEditPartViewer.java:599) + at org.eclipse.graphiti.ui.internal.editor.GraphitiScrollingGraphicalViewer.select(GraphitiScrollingGraphicalViewer.java:68) + at org.eclipse.gef.tools.SelectEditPartTracker.performSelection(SelectEditPartTracker.java:221) + at org.eclipse.gef.tools.SelectEditPartTracker.handleButtonUp(SelectEditPartTracker.java:115) + at org.eclipse.gef.tools.DragEditPartsTracker.handleButtonUp(DragEditPartsTracker.java:396) + at org.eclipse.gef.tools.AbstractTool.mouseMove(AbstractTool.java:1159) + at org.eclipse.gef.tools.SelectionTool.mouseMove(SelectionTool.java:562) + at org.eclipse.gef.EditDomain.mouseMove(EditDomain.java:287) + at org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchMouseMoved(DomainEventDispatcher.java:365) + at org.eclipse.draw2d.LightweightSystem$EventHandler.mouseMove(LightweightSystem.java:543) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:216) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3986) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3585) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:31:21.312 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NullPointerException + at org.eclipse.gef.tools.SelectEditPartTracker.handleButtonUp(SelectEditPartTracker.java:120) + at org.eclipse.gef.tools.DragEditPartsTracker.handleButtonUp(DragEditPartsTracker.java:396) + at org.eclipse.gef.tools.AbstractTool.mouseMove(AbstractTool.java:1159) + at org.eclipse.gef.tools.SelectionTool.mouseMove(SelectionTool.java:562) + at org.eclipse.gef.EditDomain.mouseMove(EditDomain.java:287) + at org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchMouseMoved(DomainEventDispatcher.java:365) + at org.eclipse.draw2d.LightweightSystem$EventHandler.mouseMove(LightweightSystem.java:543) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:216) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) + at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4173) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3986) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3585) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:32:02.491 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:32:02.496 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:33:51.264 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:33:51.272 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:33:54.325 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:33:54.330 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:34:04.836 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:34:04.841 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:34:08.213 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:34:08.218 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:43:27.059 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:43:27.064 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:45:08.887 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:45:08.894 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:45:13.039 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:45:13.046 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:45:20.654 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:45:20.659 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:45:32.512 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:45:32.518 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:46:27.759 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:46:27.765 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:46:32.390 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:46:32.396 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:47:05.119 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:47:05.124 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:48:20.602 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:48:20.607 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:48:34.432 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:48:34.438 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:48:46.788 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:48:46.793 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:49:01.685 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:49:01.690 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:49:07.267 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:49:07.273 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:49:45.767 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:49:45.775 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:49:47.680 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:49:47.686 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:49:49.709 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:49:49.714 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:49:53.727 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:49:53.732 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:49:56.514 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:49:56.520 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:49:59.796 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:49:59.802 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:50:02.644 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:50:02.650 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:50:03.556 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:50:03.561 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:50:04.426 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:50:04.431 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:50:08.491 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:50:08.497 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:50:09.968 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:50:09.973 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:50:13.204 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:50:13.211 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:50:16.409 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:50:16.415 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:50:28.543 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:50:28.549 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:50:31.584 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:50:31.590 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:51:40.864 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:51:40.870 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:51:42.080 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:51:42.084 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:51:52.296 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:51:52.301 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 4 2026-04-15 13:56:31.585 +!MESSAGE Plugin com.totvs.tds.ecm.designer.gui, extension org.eclipse.ui.preferencePages: Unknown extension tag found: initializer + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:57:00.316 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:57:00.322 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:57:08.562 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:57:08.570 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:57:15.588 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:57:15.592 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:57:42.261 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:57:42.266 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:58:27.034 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:58:27.041 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) + +!ENTRY org.eclipse.ui 4 0 2026-04-15 13:58:27.046 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4711) + at org.eclipse.swt.SWT.error(SWT.java:4626) + at org.eclipse.swt.SWT.error(SWT.java:4597) + at org.eclipse.swt.widgets.Widget.error(Widget.java:452) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:351) + at org.eclipse.swt.widgets.Text.setText(Text.java:2275) + at com.totvs.tds.ecm.designer.util.TextUtils$3$1.run(TextUtils.java:174) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3961) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3588) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) + at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:633) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:557) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597) + at org.eclipse.equinox.launcher.Main.run(Main.java:1468) diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/Ginseng_chamados/.indexes/bf/0/properties.index b/.metadata/.plugins/org.eclipse.core.resources/.projects/Ginseng_chamados/.indexes/bf/0/properties.index deleted file mode 100644 index c99bc28dd0ce1567580de6c1d8fa52563c89ef7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 560 zcmb`Du}TC%42H8}?K5m+n*|FkY!qF=PEN2r=4RqvaAz_kvmW<67Cy+mnBytftO#;t zev<$D^EUu+3|HMo^yPV!O&8b=>Y{azGP395cJI44X#=%hVpeDEeJWH}_Bv)2PiD{@ z!G-96K9?QA_ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/Ginseng_chamados/.markers b/.metadata/.plugins/org.eclipse.core.resources/.projects/Ginseng_chamados/.markers deleted file mode 100644 index 126b270cb0216d3efc59f0d15165b4d56be31d28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8069 zcmdtn%WoS+7y$6GgGdQU1p*pDO0_MD@=(2Nk`|SwLIRwosS+!x^QuH+O?Jo5hTR=A zGftYo0U-|j1Dv?^h=c$kE?kiiR0t#v9C)`p0uAq$Hxy^72`89=g!N)UY6f6fu55$1r7M$g(Z`Fm?+B>I)S3-zvS@K8k~b znB;Y2I(C5~eTg!DgT-_c6Qmaio^y~3ZUB2IT13QV%W?j_IB0eer7(}0Kx7qM_h=1b|S7|Yr8y$iA#-pk7@~xVYWzf4qnPa-Vv-wU?nq* z`XA}@%yoF6Z!AasvpDDt_LhIkdS)zcbn7T2k0QdqR+S<#a1&2Pl3|cAo(cVZpxJ*v z=vn@|V?qKQob)V|<7s1QkTGJ<6&cd_zb_)Kdj(^+M-OCG3eEbbTzJJ&&b)e>8votm}oYNT0Yu$yKaK{G} zp+A>FPu?Sa<&S7f4-=Fhmzf|b5mh)(BL1C;iT+t#@P|*J`2C6! z=tr3*WW$rrvb$!N7_(iwlTA6C-gJ7+m&Nrht{T?awly>3mBJP3OBpXc{iSvD+d> zWVJl~yDB3;{Glj6d?}LrxFY#A8TpZ0Mfs8TNOGh|{)>!!Fe%Ch`LNp9B5P!|9lNLq z{i_Um=mQZw#3y~>(C;fk|0aVzJtCq{qp;}9kCzgl)tNnI|36ax3swG?1b>95OPiu5T$gD=f7O(*Uz`#is=pMq z5QDZ;yNbSB5&d5oda7y_oq9xw{vBzoQGaiCeb?`VWiLKZt6fo}-OD#wciw1CWyM@c z)3)}McO}P zv@LIo+LreOZNoD!a8{B0PZ{}v+eP_-yCTV7Q6&FMMxHz+%9G=QJlrxY`h#Yyb`7v( zy2g@ifp~P_dq_HrEDNXP{>gP+RTYf0`Yi~Rb zdV;4${0`Z}t<8DTNnV@s1iJkAQ8Tee8Q}^>weHkJO2b5(86D9w<~(v?k48`q5#*Wt zsLS>=Hjgw5n?)CSEO^GnD`u;Soucb)9;O0tCw;7F=kpHA@O@6xKU2-{pJOP$>>uX_ wj#~HEZC)u7{t0X5Nieg0jCq5K4ujc^ZFPU0)o84n{Gi8c&)NPTL7Z^@19U?{CUC*!%zhm7%sy diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/Ginseng_chamados/.syncinfo.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/Ginseng_chamados/.syncinfo.snap deleted file mode 100644 index d6e36ca5fc815e869dcd6859191de11fdf7e6b55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1040 jcmZ?R*xjhShe1S2b=vdAllRFvjPggrV>CUC*!%zhm7%sy diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/Recrutamento e Seleção/.indexes/bf/0/properties.index b/.metadata/.plugins/org.eclipse.core.resources/.projects/Recrutamento e Seleção/.indexes/bf/0/properties.index deleted file mode 100644 index 9afab32852253d7dcaadd951b0875b892bae794f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmXYp!3_d23$Tb#? z-GUu~6ZjTNPu>&`1oHchzX>Z0pk)A7ew dl?nBoPDwhu_|w?4eU_awtd;@g+w241{0*4qJ$nEE diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/Recrutamento e Seleção/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/Recrutamento e Seleção/.markers.snap deleted file mode 100644 index d6e36ca5fc815e869dcd6859191de11fdf7e6b55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1040 jcmZ?R*xjhShe1S2b=vdAllRFvjPggrV>CUC*!%zhm7%sy diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/Recrutamento e Seleção/.syncinfo.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/Recrutamento e Seleção/.syncinfo.snap deleted file mode 100644 index d6e36ca5fc815e869dcd6859191de11fdf7e6b55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1040 jcmZ?R*xjhShe1S2b=vdAllRFvjPggrV>CUC*!%zhm7%sy diff --git a/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index b/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index index 52a03cf92a03a4eeea63cbe10af97f3cd21e2928..f072f3b099b7260b2e1c9df33702634c92f412db 100644 GIT binary patch delta 21 ccmbQmG>d6MEVsFtk(s5Tv4yFb;lzwh06;hfA^-pY delta 21 ccmbQmG>d6MEVqfFv8j=Xk)e^H!NiPB06#kh1poj5 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap deleted file mode 100644 index e641c17c013a258042b2c5d1c39c0e3b6f3491be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1328 ocmZ?R*xjhShe1S2b=vdAllRFvjPggrV>CUC=7-Vp0Bd;&01j0zxc~qF diff --git a/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources index 8f55e749d7f0e4d110da8cc21ae38b7a46585cf7..45ac27cceb965aaf450ff1c9d99c5dccb37add0e 100644 GIT binary patch delta 138 zcmaFV%RG^1@`WubJdOoL3WlZ%h9*|V29pEI_c2;bRuo%3dBPHz$qut+Cf{R8vB}asbW{E7t%3 literal 50914 zcmeHQy^hmL6sBHjJ1PnkDWdiDc*e0k(n_lCz!5F~N&Bi5!Q3sHmYs;stmD zY7nC0Rd|3cY3>ICq9#!860Y{87NYg%UyoXz>vawfdRY?ZcayA$pN#T> zlk~E5JV~5>(wz>R-Y8FwihN4bFym&E!a14r3ul&e*BCyZcA7R%dQwh0p3nC*&L(vK zKb#^@k|QB~_E}C}Wv_-#5l@~^oJ(&(kG$U7y@<249~bFpc*#T4j9EM#_MWA~!THd> zS=W0n$7xl(Q2`ueLU=4)+D4c903Hq^n&CfGjw;QPh_xxN+>xXb{=aax+VxoVKs;ppcnw8me#LRj8B>U5EKK7;V8!MXdiJ9Pz*ycO1nM!d2ARX<}59xjYgawGHI)sr5fbakbw1-eT0Kx*q zlgPy&lFCL>JKBr14;us;gw-I5j8vri0T31-J{7hj4g!Gi011)Jg$=^mAc1x%9fNEx zGzgZnlkMlXvZb(d7$0>NY)|UUrqNf0VL82UJNt{t3fE;@4|}# zKv;m7ZiZ+e1Ay=Vp{R;RQ=pbP+E0U{`p z3L69fVFBU^3$~NFUUeAM+OB$&>*Y^p(b{8 zaLg8+O@~nX?+mpoO-=0J#eiZsiXk6YXaR}=#V{0O%E_>^4sI^%=KAI|L=+5xVt9(7 zdJuv351<&9VrX~2LN*rwVF5yi8loNq6vI=DqSGEwQ3egdY7i3#K`sUWVE|%|dO!;* zxVfyGOS}6)F%tl!0U)%qPQeBN#V`~Tk^zE^Q_vu+1|fjZaUj^;4-LX<5Gpy8NcRIE z6@dJm^ydv^1oeMVzJm66|Z>6C%K?2Mgu@Sp+<) z8Aajwl^l&m9SRm;8S?sw0Cn?qQPu_);7qyAOsp+5ggjIF>!YdyBCxk2AgL}9m1i)7 zSaZedhMjeXDI7#yg>f*7{nBuUmttBwZwOIVmU_V;tpX9)TSJJt-Oxs21VteN`z!)D z=lW{(TL_9)a)DbI5u%1PbPg}d2fzY*%mTEN2o*FakYGzZcHSNK%}xhwg@Fj{uL#gq zFw - + activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration ModelMigrationProcessor.001 - + @@ -13,7 +13,7 @@ topLevel shellMaximized - + persp.actionSet:org.eclipse.mylyn.doc.actionSet @@ -72,7 +72,7 @@ persp.newWizSC:org.eclipse.ui.wizards.new.file persp.actionSet:org.eclipse.wst.server.ui.internal.webbrowser.actionSet persp.actionSet:org.eclipse.debug.ui.breakpointActionSet - + View @@ -159,106 +159,6 @@ - - - persp.actionSet:org.eclipse.mylyn.doc.actionSet - persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation - persp.actionSet:org.eclipse.ui.cheatsheets.actionSet - persp.actionSet:org.eclipse.rse.core.search.searchActionSet - persp.actionSet:org.eclipse.search.searchActionSet - persp.actionSet:org.eclipse.text.quicksearch.actionSet - persp.actionSet:org.eclipse.ui.edit.text.actionSet.annotationNavigation - persp.actionSet:org.eclipse.ui.edit.text.actionSet.navigation - persp.actionSet:org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo - persp.actionSet:org.eclipse.ui.externaltools.ExternalToolsSet - persp.actionSet:org.eclipse.ui.actionSet.keyBindings - persp.actionSet:org.eclipse.ui.actionSet.openFiles - persp.actionSet:org.eclipse.wst.jsdt.chromium.debug.ui.actionSets - persp.newWizSC:org.eclipse.ui.wizards.new.folder - persp.newWizSC:org.eclipse.ui.wizards.new.file - persp.viewSC:org.eclipse.ui.views.BookmarkView - persp.viewSC:org.eclipse.ui.views.PropertySheet - persp.viewSC:org.eclipse.ui.views.ProblemView - persp.viewSC:org.eclipse.ui.views.ProgressView - persp.actionSet:org.eclipse.ui.NavigateActionSet - persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateBpmnProjectWizardID - persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateBpmnDiagramWizardID - persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateScriptGeneralWizardID - persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateFormWizardID - persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateReportWizardID - persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateDatasetWizardID - persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateEventWizardID - persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateLayoutWizardID - persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateWidgetWizardID - persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView - - - - - View - categoryTag:Java - - - View - categoryTag:General - - - View - categoryTag:Fluig - - - - Minimized - - View - categoryTag:General - active - - - - - - - Vertical - Terminal - active - noFocus - - View - categoryTag:General - - - View - categoryTag:Fluig - - - View - categoryTag:General - - - View - categoryTag:Fluig - - - View - categoryTag:Fluig - - - View - categoryTag:General - - - View - categoryTag:General - - - View - categoryTag:Terminal - - - - - persp.actionSet:org.eclipse.mylyn.doc.actionSet @@ -330,6 +230,93 @@ + + + persp.actionSet:org.eclipse.mylyn.doc.actionSet + persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation + persp.actionSet:org.eclipse.ui.cheatsheets.actionSet + persp.actionSet:org.eclipse.rse.core.search.searchActionSet + persp.actionSet:org.eclipse.search.searchActionSet + persp.actionSet:org.eclipse.text.quicksearch.actionSet + persp.actionSet:org.eclipse.ui.edit.text.actionSet.annotationNavigation + persp.actionSet:org.eclipse.ui.edit.text.actionSet.navigation + persp.actionSet:org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo + persp.actionSet:org.eclipse.ui.externaltools.ExternalToolsSet + persp.actionSet:org.eclipse.ui.actionSet.keyBindings + persp.actionSet:org.eclipse.ui.actionSet.openFiles + persp.actionSet:org.eclipse.wst.jsdt.chromium.debug.ui.actionSets + persp.newWizSC:org.eclipse.ui.wizards.new.folder + persp.newWizSC:org.eclipse.ui.wizards.new.file + persp.viewSC:org.eclipse.ui.views.BookmarkView + persp.viewSC:org.eclipse.ui.views.PropertySheet + persp.viewSC:org.eclipse.ui.views.ProblemView + persp.viewSC:org.eclipse.ui.views.ProgressView + persp.actionSet:org.eclipse.ui.NavigateActionSet + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateBpmnProjectWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateBpmnDiagramWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateScriptGeneralWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateFormWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateReportWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateDatasetWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateEventWizardID + persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateLayoutWizardID + persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateWidgetWizardID + persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView + + + + + View + categoryTag:Java + + + View + categoryTag:General + + + View + categoryTag:Fluig + + + + + View + categoryTag:General + + + + + + + active + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:Fluig + + + View + categoryTag:Fluig + + + View + categoryTag:Fluig + + + + + @@ -372,15 +359,33 @@ categoryTag:Help - + org.eclipse.e4.primaryDataStack EditorStack - - + + Editor removeOnHide com.totvs.tds.ecm.designer.bpmneditor + + + Editor + removeOnHide + org.eclipse.wst.css.core.csssource.source + + + + Editor + removeOnHide + org.eclipse.wst.css.core.csssource.source + + + + Editor + removeOnHide + org.eclipse.wst.html.core.htmlsource.source + @@ -431,11 +436,13 @@ View categoryTag:General + active + activeOnClose ViewMenu menuContribution:menu - + @@ -593,12 +600,11 @@ View categoryTag:Fluig - active ViewMenu menuContribution:menu - + @@ -634,7 +640,7 @@ ViewMenu menuContribution:menu - + @@ -703,7 +709,7 @@ Draggable - + toolbarSeparator @@ -716,6 +722,33 @@ toolbarSeparator + + Draggable + + + Draggable + + + Draggable + + + Draggable + + + Draggable + + + Draggable + + + Draggable + + + Draggable + + + Draggable + Draggable @@ -743,10 +776,7 @@ Draggable - - - - Draggable + toolbarSeparator @@ -785,35 +815,13 @@ Draggable - + TrimStack Draggable - - TrimStack - Draggable - - - TrimStack - Draggable - - - - - TrimStack - Draggable - - - TrimStack - Draggable - - - TrimStack - Draggable - TrimStack Draggable @@ -1399,9 +1407,9 @@ - - - + + + @@ -2100,60 +2108,60 @@ View categoryTag:General - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:General - - + + glue move_after:PerspectiveSpacer SHOW_RESTORE_MENU - + move_after:Spacer Glue HIDEABLE SHOW_RESTORE_MENU - + glue move_after:SearchField SHOW_RESTORE_MENU - + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -2185,56 +2193,70 @@ persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateLayoutWizardID persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateWidgetWizardID persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView - - - - + + + + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Fluig - - + + Minimized + View categoryTag:General + active - - - - + + + + Vertical + Terminal + active + noFocus + View categoryTag:General - + + View + categoryTag:Fluig + + View categoryTag:General - + View categoryTag:Fluig - + View categoryTag:Fluig - - View - categoryTag:Fluig - - + View categoryTag:General + + View + categoryTag:General + + + View + categoryTag:Terminal + @@ -3561,7 +3583,7 @@ - + diff --git a/.metadata/.plugins/org.eclipse.jdt.core/assumedExternalFilesCache b/.metadata/.plugins/org.eclipse.jdt.core/assumedExternalFilesCache index 97feacf3aa1a9b42c4612fd98ecd7f9647b4375c..593f4708db84ac8fd0f5cc47c634f38c013fe9e4 100644 GIT binary patch literal 4 LcmZQzU|;|M00aO5 literal 938 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 py>^9ybE%pMoBm#v^5ZO3G2cM$*bk0n6(Ils diff --git a/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log b/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log index 4279f47..50f7dcf 100644 --- a/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log +++ b/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log @@ -186,3 +186,5 @@ 2026-03-05 14:13:17,734 [Worker-6: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is out-of-date. Trying to update. 2026-03-06 09:35:04,306 [Worker-6: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. 2026-03-11 10:42:23,819 [Worker-6: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is out-of-date. Trying to update. +2026-04-15 13:08:08,894 [Worker-4: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. +2026-04-15 13:16:26,886 [Worker-5: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. diff --git a/.metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties b/.metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties index 9a4ae44..3aef534 100644 --- a/.metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties +++ b/.metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties @@ -1,2 +1,2 @@ #Cached timestamps -#Tue Feb 24 10:53:12 BRT 2026 +#Wed Apr 15 14:30:03 BRT 2026 diff --git a/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml b/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml index cb2eea5..bf4c1f5 100644 --- a/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml +++ b/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml @@ -21,6 +21,7 @@ + @@ -40,4 +41,14 @@ +
+
+
+ + +
+
+ + +
diff --git a/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml b/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml index c2bc24f..e0e685c 100644 --- a/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml +++ b/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml @@ -1,13 +1,14 @@
- + + @@ -22,7 +23,6 @@ - diff --git a/.metadata/.plugins/org.eclipse.wst.jsdt.core/externalLibsTimeStamps b/.metadata/.plugins/org.eclipse.wst.jsdt.core/externalLibsTimeStamps index 75a5a6a678b295bd26f48249e5f7354139e6b160..54cbda76aba58807276877f3f7c452bb42f6678a 100644 GIT binary patch literal 3880 zcmcgvO>5LZ7#_V85f6H*p7!X)4EO5;9s%aUmCSS*6Sa zCxQHbM`md%MIYphuBP7DUODxlxa3rrizN}^xczh7RWwO4>#@&ZXv##F*;m7t|qJ`*#TqYDl)lMUb5+m-nTYl zp8sJbJ)6rW;+~@x1f6>^OL^VQ^Iyqh6tro6|KVmF{>*0!X*N2>c#J#*3zlj&B^vqS zq7_~5ue-RA^qvuJ;jZg-6CqohR;<)qI8jYgr!D04QQbUT`@Okpw~U{Kfq_9_@Yx15S`Evkx&8&ffkBNB*ZPOg~W*yh*Y!^v{K4PIXd2HvSnj0wwE+lxblnm zaR~2hHrZ|5l~%H!$20TZJQ+Gi$HRlO{+EN%>Cwq?|7GwBp#Be{cdyxJgW51ILye0- zq;kp`ia1IPzL+ch-6ULKAaTxu8Co84%UO`b=_HbdDLo06!NJ_v;KGD95K1G9qp{{X zLc=bn+Tj3j7j}*1HZ`B{(y~M=tL!2{#@t!<^_A4f!$lT^V#?(NJyB2A7tcO^IJ7ny z;g1xJUFCVK(IiS5yrxc9B`7_ay9Q{>Z$msVBi>fj-O7@j+Pt`onojxLC;*!+c>Vq8BgH8$+D4z*Cy-bgY(=5Xu{6b zK`{2_eZll$RSH%<>yYAXtinYZZs)RALKzK>ISWozI7oFo;ASDkAa(AQe1?OB8{_;M zmJ>bSpvI=8*Wf3QQ|G*OoBMvbDn0CZ3|a~3Zw_Wzuv`kD3yqWU1qw^P-!7(|`IV5? z+8wmNNrKR_o=HZlMs7x0->Ha9P;+HE+IBa4C;Z-3i3n|1Cra3@p%Uo~W!_>VcLbf> zE(o|=1hn$Q6`u!QaVfN(&6QT24eupq2Y7-{1HKTN=+@;Xlw8?jf-{6;|m{hSmT62MjKDn*aa+ diff --git a/.metadata/.plugins/org.eclipse.wst.jsdt.core/indexes/3371662347.index b/.metadata/.plugins/org.eclipse.wst.jsdt.core/indexes/3371662347.index deleted file mode 100644 index 05e11714cc2e584120d08a13efda48502aeca7cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6588 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 diff --git a/.metadata/.plugins/org.eclipse.wst.jsdt.core/indexes/707046764.index b/.metadata/.plugins/org.eclipse.wst.jsdt.core/indexes/707046764.index deleted file mode 100644 index e00d71e44fd5a3cb88ab1b20a323d9d3064dc063..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23126 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 diff --git a/.metadata/.plugins/org.eclipse.wst.jsdt.core/indexes/savedIndexNames.txt b/.metadata/.plugins/org.eclipse.wst.jsdt.core/indexes/savedIndexNames.txt index 2946328..e08a7e0 100644 --- a/.metadata/.plugins/org.eclipse.wst.jsdt.core/indexes/savedIndexNames.txt +++ b/.metadata/.plugins/org.eclipse.wst.jsdt.core/indexes/savedIndexNames.txt @@ -1,8 +1,21 @@ -INDEX VERSION 1.4+C:\Users\andrey.cunha\eclipse-workspace.new\.metadata\.plugins\org.eclipse.wst.jsdt.core\indexes -17091598.index -4202715187.index -2938933076.index +INDEX VERSION 1.4+C:\Python\Python\Python\Fluig geral\fluig\.metadata\.plugins\org.eclipse.wst.jsdt.core\indexes +3537614094.index +1478047577.index +3128569756.index +1860298949.index +2822718276.index +2568227984.index +4052977093.index +1053469344.index +3974601650.index +1034765801.index +1357543591.index +1408135880.index +1600244917.index +2317861947.index +2276237669.index +3963123655.index 7156200.index -3528551409.index -707046764.index -3371662347.index +2333158432.index +457859505.index +1268003346.index diff --git a/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/fluigAPI.js b/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/fluigAPI.js index eb37215..f332cb7 100644 --- a/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/fluigAPI.js +++ b/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/fluigAPI.js @@ -111,6 +111,8 @@ com.fluig.sdk.api.task.TaskKindEnum = function() {}; com.fluig.sdk.api.task.TaskKindEnum.prototype = {}; com.fluig.sdk.api.task.TaskStatusEnum = function() {}; com.fluig.sdk.api.task.TaskStatusEnum.prototype = {}; +com.fluig.sdk.api.task.TaskTransferVO = function() {}; +com.fluig.sdk.api.task.TaskTransferVO.prototype = {}; com.fluig.sdk.api.workflow.AssumeProcessTaskResultVO = function() {}; com.fluig.sdk.api.workflow.AssumeProcessTaskResultVO.prototype = {}; com.fluig.sdk.api.workflow.AssumeProcessTaskVO = function() {}; @@ -217,6 +219,8 @@ com.fluig.sdk.filter.FilterOrderVO = function() {}; com.fluig.sdk.filter.FilterOrderVO.prototype = {}; com.fluig.sdk.filter.FilterResultVO = function() {}; com.fluig.sdk.filter.FilterResultVO.prototype = {}; +com.fluig.sdk.filter.FilterUpdateNameVO = function() {}; +com.fluig.sdk.filter.FilterUpdateNameVO.prototype = {}; com.fluig.sdk.filter.FilterVO = function() {}; com.fluig.sdk.filter.FilterVO.prototype = {}; com.fluig.sdk.holiday.HolidayVO = function() {}; @@ -1524,6 +1528,13 @@ com.fluig.sdk.service.SecurityService.prototype = { */ "getCurrentTenant": function() {}, /** + * Get the current tenant + * @memberOf fluigAPI + * @param {long} tenantId + * @returns {com.fluig.sdk.tenant.TenantVO} + */ + "getCurrentTenantById": function(tenantId) {}, + /** * * @memberOf fluigAPI * @param {long} companyId @@ -1623,6 +1634,13 @@ SecurityService.prototype = { */ "getCurrentTenant": function() {}, /** + * Get the current tenant + * @memberOf fluigAPI + * @param {long} tenantId + * @returns {com.fluig.sdk.tenant.TenantVO} + */ + "getCurrentTenantById": function(tenantId) {}, + /** * * @memberOf fluigAPI * @param {long} companyId @@ -3888,6 +3906,7 @@ com.fluig.sdk.service.GroupService.prototype = { * @memberOf fluigAPI * @param {String} groupCode * @param {List} logins + * @returns {List<String>} */ "addUsers": function(groupCode, logins) {}, /** @@ -3955,6 +3974,7 @@ GroupService.prototype = { * @memberOf fluigAPI * @param {String} groupCode * @param {List} logins + * @returns {List<String>} */ "addUsers": function(groupCode, logins) {}, /** @@ -11785,7 +11805,19 @@ com.fluig.sdk.api.workflow.ProcessDefinitionVO.prototype = { * @memberOf fluigAPI * @param {String} processDescription */ - "setProcessDescription": function(processDescription) {} + "setProcessDescription": function(processDescription) {}, + /** + * Recupera valor do icon + * @memberOf fluigAPI + * @returns {String} + */ + "getIcon": function() {}, + /** + * Atribui valor para icon + * @memberOf fluigAPI + * @param {String} icon + */ + "setIcon": function(icon) {} }; ProcessDefinitionVO.prototype = { /** @@ -11811,7 +11843,19 @@ ProcessDefinitionVO.prototype = { * @memberOf fluigAPI * @param {String} processDescription */ - "setProcessDescription": function(processDescription) {} + "setProcessDescription": function(processDescription) {}, + /** + * Recupera valor do icon + * @memberOf fluigAPI + * @returns {String} + */ + "getIcon": function() {}, + /** + * Atribui valor para icon + * @memberOf fluigAPI + * @param {String} icon + */ + "setIcon": function(icon) {} }; com.fluig.sdk.api.workflow.ResumeProcessTaskVO.prototype = { /** @@ -18889,6 +18933,322 @@ ResumedTasksVO.prototype = { */ "setChildren": function(children) {} }; +com.fluig.sdk.api.task.TaskTransferVO.prototype = { + /** + * Recupera valor do userTo + * @memberOf fluigAPI + * @returns {String} + */ + "getUserTo": function() {}, + /** + * Atribui valor para userTo + * @memberOf fluigAPI + * @param {String} userTo + */ + "setUserTo": function(userTo) {}, + /** + * Recupera valor do userFrom + * @memberOf fluigAPI + * @returns {String} + */ + "getUserFrom": function() {}, + /** + * Atribui valor para userFrom + * @memberOf fluigAPI + * @param {String} userFrom + */ + "setUserFrom": function(userFrom) {}, + /** + * Recupera valor do transferActiveDocuments + * @memberOf fluigAPI + * @returns {boolean} + */ + "getTransferActiveDocuments": function() {}, + /** + * Atribui valor para transferActiveDocuments + * @memberOf fluigAPI + * @param {boolean} transferActiveDocuments + */ + "setTransferActiveDocuments": function(transferActiveDocuments) {}, + /** + * Recupera valor do transferMyDocumentsInApproval + * @memberOf fluigAPI + * @returns {boolean} + */ + "getTransferMyDocumentsInApproval": function() {}, + /** + * Atribui valor para transferMyDocumentsInApproval + * @memberOf fluigAPI + * @param {boolean} transferMyDocumentsInApproval + */ + "setTransferMyDocumentsInApproval": function(transferMyDocumentsInApproval) {}, + /** + * Recupera valor do transferPendingWorkflow + * @memberOf fluigAPI + * @returns {boolean} + */ + "getTransferPendingWorkflow": function() {}, + /** + * Atribui valor para transferPendingWorkflow + * @memberOf fluigAPI + * @param {boolean} transferPendingWorkflow + */ + "setTransferPendingWorkflow": function(transferPendingWorkflow) {}, + /** + * Recupera valor do transferOpenWorkflow + * @memberOf fluigAPI + * @returns {boolean} + */ + "getTransferOpenWorkflow": function() {}, + /** + * Atribui valor para transferOpenWorkflow + * @memberOf fluigAPI + * @param {boolean} transferOpenWorkflow + */ + "setTransferOpenWorkflow": function(transferOpenWorkflow) {}, + /** + * Recupera valor do transferApprovers + * @memberOf fluigAPI + * @returns {boolean} + */ + "getTransferApprovers": function() {}, + /** + * Atribui valor para transferApprovers + * @memberOf fluigAPI + * @param {boolean} transferApprovers + */ + "setTransferApprovers": function(transferApprovers) {}, + /** + * Recupera valor do transferApprovals + * @memberOf fluigAPI + * @returns {boolean} + */ + "getTransferApprovals": function() {}, + /** + * Atribui valor para transferApprovals + * @memberOf fluigAPI + * @param {boolean} transferApprovals + */ + "setTransferApprovals": function(transferApprovals) {}, + /** + * Recupera valor do transferDocumentSecurity + * @memberOf fluigAPI + * @returns {boolean} + */ + "getTransferDocumentSecurity": function() {}, + /** + * Atribui valor para transferDocumentSecurity + * @memberOf fluigAPI + * @param {boolean} transferDocumentSecurity + */ + "setTransferDocumentSecurity": function(transferDocumentSecurity) {}, + /** + * Recupera valor do instanceIdInitial + * @memberOf fluigAPI + * @returns {int} + */ + "getInstanceIdInitial": function() {}, + /** + * Atribui valor para instanceIdInitial + * @memberOf fluigAPI + * @param {int} instanceIdInitial + */ + "setInstanceIdInitial": function(instanceIdInitial) {}, + /** + * Recupera valor do instanceIdFinal + * @memberOf fluigAPI + * @returns {int} + */ + "getInstanceIdFinal": function() {}, + /** + * Atribui valor para instanceIdFinal + * @memberOf fluigAPI + * @param {int} instanceIdFinal + */ + "setInstanceIdFinal": function(instanceIdFinal) {}, + /** + * Recupera valor do documentIdInitial + * @memberOf fluigAPI + * @returns {int} + */ + "getDocumentIdInitial": function() {}, + /** + * Atribui valor para documentIdInitial + * @memberOf fluigAPI + * @param {int} documentIdInitial + */ + "setDocumentIdInitial": function(documentIdInitial) {}, + /** + * Recupera valor do documentIdFinal + * @memberOf fluigAPI + * @returns {int} + */ + "getDocumentIdFinal": function() {}, + /** + * Atribui valor para documentIdFinal + * @memberOf fluigAPI + * @param {int} documentIdFinal + */ + "setDocumentIdFinal": function(documentIdFinal) {} +}; +TaskTransferVO.prototype = { + /** + * Recupera valor do userTo + * @memberOf fluigAPI + * @returns {String} + */ + "getUserTo": function() {}, + /** + * Atribui valor para userTo + * @memberOf fluigAPI + * @param {String} userTo + */ + "setUserTo": function(userTo) {}, + /** + * Recupera valor do userFrom + * @memberOf fluigAPI + * @returns {String} + */ + "getUserFrom": function() {}, + /** + * Atribui valor para userFrom + * @memberOf fluigAPI + * @param {String} userFrom + */ + "setUserFrom": function(userFrom) {}, + /** + * Recupera valor do transferActiveDocuments + * @memberOf fluigAPI + * @returns {boolean} + */ + "getTransferActiveDocuments": function() {}, + /** + * Atribui valor para transferActiveDocuments + * @memberOf fluigAPI + * @param {boolean} transferActiveDocuments + */ + "setTransferActiveDocuments": function(transferActiveDocuments) {}, + /** + * Recupera valor do transferMyDocumentsInApproval + * @memberOf fluigAPI + * @returns {boolean} + */ + "getTransferMyDocumentsInApproval": function() {}, + /** + * Atribui valor para transferMyDocumentsInApproval + * @memberOf fluigAPI + * @param {boolean} transferMyDocumentsInApproval + */ + "setTransferMyDocumentsInApproval": function(transferMyDocumentsInApproval) {}, + /** + * Recupera valor do transferPendingWorkflow + * @memberOf fluigAPI + * @returns {boolean} + */ + "getTransferPendingWorkflow": function() {}, + /** + * Atribui valor para transferPendingWorkflow + * @memberOf fluigAPI + * @param {boolean} transferPendingWorkflow + */ + "setTransferPendingWorkflow": function(transferPendingWorkflow) {}, + /** + * Recupera valor do transferOpenWorkflow + * @memberOf fluigAPI + * @returns {boolean} + */ + "getTransferOpenWorkflow": function() {}, + /** + * Atribui valor para transferOpenWorkflow + * @memberOf fluigAPI + * @param {boolean} transferOpenWorkflow + */ + "setTransferOpenWorkflow": function(transferOpenWorkflow) {}, + /** + * Recupera valor do transferApprovers + * @memberOf fluigAPI + * @returns {boolean} + */ + "getTransferApprovers": function() {}, + /** + * Atribui valor para transferApprovers + * @memberOf fluigAPI + * @param {boolean} transferApprovers + */ + "setTransferApprovers": function(transferApprovers) {}, + /** + * Recupera valor do transferApprovals + * @memberOf fluigAPI + * @returns {boolean} + */ + "getTransferApprovals": function() {}, + /** + * Atribui valor para transferApprovals + * @memberOf fluigAPI + * @param {boolean} transferApprovals + */ + "setTransferApprovals": function(transferApprovals) {}, + /** + * Recupera valor do transferDocumentSecurity + * @memberOf fluigAPI + * @returns {boolean} + */ + "getTransferDocumentSecurity": function() {}, + /** + * Atribui valor para transferDocumentSecurity + * @memberOf fluigAPI + * @param {boolean} transferDocumentSecurity + */ + "setTransferDocumentSecurity": function(transferDocumentSecurity) {}, + /** + * Recupera valor do instanceIdInitial + * @memberOf fluigAPI + * @returns {int} + */ + "getInstanceIdInitial": function() {}, + /** + * Atribui valor para instanceIdInitial + * @memberOf fluigAPI + * @param {int} instanceIdInitial + */ + "setInstanceIdInitial": function(instanceIdInitial) {}, + /** + * Recupera valor do instanceIdFinal + * @memberOf fluigAPI + * @returns {int} + */ + "getInstanceIdFinal": function() {}, + /** + * Atribui valor para instanceIdFinal + * @memberOf fluigAPI + * @param {int} instanceIdFinal + */ + "setInstanceIdFinal": function(instanceIdFinal) {}, + /** + * Recupera valor do documentIdInitial + * @memberOf fluigAPI + * @returns {int} + */ + "getDocumentIdInitial": function() {}, + /** + * Atribui valor para documentIdInitial + * @memberOf fluigAPI + * @param {int} documentIdInitial + */ + "setDocumentIdInitial": function(documentIdInitial) {}, + /** + * Recupera valor do documentIdFinal + * @memberOf fluigAPI + * @returns {int} + */ + "getDocumentIdFinal": function() {}, + /** + * Atribui valor para documentIdFinal + * @memberOf fluigAPI + * @param {int} documentIdFinal + */ + "setDocumentIdFinal": function(documentIdFinal) {} +}; com.fluig.sdk.service.TasksService.prototype = { /** * Busca os documentos para aprovação @@ -19009,6 +19369,13 @@ com.fluig.sdk.service.TasksService.prototype = { */ "transferTasks": function(transferOptions) {}, /** + * Transfer tasks from one user to another + * @memberOf fluigAPI + * @param {com.fluig.sdk.api.task.TaskTransferVO} tasksTransfer + * @returns {String} + */ + "transferTasks": function(tasksTransfer) {}, + /** * Return users pendent to approve a document * @memberOf fluigAPI * @param {int} documentId @@ -19136,6 +19503,13 @@ TasksService.prototype = { */ "transferTasks": function(transferOptions) {}, /** + * Transfer tasks from one user to another + * @memberOf fluigAPI + * @param {com.fluig.sdk.api.task.TaskTransferVO} tasksTransfer + * @returns {String} + */ + "transferTasks": function(tasksTransfer) {}, + /** * Return users pendent to approve a document * @memberOf fluigAPI * @param {int} documentId @@ -23558,7 +23932,19 @@ com.fluig.sdk.filter.FilterResultVO.prototype = { * @memberOf fluigAPI * @param filterOrder */ - "setFilterOrder": function(filterOrder) {} + "setFilterOrder": function(filterOrder) {}, + /** + * + * @memberOf fluigAPI + * @returns {int} + */ + "getPermission": function() {}, + /** + * + * @memberOf fluigAPI + * @param {int} permission + */ + "setPermission": function(permission) {} }; FilterResultVO.prototype = { /** @@ -23679,7 +24065,19 @@ FilterResultVO.prototype = { * @memberOf fluigAPI * @param filterOrder */ - "setFilterOrder": function(filterOrder) {} + "setFilterOrder": function(filterOrder) {}, + /** + * + * @memberOf fluigAPI + * @returns {int} + */ + "getPermission": function() {}, + /** + * + * @memberOf fluigAPI + * @param {int} permission + */ + "setPermission": function(permission) {} }; com.fluig.sdk.filter.FilterVO.prototype = { /** @@ -23995,7 +24393,43 @@ com.fluig.sdk.filter.FilterGroupResultVO.prototype = { * @memberOf fluigAPI * @param {String} roleDescription */ - "setRoleDescription": function(roleDescription) {} + "setRoleDescription": function(roleDescription) {}, + /** + * + * @memberOf fluigAPI + * @returns {long} + */ + "getGroupParticipantsCount": function() {}, + /** + * + * @memberOf fluigAPI + * @param {long} groupParticipantsCount + */ + "setGroupParticipantsCount": function(groupParticipantsCount) {}, + /** + * + * @memberOf fluigAPI + * @returns {String} + */ + "getUserEmail": function() {}, + /** + * + * @memberOf fluigAPI + * @param {String} userEmail + */ + "setUserEmail": function(userEmail) {}, + /** + * + * @memberOf fluigAPI + * @returns {int} + */ + "getPermission": function() {}, + /** + * + * @memberOf fluigAPI + * @param {int} permission + */ + "setPermission": function(permission) {} }; FilterGroupResultVO.prototype = { /** @@ -24141,7 +24575,43 @@ FilterGroupResultVO.prototype = { * @memberOf fluigAPI * @param {String} roleDescription */ - "setRoleDescription": function(roleDescription) {} + "setRoleDescription": function(roleDescription) {}, + /** + * + * @memberOf fluigAPI + * @returns {long} + */ + "getGroupParticipantsCount": function() {}, + /** + * + * @memberOf fluigAPI + * @param {long} groupParticipantsCount + */ + "setGroupParticipantsCount": function(groupParticipantsCount) {}, + /** + * + * @memberOf fluigAPI + * @returns {String} + */ + "getUserEmail": function() {}, + /** + * + * @memberOf fluigAPI + * @param {String} userEmail + */ + "setUserEmail": function(userEmail) {}, + /** + * + * @memberOf fluigAPI + * @returns {int} + */ + "getPermission": function() {}, + /** + * + * @memberOf fluigAPI + * @param {int} permission + */ + "setPermission": function(permission) {} }; com.fluig.sdk.filter.FilterGroupVO.prototype = { /** @@ -24191,7 +24661,19 @@ com.fluig.sdk.filter.FilterGroupVO.prototype = { * @memberOf fluigAPI * @param {List} rolesCode */ - "setRolesCode": function(rolesCode) {} + "setRolesCode": function(rolesCode) {}, + /** + * + * @memberOf fluigAPI + * @returns {Map<String,>} + */ + "getEntityPermissions": function() {}, + /** + * + * @memberOf fluigAPI + * @param {Map} entityPermissions + */ + "setEntityPermissions": function(entityPermissions) {} }; FilterGroupVO.prototype = { /** @@ -24241,7 +24723,47 @@ FilterGroupVO.prototype = { * @memberOf fluigAPI * @param {List} rolesCode */ - "setRolesCode": function(rolesCode) {} + "setRolesCode": function(rolesCode) {}, + /** + * + * @memberOf fluigAPI + * @returns {Map<String,>} + */ + "getEntityPermissions": function() {}, + /** + * + * @memberOf fluigAPI + * @param {Map} entityPermissions + */ + "setEntityPermissions": function(entityPermissions) {} +}; +com.fluig.sdk.filter.FilterUpdateNameVO.prototype = { + /** + * + * @memberOf fluigAPI + * @returns {String} + */ + "getName": function() {}, + /** + * + * @memberOf fluigAPI + * @param {String} name + */ + "setName": function(name) {} +}; +FilterUpdateNameVO.prototype = { + /** + * + * @memberOf fluigAPI + * @returns {String} + */ + "getName": function() {}, + /** + * + * @memberOf fluigAPI + * @param {String} name + */ + "setName": function(name) {} }; com.fluig.sdk.service.FilterAPIService.prototype = { /** @@ -24252,9 +24774,10 @@ com.fluig.sdk.service.FilterAPIService.prototype = { * @param {String} pattern * @param {int} limit * @param {int} offset + * @param {String} orderBy * @returns {List<com.fluig.sdk.filter.FilterResultVO>} */ - "getProcessFilters": function(onlyMyFilters, findPublicFilters, pattern, limit, offset) {}, + "getProcessFilters": function(onlyMyFilters, findPublicFilters, pattern, limit, offset, orderBy) {}, /** * * @memberOf fluigAPI @@ -24314,7 +24837,15 @@ com.fluig.sdk.service.FilterAPIService.prototype = { * @param {long} applicationInstanceId * @param {Map} filtersSequence */ - "updateFilterSequence": function(applicationInstanceId, filtersSequence) {} + "updateFilterSequence": function(applicationInstanceId, filtersSequence) {}, + /** + * + * @memberOf fluigAPI + * @param {long} filterId + * @param {com.fluig.sdk.filter.FilterUpdateNameVO} filterUpdateNameVO + * @returns {com.fluig.sdk.filter.FilterResultVO} + */ + "updateFilterName": function(filterId, filterUpdateNameVO) {} }; FilterAPIService.prototype = { /** @@ -24325,9 +24856,10 @@ FilterAPIService.prototype = { * @param {String} pattern * @param {int} limit * @param {int} offset + * @param {String} orderBy * @returns {List<com.fluig.sdk.filter.FilterResultVO>} */ - "getProcessFilters": function(onlyMyFilters, findPublicFilters, pattern, limit, offset) {}, + "getProcessFilters": function(onlyMyFilters, findPublicFilters, pattern, limit, offset, orderBy) {}, /** * * @memberOf fluigAPI @@ -24387,7 +24919,15 @@ FilterAPIService.prototype = { * @param {long} applicationInstanceId * @param {Map} filtersSequence */ - "updateFilterSequence": function(applicationInstanceId, filtersSequence) {} + "updateFilterSequence": function(applicationInstanceId, filtersSequence) {}, + /** + * + * @memberOf fluigAPI + * @param {long} filterId + * @param {com.fluig.sdk.filter.FilterUpdateNameVO} filterUpdateNameVO + * @returns {com.fluig.sdk.filter.FilterResultVO} + */ + "updateFilterName": function(filterId, filterUpdateNameVO) {} }; com.fluig.sdk.api.workflow.CardIndexAPIVO.prototype = { /** @@ -25467,7 +26007,19 @@ com.fluig.sdk.api.cardindex.CardFieldVO.prototype = { * @memberOf fluigAPI * @param {String} value */ - "setValue": function(value) {} + "setValue": function(value) {}, + /** + * + * @memberOf fluigAPI + * @returns {String} + */ + "getTableId": function() {}, + /** + * + * @memberOf fluigAPI + * @param {String} tableId + */ + "setTableId": function(tableId) {} }; CardFieldVO.prototype = { /** @@ -25493,7 +26045,19 @@ CardFieldVO.prototype = { * @memberOf fluigAPI * @param {String} value */ - "setValue": function(value) {} + "setValue": function(value) {}, + /** + * + * @memberOf fluigAPI + * @returns {String} + */ + "getTableId": function() {}, + /** + * + * @memberOf fluigAPI + * @param {String} tableId + */ + "setTableId": function(tableId) {} }; com.fluig.sdk.api.cardindex.CardChildrenVO.prototype = { /** diff --git a/.metadata/.plugins/org.eclipse.wst.jsdt.core/variablesAndContainers.dat b/.metadata/.plugins/org.eclipse.wst.jsdt.core/variablesAndContainers.dat index 1f7582d8df18e590e7629ac9a1170d7d53ae95fd..a71a0e897eb9a063d8b69275a8a6badc518ecb4b 100644 GIT binary patch literal 3281 zcmchZOK;Oa5P&Dp^qDq=@+gl(egLw?0U>c~(}0TF5~WDMDcaZ@d(*Yo?5-1h;MZ{I z56K^6$7zj4D{XSHBl)qhX7-!c&H%sz0N65@xgVuI(?T+07Wg+b;Ej-hLp{zCMV*<_ z&P4gz;UtZ{ki~)XdC(hnzg&DhI=$!(atV}Mh&L85lkNw%pXpG<|2;nPlm(rDO2XYS zzPnCDHSviiu9NUIV6k%V-QN?Ex}1$9k&G%=WlGb?pygYeTO;54;qCJFxdw0VRrk-F z5mEG5ikYJFELWcy*)`N?E_6w*xCztBZMsWx*S;LaK;=KAD+t%&XZ3^&KYe4dFJ=}v z3`GIA0YT+(zd~t2!l)KVn-ErxUwA2|;fc0|5!**mO6?lZNRmh~rP7YJT}Iol;oO## z6HWb-rJaZMSvc$C zgJMn{dLi|$I8*w@pygCNhy71xwxn@j6p)Dc0w+f-!sX--;c!4bnd(KG?$FL9<#c{M z|5Iw&0JohNyBu~EJi+m(#4`!MVL@T?VxnL~mfQRVw9PP(NTP;53z#O{NZyPIRqgo_ fHgPIfRIlc!SI`^_8LcMt8d{vh^Xr9kSCfUmwc-iy literal 2722 zcmchZ%Wl*#6oyYr?^mEa1~_7Ykl0PrSroOU8bH9Ra_rN@Gl`wr&ZJrK>Np*UJW3_A zvL#E2?Zn^z+djttun7Pgt^%A*8ZNBTg5I$L*`gH2y5<*s-v)eSsv=g|r6HCZf~+DO zjmRZxQi^PD$a(imHPiI^T&vcgz7m@W&hyWlQNiZVd9?~@%xIUiZqsU|N~ zMniB1KHM>s5%yloDq4$xX>bB>pG`R>Z6qs%%*p53^e+8!^KEi@Go3jZeNgHX-w-HI zqsTFxu~?1eI1;bCg!chC88tXc - + diff --git a/.metadata/version.ini b/.metadata/version.ini index bdc984e..494c5e3 100644 --- a/.metadata/version.ini +++ b/.metadata/version.ini @@ -1,3 +1,3 @@ -#Wed Mar 11 10:41:09 BRT 2026 +#Wed Apr 15 13:16:19 BRT 2026 org.eclipse.core.runtime=2 org.eclipse.platform=4.13.0.v20190916-1045 diff --git a/Desligamento/forms/Desligamento/Desligamento.html b/Desligamento/forms/Desligamento/Desligamento.html index b2d2844..d128921 100644 --- a/Desligamento/forms/Desligamento/Desligamento.html +++ b/Desligamento/forms/Desligamento/Desligamento.html @@ -8,18 +8,18 @@ - + - + - + @@ -53,7 +53,7 @@
- +
@@ -77,11 +77,11 @@

-  Informaes gerais   +  Informa��es gerais  

- Estes so os dados referentes aos responsveis pela abertura e - pela solicitao do atual processo. + Estes s�o os dados referentes aos respons�veis pela abertura e + pela solicita��o do atual processo.

@@ -90,9 +90,9 @@
- +
@@ -134,27 +134,27 @@ ] }" />

- Preenchimento obrigatrio. + Preenchimento obrigat�rio.

- +
@@ -167,14 +167,14 @@
- +
@@ -193,9 +193,9 @@
@@ -208,7 +208,7 @@
@@ -229,12 +229,12 @@ -
+

-  Aprovao de Desligamento   +  Análise de Desligamento  


@@ -242,9 +242,71 @@
- + + +
+
+ + +
+
+
+
+
+
+
+
+ + * + +
+
+ +
+
+
+
+
+
+
+
+
+
+ + * + +
+
+
+
+
+ +
+
+
+

+ +  Aprova��o de Desligamento   +

+
+
+
+
+
+
+
@@ -268,8 +330,8 @@
@@ -298,7 +360,7 @@

-  Previso de Desligamento   +  Previs�o de Desligamento  

Insira abaixo detalhes adicionais.

@@ -307,7 +369,7 @@
- +
- at + at�
@@ -346,59 +408,59 @@
- +
- +
- +
- +
- +
- +
@@ -407,7 +469,7 @@
@@ -416,7 +478,7 @@
@@ -424,7 +486,7 @@
@@ -436,7 +498,7 @@
- + * @@ -450,7 +512,7 @@

-  Anlise de Conformidades   +  An�lise de Conformidades  


@@ -458,9 +520,9 @@
- +
@@ -484,7 +546,7 @@
@@ -496,7 +558,7 @@
- + *
@@ -510,16 +572,16 @@

-  Informaes Gerencias do Colaborador   +  Informa��es Gerencias do Colaborador  

-
Insira abaixo as informaes.
+
Insira abaixo as informa��es.

- +
@@ -564,7 +626,7 @@ Categoria Valor / Quantidade - Aes + A��es @@ -573,8 +635,8 @@ @@ -615,7 +677,7 @@ Categoria Valor / Quantidade - Aes + A��es @@ -688,9 +750,9 @@
- +
- Pssimo + P�ssimo
Excelente
@@ -703,7 +765,7 @@
- + * @@ -728,7 +790,7 @@
- +
- + *
@@ -754,7 +816,7 @@
@@ -779,12 +841,12 @@
- tambm comea escondido --> + tamb�m come�a escondido --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + +
+ +

Desligamento de colaborador

+ +
+
+
+
+

+ +  Informa��es gerais   +

+
+ Estes s�o os dados referentes aos respons�veis pela abertura e + pela solicita��o do atual processo. +
+
+
+ +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+ + * + +

+ Preenchimento obrigat�rio. +

+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+
+
+ + +
+ + +
+ + + + +
+
+
+
+
+
+
+ + * + +
+
+
+
+
+ +
+
+
+

+ +  Análise de Desligamento   +

+
+
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+ + * + +
+
+ +
+
+
+
+
+
+
+
+
+
+ + * + +
+
+
+
+
+ +
+
+
+

+ +  Aprova��o de Desligamento   +

+
+
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+ + * + +
+
+ +
+
+
+
+
+
+
+
+
+
+ + * + +
+
+
+
+ +
+ +
+ +
+
+

+ +  Previs�o de Desligamento   +

+
Insira abaixo detalhes adicionais.
+
+
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+ +
+ + at� + +
+
+
+
+
+
+
+
+
+ + * + +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+ + +
+
+
+
+
+
+
+
+
+
+ + * + +
+
+
+
+
+
+
+
+

+ +  An�lise de Conformidades   +

+
+
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+ + * + +
+
+ +
+
+
+
+
+
+
+
+
+
+ + * + +
+
+
+
+
+
+ +
+
+

+ +  Informa��es Gerencias do Colaborador   +

+
Insira abaixo as informa��es.
+
+
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+ + +
+
+
+
+ +
+ + +
+

Proventos

+ + + + + + + + + + + + + + + + + + + +
CategoriaValor / QuantidadeA��es
+ + +
+ +
+
+ +
+ + +
+ + +
+

Descontos

+ + + + + + + + + + + + + + + + + + + +
CategoriaValor / QuantidadeA��es
+ + +
+ +
+
+ +
+ + +
+
+
+
+
+ + *
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+
+ +
+ P�ssimo +
+ Excelente +
+ +
+
+
+
+
+
+
+
+ + * + +
+
+
+
+
+
+ + + +
+
+
+

+ + +  Desativar acessos   +

+
+
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+ + *
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+ + *
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+ +
+
+
+
+ + * + +
+
+
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/Desligamento/forms/desligamentov2/events/displayFields.js b/Desligamento/forms/desligamentov2/events/displayFields.js new file mode 100644 index 0000000..7e0692c --- /dev/null +++ b/Desligamento/forms/desligamentov2/events/displayFields.js @@ -0,0 +1,39 @@ +function displayFields(form, customHTML) { + var activity = getValue('WKNumState'); + var userId = getValue('WKUser'); + + form.setShowDisabledFields(true); + form.setHidePrintLink(true); + + form.setValue("WKNumProces", getValue('WKNumProces')); + form.setValue("activity", activity); + form.setValue("formMode", form.getFormMode()); + + var c1 = DatasetFactory.createConstraint("colleagueId", userId, userId, ConstraintType.MUST); + var filter = new Array(c1); + var fields = new Array("colleagueName", "mail"); + var retorno = DatasetFactory.getDataset("colleague", fields, filter, null); + + //requester + if (activity == 0 || activity == 4) { + form.setValue("requesterName", retorno.getValue(0, "colleagueName")); + form.setValue("currentUsermail", retorno.getValue(0, "mail")); + form.setValue("currentUserId", userId); + } else { + form.setValue("currentUserName", retorno.getValue(0, "colleagueName")); + form.setValue("currentUsermail", retorno.getValue(0, "mail")); + form.setValue("currentUserId", userId); + } + +//requester + if (activity == 5 || activity == 24) { + form.setValue("requesterName", retorno.getValue(0, "colleagueName")); + form.setValue("requesterMail", retorno.getValue(0, "mail")); + form.setValue("requesterId", userId); + } else { + form.setValue("requesterName", retorno.getValue(0, "colleagueName")); + form.setValue("requesterMail", retorno.getValue(0, "mail")); + form.setValue("requesterId", userId); + } + +} diff --git a/Desligamento/forms/desligamentov2/script.js b/Desligamento/forms/desligamentov2/script.js new file mode 100644 index 0000000..9bccc1a --- /dev/null +++ b/Desligamento/forms/desligamentov2/script.js @@ -0,0 +1,385 @@ +/**************************************************************************************** + * FLUIG - DESLIGAMENTO DO COLABORADOR + * SCRIPT PRINCIPAL ORGANIZADO + ****************************************************************************************/ + +$(window).on("load", function () { + setTimeout(() => { + iniciarFormulario(); + }, 400); +}); + +/**************************************************************************************** + * INICIALIZAÇÃO DO FORMULÁRIO + ****************************************************************************************/ +function iniciarFormulario() { + + const activity = parseInt($("#activity").val() || 0); + const formMode = $("#formMode").val() || "ADD"; + const requestDate = getCurrentDate(); + + $(".activity").hide(); // Oculta todas por padrão + + if (formMode === "VIEW") { + $(".activity").show(); + showAndBlock(["all"]); + return; + } + + if ([0, 4].includes(activity)) { + $(".activity-4").show(); + $("#requesterName").val($("#requesterName").val() || $("#currentUserName").val()); + $("#emailGestorArea").val($("#requesterMail").val() || $("#currentUsermail").val()); + $("#dataAbertura").val(`${requestDate[0]} - ${requestDate[1]}`); + } + + if (activity === 51) { + $(".activity-4, .activity-51").show(); + showAndBlock([4]); + $("#userAprova").val($("#currentUserName").val()); + $("#dataUserAprova").val(`${requestDate[0]} - ${requestDate[1]}`); + } + + if (activity === 20) { + $(".activity-4, .activity-20").show(); + showAndBlock([4, 51]); + $("#userAprov").val($("#currentUserName").val()); + $("#dataUserAprov").val(`${requestDate[0]} - ${requestDate[1]}`); + } + + if (activity === 22) { + $(".activity-4, .activity-20, .activity-22").show(); + showAndBlock([4, 20, 51]); + $("#analistaDesligamento").val($("#currentUserName").val()); + $("#dataPrevista").val(`${requestDate[0]} - ${requestDate[1]}`); + } + + if (activity === 24) { + $(".activity-4, .activity-20, .activity-22, .activity-24").show(); + showAndBlock([4, 20, 22, 51]); + $("#userAprovConf").val($("#currentUserName").val()); + $("#dataUserAprovConf").val(`${requestDate[0]} - ${requestDate[1]}`); + } + + if (activity === 5) { + $(".activity-4, .activity-20, .activity-22, .activity-24, .activity-5").show(); + showAndBlock([4, 20, 22, 24, 51]); + $("#analistaComunicado").val($("#currentUserName").val()); + $("#dataComunicado").val(`${requestDate[0]} - ${requestDate[1]}`); + inicializarEstrelas(); + } + + + if (activity === 15) { + $(".activity-4, .activity-15").show(); + showAndBlock([4]); + $("#userValidacao").val($("#currentUserName").val()); + $("#dataUserValidacao").val(`${requestDate[0]} - ${requestDate[1]}`); + } + + $(`.activity-${activity} :input`) + .prop("readonly", false) + .prop("disabled", false) + .css("background-color", ""); +} + +/**************************************************************************************** + * BLOQUEIO DE ATIVIDADES ANTERIORES + ****************************************************************************************/ +function showAndBlock(list) { + + const current = parseInt($("#activity").val()); + + if (list[0] === "all") { + $(".activity :input") + .prop("readonly", true) + .css("pointer-events", "none") + .css("background-color", "#eee"); + return; + } + + list.forEach(a => { + + $(`.activity-${a}`).show(); + + $(`.activity-${a} :input`).each(function () { + + if ($(this).closest(".activity").hasClass(`activity-${current}`)) return; + + // trava campos normais + $(this) + .prop("readonly", true) + .css("background-color", "#eee") + .css("pointer-events", "none"); + + }); + }); +} + +/**************************************************************************************** + * FUNÇÕES AUXILIARES + ****************************************************************************************/ +function getCurrentDate() { + const now = new Date(); + const pad = n => (n < 10 ? "0" + n : n); + + return [ + `${pad(now.getDate())}/${pad(now.getMonth() + 1)}/${now.getFullYear()}`, + `${pad(now.getHours())}:${pad(now.getMinutes())}` + ]; +} + +/**************************************************************************************** + * ESTRELAS DE AVALIAÇÃO + ****************************************************************************************/ +function inicializarEstrelas() { + + const valorSalvo = parseInt($("#ratingValue").val()) || 0; + + const stars = FLUIGC.stars(".minha-avaliacao", { + stars: 5, + value: valorSalvo, + sizeClass: "icon-md" + }); + + stars.on("click", function () { + const valor = $(".fluigicon-star-active").length; + $("#ratingValue").val(valor); + }); + + setTimeout(() => { + $(".minha-avaliacao .fluigicon-star").each(function (i) { + $(this).css("color", i < valorSalvo ? "#f0ad4e" : "#ccc"); + }); + }, 200); +} + +/**************************************************************************************** + * VALIDAÇÃO DO ENVIO + ****************************************************************************************/ +var beforeSendValidate = function (state) { + + if ([0, 1, 4].includes(state)) { + if (!$("#motivoDesligamento").val()) throw "'Detalhes da situação' é obrigatório."; + } + + if (state == 5) { + if (!$("#detalheSolicitacao").val()) throw "'Detalhamento da situação' é obrigatório."; + } +}; + +/**************************************************************************************** + * EVENTOS DINÂMICOS (EXIBIÇÃO DE CAMPOS) + ****************************************************************************************/ +$(document).ready(function () { + + $("#assinaturaDoc").change(function () { + $(".consegueResolverMotivo, .consideracoesRow").hide(); + if ($(this).val() === "nao") $(".consegueResolverMotivo, .consideracoesRow").slideDown(); + }).trigger("change"); + + $("input[name=feedback]").change(function () { + $(".JustFeedback").toggle($(this).val() === "sim"); + }).trigger("change"); + + $("input[name=situacaoResolvida]").change(function () { + $(".explainAction, .ratingAction").hide(); + if ($(this).val() === "nao") $(".explainAction").show(); + if ($(this).val() === "sim") $(".ratingAction").show(); + }).trigger("change"); + + $("#tipodesligamento").change(function () { + $(".feedbackRow").toggle($(this).val() === "experiencia"); + }).trigger("change"); +}); + +/**************************************************************************************** + * LANÇAMENTOS (PROVENTOS / DESCONTOS) + ****************************************************************************************/ +/**************************************************************************************** + * PROVENTOS — Adicionar linha + ****************************************************************************************/ +function addLinhaProvento() { + let idx = wdkAddChild("tabelaProventos"); + ajustarLinhaProvento(idx); +} + +/**************************************************************************************** + * DESCONTOS — Adicionar linha + ****************************************************************************************/ +function addLinhaDesconto() { + let idx = wdkAddChild("tabelaDescontos"); + ajustarLinhaDesconto(idx); +} + +/**************************************************************************************** + * PROVENTOS — Ajustar linha conforme categoria + ****************************************************************************************/ +function ajustarLinhaProvento(idx) { + + let categoria = $(`select[name="categoriaProvento___${idx}"]`); + let container = $(`input[name="valorProvento___${idx}"]`).parent(); + + categoria.off("change").on("change", function () { + + let valorSalvo = $(`input[name="valorProvento___${idx}"]`).val(); + container.empty(); + + let cat = categoria.val(); + + // === COMISSÃO / PREMIAÇÃO / AVARIAS → DINHEIRO ==== + if (["comissao", "premiacao"].includes(cat)) { + container.append(` + + `); + } + + // === HORAS EXTRAS → HH:MM ==== + else if (cat === "horasextras") { + container.append(` + + `); + } + + // === OUTRO → TEXTO LIVRE ==== + else { + container.append(` + + `); + } + + // Restaurar valor + $(`input[name="valorProvento___${idx}"]`).val(valorSalvo); + + aplicarMascaraDinheiro(); + aplicarMascaraHora(); + }); + + categoria.trigger("change"); +} +/**************************************************************************************** + * DESCONTOS — Ajustar linha conforme categoria + ****************************************************************************************/ +function ajustarLinhaDesconto(idx) { + + let categoria = $(`select[name="categoriaDesconto___${idx}"]`); + let container = $(`input[name="valorDesconto___${idx}"]`).parent(); + + categoria.off("change").on("change", function () { + + let valorSalvo = $(`input[name="valorDesconto___${idx}"]`).val(); + container.empty(); + + let cat = categoria.val(); + + // === FALTAS → INTEIRO ==== + if (cat === "faltas") { + container.append(` + + `); + } + + // === ATRASOS → HH:MM ==== + else if (cat === "atrasos") { + container.append(` + + `); + } + + // === AVARIAS → DINHEIRO ==== + else if (cat === "avarias") { + container.append(` + + `); + } + + // === OUTRO — texto livre ==== + else { + container.append(` + + `); + } + + // Restaurar valor salvo + $(`input[name="valorDesconto___${idx}"]`).val(valorSalvo); + + aplicarMascaraDinheiro(); + aplicarMascaraHora(); + }); + + categoria.trigger("change"); +} + +/**************************************************************************************** + * Restauração automática ao recarregar o formulário + ****************************************************************************************/ +function restaurarTodasLinhas() { + + // PROVENTOS + $("select.categoriaProvento").each(function () { + let idx = this.name.split("___")[1]; + ajustarLinhaProvento(idx); + }); + + // DESCONTOS + $("select.categoriaDesconto").each(function () { + let idx = this.name.split("___")[1]; + ajustarLinhaDesconto(idx); + }); +} + +// Sempre que o Fluig recriar o pai-filho +document.addEventListener("DOMNodeInserted", function (e) { + + if ($(e.target).closest("#tabelaProventos").length > 0 || + $(e.target).closest("#tabelaDescontos").length > 0) { + + setTimeout(restaurarTodasLinhas, 200); + } +}); + +/**************************************************************************************** + * Máscara de dinheiro + ****************************************************************************************/ +function aplicarMascaraDinheiro() { + $(".money").mask("#.##0,00", { reverse: true }); +} + +function aplicarMascaraHora() { + $('.timehhmm').mask('00:00'); +} + + + +// Sempre que o Fluig alterar o pai-filho, restauramos +document.addEventListener("DOMNodeInserted", function (e) { + if ($(e.target).closest("table#tabelaLancamentos").length > 0) { + setTimeout(restaurarLancamentos, 200); + } +}); + +/**************************************************************************************** + * ZOOM: COLABORADOR + ****************************************************************************************/ +function setSelectedZoomItem(item) { + if (item.inputId === "colabDesliga") { + $("#colabCpf").val(item.cpf || ""); + $("#colabadmissao").val(item.admission_at || ""); + $("#emailColaborador").val(item.email || ""); + $("#departamento").val(item.department || ""); + $("#cargoColaborador").val(item.description || ""); + } +} + +function removedZoomItem(item) { + if (item.inputId === "colabDesliga") { + $("#colabCpf, #colabadmissao, #emailColaborador, #departamento, #cargoColaborador").val(""); + } +} diff --git a/Desligamento/workflow/.resources/Ginseng Produção.ws.cache b/Desligamento/workflow/.resources/Ginseng Produção.ws.cache index 3aeeccd..2009530 100644 --- a/Desligamento/workflow/.resources/Ginseng Produção.ws.cache +++ b/Desligamento/workflow/.resources/Ginseng Produção.ws.cache @@ -1,219 +1,6 @@ - + - - volume - - - - camposFormulario, documentoId = 12959 - - - AcessoSSH - - - acidentaria - - - ActiveDirectory - - - activity - - - analistaComunicado - - - analistaDesligamento - - - Aprovdesligamento - - - cargoColaborador - - - Carregadordonotebook - - - Carregadordotelefone - - - categoriaDesc - - - categoriaProv - - - Chipdecelular - - - colabadmissao - - - colabCpf - - - colabDesliga - - - consideracoes - - - ControladorasFaciais - - - currentUserId - - - currentUsermail - - - currentUserName - - - dataAbertura - - - dataComunicado - - - dataExata - - - dataFim - - - dataInicio - - - dataPrevista - - - dataUserAprov - - - dataUserAprovConf - - - dataUserValidacao - - - departamento - - - DesligamentoAprov - - - detalheSolicitacao - - - Email - - - emailColaborador - - - emailGestorArea - - - Extranet - - - feedbackColaborador - - - Feedz - - - Fluig - - - formMode - - - gestante - - - impeditivosColab - - - infoadicionais - - - InforConf - - - motivoDesligamento - - - Notebook - - - outros - - - pcd - - - preaposentadoria - - - Protheus - - - ratingValue - - - requesterId - - - requesterMail - - - requesterName - - - sindical - - - situacaoResolvida - - - Telefone - - - tipodesligamento - - - trintidiocct - - - trintidioposafastamento - - - trintidioposferias - - - userAprov - - - userAprovConf - - - userValidacao - - - valorDesc - - - valorProv - - - WKNumProces - - - mecanismoGrupo @@ -657,6 +444,56 @@ + + + + Transferencia + + + Transferencia + + + + + + + Fiscal + + + Fiscal + + + + + + + motoristaAL + + + motoristaAL + + + + + + + motoristaBA + + + motoristaBA + + + + + + + motoristaSE + + + motoristaSE + + + @@ -676,167 +513,6 @@ - - camposFormulario, documentoId = 590 - - - activity - - - centroCusto - - - codigoItem - - - consideracoesCompras - - - consideracoesCotacao - - - currentUserId - - - currentUsermail - - - currentUserName - - - dataAbertura - - - dataAprovCompras - - - dataRealizacaoCompras - - - dataValidacaoCompras - - - dataValidacaoGestor - - - dataValidacaoItens - - - descricao - - - emailSolicitante - - - estabelecimento - - - excelUpload - - - fdAnexo_Coleta - - - fdAnexo_embalar - - - fdAnexo_Entrega - - - fdAnexo_Nfe - - - fdAnexo_recebimento - - - fnAnexo_Coleta - - - fnAnexo_embalar - - - fnAnexo_Entrega - - - fnAnexo_Nfe - - - fnAnexo_recebimento - - - formMode - - - gestorEmail - - - gestorEmailE - - - gestorNome - - - gestorNomeE - - - gestor_cc - - - gestor_cce - - - justificativa - - - justificativaDecisaoCompras - - - justificativaDecisaoGestor - - - justificativaDecisaoItens - - - justificativaValidaProblema - - - quantidadeItem - - - requesterId - - - requesterMail - - - requesterName - - - userCotacaoGestor - - - userRealizacaoCompras - - - userSolicitante - - - userValidacaoCompras - - - userValidacaoGestor - - - userValidacaoItens - - - validacaoItens - - - WKNumProces - - - mecanismo @@ -962,504 +638,5 @@ - - forms - - - - - FLUIGADHOC - - - FLUIGADHOC - - - 3 - - - - - - - FLUIGADHOCPROCESS - - - FLUIGADHOCPROCESS - - - 4 - - - - - - - totvsflow_dataset_tipo_ocorrencia - - - totvsflow_dataset_tipo_ocorrencia - - - 14 - - - - - - - totvsflow_abertura_chamado - - - totvsflow_abertura_chamado - - - 15 - - - - - - - DSFormulariodeAberturadechamado - - - Formulário de Abertura de chamado - - - 20 - - - - - - - Abertura_de_chamados - - - Solicitação de abertura de chamados - - - 21 - - - - - - - DSvistoriadeServico - - - vistoriadeServico - - - 24 - - - - - - - DSFormulariodeReservadesala - - - Formulário de Reserva de sala - - - 34 - - - - - - - totvsflow_dataset_centrocusto - - - totvsflow_dataset_centrocusto - - - 103 - - - - - - - totvsflow_dataset_cadastro_item - - - totvsflow_dataset_cadastro_item - - - 104 - - - - - - - totvsflow_dataset_estabelecimento - - - totvsflow_dataset_estabelecimento - - - 105 - - - - - - - totvsflow_solicitacao_compras - - - totvsflow_solicitacao_compras - - - 165 - - - - - - - aberturadechamado_manutencao - - - aberturadechamado_manutencao - - - 400 - - - - - - - Solicitacao_transferencia - - - Solicitacao_transferencia - - - 590 - - - - - - - recrutamento - - - recrutamento - - - 823 - - - - - - - kit_aniversariantes - - - Aniversariantes - - - 7690 - - - - - - - kit_cardapio - - - Cardápio do Dia - - - 7695 - - - - - - - kit_convenios - - - Convênios - - - 7703 - - - - - - - kit_news - - - Notícias - - - 7709 - - - - - - - compras_digital - - - compras_digital - - - 9305 - - - - - - - dpf_di_formulario_processo_admissao - - - Digte_Public_Form_Di_Formulario_Processo_Admissao_Protheus - - - 9626 - - - - - - - dpf_cadastro_status - - - Digte_Public_Form_Status - - - 9627 - - - - - - - dpf_configuracoes - - - Digte_Public_Form_Configuracoes - - - 9628 - - - - - - - dpf_cadastro_jornada - - - Digte_Public_Form_Jornada - - - 9629 - - - - - - - dpf_tipo_documento - - - Digte_Public_Form_Tipo_Documento - - - 9630 - - - - - - - dpf_dataset - - - Digte_Public_Form_Dataset - - - 9631 - - - - - - - dpf_di_configuracao - - - Digte_Public_Form_Di_Configuracoes - - - 9632 - - - - - - - dpf_di_beneficio - - - Digte_Public_Form_Di_Beneficios - - - 9633 - - - - - - - dpf_di_compl_contrato - - - Digte_Public_Form_Di_Comp_Contrato - - - 9634 - - - - - - - dpf_di_funcao_jornada - - - Digte_Public_Form_Di_Funcao_Jornada - - - 9635 - - - - - - - dpf_dataset_estrutura - - - Digte_Public_Form_Di_Dataset_Estrutura - - - 9636 - - - - - - - dpf_grupo_tipo_contrato - - - Digte_Public_Form_Grupo_Tipo_Contrato - - - 9637 - - - - - - - dpf_tipo_contrato - - - Digte_Public_Form_Tipo_Contrato - - - 9638 - - - - - - - dpf_di_traducao_campo_valor - - - Digte_Public_Form_Di_Traducao_Campo_Valor - - - 9639 - - - - - - - dpf_di_restricoes_cpf - - - Digte_Public_Form_Di_Formulario_Restricao_CPF - - - 9640 - - - - - - - dpf_di_compl_vt - - - Digte_Public_Form_Di_Compl_VT - - - 9641 - - - - - - - dpf_di_traducao_campo - - - Digte_Public_Form_Di_Traducao_Campo - - - 9995 - - - - - - - desligamento - - - desligamento - - - 12959 - - - - -

diff --git a/Desligamento/workflow/.resources/Ginseng Produção.ws.cache.bkp b/Desligamento/workflow/.resources/Ginseng Produção.ws.cache.bkp index 22ac2f0..36e5557 100644 --- a/Desligamento/workflow/.resources/Ginseng Produção.ws.cache.bkp +++ b/Desligamento/workflow/.resources/Ginseng Produção.ws.cache.bkp @@ -1,5 +1,5 @@ - + volume @@ -9,183 +9,6 @@ - - camposFormulario, documentoId = 12959 - - - activity - - - analistaTecnico - - - complemento - - - consegueResolver - - - consideracoes - - - consideracoesTecnicas - - - currentUserId - - - currentUsermail - - - currentUserName - - - dataAbertura - - - dataAnaliseTecnica - - - dataUserValidacao - - - detalheSolicitacao - - - emailGestorArea - - - emailSolicitante - - - estabelecimento - - - formMode - - - nomeGestorArea - - - possuiInconsistencia - - - ratingValue - - - requesterId - - - requesterMail - - - requesterName - - - situacaoResolvida - - - tipoOcorrencia - - - tituloOcorrencia - - - userSolicitante - - - userValidacao - - - WKNumProces - - - - - mecanismoGrupo - - - - - Tecnologia e Comunicação - - - TIC - - - - - - - Compras Indiretos - - - ComprasIndiretos - - - - - - - Obras e manutenção - - - Manutencao - - - - - - - Aprovadores Compras Nvl 3 - - - AprovadoresComprasNvl3 - - - - - - - Motoristas - - - Motoristas - - - - - - - Requisitantes de Vaga - - - Requisitantesdevaga - - - - - - - Recrutamento - - - Recrutamento - - - - - - - TODOS-TODOS-DIADMISSAO - - - TODOS-TODOS-DIADMISSAO - - - - - expediente @@ -203,167 +26,6 @@ - - processosServidor - - - - - 1 - - - Abertura de Chamado - - - Abertura de chamado Manutenção - - - - - - - 1 - - - desligamentoColaborador - - - desligamentoColaborador - - - - - - - 1 - - - TOTVS RH - Admissão Digital - - - dpf_digte_di_processo_admissao - - - - - - - 1 - - - Abertura de Chamado - - - FlowEssentials_AberturaDeChamado - - - - - - - 1 - - - Solicitação de compra - Totvs - - - FlowEssentials_SolicitacaoDeCompras - - - - - - - 1 - - - Flowservico_terceirizado - - - Flowservico_terceirizado - - - - - - - 1 - - - Listar Tarefas - - - FLUIGADHOC - - - - - - - 1 - - - Recrutamento e seleção - - - Recrutamento e Seleção - - - - - - - 1 - - - Solicitação de compra - Ginseng - - - Solicitação de compras - - - - - - - 1 - - - Solicitação de compra - Ginseng - - - Solicitação de compras - Integração teste - - - - - - - 1 - - - Solicitação de compra - Ginseng - - - Solicitação de compras v2 - - - - - - - 1 - - - Transferência Ginseng - - - Transferência Ginseng - - - - - mecanismo @@ -489,504 +151,5 @@ - - forms - - - - - FLUIGADHOC - - - FLUIGADHOC - - - 3 - - - - - - - FLUIGADHOCPROCESS - - - FLUIGADHOCPROCESS - - - 4 - - - - - - - totvsflow_dataset_tipo_ocorrencia - - - totvsflow_dataset_tipo_ocorrencia - - - 14 - - - - - - - totvsflow_abertura_chamado - - - totvsflow_abertura_chamado - - - 15 - - - - - - - DSFormulariodeAberturadechamado - - - Formulário de Abertura de chamado - - - 20 - - - - - - - Abertura_de_chamados - - - Solicitação de abertura de chamados - - - 21 - - - - - - - DSvistoriadeServico - - - vistoriadeServico - - - 24 - - - - - - - DSFormulariodeReservadesala - - - Formulário de Reserva de sala - - - 34 - - - - - - - totvsflow_dataset_centrocusto - - - totvsflow_dataset_centrocusto - - - 103 - - - - - - - totvsflow_dataset_cadastro_item - - - totvsflow_dataset_cadastro_item - - - 104 - - - - - - - totvsflow_dataset_estabelecimento - - - totvsflow_dataset_estabelecimento - - - 105 - - - - - - - totvsflow_solicitacao_compras - - - totvsflow_solicitacao_compras - - - 165 - - - - - - - aberturadechamado_manutencao - - - aberturadechamado_manutencao - - - 400 - - - - - - - Solicitacao_transferencia - - - Solicitacao_transferencia - - - 590 - - - - - - - recrutamento - - - recrutamento - - - 823 - - - - - - - kit_aniversariantes - - - Aniversariantes - - - 7690 - - - - - - - kit_cardapio - - - Cardápio do Dia - - - 7695 - - - - - - - kit_convenios - - - Convênios - - - 7703 - - - - - - - kit_news - - - Notícias - - - 7709 - - - - - - - compras_digital - - - compras_digital - - - 9305 - - - - - - - dpf_di_formulario_processo_admissao - - - Digte_Public_Form_Di_Formulario_Processo_Admissao_Protheus - - - 9626 - - - - - - - dpf_cadastro_status - - - Digte_Public_Form_Status - - - 9627 - - - - - - - dpf_configuracoes - - - Digte_Public_Form_Configuracoes - - - 9628 - - - - - - - dpf_cadastro_jornada - - - Digte_Public_Form_Jornada - - - 9629 - - - - - - - dpf_tipo_documento - - - Digte_Public_Form_Tipo_Documento - - - 9630 - - - - - - - dpf_dataset - - - Digte_Public_Form_Dataset - - - 9631 - - - - - - - dpf_di_configuracao - - - Digte_Public_Form_Di_Configuracoes - - - 9632 - - - - - - - dpf_di_beneficio - - - Digte_Public_Form_Di_Beneficios - - - 9633 - - - - - - - dpf_di_compl_contrato - - - Digte_Public_Form_Di_Comp_Contrato - - - 9634 - - - - - - - dpf_di_funcao_jornada - - - Digte_Public_Form_Di_Funcao_Jornada - - - 9635 - - - - - - - dpf_dataset_estrutura - - - Digte_Public_Form_Di_Dataset_Estrutura - - - 9636 - - - - - - - dpf_grupo_tipo_contrato - - - Digte_Public_Form_Grupo_Tipo_Contrato - - - 9637 - - - - - - - dpf_tipo_contrato - - - Digte_Public_Form_Tipo_Contrato - - - 9638 - - - - - - - dpf_di_traducao_campo_valor - - - Digte_Public_Form_Di_Traducao_Campo_Valor - - - 9639 - - - - - - - dpf_di_restricoes_cpf - - - Digte_Public_Form_Di_Formulario_Restricao_CPF - - - 9640 - - - - - - - dpf_di_compl_vt - - - Digte_Public_Form_Di_Compl_VT - - - 9641 - - - - - - - dpf_di_traducao_campo - - - Digte_Public_Form_Di_Traducao_Campo - - - 9995 - - - - - - - desligamento - - - desligamento - - - 12959 - - - - - diff --git a/Desligamento/workflow/.resources/desligamentoColaborador.ecm30.xml b/Desligamento/workflow/.resources/desligamentoColaborador.ecm30.xml index c8b94a7..ac022c1 100644 --- a/Desligamento/workflow/.resources/desligamentoColaborador.ecm30.xml +++ b/Desligamento/workflow/.resources/desligamentoColaborador.ecm30.xml @@ -15,7 +15,7 @@ 0 0 0 - Expediente BackOffice, Logística e Motorista + Default false 1 @@ -29,10 +29,10 @@ 1 desligamentoColaborador - 26 + 27 - 12959 + 0 true false false @@ -76,8 +76,8 @@ false true false - 150 - 66 + 70 + 86 0 0 false @@ -214,8 +214,7 @@ false 0 - Pool Grupo - <AssignmentController><Group>ResponsavelDesligamento</Group></AssignmentController> + 1 false true @@ -230,8 +229,8 @@ true false false - 370 - 200 + 450 + 194 0 0 false @@ -355,6 +354,58 @@ false 0 + + + 1 + desligamentoColaborador + 1 + 51 + + Analise de desligamento + Analise de desligamento + + 0 + + false + 0 + Usuário + <AssignmentController><User>000285</User></AssignmentController> + 1 + false + true + false + 3600 + 3600 + 0 + 0 + false + + 0 + true + false + false + 120 + 194 + 0 + 0 + false + false + 0 + 0 + false + + 0 + 80 + 0 + false + 0 + 0 + 0 + 0 + + false + 0 + 1 @@ -396,7 +447,32 @@ 0 true 670 - 190 + 186 + false + 1 + 120 + 0 + 0 + + false + + + + 1 + desligamentoColaborador + 1 + 53 + + Aprova? + Aprova? + false + false + false + + 0 + true + 310 + 186 false 1 120 @@ -593,6 +669,53 @@ false + + + 1 + desligamentoColaborador + 1 + 57 + + Fim + Fim + Atividade final do processo + 0 + false + 0 + + + 0 + false + true + false + 0 + 1 + 0 + 0 + false + + 0 + false + false + false + 320 + 356 + 0 + 0 + false + false + 0 + 0 + false + + 6 + 60 + 0 + false + 0 + + false + @@ -600,13 +723,13 @@ 1 desligamentoColaborador 1 - 26 + 27 33 hAPI.getCardValue("impeditivosColab") == "Não" 5 - <AssignmentController><FormField>requesterId</FormField></AssignmentController> - Campo Formulário + <AssignmentController><BaseActivity>4</BaseActivity><Returns>Last</Returns></AssignmentController> + Executor Atividade 0 @@ -614,7 +737,7 @@ 1 desligamentoColaborador 2 - 26 + 27 33 hAPI.getCardValue("impeditivosColab") == "Sim" @@ -628,7 +751,7 @@ 1 desligamentoColaborador 1 - 26 + 27 43 hAPI.getCardValue("DesligamentoAprov") == "Não" @@ -640,7 +763,7 @@ 1 desligamentoColaborador 2 - 26 + 27 43 hAPI.getCardValue("DesligamentoAprov") == "Sim" @@ -654,10 +777,64 @@ 1 desligamentoColaborador 3 - 26 + 27 43 hAPI.getCardValue("DesligamentoAprov") == "MaisInformacoes" + 51 + <AssignmentController><BaseActivity>4</BaseActivity><Returns>Last</Returns></AssignmentController> + Executor Atividade + 0 + + + + 1 + desligamentoColaborador + 4 + 27 + 43 + + hAPI.getCardValue("aprovacaosim") == "sim" + 22 + <AssignmentController><Group>DEPARTAMENTO_PESSOAL</Group></AssignmentController> + Pool Grupo + 0 + + + + 1 + desligamentoColaborador + 1 + 27 + 53 + + hAPI.getCardValue("DesligamentoAprova") == "Nao" + 57 + 0 + + + + 1 + desligamentoColaborador + 2 + 27 + 53 + + hAPI.getCardValue("DesligamentoAprova") == "Sim" + 20 + <AssignmentController><User>FrancinePeiter</User></AssignmentController> + Usuário + 0 + + + + 1 + desligamentoColaborador + 3 + 27 + 53 + + hAPI.getCardValue("DesligamentoAprova") == "MaisInformacoes" 4 <AssignmentController><BaseActivity>4</BaseActivity><Returns>Last</Returns></AssignmentController> Executor Atividade @@ -668,13 +845,13 @@ 1 desligamentoColaborador 4 - 26 - 43 + 27 + 53 hAPI.getCardValue("aprovacaosim") == "sim" - 22 - <AssignmentController><Group>DEPARTAMENTO_PESSOAL</Group></AssignmentController> - Pool Grupo + 20 + <AssignmentController><User>FrancinePeiter</User></AssignmentController> + Usuário 0 @@ -696,23 +873,6 @@ false 0 - - - 1 - desligamentoColaborador - 1 - 21 - - - false - 4 - 20 - - Enviar para Aprovação - false - false - 0 - 1 @@ -849,23 +1009,6 @@ false 0 - - - 1 - desligamentoColaborador - 1 - 46 - - - false - 43 - 4 - - Mais informações - false - false - 0 - 1 @@ -900,6 +1043,108 @@ false 0 + + + 1 + desligamentoColaborador + 1 + 52 + + + false + 4 + 51 + + + false + false + 0 + + + + 1 + desligamentoColaborador + 1 + 54 + + + false + 51 + 53 + + + false + false + 0 + + + + 1 + desligamentoColaborador + 1 + 55 + + + false + 53 + 20 + + + false + false + 0 + + + + 1 + desligamentoColaborador + 1 + 56 + + + false + 43 + 51 + + + false + false + 0 + + + + 1 + desligamentoColaborador + 1 + 58 + + + false + 53 + 57 + + + false + false + 0 + + + + 1 + desligamentoColaborador + 1 + 59 + + + false + 53 + 4 + + + false + false + 0 + @@ -1045,8 +1290,8 @@ process.instructions= 1 - 210 - 20 + 130 + 10 1 desligamentoColaborador @@ -1073,29 +1318,18 @@ process.instructions= 1 desligamentoColaborador - 26 + 27 8 1 - 167 - 48 + 87 + 37 1 desligamentoColaborador - 26 - 21 - 1 - - 167 - 247 - - - - 1 - desligamentoColaborador - 26 + 27 35 1 @@ -1106,7 +1340,7 @@ process.instructions= 1 desligamentoColaborador - 26 + 27 36 1 @@ -1117,7 +1351,7 @@ process.instructions= 1 desligamentoColaborador - 26 + 27 36 2 @@ -1128,7 +1362,7 @@ process.instructions= 1 desligamentoColaborador - 26 + 27 37 1 @@ -1139,7 +1373,7 @@ process.instructions= 1 desligamentoColaborador - 26 + 27 40 1 @@ -1150,63 +1384,50 @@ process.instructions= 1 desligamentoColaborador - 26 - 46 + 27 + 52 + 1 + + 87 + 239 + + + + 1 + desligamentoColaborador + 27 + 56 1 699 - 83 + 96 + + + + 1 + desligamentoColaborador + 27 + 56 + 2 + + 173 + 96 + + + + 1 + desligamentoColaborador + 27 + 59 + 1 + + 340 + 103 - - - - 1 - desligamentoColaborador - cargoColaborador - - cargoColaborador - 1 - - - - 1 - desligamentoColaborador - colabDesliga - - colabDesliga - 2 - - - - 1 - desligamentoColaborador - departamento - - departamento - 3 - - - - 1 - desligamentoColaborador - motivoDesligamento - - motivoDesligamento - 4 - - - - 1 - desligamentoColaborador - tipodesligamento - - tipodesligamento - 5 - - + @@ -1214,7 +1435,7 @@ process.instructions= 0 0 desligamentoColaborador - 26 + 27 20 approval title @@ -1224,7 +1445,7 @@ process.instructions= 0 0 desligamentoColaborador - 26 + 27 20 approval description @@ -1234,7 +1455,7 @@ process.instructions= 0 0 desligamentoColaborador - 26 + 27 20 approval highlight @@ -1244,7 +1465,7 @@ process.instructions= 0 0 desligamentoColaborador - 26 + 27 20 approval approve @@ -1254,7 +1475,7 @@ process.instructions= 0 0 desligamentoColaborador - 26 + 27 20 approval reject diff --git a/Desligamento/workflow/.resources/desligamentoColaborador.png b/Desligamento/workflow/.resources/desligamentoColaborador.png index 755986ae50ae9d8489f7e4cd11df8e64f654aa61..0bda200b961b142a7027970ca82873d65b99761b 100644 GIT binary patch literal 48137 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 Mw_}H>-vs^iA2~8|(*OVf literal 43420 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 W@9=rP6r=f|u<~^Eb6Mw<&;$SpQMqaW diff --git a/Desligamento/workflow/.resources/desligamentoColaborador.processimage.svg b/Desligamento/workflow/.resources/desligamentoColaborador.processimage.svg index 570894e..29e2d3c 100644 --- a/Desligamento/workflow/.resources/desligamentoColaborador.processimage.svg +++ b/Desligamento/workflow/.resources/desligamentoColaborador.processimage.svg @@ -1,2 +1,2 @@ -ComplianceTICDPGente e CulturaGestorDesligamentoGestão eComunicaçãodoDesligamentoStartInativar Perfisem sistemasAprovarDesligamentoInformarPrevisão eImpeditivosVerificarConformidadeConformidadeAprova?DesligamentoConcluídoEnviar para AprovaçãoConformeNão conforme eNotificar DepartamentoPessoalConformidadesCancelar DesligamentoMais informaçõesCancelar processoCancelar processo +ComplianceTICDPGente e CulturaGestorDesligamentoGestão eComunicaçãodoDesligamentoStartInativar Perfisem sistemasAprovarDesligamentoInformarPrevisão eImpeditivosVerificarConformidadeConformidadeAprova?Analise dedesligamentoAprova?DesligamentoConcluídoConformeNão conforme eNotificar DepartamentoPessoalConformidadesCancelar DesligamentoCancelar processoCancelar processo diff --git a/Desligamento/workflow/.resources/producao.ws.cache b/Desligamento/workflow/.resources/producao.ws.cache new file mode 100644 index 0000000..cb3a526 --- /dev/null +++ b/Desligamento/workflow/.resources/producao.ws.cache @@ -0,0 +1,650 @@ + + + + + volume + + + Default + + + + + mecanismoGrupo + + + + + Tecnologia e Comunicação + + + TIC + + + + + + + Compras Indiretos + + + ComprasIndiretos + + + + + + + Obras e manutenção + + + Manutencao + + + + + + + Aprovadores Compras Nvl 3 + + + AprovadoresComprasNvl3 + + + + + + + Motoristas + + + Motoristas + + + + + + + Requisitantes de Vaga + + + Requisitantesdevaga + + + + + + + Recrutamento + + + Recrutamento + + + + + + + TODOS-TODOS-DIADMISSAO + + + TODOS-TODOS-DIADMISSAO + + + + + + + ResponsavelDesligamento + + + ResponsavelDesligamento + + + + + + + GENTE & CULTURA + + + GENTE_CULTURA + + + + + + + LOJA AL + + + LOJA_AL + + + + + + + CD + + + CD + + + + + + + ESPAÇO DO REVENDEDOR AL + + + ESPACO_DO_REVENDEDOR_AL + + + + + + + FINANCEIRO + + + FINANCEIRO + + + + + + + OPERAÇÕES + + + OPERACOES + + + + + + + AMG AL + + + AMG_AL + + + + + + + REGIONAL ALAGOAS + + + REGIONAL_ALAGOAS + + + + + + + PREVENÇÃO DE PERDA + + + PREVENCAO_DE_PERDA + + + + + + + MARKETING, TREINAMENTO + + + MARKETING_TREINAMENTO + + + + + + + SECRETARIA EXECUTIVA + + + SECRETARIA_EXECUTIVA + + + + + + + DIRETORIA EXECUTIVA + + + DIRETORIA_EXECUTIVA + + + + + + + INFRAESTRUTURA + + + INFRAESTRUTURA + + + + + + + ESPAÇO DO REVENDEDOR BA + + + ESPACO_DO_REVENDEDOR_BA + + + + + + + BUSINESS INTELLIGENCE + + + BUSINESS_INTELLIGENCE + + + + + + + DEPARTAMENTO PESSOAL + + + DEPARTAMENTO_PESSOAL + + + + + + + LOJA BA + + + LOJA_BA + + + + + + + TREINAMENTO + + + TREINAMENTO + + + + + + + AMG BA + + + AMG_BA + + + + + + + MARKETING + + + MARKETING + + + + + + + COMPRAS + + + COMPRAS + + + + + + + AMG SE + + + AMG_SE + + + + + + + LOJA SE + + + LOJA_SE + + + + + + + ESPAÇO DO REVENDEDOR SE + + + ESPACO_DO_REVENDEDOR_SE + + + + + + + VENDAS IN COMPANY + + + VENDAS_IN_COMPANY + + + + + + + REGIONAL BAHIA + + + REGIONAL_BAHIA + + + + + + + CANAL LOJA 01 + + + CANAL_LOJA_01 + + + + + + + AUDITORIA + + + AUDITORIA + + + + + + + CANAL LOJA 02 + + + CANAL_LOJA_02 + + + + + + + PLANEJAMENTO DE DEMANDAS + + + PLANEJAMENTO_DE_DEMANDAS + + + + + + + PROJETOS + + + PROJETOS + + + + + + + COMPLIANCE + + + COMPLIANCE + + + + + + + ESCRITÓRIO - MATRIZ + + + ESCRITORIO_MATRIZ + + + + + + + ESCRITÓRIO - CONQUISTA + + + ESCRITORIO_CONQUISTA + + + + + + + REGIONAL SERGIPE + + + REGIONAL_SERGIPE + + + + + + + Transferencia + + + Transferencia + + + + + + + Fiscal + + + Fiscal + + + + + + + motoristaAL + + + motoristaAL + + + + + + + motoristaBA + + + motoristaBA + + + + + + + motoristaSE + + + motoristaSE + + + + + + + expediente + + + Default + + + Expediente BackOffice, Logística e Motorista + + + Expediente Escritório Matriz + + + Expediente Lojas + + + + + mecanismo + + + + + Atribuição por Associação + + + Associado + + + + + + + Atribuição por Campo de Formulário + + + Campo Formulário + + + + + + + dpf_di_emp_filial_filtro + + + dpf_di_emp_filial_filtro + + + + + + + dpf_di_inicio_diadmissao + + + dpf_di_inicio_diadmissao + + + + + + + Atribuição por Executor de Atividade + + + Executor Atividade + + + + + + + Atribuição por Grupo + + + Grupo + + + + + + + Atribuição por Grupos do Colaborador + + + Grupos Colaborador + + + + + + + mecCustomAprov + + + mecCustomAprov + + + + + + + Atribuição por Papel + + + Papel + + + + + + + Atribuição para um Grupo + + + Pool Grupo + + + + + + + Atribuição para um Papel + + + Pool Papel + + + + + + + Atribuição por Usuário + + + Usuário + + + + + + + diff --git a/Desligamento/workflow/.resources/producao.ws.cache.bkp b/Desligamento/workflow/.resources/producao.ws.cache.bkp new file mode 100644 index 0000000..cb3a526 --- /dev/null +++ b/Desligamento/workflow/.resources/producao.ws.cache.bkp @@ -0,0 +1,650 @@ + + + + + volume + + + Default + + + + + mecanismoGrupo + + + + + Tecnologia e Comunicação + + + TIC + + + + + + + Compras Indiretos + + + ComprasIndiretos + + + + + + + Obras e manutenção + + + Manutencao + + + + + + + Aprovadores Compras Nvl 3 + + + AprovadoresComprasNvl3 + + + + + + + Motoristas + + + Motoristas + + + + + + + Requisitantes de Vaga + + + Requisitantesdevaga + + + + + + + Recrutamento + + + Recrutamento + + + + + + + TODOS-TODOS-DIADMISSAO + + + TODOS-TODOS-DIADMISSAO + + + + + + + ResponsavelDesligamento + + + ResponsavelDesligamento + + + + + + + GENTE & CULTURA + + + GENTE_CULTURA + + + + + + + LOJA AL + + + LOJA_AL + + + + + + + CD + + + CD + + + + + + + ESPAÇO DO REVENDEDOR AL + + + ESPACO_DO_REVENDEDOR_AL + + + + + + + FINANCEIRO + + + FINANCEIRO + + + + + + + OPERAÇÕES + + + OPERACOES + + + + + + + AMG AL + + + AMG_AL + + + + + + + REGIONAL ALAGOAS + + + REGIONAL_ALAGOAS + + + + + + + PREVENÇÃO DE PERDA + + + PREVENCAO_DE_PERDA + + + + + + + MARKETING, TREINAMENTO + + + MARKETING_TREINAMENTO + + + + + + + SECRETARIA EXECUTIVA + + + SECRETARIA_EXECUTIVA + + + + + + + DIRETORIA EXECUTIVA + + + DIRETORIA_EXECUTIVA + + + + + + + INFRAESTRUTURA + + + INFRAESTRUTURA + + + + + + + ESPAÇO DO REVENDEDOR BA + + + ESPACO_DO_REVENDEDOR_BA + + + + + + + BUSINESS INTELLIGENCE + + + BUSINESS_INTELLIGENCE + + + + + + + DEPARTAMENTO PESSOAL + + + DEPARTAMENTO_PESSOAL + + + + + + + LOJA BA + + + LOJA_BA + + + + + + + TREINAMENTO + + + TREINAMENTO + + + + + + + AMG BA + + + AMG_BA + + + + + + + MARKETING + + + MARKETING + + + + + + + COMPRAS + + + COMPRAS + + + + + + + AMG SE + + + AMG_SE + + + + + + + LOJA SE + + + LOJA_SE + + + + + + + ESPAÇO DO REVENDEDOR SE + + + ESPACO_DO_REVENDEDOR_SE + + + + + + + VENDAS IN COMPANY + + + VENDAS_IN_COMPANY + + + + + + + REGIONAL BAHIA + + + REGIONAL_BAHIA + + + + + + + CANAL LOJA 01 + + + CANAL_LOJA_01 + + + + + + + AUDITORIA + + + AUDITORIA + + + + + + + CANAL LOJA 02 + + + CANAL_LOJA_02 + + + + + + + PLANEJAMENTO DE DEMANDAS + + + PLANEJAMENTO_DE_DEMANDAS + + + + + + + PROJETOS + + + PROJETOS + + + + + + + COMPLIANCE + + + COMPLIANCE + + + + + + + ESCRITÓRIO - MATRIZ + + + ESCRITORIO_MATRIZ + + + + + + + ESCRITÓRIO - CONQUISTA + + + ESCRITORIO_CONQUISTA + + + + + + + REGIONAL SERGIPE + + + REGIONAL_SERGIPE + + + + + + + Transferencia + + + Transferencia + + + + + + + Fiscal + + + Fiscal + + + + + + + motoristaAL + + + motoristaAL + + + + + + + motoristaBA + + + motoristaBA + + + + + + + motoristaSE + + + motoristaSE + + + + + + + expediente + + + Default + + + Expediente BackOffice, Logística e Motorista + + + Expediente Escritório Matriz + + + Expediente Lojas + + + + + mecanismo + + + + + Atribuição por Associação + + + Associado + + + + + + + Atribuição por Campo de Formulário + + + Campo Formulário + + + + + + + dpf_di_emp_filial_filtro + + + dpf_di_emp_filial_filtro + + + + + + + dpf_di_inicio_diadmissao + + + dpf_di_inicio_diadmissao + + + + + + + Atribuição por Executor de Atividade + + + Executor Atividade + + + + + + + Atribuição por Grupo + + + Grupo + + + + + + + Atribuição por Grupos do Colaborador + + + Grupos Colaborador + + + + + + + mecCustomAprov + + + mecCustomAprov + + + + + + + Atribuição por Papel + + + Papel + + + + + + + Atribuição para um Grupo + + + Pool Grupo + + + + + + + Atribuição para um Papel + + + Pool Papel + + + + + + + Atribuição por Usuário + + + Usuário + + + + + + + diff --git a/Desligamento/workflow/diagrams/desligamentoColaborador.process b/Desligamento/workflow/diagrams/desligamentoColaborador.process index 307ec2e..b21c7c9 100644 --- a/Desligamento/workflow/diagrams/desligamentoColaborador.process +++ b/Desligamento/workflow/diagrams/desligamentoColaborador.process @@ -1,114 +1,115 @@ - - - - - + + + + + + - - + + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - + - - - + + + - - - + + + - - + + - - - + + + - + - + - - + + - - - + + + - + - + @@ -116,75 +117,75 @@ - - + + - - - + + + - + - + - - - + + + - - - + + + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - - + + + @@ -193,32 +194,32 @@ - + - - + + - - + + - + - - - + + + - - - + + + - - - + + + @@ -227,185 +228,233 @@ - + - - + + - - + + - + - - - + + + - - - + + + - - - + + + - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -424,26 +473,26 @@ - + - + - + - + - + - + @@ -456,26 +505,26 @@ - + - + - + - + - + - + @@ -488,146 +537,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -645,26 +694,26 @@ - + - + - + - + - + - + @@ -677,146 +726,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -831,26 +880,26 @@ - + - + - + - + - + - + @@ -864,146 +913,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1018,146 +1067,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1180,26 +1229,26 @@ - + - + - + - + - + - + @@ -1212,146 +1261,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1366,146 +1415,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1525,146 +1574,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1679,146 +1728,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1833,26 +1882,26 @@ - + - + - + - + - + - + @@ -1868,146 +1917,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2022,146 +2071,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2176,146 +2225,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2331,146 +2380,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2486,26 +2535,26 @@ - + - + - + - + - + - + @@ -2519,146 +2568,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2667,8 +2716,8 @@ - - + + @@ -2677,10 +2726,10 @@ - + - + @@ -2697,10 +2746,10 @@ - + - + @@ -2720,26 +2769,26 @@ - + - + - + - + - + - + @@ -2754,26 +2803,26 @@ - + - + - + - + - + - + @@ -2787,10 +2836,10 @@ - + - + @@ -2807,26 +2856,26 @@ - + - + - + - + - + - + @@ -2840,26 +2889,26 @@ - + - + - + - + - + - + @@ -2867,274 +2916,552 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - - - - - - - - - - - - - - - - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - - - - - - - - - - - - - - - - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - - - - - - + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lançamento de documentos/lançamentos/datasets/dsPortalFornecedorStartProcess.js b/Lançamento de documentos/lançamentos/datasets/dsPortalFornecedorStartProcess.js index 30fa6e9..a6bb1e7 100644 --- a/Lançamento de documentos/lançamentos/datasets/dsPortalFornecedorStartProcess.js +++ b/Lançamento de documentos/lançamentos/datasets/dsPortalFornecedorStartProcess.js @@ -7,6 +7,7 @@ function createDataset(fields, constraints, sortFields) { try { var params = constraintsToMap(constraints); + var autorizadorResponsavel = valueOrEmpty(params.autorizador_responsavel || params.autorizadorResponsavel); validateRequired(params); var payload = { @@ -22,6 +23,7 @@ function createDataset(fields, constraints, sortFields) { tipo_documento: valueOrEmpty(params.tipo_documento), numero_documento: valueOrEmpty(params.numero_documento), valor: valueOrEmpty(params.valor), + autorizador_responsavel: autorizadorResponsavel, justificativa: valueOrEmpty(params.justificativa) } }; @@ -103,6 +105,11 @@ function validateRequired(params) { throw "Campo obrigatório não informado: " + fieldName; } } + + var autorizador = valueOrEmpty(params.autorizador_responsavel || params.autorizadorResponsavel); + if (!autorizador) { + throw "Campo obrigatório não informado: autorizador_responsavel"; + } } function extractProcessInstanceId(response) { diff --git a/Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/totvsflow_lancamento_documento.html b/Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/totvsflow_lancamento_documento.html index f80f18e..4f0ed51 100644 --- a/Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/totvsflow_lancamento_documento.html +++ b/Lançamento de documentos/lançamentos/forms/41254 - totvsflow_lancamento_documento/totvsflow_lancamento_documento.html @@ -79,7 +79,7 @@ -

Lanamento de documento

+

Lançamento de documento

@@ -90,7 +90,7 @@

 Dados do documento 

-
Dados referentes ao documento que ser lanado.
+
Dados referentes ao documento que será lançado.

@@ -103,21 +103,20 @@
-
- + *
-
- - -

@@ -161,13 +145,13 @@ * + obrigatório

* @@ -176,7 +160,7 @@ mask="00.000.000/0000-00" class="form-control" readonly /> + obrigatório

@@ -199,7 +183,7 @@ />

@@ -207,9 +191,9 @@ @@ -220,13 +204,13 @@
- * + * + obrigatório

@@ -239,6 +223,27 @@

+
+
+
+
+ + * + + +
+
+
+
@@ -246,8 +251,8 @@ * -

Utilize a aba anexos para anexar o documento ou o boto - abaixo. Anexo obrigatrio.

+

Utilize a aba anexos para anexar o documento ou o botão + abaixo. Anexo obrigatório.

@@ -259,21 +264,21 @@

 Descrio dos servios +  Descrição dos serviços  

-
Descrio detalhada dos servios prestados e as possveis informaes complementares.
+
Descrição detalhada dos serviços prestados e as possíveis informações complementares.

- Descrição dos serviços * + obrigatório

@@ -342,11 +347,7 @@
-<<<<<<< HEAD - -======= ->>>>>>> 0bf4065e684532d46f9466f40b5418f98a0903e3
@@ -373,11 +374,7 @@
-<<<<<<< HEAD - -======= ->>>>>>> 0bf4065e684532d46f9466f40b5418f98a0903e3
@@ -394,11 +391,7 @@
-<<<<<<< HEAD - -======= ->>>>>>> 0bf4065e684532d46f9466f40b5418f98a0903e3
@@ -413,13 +406,8 @@
-<<<<<<< HEAD - -======= - - ->>>>>>> 0bf4065e684532d46f9466f40b5418f98a0903e3 +
@@ -740,8 +728,23 @@ document.querySelector("#valor").addEventListener("input", function () { - mascaraApenasNumeros(this) + mascaraValorMoedaBr(this) }); + document.querySelector("#valor").addEventListener("blur", function () { + formataValorMoedaBr(this) + }); + document.querySelector("#VALORtotal").addEventListener("input", function () { + mascaraValorMoedaBr(this) + }); + document.querySelector("#VALORtotal").addEventListener("blur", function () { + formataValorMoedaBr(this) + }); + if ($("#valor").val()) { + formataValorMoedaBr(document.querySelector("#valor")); + } + if ($("#VALORtotal").val()) { + formataValorMoedaBr(document.querySelector("#VALORtotal")); + } if ($("#tipo_cadastro").val() == "cpf") { @@ -963,6 +966,7 @@ var campoCnpj = $("#cnpj").val(); var campoCpf = $("#cpf").val(); var campoNumeroDocumento = $("#numero_documento").val(); + var campoAutorizadorResponsavel = $("#autorizador_responsavel").val(); var campoPastaGed = $("#pasta_ged").val(); var campoExpiracaoValidade = $("#expiracao_validade").val(); var campoJustificativa = $("#justificativa").val(); @@ -1025,6 +1029,12 @@ erro++; } + if (campoAutorizadorResponsavel == undefined || campoAutorizadorResponsavel == "" || campoAutorizadorResponsavel == null) { + $(".divautorizadorResponsavel").addClass("has-error"); + $("#autorizadorResponsavel").show(); + erro++; + } + if (campoRadioGed == "publica_ged") { @@ -1062,7 +1072,7 @@ { valor: $("#EMISSAO").val(), classe: ".divEmissaoAnalista", help: "#emissaoAnalista" }, { valor: $("#VENCIMENTO").val(), classe: ".divVencimentoAnalista", help: "#vencimentoAnalista" }, { valor: $("#VENC_REAL").val(), classe: ".divVencRealAnalista", help: "#vencRealAnalista" }, - { valor: $("#VALOR").val(), classe: ".divValorAnalista", help: "#valorAnalista" }, + { valor: $("#VALORtotal").val(), classe: ".divValorAnalista", help: "#valorAnalista" }, { valor: $("#HISTORICO").val(), classe: ".divHistoricoAnalista", help: "#historicoAnalista" }, { valor: $("#CENTRO_CUSTO").val(), classe: ".divCentroCustoAnalista", help: "#centroCustoAnalista" } ]; @@ -1170,11 +1180,78 @@ } - const mascaraApenasNumeros = (field) => { - valor = field.value; - valor = valor.replace(/\D/g, ""); /**Substitui o que não é dígito por "", /g é [Global][1]*/ - valor = valor.replace() - field.value = valor; + const mascaraValorMoedaBr = (field) => { + var raw = (field.value || "").toString().replace(/[^\d,]/g, ""); + if (!raw) { + field.value = ""; + return; + } + + var commaIndex = raw.indexOf(","); + var inteiro = ""; + var decimal = ""; + + if (commaIndex >= 0) { + inteiro = raw.substring(0, commaIndex).replace(/\D/g, ""); + decimal = raw.substring(commaIndex + 1).replace(/\D/g, "").slice(0, 2); + } else { + inteiro = raw.replace(/\D/g, ""); + } + + inteiro = inteiro.replace(/^0+(?=\d)/, ""); + if (!inteiro) inteiro = "0"; + inteiro = inteiro.replace(/\B(?=(\d{3})+(?!\d))/g, "."); + + field.value = commaIndex >= 0 ? (inteiro + "," + decimal) : inteiro; + }; + + const normalizarValorMoedaBr = (value) => { + var raw = (value || "").toString().trim(); + if (!raw) return "0,00"; + + var cleaned = raw.replace(/\s/g, "").replace(/[^\d,\.]/g, ""); + var inteiro = ""; + var decimal = ""; + + if (cleaned.indexOf(",") >= 0) { + var commaParts = cleaned.split(","); + inteiro = (commaParts.shift() || "").replace(/\D/g, ""); + decimal = commaParts.join("").replace(/\D/g, "").slice(0, 2); + } else if (cleaned.indexOf(".") >= 0) { + var dotParts = cleaned.split("."); + var isDecimalDot = dotParts.length === 2 && dotParts[1].length > 0 && dotParts[1].length <= 2; + + if (isDecimalDot) { + inteiro = (dotParts[0] || "").replace(/\D/g, ""); + decimal = (dotParts[1] || "").replace(/\D/g, "").slice(0, 2); + } else { + inteiro = cleaned.replace(/\D/g, ""); + } + } else { + inteiro = cleaned.replace(/\D/g, ""); + } + + inteiro = inteiro.replace(/^0+(?=\d)/, ""); + if (!inteiro) inteiro = "0"; + if (!decimal) decimal = "00"; + if (decimal.length === 1) decimal = decimal + "0"; + + return inteiro + "," + decimal; + }; + + const formataValorMoedaBr = (field) => { + var normalized = normalizarValorMoedaBr(field.value); + var parts = normalized.split(","); + var inteiro = (parts[0] || "").replace(/\D/g, ""); + var decimal = (parts[1] || "").replace(/\D/g, "").slice(0, 2); + + inteiro = inteiro.replace(/^0+(?=\d)/, ""); + if (!inteiro) inteiro = "0"; + if (!decimal) decimal = "00"; + if (decimal.length === 1) decimal = decimal + "0"; + + inteiro = inteiro.replace(/\B(?=(\d{3})+(?!\d))/g, "."); + field.value = inteiro + "," + decimal; }; const mascaraCPF = (field) => { diff --git a/Lançamento de documentos/lançamentos/portalfornecedor_endpoint_contract.md b/Lançamento de documentos/lançamentos/portalfornecedor_endpoint_contract.md index f6bd8d9..478ab35 100644 --- a/Lançamento de documentos/lançamentos/portalfornecedor_endpoint_contract.md +++ b/Lançamento de documentos/lançamentos/portalfornecedor_endpoint_contract.md @@ -29,6 +29,7 @@ Esse endpoint e quem usa `fluig_rest` no backend. "tipo_documento": "danfe", "numero_documento": "123456", "valor": "10,00", + "autorizador_responsavel": "Nome do autorizador", "justificativa": "Descricao do servico" } } diff --git a/Lançamento de documentos/lançamentos/portalfornecedor_proxy_example.py b/Lançamento de documentos/lançamentos/portalfornecedor_proxy_example.py index 025c31f..eed9817 100644 --- a/Lançamento de documentos/lançamentos/portalfornecedor_proxy_example.py +++ b/Lançamento de documentos/lançamentos/portalfornecedor_proxy_example.py @@ -66,6 +66,8 @@ async def enviar( tipo_documento: str = Form(""), numero_documento: str = Form(...), valor: str = Form(""), + autorizador_responsavel: str = Form(""), + autorizadorResponsavel: str = Form(""), justificativa: str = Form(...), ) -> PortalFornecedorSuccessResponse: file_name = arquivo.filename or "anexo" @@ -75,6 +77,10 @@ async def enviar( if not file_bytes: raise HTTPException(status_code=400, detail={"message": "Arquivo obrigatorio."}) + autorizador = (autorizador_responsavel or autorizadorResponsavel or "").strip() + if not autorizador: + raise HTTPException(status_code=400, detail={"message": "Campo obrigatorio nao informado: autorizador_responsavel."}) + auth = build_auth() upload_binary(file_name, file_bytes, auth) document_id = create_document(file_name, file_mime, auth) @@ -92,6 +98,7 @@ async def enviar( "tipo_documento": tipo_documento, "numero_documento": numero_documento, "valor": valor, + "autorizador_responsavel": autorizador, "justificativa": justificativa, "anexo_documento_id": str(document_id), "anexo_documento_nome": file_name, diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/view.ftl b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/view.ftl index 2288fc2..fcb0fa3 100644 --- a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/view.ftl +++ b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/resources/view.ftl @@ -26,32 +26,21 @@ data-params="MyWidget.instance()">
- +
- + -
- -
- - - + placeholder="Nome da companhia">
@@ -95,8 +84,10 @@ data-params="MyWidget.instance()"> @@ -130,8 +121,8 @@ data-params="MyWidget.instance()">
-
- +
+ placeholder="Numero da nota">
-
+
@@ -156,6 +147,16 @@ data-params="MyWidget.instance()">
+
+
+ + + +
+
diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/js/portalfornecedor.js b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/js/portalfornecedor.js index 44b7a37..905119f 100644 --- a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/js/portalfornecedor.js +++ b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/src/main/webapp/resources/js/portalfornecedor.js @@ -50,6 +50,18 @@ var MyWidget = SuperWidget.extend({ this.root.find("#cnpj").off("input").on("input", function () { this.value = self.mascaraCNPJ(this.value); }); + + this.root.find("#valor").off("input").on("input", function () { + this.value = self.mascaraValorDocumento(this.value); + }); + + this.root.find("#valor").off("blur").on("blur", function () { + var currentValue = (this.value || "").toString().trim(); + if (!currentValue) { + return; + } + this.value = self.formatMoneyDisplay(currentValue); + }); }, setupInitialValues: function () { @@ -146,6 +158,7 @@ var MyWidget = SuperWidget.extend({ var cnpj = this.onlyDigits(this.value("#cnpj")); var numeroDocumento = this.value("#numero_documento"); var valor = this.normalizeMoney(this.value("#valor")); + var autorizadorResponsavel = self.value("#autorizador_responsavel"); var documentoPessoa = tipoCadastro === "cpf" ? cpf : cnpj; var cpfField = tipoCadastro === "cpf" ? cpf : ""; @@ -164,6 +177,8 @@ var MyWidget = SuperWidget.extend({ tipo_documento: self.value("#tipo_documento"), numero_documento: numeroDocumento, valor: valor, + autorizador_responsavel: autorizadorResponsavel, + autorizadorResponsavel: autorizadorResponsavel, justificativa: self.value("#justificativa") } }; @@ -316,6 +331,7 @@ var MyWidget = SuperWidget.extend({ if (!this.value("#entidade_responsavel")) ok = this.markRequired("#entidade_responsavel") && ok; if (!this.value("#tipo_cadastro")) ok = this.markRequired("#tipo_cadastro") && ok; if (!this.value("#numero_documento")) ok = this.markRequired("#numero_documento") && ok; + if (!this.value("#autorizador_responsavel")) ok = this.markRequired("#autorizador_responsavel") && ok; if (!this.value("#justificativa")) ok = this.markRequired("#justificativa") && ok; if (tipoCadastro === "cpf") { @@ -382,6 +398,47 @@ var MyWidget = SuperWidget.extend({ return v; }, + mascaraValorDocumento: function (value) { + var raw = (value || "").toString().replace(/[^\d,]/g, ""); + if (!raw) return ""; + + var commaIndex = raw.indexOf(","); + var inteiro = ""; + var decimal = ""; + + if (commaIndex >= 0) { + inteiro = raw.substring(0, commaIndex).replace(/\D/g, ""); + decimal = raw.substring(commaIndex + 1).replace(/\D/g, "").slice(0, 2); + } else { + inteiro = raw.replace(/\D/g, ""); + } + + inteiro = inteiro.replace(/^0+(?=\d)/, ""); + if (!inteiro) inteiro = "0"; + inteiro = inteiro.replace(/\B(?=(\d{3})+(?!\d))/g, "."); + + if (commaIndex >= 0) { + return inteiro + "," + decimal; + } + + return inteiro; + }, + + formatMoneyDisplay: function (value) { + var normalized = this.normalizeMoney(value); + var parts = normalized.split(","); + var inteiro = (parts[0] || "").replace(/\D/g, ""); + var decimal = (parts[1] || "").replace(/\D/g, "").slice(0, 2); + + inteiro = inteiro.replace(/^0+(?=\d)/, ""); + if (!inteiro) inteiro = "0"; + if (!decimal) decimal = "00"; + if (decimal.length === 1) decimal = decimal + "0"; + + inteiro = inteiro.replace(/\B(?=(\d{3})+(?!\d))/g, "."); + return inteiro + "," + decimal; + }, + onlyDigits: function (value) { return (value || "").replace(/\D/g, ""); }, @@ -389,9 +446,38 @@ var MyWidget = SuperWidget.extend({ normalizeMoney: function (value) { var raw = (value || "").toString().trim(); if (!raw) return "0,00"; - if (raw.indexOf(",") >= 0) return raw; - if (raw.indexOf(".") >= 0) return raw.replace(".", ","); - return raw + ",00"; + + var cleaned = raw.replace(/\s/g, "").replace(/[^\d,\.]/g, ""); + var inteiro = ""; + var decimal = ""; + + if (cleaned.indexOf(",") >= 0) { + var commaParts = cleaned.split(","); + inteiro = (commaParts.shift() || "").replace(/\D/g, ""); + decimal = commaParts.join("").replace(/\D/g, "").slice(0, 2); + } else if (cleaned.indexOf(".") >= 0) { + var dotParts = cleaned.split("."); + var isDecimalDot = dotParts.length === 2 && dotParts[1].length > 0 && dotParts[1].length <= 2; + + if (isDecimalDot) { + inteiro = (dotParts[0] || "").replace(/\D/g, ""); + decimal = (dotParts[1] || "").replace(/\D/g, "").slice(0, 2); + } else { + inteiro = cleaned.replace(/\D/g, ""); + decimal = ""; + } + } else { + inteiro = cleaned.replace(/\D/g, ""); + decimal = ""; + } + + inteiro = inteiro.replace(/^0+(?=\d)/, ""); + if (!inteiro) inteiro = "0"; + + if (!decimal) decimal = "00"; + if (decimal.length === 1) decimal = decimal + "0"; + + return inteiro + "," + decimal; }, normalizeTipoCadastro: function (value) { diff --git a/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/target/portalfornecedor.war b/Lançamento de documentos/lançamentos/wcm/widget/portalfornecedor/target/portalfornecedor.war index 8d016e370c225a51d70a601885a1dab1bd095b72..0042c6afb0d7b35b4b4c48f79e649eff50258cda 100644 GIT binary patch delta 5851 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 delta 5323 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 1 Lançamento de documento - 9 + 13 41254 @@ -43,7 +43,7 @@ false false - true + false @@ -127,7 +127,7 @@ false false 280 - 300 + 241 0 0 false @@ -153,17 +153,66 @@ 1 FlowEssentials_LancamentodeDocumento 1 - 9 + 15 - Ajustar dados do documento - Ajustar dados do documento + Integração Contas a pagar + Integração Contas a pagar - 86400 + 0 + + false + 0 + + 1 + false + false + false + 0 + 0 + 0 + 0 + false + + 0 + true + false + false + 510 + 475 + 0 + 0 + false + false + 0 + 0 + false + + 0 + 82 + 0 + false + 0 + 0 + 0 + 0 + + false + 1 + + + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 22 + + Revisar Integração + Revisar Integração + + 0 false 0 - Executor Atividade - <AssignmentController><BaseActivity>4</BaseActivity><Returns>Last</Returns></AssignmentController> 1 false true @@ -178,8 +227,8 @@ true false false - 500 - 77 + 510 + 310 0 0 false @@ -205,11 +254,11 @@ 1 FlowEssentials_LancamentodeDocumento 1 - 7 + 24 - Finalizar e aprovar solicitação - Finalizar e aprovar solicitação - Atividade final do processo + Intermediário + Intermediário + Evento intermediário do processo 0 false 0 @@ -219,33 +268,33 @@ false true false - 0 + 1 1 0 0 false 0 - false + true false false - 800 - 430 + 570 + 480 0 0 false false - 0 0 false - 6 - 60 + 0 + 43 0 false 0 false + 15 @@ -276,8 +325,8 @@ false false false - 800 - 320 + 550 + 260 0 0 false @@ -294,6 +343,53 @@ false + + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 17 + + Fim + Fim + Atividade final do processo + 0 + false + 0 + + + 0 + false + true + false + 0 + 1 + 0 + 0 + false + + 0 + false + false + false + 790 + 503 + 0 + 0 + false + false + 0 + 0 + false + + 6 + 60 + 0 + false + 0 + + false + @@ -314,57 +410,6 @@ false 0 - - - 1 - FlowEssentials_LancamentodeDocumento - 1 - 8 - - Finalizar e aprovar solicitação - false - 5 - 7 - - Aprovar - false - false - 0 - - - - 1 - FlowEssentials_LancamentodeDocumento - 1 - 10 - - - false - 5 - 9 - - Ajustar - false - false - 0 - - - - 1 - FlowEssentials_LancamentodeDocumento - 1 - 11 - - - false - 9 - 5 - - - false - false - 0 - 1 @@ -381,10 +426,272 @@ false false 0 + + + + + + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 16 + + + false + 5 + 15 + + + false + false + 0 + + + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 18 + + + false + 15 + 17 + + + false + false + 0 + + + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 25 + + + false + 24 + 22 + + + false + false + 0 + + + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 26 + + + false + 22 + 15 + + + false + false + 0 + + + 1 + servicetask15 + FlowEssentials_LancamentodeDocumento + 1 + + function servicetask15(attempt, message) { + var payload = buildSe2010Payload(); + appendDebugSe2010("servicetask15: payload=" + safeStringify(payload)); + + var response = invokeSe2010(payload); + appendDebugSe2010("servicetask15: status=" + response.httpStatus + " body=" + response.raw); + + if (!response.success) { + throw "Falha ao enviar dados para Protheus SE2010. Status HTTP: " + response.httpStatus + "."; + } +} + +function buildSe2010Payload() { + var payload = { + FILIAL: requiredCard("FILIAL"), + PREFIXO: requiredCard("PREFIXO"), + NUMERO: requiredCard("NUMERO"), + PARCELA: requiredCard("PARCELA"), + TIPO: requiredCard("TIPO"), + NATUREZA: requiredCard("NATUREZA"), + COD_FORN: requiredCard("COD_FORN"), + LOJA: requiredCard("LOJA"), + EMISSAO: normalizeDate(requiredCard("EMISSAO"), "EMISSAO"), + VENCIMENTO: normalizeDate(requiredCard("VENCIMENTO"), "VENCIMENTO"), + VENC_REAL: normalizeDate(requiredCard("VENC_REAL"), "VENC_REAL"), + VALOR: parseMoney(requiredCard("VALORtotal", "VALOR")), + HISTORICO: requiredCard("HISTORICO"), + CODIGO_BARRAS: card("CODIGO_BARRAS"), + CENTRO_CUSTO: requiredCard("CENTRO_CUSTO") + }; + + return payload; +} + +function invokeSe2010(payload) { + var serviceCode = card("service_code_se2010") || "protheus_teste"; + var endpoint = card("endpoint_se2010") || "https://comerciode186920.protheus.cloudtotvs.com.br:4050/rest/uf_se2010"; + + var requestData = { + companyId: getCompanyIdSafe(), + serviceCode: serviceCode, + endpoint: endpoint, + method: "post", + timeoutService: "120", + headers: { + "Content-Type": "application/json", + "Accept": "application/json" + }, + options: { + encoding: "UTF-8", + mediaType: "application/json", + useSSL: true + }, + params: payload + }; + + var clientService = fluigAPI.getAuthorizeClientService(); + var vo = clientService.invoke(JSON.stringify(requestData)); + var raw = vo ? String(vo.getResult() || "") : ""; + + if (!raw) { + throw "Resposta vazia da API SE2010."; + } + + var httpStatus = getHttpStatus(vo); + var parsed = parseJsonSafe(raw); + var success = httpStatus >= 200 && httpStatus < 300; + + if (parsed && parsed.success === false) { + success = false; + } + + return { + success: success, + httpStatus: httpStatus, + raw: raw, + parsed: parsed + }; +} + +function requiredCard() { + var value = ""; + + for (var i = 0; i < arguments.length; i++) { + value = card(arguments[i]); + if (value) { + break; + } + } + + if (!value) { + throw "Campo obrigatorio nao informado para envio Protheus: " + arguments[0]; + } + + return value; +} + +function card(name) { + return ((hAPI.getCardValue(name) || "") + "").replace(/^\s+|\s+$/g, ""); +} + +function normalizeDate(value, fieldName) { + var digits = (value || "").replace(/\D/g, ""); + if (digits.length !== 8) { + throw "Data invalida no campo " + fieldName + ". Informe no formato YYYYMMDD."; + } + return digits; +} + +function parseMoney(value) { + var raw = (value || "").toString().replace(/\s/g, ""); + if (!raw) { + return 0; + } + + if (raw.indexOf(",") >= 0) { + raw = raw.replace(/\./g, "").replace(",", "."); + } else { + var dotCount = (raw.match(/\./g) || []).length; + if (dotCount > 1) { + raw = raw.replace(/\./g, ""); + } + } + + var parsed = parseFloat(raw); + if (isNaN(parsed)) { + throw "Valor invalido para envio Protheus: " + value; + } + + return parseFloat(parsed.toFixed(2)); +} + +function getCompanyIdSafe() { + try { + if (typeof getValue === "function") { + return String(getValue("WKCompany") || "1"); + } + } catch (e) { + // ignore + } + return "1"; +} + +function getHttpStatus(vo) { + try { + var status = parseInt(String(vo.getHttpStatusResult() || "0"), 10); + if (!isNaN(status) && status > 0) { + return status; + } + } catch (e) { + // ignore + } + + return 200; +} + +function parseJsonSafe(value) { + try { + return JSON.parse(value); + } catch (e) { + return null; + } +} + +function safeStringify(value) { + try { + return JSON.stringify(value); + } catch (e) { + return String(value); + } +} + +function appendDebugSe2010(message) { + try { + var prefix = "[SE2010] "; + var atual = (hAPI.getCardValue("debug_publicacao") || "") + ""; + var linha = prefix + message; + hAPI.setCardValue("debug_publicacao", atual ? (atual + "\n" + linha) : linha); + } catch (e) { + log.warn("appendDebugSe2010 falhou: " + e); + } +} + + 1 @@ -392,66 +699,66 @@ FlowEssentials_LancamentodeDocumento 1 - function beforeStateEntry(sequenceId) { - appendDebugPublicacao("beforeStateEntry sequenceId=" + sequenceId); - - if (sequenceId == 7) { - anexarDocumentoDoCardSeNecessario(); - publicarDocumento(); - } - - if (sequenceId == 7) { - var attachments = hAPI.listAttachments(); - var hasAttachment = attachments && attachments.size() > 0; - appendDebugPublicacao("validacao anexos: total=" + (attachments ? attachments.size() : 0)); - - if (!hasAttachment) { - appendDebugPublicacao("validacao anexos: nenhum anexo encontrado apos processamento."); - throw "\n\nNao identificamos nenhum documento anexado, volte ao formulario e anexe pelo menos um documento para avancar a solicitacao.\n\n"; - } - } -} - -function anexarDocumentoDoCardSeNecessario() { - try { - var attachments = hAPI.listAttachments(); - if (attachments && attachments.size() > 0) { - appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: solicitacao ja possui " + attachments.size() + " anexo(s)."); - return; - } - - var anexoIdStr = (hAPI.getCardValue("anexo_documento_id") || "") + ""; - anexoIdStr = anexoIdStr.replace(/^\s+|\s+$/g, ""); - if (!anexoIdStr) { - appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: campo anexo_documento_id vazio."); - return; - } - - var anexoId = parseInt(anexoIdStr, 10); - if (isNaN(anexoId) || anexoId <= 0) { - appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: anexo_documento_id invalido: " + anexoIdStr); - return; - } - - hAPI.attachDocument(anexoId); - appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: hAPI.attachDocument OK documentId=" + anexoId); - - var attachmentsDepois = hAPI.listAttachments(); - appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: total anexos apos attachDocument = " + (attachmentsDepois ? attachmentsDepois.size() : 0)); - } catch (e) { - appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: ERRO " + e); - } -} - -function appendDebugPublicacao(msg) { - try { - var atual = (hAPI.getCardValue("debug_publicacao") || "") + ""; - var prefix = atual ? atual + "\n" : ""; - hAPI.setCardValue("debug_publicacao", prefix + msg); - } catch (e) { - log.warn("appendDebugPublicacao falhou: " + e); - } -} + function beforeStateEntry(sequenceId) { + appendDebugPublicacao("beforeStateEntry sequenceId=" + sequenceId); + + if (sequenceId == 7) { + anexarDocumentoDoCardSeNecessario(); + publicarDocumento(); + } + + if (sequenceId == 7) { + var attachments = hAPI.listAttachments(); + var hasAttachment = attachments && attachments.size() > 0; + appendDebugPublicacao("validacao anexos: total=" + (attachments ? attachments.size() : 0)); + + if (!hasAttachment) { + appendDebugPublicacao("validacao anexos: nenhum anexo encontrado apos processamento."); + throw "\n\nNao identificamos nenhum documento anexado, volte ao formulario e anexe pelo menos um documento para avancar a solicitacao.\n\n"; + } + } +} + +function anexarDocumentoDoCardSeNecessario() { + try { + var attachments = hAPI.listAttachments(); + if (attachments && attachments.size() > 0) { + appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: solicitacao ja possui " + attachments.size() + " anexo(s)."); + return; + } + + var anexoIdStr = (hAPI.getCardValue("anexo_documento_id") || "") + ""; + anexoIdStr = anexoIdStr.replace(/^\s+|\s+$/g, ""); + if (!anexoIdStr) { + appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: campo anexo_documento_id vazio."); + return; + } + + var anexoId = parseInt(anexoIdStr, 10); + if (isNaN(anexoId) || anexoId <= 0) { + appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: anexo_documento_id invalido: " + anexoIdStr); + return; + } + + hAPI.attachDocument(anexoId); + appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: hAPI.attachDocument OK documentId=" + anexoId); + + var attachmentsDepois = hAPI.listAttachments(); + appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: total anexos apos attachDocument = " + (attachmentsDepois ? attachmentsDepois.size() : 0)); + } catch (e) { + appendDebugPublicacao("anexarDocumentoDoCardSeNecessario: ERRO " + e); + } +} + +function appendDebugPublicacao(msg) { + try { + var atual = (hAPI.getCardValue("debug_publicacao") || "") + ""; + var prefix = atual ? atual + "\n" : ""; + hAPI.setCardValue("debug_publicacao", prefix + msg); + } catch (e) { + log.warn("appendDebugPublicacao falhou: " + e); + } +} @@ -461,103 +768,103 @@ function appendDebugPublicacao(msg) { FlowEssentials_LancamentodeDocumento 1 - function publicarDocumento() { - var radioGed = (hAPI.getCardValue("radio_ged") || "") + ""; - var idPastaSelecionadaRaw = (hAPI.getCardValue("idPastaSelecionada") || "") + ""; - log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## radio_ged=" + radioGed + " idPastaSelecionada=" + idPastaSelecionadaRaw); - appendDebugPublicacao("publicarDocumento: radio_ged=" + radioGed + " idPastaSelecionada=" + idPastaSelecionadaRaw); - - if (radioGed != "publica_ged") { - log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## Nao publicar no ECM (radio_ged diferente de publica_ged)."); - appendDebugPublicacao("publicarDocumento: radio_ged diferente de publica_ged."); - return; - } - - var attachments = hAPI.listAttachments(); - log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## attachments.size=" + (attachments ? attachments.size() : 0)); - appendDebugPublicacao("publicarDocumento: attachments.size=" + (attachments ? attachments.size() : 0)); - - for (var i = 0; i < attachments.size(); i++) { - var docDto = attachments.get(i); - log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## analisando anexo documentId=" + docDto.getDocumentId() + " version=" + docDto.getVersion() + " documentType=" + docDto.getDocumentType()); - appendDebugPublicacao("publicarDocumento: analisando documentId=" + docDto.getDocumentId() + " version=" + docDto.getVersion() + " type=" + docDto.getDocumentType()); - - try { - docAPI.copyDocumentToUploadArea(docDto.getDocumentId(), docDto.getVersion()); - - docDto.setDocumentId(0); - - var idPastaSelecionada = parseInt((hAPI.getCardValue("idPastaSelecionada") || "") + "", 10); - if (isNaN(idPastaSelecionada) || idPastaSelecionada <= 0) { - log.warn("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## idPastaSelecionada invalido. Documento nao sera publicado no ECM."); - appendDebugPublicacao("publicarDocumento: idPastaSelecionada invalido."); - continue; - } - - docDto.setParentDocumentId(idPastaSelecionada); - - var attachArray = new java.util.ArrayList(); - var mainAttach = docAPI.newAttachment(); - mainAttach.setFileName(docDto.getPhisicalFile()); - mainAttach.setPrincipal(true); - mainAttach.setAttach(false); - attachArray.add(mainAttach); - - docDto.setActiveVersion(true); - docDto.setColleagueId(getValue("WKUser")); - docDto.setPublisherId(getValue("WKUser")); - - if (hAPI.getCardValue("radio_data_validade") == "com_data_validade") { - docDto.setExpires(true); - - if (hAPI.getCardValue("inicio_validade") != "") { - var inicioValidade = (hAPI.getCardValue("inicio_validade") || "") + ""; - var dataInicioSplit = inicioValidade.split("-"); - var anoInicio = dataInicioSplit[0]; - var mesInicio = parseFloat(dataInicioSplit[1]) - 1; - var diaInicio = dataInicioSplit[2]; - var dInicio = new Date(anoInicio, mesInicio, diaInicio); - docDto.setValidationStartDate(dInicio); - } - - if (hAPI.getCardValue("expiracao_validade") != "") { - var dataVencimento = (hAPI.getCardValue("expiracao_validade") || "") + ""; - var dataSplit = dataVencimento.split("-"); - var ano = dataSplit[0]; - var mes = parseFloat(dataSplit[1]) - 1; - var dia = dataSplit[2]; - var d = new Date(ano, mes, dia); - docDto.setExpirationDate(d); - } - - if (hAPI.getCardValue("dias_antes_expiracao") != "") { - var diasAntesExpiracao = parseInt(hAPI.getCardValue("dias_antes_expiracao"), 10); - docDto.setNotificationDays(diasAntesExpiracao); - } - } else { - docDto.setExpires(false); - } - - log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## before create document"); - var doc = docAPI.createDocument(docDto, attachArray, null, null, null); - log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## DOCUMENTO CRIADO COM O ID: " + doc.getDocumentId()); - appendDebugPublicacao("publicarDocumento: documento publicado no ECM com id=" + doc.getDocumentId()); - } catch (e) { - log.error("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## falha ao publicar anexo documentId=" + docDto.getDocumentId() + " erro=" + e); - appendDebugPublicacao("publicarDocumento: ERRO ao publicar documentId=" + docDto.getDocumentId() + " erro=" + e); - } - } -} - -function appendDebugPublicacao(msg) { - try { - var atual = (hAPI.getCardValue("debug_publicacao") || "") + ""; - var prefix = atual ? atual + "\n" : ""; - hAPI.setCardValue("debug_publicacao", prefix + msg); - } catch (e) { - log.warn("appendDebugPublicacao falhou: " + e); - } -} + function publicarDocumento() { + var radioGed = (hAPI.getCardValue("radio_ged") || "") + ""; + var idPastaSelecionadaRaw = (hAPI.getCardValue("idPastaSelecionada") || "") + ""; + log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## radio_ged=" + radioGed + " idPastaSelecionada=" + idPastaSelecionadaRaw); + appendDebugPublicacao("publicarDocumento: radio_ged=" + radioGed + " idPastaSelecionada=" + idPastaSelecionadaRaw); + + if (radioGed != "publica_ged") { + log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## Nao publicar no ECM (radio_ged diferente de publica_ged)."); + appendDebugPublicacao("publicarDocumento: radio_ged diferente de publica_ged."); + return; + } + + var attachments = hAPI.listAttachments(); + log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## attachments.size=" + (attachments ? attachments.size() : 0)); + appendDebugPublicacao("publicarDocumento: attachments.size=" + (attachments ? attachments.size() : 0)); + + for (var i = 0; i < attachments.size(); i++) { + var docDto = attachments.get(i); + log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## analisando anexo documentId=" + docDto.getDocumentId() + " version=" + docDto.getVersion() + " documentType=" + docDto.getDocumentType()); + appendDebugPublicacao("publicarDocumento: analisando documentId=" + docDto.getDocumentId() + " version=" + docDto.getVersion() + " type=" + docDto.getDocumentType()); + + try { + docAPI.copyDocumentToUploadArea(docDto.getDocumentId(), docDto.getVersion()); + + docDto.setDocumentId(0); + + var idPastaSelecionada = parseInt((hAPI.getCardValue("idPastaSelecionada") || "") + "", 10); + if (isNaN(idPastaSelecionada) || idPastaSelecionada <= 0) { + log.warn("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## idPastaSelecionada invalido. Documento nao sera publicado no ECM."); + appendDebugPublicacao("publicarDocumento: idPastaSelecionada invalido."); + continue; + } + + docDto.setParentDocumentId(idPastaSelecionada); + + var attachArray = new java.util.ArrayList(); + var mainAttach = docAPI.newAttachment(); + mainAttach.setFileName(docDto.getPhisicalFile()); + mainAttach.setPrincipal(true); + mainAttach.setAttach(false); + attachArray.add(mainAttach); + + docDto.setActiveVersion(true); + docDto.setColleagueId(getValue("WKUser")); + docDto.setPublisherId(getValue("WKUser")); + + if (hAPI.getCardValue("radio_data_validade") == "com_data_validade") { + docDto.setExpires(true); + + if (hAPI.getCardValue("inicio_validade") != "") { + var inicioValidade = (hAPI.getCardValue("inicio_validade") || "") + ""; + var dataInicioSplit = inicioValidade.split("-"); + var anoInicio = dataInicioSplit[0]; + var mesInicio = parseFloat(dataInicioSplit[1]) - 1; + var diaInicio = dataInicioSplit[2]; + var dInicio = new Date(anoInicio, mesInicio, diaInicio); + docDto.setValidationStartDate(dInicio); + } + + if (hAPI.getCardValue("expiracao_validade") != "") { + var dataVencimento = (hAPI.getCardValue("expiracao_validade") || "") + ""; + var dataSplit = dataVencimento.split("-"); + var ano = dataSplit[0]; + var mes = parseFloat(dataSplit[1]) - 1; + var dia = dataSplit[2]; + var d = new Date(ano, mes, dia); + docDto.setExpirationDate(d); + } + + if (hAPI.getCardValue("dias_antes_expiracao") != "") { + var diasAntesExpiracao = parseInt(hAPI.getCardValue("dias_antes_expiracao"), 10); + docDto.setNotificationDays(diasAntesExpiracao); + } + } else { + docDto.setExpires(false); + } + + log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## before create document"); + var doc = docAPI.createDocument(docDto, attachArray, null, null, null); + log.info("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## DOCUMENTO CRIADO COM O ID: " + doc.getDocumentId()); + appendDebugPublicacao("publicarDocumento: documento publicado no ECM com id=" + doc.getDocumentId()); + } catch (e) { + log.error("PUBLICAR_DOCUMENTO LANCAMENTO_DOCUMENTO ########## falha ao publicar anexo documentId=" + docDto.getDocumentId() + " erro=" + e); + appendDebugPublicacao("publicarDocumento: ERRO ao publicar documentId=" + docDto.getDocumentId() + " erro=" + e); + } + } +} + +function appendDebugPublicacao(msg) { + try { + var atual = (hAPI.getCardValue("debug_publicacao") || "") + ""; + var prefix = atual ? atual + "\n" : ""; + hAPI.setCardValue("debug_publicacao", prefix + msg); + } catch (e) { + log.warn("appendDebugPublicacao falhou: " + e); + } +} @@ -565,8 +872,8 @@ function appendDebugPublicacao(msg) { FFFFFF - 511 - 1031 + 611 + 1401 10 10 Lançamento de documento @@ -581,8 +888,8 @@ function appendDebugPublicacao(msg) { DBE8FF - 255 - 1001 + 203 + 1371 40 10 Solicitante @@ -597,10 +904,10 @@ function appendDebugPublicacao(msg) { E2E2E2 - 256 - 1001 + 203 + 1371 40 - 265 + 213 Responsável por documentos 2 1 @@ -611,6 +918,22 @@ function appendDebugPublicacao(msg) { 3 + + 82b0b7 + 205 + 1371 + 40 + 416 + SwimLane + 2 + 1 + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 6 + + @@ -619,68 +942,58 @@ function appendDebugPublicacao(msg) { 1 FlowEssentials_LancamentodeDocumento - 9 + 13 6 1 137 - 335 + 279 1 FlowEssentials_LancamentodeDocumento - 9 - 8 + 13 + 16 1 - 333 - 447 - - - - 1 - FlowEssentials_LancamentodeDocumento - 9 - 10 - 1 - - 552 - 335 - - - - 1 - FlowEssentials_LancamentodeDocumento - 9 - 11 - 1 - - 333 - 112 + 332 + 520 - + + + 1 + FlowEssentials_LancamentodeDocumento + 1 + 15 + 0 + Integração executada com sucesso + FlowEssentials_LancamentodeDocumento.servicetask15 + 1 + 0 + + 0 0 FlowEssentials_LancamentodeDocumento - 9 + 13 5 approval title - Analisar documento + 0 0 FlowEssentials_LancamentodeDocumento - 9 + 13 5 approval description @@ -690,31 +1003,81 @@ function appendDebugPublicacao(msg) { 0 0 FlowEssentials_LancamentodeDocumento - 9 + 13 5 approval highlight - Documento aprovado? + 0 0 FlowEssentials_LancamentodeDocumento - 9 + 13 5 approval approve - 7 + 0 0 FlowEssentials_LancamentodeDocumento - 9 + 13 5 approval reject - 9 + + + + 0 + 0 + FlowEssentials_LancamentodeDocumento + 13 + 22 + approval + title + + + + 0 + 0 + FlowEssentials_LancamentodeDocumento + 13 + 22 + approval + description + + + + 0 + 0 + FlowEssentials_LancamentodeDocumento + 13 + 22 + approval + highlight + + + + 0 + 0 + FlowEssentials_LancamentodeDocumento + 13 + 22 + approval + approve + + + + 0 + 0 + FlowEssentials_LancamentodeDocumento + 13 + 22 + approval + reject + diff --git a/Lançamento de documentos/lançamentos/workflow/.resources/FlowEssentials_LancamentodeDocumento.png b/Lançamento de documentos/lançamentos/workflow/.resources/FlowEssentials_LancamentodeDocumento.png index 0241398041f63f03a07a0fb2c62fac442c9305d0..8f355be10e09b3779ba1602d64646d1a6441cf92 100644 GIT binary patch literal 26158 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 literal 17244 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 k4&X?DFj)RO-7AD+vG -Responsável por documentosSolicitanteLançamento de documentoAnalisardocumentoAjustar dadosdo documentoAprovarAjustarCancelar +SwimLaneResponsável por documentosSolicitanteLançamento de documentoAnalisardocumentoIntegraçãoContas apagarRevisarIntegraçãoCancelar diff --git a/Lançamento de documentos/lançamentos/workflow/.resources/Fluig prod.ws.cache b/Lançamento de documentos/lançamentos/workflow/.resources/Fluig prod.ws.cache index 9da72e7..81ae81c 100644 --- a/Lançamento de documentos/lançamentos/workflow/.resources/Fluig prod.ws.cache +++ b/Lançamento de documentos/lançamentos/workflow/.resources/Fluig prod.ws.cache @@ -109,6 +109,9 @@ valor + autorizador_responsavel + + WKNumProces diff --git a/Lançamento de documentos/lançamentos/workflow/.resources/Fluig prod.ws.cache.bkp b/Lançamento de documentos/lançamentos/workflow/.resources/Fluig prod.ws.cache.bkp index 40d1d6e..4bf6ba7 100644 --- a/Lançamento de documentos/lançamentos/workflow/.resources/Fluig prod.ws.cache.bkp +++ b/Lançamento de documentos/lançamentos/workflow/.resources/Fluig prod.ws.cache.bkp @@ -121,6 +121,9 @@ valor + autorizador_responsavel + + WKNumProces diff --git a/Lançamento de documentos/lançamentos/workflow/.resources/Producao.ws.cache b/Lançamento de documentos/lançamentos/workflow/.resources/Producao.ws.cache new file mode 100644 index 0000000..c8ca446 --- /dev/null +++ b/Lançamento de documentos/lançamentos/workflow/.resources/Producao.ws.cache @@ -0,0 +1,155 @@ + + + + + volume + + + Default + + + + + expediente + + + Default + + + Expediente BackOffice, Logística e Motorista + + + Expediente Escritório Matriz + + + Expediente Lojas + + + + + mecanismo + + + + + Atribuição por Associação + + + Associado + + + + + + + Atribuição por Campo de Formulário + + + Campo Formulário + + + + + + + dpf_di_emp_filial_filtro + + + dpf_di_emp_filial_filtro + + + + + + + dpf_di_inicio_diadmissao + + + dpf_di_inicio_diadmissao + + + + + + + Atribuição por Executor de Atividade + + + Executor Atividade + + + + + + + Atribuição por Grupo + + + Grupo + + + + + + + Atribuição por Grupos do Colaborador + + + Grupos Colaborador + + + + + + + mecCustomAprov + + + mecCustomAprov + + + + + + + Atribuição por Papel + + + Papel + + + + + + + Atribuição para um Grupo + + + Pool Grupo + + + + + + + Atribuição para um Papel + + + Pool Papel + + + + + + + Atribuição por Usuário + + + Usuário + + + + + + + diff --git a/Lançamento de documentos/lançamentos/workflow/.resources/Producao.ws.cache.bkp b/Lançamento de documentos/lançamentos/workflow/.resources/Producao.ws.cache.bkp new file mode 100644 index 0000000..c8ca446 --- /dev/null +++ b/Lançamento de documentos/lançamentos/workflow/.resources/Producao.ws.cache.bkp @@ -0,0 +1,155 @@ + + + + + volume + + + Default + + + + + expediente + + + Default + + + Expediente BackOffice, Logística e Motorista + + + Expediente Escritório Matriz + + + Expediente Lojas + + + + + mecanismo + + + + + Atribuição por Associação + + + Associado + + + + + + + Atribuição por Campo de Formulário + + + Campo Formulário + + + + + + + dpf_di_emp_filial_filtro + + + dpf_di_emp_filial_filtro + + + + + + + dpf_di_inicio_diadmissao + + + dpf_di_inicio_diadmissao + + + + + + + Atribuição por Executor de Atividade + + + Executor Atividade + + + + + + + Atribuição por Grupo + + + Grupo + + + + + + + Atribuição por Grupos do Colaborador + + + Grupos Colaborador + + + + + + + mecCustomAprov + + + mecCustomAprov + + + + + + + Atribuição por Papel + + + Papel + + + + + + + Atribuição para um Grupo + + + Pool Grupo + + + + + + + Atribuição para um Papel + + + Pool Papel + + + + + + + Atribuição por Usuário + + + Usuário + + + + + + + diff --git a/Lançamento de documentos/lançamentos/workflow/diagrams/FlowEssentials_LancamentodeDocumento.process b/Lançamento de documentos/lançamentos/workflow/diagrams/FlowEssentials_LancamentodeDocumento.process index 4241570..fcd0012 100644 --- a/Lançamento de documentos/lançamentos/workflow/diagrams/FlowEssentials_LancamentodeDocumento.process +++ b/Lançamento de documentos/lançamentos/workflow/diagrams/FlowEssentials_LancamentodeDocumento.process @@ -1,8 +1,8 @@ - + - + @@ -10,31 +10,43 @@ - - + + - + - - + + - + + + + + + + + + + + + + - + @@ -48,50 +60,26 @@ - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + @@ -111,6 +99,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -830,6 +879,723 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -844,57 +1610,9 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -909,6 +1627,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -919,6 +1698,8 @@ + + @@ -926,14 +1707,20 @@ - - - + - + - - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/Lançamento de documentos/lançamentos/workflow/scripts/FlowEssentials_LancamentodeDocumento.servicetask15.js b/Lançamento de documentos/lançamentos/workflow/scripts/FlowEssentials_LancamentodeDocumento.servicetask15.js new file mode 100644 index 0000000..d62300b --- /dev/null +++ b/Lançamento de documentos/lançamentos/workflow/scripts/FlowEssentials_LancamentodeDocumento.servicetask15.js @@ -0,0 +1,182 @@ +function servicetask15(attempt, message) { + var payload = buildSe2010Payload(); + appendDebugSe2010("servicetask15: payload=" + safeStringify(payload)); + + var response = invokeSe2010(payload); + appendDebugSe2010("servicetask15: status=" + response.httpStatus + " body=" + response.raw); + + if (!response.success) { + throw "Falha ao enviar dados para Protheus SE2010. Status HTTP: " + response.httpStatus + "."; + } +} + +function buildSe2010Payload() { + var payload = { + FILIAL: requiredCard("FILIAL"), + PREFIXO: requiredCard("PREFIXO"), + NUMERO: requiredCard("NUMERO"), + PARCELA: requiredCard("PARCELA"), + TIPO: requiredCard("TIPO"), + NATUREZA: requiredCard("NATUREZA"), + COD_FORN: requiredCard("COD_FORN"), + LOJA: requiredCard("LOJA"), + EMISSAO: normalizeDate(requiredCard("EMISSAO"), "EMISSAO"), + VENCIMENTO: normalizeDate(requiredCard("VENCIMENTO"), "VENCIMENTO"), + VENC_REAL: normalizeDate(requiredCard("VENC_REAL"), "VENC_REAL"), + VALOR: parseMoney(requiredCard("VALORtotal", "VALOR")), + HISTORICO: requiredCard("HISTORICO"), + CODIGO_BARRAS: card("CODIGO_BARRAS"), + CENTRO_CUSTO: requiredCard("CENTRO_CUSTO") + }; + + return payload; +} + +function invokeSe2010(payload) { + var serviceCode = card("service_code_se2010") || "protheus_teste"; + var endpoint = card("endpoint_se2010") || "https://comerciode186920.protheus.cloudtotvs.com.br:4050/rest/uf_se2010"; + + var requestData = { + companyId: getCompanyIdSafe(), + serviceCode: serviceCode, + endpoint: endpoint, + method: "post", + timeoutService: "120", + headers: { + "Content-Type": "application/json", + "Accept": "application/json" + }, + options: { + encoding: "UTF-8", + mediaType: "application/json", + useSSL: true + }, + params: payload + }; + + var clientService = fluigAPI.getAuthorizeClientService(); + var vo = clientService.invoke(JSON.stringify(requestData)); + var raw = vo ? String(vo.getResult() || "") : ""; + + if (!raw) { + throw "Resposta vazia da API SE2010."; + } + + var httpStatus = getHttpStatus(vo); + var parsed = parseJsonSafe(raw); + var success = httpStatus >= 200 && httpStatus < 300; + + if (parsed && parsed.success === false) { + success = false; + } + + return { + success: success, + httpStatus: httpStatus, + raw: raw, + parsed: parsed + }; +} + +function requiredCard() { + var value = ""; + + for (var i = 0; i < arguments.length; i++) { + value = card(arguments[i]); + if (value) { + break; + } + } + + if (!value) { + throw "Campo obrigatorio nao informado para envio Protheus: " + arguments[0]; + } + + return value; +} + +function card(name) { + return ((hAPI.getCardValue(name) || "") + "").replace(/^\s+|\s+$/g, ""); +} + +function normalizeDate(value, fieldName) { + var digits = (value || "").replace(/\D/g, ""); + if (digits.length !== 8) { + throw "Data invalida no campo " + fieldName + ". Informe no formato YYYYMMDD."; + } + return digits; +} + +function parseMoney(value) { + var raw = (value || "").toString().replace(/\s/g, ""); + if (!raw) { + return 0; + } + + if (raw.indexOf(",") >= 0) { + raw = raw.replace(/\./g, "").replace(",", "."); + } else { + var dotCount = (raw.match(/\./g) || []).length; + if (dotCount > 1) { + raw = raw.replace(/\./g, ""); + } + } + + var parsed = parseFloat(raw); + if (isNaN(parsed)) { + throw "Valor invalido para envio Protheus: " + value; + } + + return parseFloat(parsed.toFixed(2)); +} + +function getCompanyIdSafe() { + try { + if (typeof getValue === "function") { + return String(getValue("WKCompany") || "1"); + } + } catch (e) { + // ignore + } + return "1"; +} + +function getHttpStatus(vo) { + try { + var status = parseInt(String(vo.getHttpStatusResult() || "0"), 10); + if (!isNaN(status) && status > 0) { + return status; + } + } catch (e) { + // ignore + } + + return 200; +} + +function parseJsonSafe(value) { + try { + return JSON.parse(value); + } catch (e) { + return null; + } +} + +function safeStringify(value) { + try { + return JSON.stringify(value); + } catch (e) { + return String(value); + } +} + +function appendDebugSe2010(message) { + try { + var prefix = "[SE2010] "; + var atual = (hAPI.getCardValue("debug_publicacao") || "") + ""; + var linha = prefix + message; + hAPI.setCardValue("debug_publicacao", atual ? (atual + "\n" + linha) : linha); + } catch (e) { + log.warn("appendDebugSe2010 falhou: " + e); + } +} diff --git a/Transferência Ginseng/workflow/.resources/Producao.ws.cache b/Transferência Ginseng/workflow/.resources/Producao.ws.cache index a3982db..7dfa421 100644 --- a/Transferência Ginseng/workflow/.resources/Producao.ws.cache +++ b/Transferência Ginseng/workflow/.resources/Producao.ws.cache @@ -1,5 +1,5 @@ - + volume @@ -521,400 +521,6 @@ - - camposFormulario, documentoId = 590 - - - activity - - - categoriaItem - - - centroCusto - - - chaveNfe - - - codigoItem - - - codigoProdutoItem - - - currentUserId - - - currentUsermail - - - currentUserName - - - dataAbertura - - - dataColeta - - - dataEmissaoApiNfe - - - dataEmissaoNfe - - - dataEntradaNfeConsulta - - - dataEntrega - - - dataValidacaoGestor - - - descricao - - - emailSolicitante - - - estabelecimento - - - excelUpload - - - fdAnexo_Coleta - - - fdAnexo_Entrega - - - fdAnexo_recebimento - - - fnAnexo_Nfe - - - formMode - - - fornecedorNfeConsulta - - - gestorEmail - - - gestorEmailE - - - gestorNome - - - gestorNomeE - - - gestor_cc - - - gestor_cce - - - invoiceIdNfeConsulta - - - itensNfeConsulta - - - itensNfeJson - - - justificativa - - - justificativaDecisaoGestor - - - justificativaDecisaoItens - - - lojaNfeConsulta - - - motoristaColetaLogin - - - motoristaColetaNome - - - motoristaEntregaLogin - - - motoristaEntregaNome - - - motoristaEntregaSelecionado - - - nomerecebedor - - - numeroNfeConsulta - - - operacaoNfeConsulta - - - productIdItem - - - qtdDivergenciasNfe - - - quantidadeItem - - - requesterId - - - requesterMail - - - requesterName - - - serieNfeConsulta - - - situacaoNfeConsulta - - - storeIdNfeConsulta - - - tipoMotoristaEntrega - - - ufDestino - - - ufOrigem - - - userValidacaoGestor - - - usuarioEmissorNfe - - - validacaoItens - - - valorNfeConsulta - - - WKNumProces - - - - - camposFormulario, documentoId = 43582 - - - activity - - - categoriaItem - - - centroCusto - - - chaveNfe - - - codigoItem - - - codigoProdutoItem - - - currentUserId - - - currentUsermail - - - currentUserName - - - dataAbertura - - - dataColeta - - - dataEmissaoApiNfe - - - dataEmissaoNfe - - - dataEntradaNfeConsulta - - - dataEntrega - - - dataValidacaoGestor - - - descricao - - - emailSolicitante - - - estabelecimento - - - excelUpload - - - fdAnexo_Coleta - - - fdAnexo_Entrega - - - fdAnexo_recebimento - - - fnAnexo_Nfe - - - formMode - - - fornecedorNfeConsulta - - - gestorEmail - - - gestorEmailE - - - gestorNome - - - gestorNomeE - - - gestor_cc - - - gestor_cce - - - invoiceIdNfeConsulta - - - itensNfeConsulta - - - itensNfeJson - - - justificativa - - - justificativaDecisaoGestor - - - justificativaDecisaoItens - - - lojaNfeConsulta - - - motoristaColetaLogin - - - motoristaColetaNome - - - motoristaEntregaLogin - - - motoristaEntregaNome - - - motoristaEntregaSelecionado - - - nomerecebedor - - - numeroNfeConsulta - - - operacaoNfeConsulta - - - productIdItem - - - qtdDivergenciasNfe - - - quantidadeItem - - - requesterId - - - requesterMail - - - requesterName - - - serieNfeConsulta - - - situacaoNfeConsulta - - - storeIdNfeConsulta - - - tipoMotoristaEntrega - - - ufDestino - - - ufOrigem - - - userValidacaoGestor - - - usuarioEmissorNfe - - - validacaoItens - - - valorNfeConsulta - - - WKNumProces - - - mecanismo @@ -1566,7 +1172,7 @@ - transferência + transferenciav2 transferência @@ -1576,6 +1182,19 @@ + + + + desligamentov2 + + + desligamentov2 + + + 46963 + + + diff --git a/Transferência Ginseng/workflow/.resources/Producao.ws.cache.bkp b/Transferência Ginseng/workflow/.resources/Producao.ws.cache.bkp index 27d724c..66e05c9 100644 --- a/Transferência Ginseng/workflow/.resources/Producao.ws.cache.bkp +++ b/Transferência Ginseng/workflow/.resources/Producao.ws.cache.bkp @@ -1,509 +1,6 @@ - + - - volume - - - Default - - - - - mecanismoGrupo - - - - - Tecnologia e Comunicação - - - TIC - - - - - - - Compras Indiretos - - - ComprasIndiretos - - - - - - - Obras e manutenção - - - Manutencao - - - - - - - Aprovadores Compras Nvl 3 - - - AprovadoresComprasNvl3 - - - - - - - Motoristas - - - Motoristas - - - - - - - Requisitantes de Vaga - - - Requisitantesdevaga - - - - - - - Recrutamento - - - Recrutamento - - - - - - - TODOS-TODOS-DIADMISSAO - - - TODOS-TODOS-DIADMISSAO - - - - - - - ResponsavelDesligamento - - - ResponsavelDesligamento - - - - - - - GENTE & CULTURA - - - GENTE_CULTURA - - - - - - - LOJA AL - - - LOJA_AL - - - - - - - CD - - - CD - - - - - - - ESPAÇO DO REVENDEDOR AL - - - ESPACO_DO_REVENDEDOR_AL - - - - - - - FINANCEIRO - - - FINANCEIRO - - - - - - - OPERAÇÕES - - - OPERACOES - - - - - - - AMG AL - - - AMG_AL - - - - - - - REGIONAL ALAGOAS - - - REGIONAL_ALAGOAS - - - - - - - PREVENÇÃO DE PERDA - - - PREVENCAO_DE_PERDA - - - - - - - MARKETING, TREINAMENTO - - - MARKETING_TREINAMENTO - - - - - - - SECRETARIA EXECUTIVA - - - SECRETARIA_EXECUTIVA - - - - - - - DIRETORIA EXECUTIVA - - - DIRETORIA_EXECUTIVA - - - - - - - INFRAESTRUTURA - - - INFRAESTRUTURA - - - - - - - ESPAÇO DO REVENDEDOR BA - - - ESPACO_DO_REVENDEDOR_BA - - - - - - - BUSINESS INTELLIGENCE - - - BUSINESS_INTELLIGENCE - - - - - - - DEPARTAMENTO PESSOAL - - - DEPARTAMENTO_PESSOAL - - - - - - - LOJA BA - - - LOJA_BA - - - - - - - TREINAMENTO - - - TREINAMENTO - - - - - - - AMG BA - - - AMG_BA - - - - - - - MARKETING - - - MARKETING - - - - - - - COMPRAS - - - COMPRAS - - - - - - - AMG SE - - - AMG_SE - - - - - - - LOJA SE - - - LOJA_SE - - - - - - - ESPAÇO DO REVENDEDOR SE - - - ESPACO_DO_REVENDEDOR_SE - - - - - - - VENDAS IN COMPANY - - - VENDAS_IN_COMPANY - - - - - - - REGIONAL BAHIA - - - REGIONAL_BAHIA - - - - - - - CANAL LOJA 01 - - - CANAL_LOJA_01 - - - - - - - AUDITORIA - - - AUDITORIA - - - - - - - CANAL LOJA 02 - - - CANAL_LOJA_02 - - - - - - - PLANEJAMENTO DE DEMANDAS - - - PLANEJAMENTO_DE_DEMANDAS - - - - - - - PROJETOS - - - PROJETOS - - - - - - - COMPLIANCE - - - COMPLIANCE - - - - - - - ESCRITÓRIO - MATRIZ - - - ESCRITORIO_MATRIZ - - - - - - - ESCRITÓRIO - CONQUISTA - - - ESCRITORIO_CONQUISTA - - - - - - - REGIONAL SERGIPE - - - REGIONAL_SERGIPE - - - - - - - Transferencia - - - Transferencia - - - - - - - Fiscal - - - Fiscal - - - - - - - motoristaAL - - - motoristaAL - - - - - - - motoristaBA - - - motoristaBA - - - - - - - motoristaSE - - - motoristaSE - - - - - expediente @@ -521,203 +18,6 @@ - - camposFormulario, documentoId = 590 - - - activity - - - categoriaItem - - - centroCusto - - - chaveNfe - - - codigoItem - - - codigoProdutoItem - - - currentUserId - - - currentUsermail - - - currentUserName - - - dataAbertura - - - dataColeta - - - dataEmissaoApiNfe - - - dataEmissaoNfe - - - dataEntradaNfeConsulta - - - dataEntrega - - - dataValidacaoGestor - - - descricao - - - emailSolicitante - - - estabelecimento - - - excelUpload - - - fdAnexo_Coleta - - - fdAnexo_Entrega - - - fdAnexo_recebimento - - - fnAnexo_Nfe - - - formMode - - - fornecedorNfeConsulta - - - gestorEmail - - - gestorEmailE - - - gestorNome - - - gestorNomeE - - - gestor_cc - - - gestor_cce - - - invoiceIdNfeConsulta - - - itensNfeConsulta - - - itensNfeJson - - - justificativa - - - justificativaDecisaoGestor - - - justificativaDecisaoItens - - - lojaNfeConsulta - - - motoristaColetaLogin - - - motoristaColetaNome - - - motoristaEntregaLogin - - - motoristaEntregaNome - - - motoristaEntregaSelecionado - - - nomerecebedor - - - numeroNfeConsulta - - - operacaoNfeConsulta - - - productIdItem - - - qtdDivergenciasNfe - - - quantidadeItem - - - requesterId - - - requesterMail - - - requesterName - - - serieNfeConsulta - - - situacaoNfeConsulta - - - storeIdNfeConsulta - - - tipoMotoristaEntrega - - - ufDestino - - - ufOrigem - - - userValidacaoGestor - - - usuarioEmissorNfe - - - validacaoItens - - - valorNfeConsulta - - - WKNumProces - - - mecanismo @@ -843,530 +143,5 @@ - - forms - - - - - FLUIGADHOC - - - FLUIGADHOC - - - 3 - - - - - - - FLUIGADHOCPROCESS - - - FLUIGADHOCPROCESS - - - 4 - - - - - - - totvsflow_dataset_tipo_ocorrencia - - - totvsflow_dataset_tipo_ocorrencia - - - 14 - - - - - - - totvsflow_abertura_chamado - - - totvsflow_abertura_chamado - - - 15 - - - - - - - DSFormulariodeAberturadechamado - - - Formulário de Abertura de chamado - - - 20 - - - - - - - Abertura_de_chamados - - - Solicitação de abertura de chamados - - - 21 - - - - - - - DSvistoriadeServico - - - vistoriadeServico - - - 24 - - - - - - - DSFormulariodeReservadesala - - - Formulário de Reserva de sala - - - 34 - - - - - - - totvsflow_dataset_centrocusto - - - totvsflow_dataset_centrocusto - - - 103 - - - - - - - totvsflow_dataset_cadastro_item - - - totvsflow_dataset_cadastro_item - - - 104 - - - - - - - totvsflow_dataset_estabelecimento - - - totvsflow_dataset_estabelecimento - - - 105 - - - - - - - totvsflow_solicitacao_compras - - - totvsflow_solicitacao_compras - - - 165 - - - - - - - aberturadechamado_manutencao - - - aberturadechamado_manutencao - - - 400 - - - - - - - Solicitacao_transferencia - - - Solicitacao_transferencia - - - 590 - - - - - - - recrutamento - - - recrutamento - - - 823 - - - - - - - kit_aniversariantes - - - Aniversariantes - - - 7690 - - - - - - - kit_cardapio - - - Cardápio do Dia - - - 7695 - - - - - - - kit_convenios - - - Convênios - - - 7703 - - - - - - - kit_news - - - Notícias - - - 7709 - - - - - - - compras_digital - - - compras_digital - - - 9305 - - - - - - - dpf_di_formulario_processo_admissao - - - Digte_Public_Form_Di_Formulario_Processo_Admissao_Protheus - - - 9626 - - - - - - - dpf_cadastro_status - - - Digte_Public_Form_Status - - - 9627 - - - - - - - dpf_configuracoes - - - Digte_Public_Form_Configuracoes - - - 9628 - - - - - - - dpf_cadastro_jornada - - - Digte_Public_Form_Jornada - - - 9629 - - - - - - - dpf_tipo_documento - - - Digte_Public_Form_Tipo_Documento - - - 9630 - - - - - - - dpf_dataset - - - Digte_Public_Form_Dataset - - - 9631 - - - - - - - dpf_di_configuracao - - - Digte_Public_Form_Di_Configuracoes - - - 9632 - - - - - - - dpf_di_beneficio - - - Digte_Public_Form_Di_Beneficios - - - 9633 - - - - - - - dpf_di_compl_contrato - - - Digte_Public_Form_Di_Comp_Contrato - - - 9634 - - - - - - - dpf_di_funcao_jornada - - - Digte_Public_Form_Di_Funcao_Jornada - - - 9635 - - - - - - - dpf_dataset_estrutura - - - Digte_Public_Form_Di_Dataset_Estrutura - - - 9636 - - - - - - - dpf_grupo_tipo_contrato - - - Digte_Public_Form_Grupo_Tipo_Contrato - - - 9637 - - - - - - - dpf_tipo_contrato - - - Digte_Public_Form_Tipo_Contrato - - - 9638 - - - - - - - dpf_di_traducao_campo_valor - - - Digte_Public_Form_Di_Traducao_Campo_Valor - - - 9639 - - - - - - - dpf_di_restricoes_cpf - - - Digte_Public_Form_Di_Formulario_Restricao_CPF - - - 9640 - - - - - - - dpf_di_compl_vt - - - Digte_Public_Form_Di_Compl_VT - - - 9641 - - - - - - - dpf_di_traducao_campo - - - Digte_Public_Form_Di_Traducao_Campo - - - 9995 - - - - - - - desligamento - - - desligamento - - - 12959 - - - - - - - checklist - - - checklist - - - 40213 - - - - - - - totvsflow_lancamento_documento - - - totvsflow_lancamento_documento - - - 41254 - - - - - diff --git a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml index 3997177..ecfe9e0 100644 --- a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml +++ b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.ecm30.xml @@ -8,7 +8,7 @@ Este flow permite abertura de solicitação de transferências automatizadas, informando qual item será transferido e direcionado para as aprovações corretas. true false - Default + Ginseng Produção Transferência Grupo <AssignmentController><Group>CD</Group></AssignmentController> @@ -29,7 +29,7 @@ 1 Transferência Ginseng - 49 + 50 43582 @@ -826,7 +826,7 @@ 1 Transferência Ginseng 1 - 49 + 50 2 hAPI.getCardValue("gestor_cce") != "" @@ -840,7 +840,7 @@ 1 Transferência Ginseng 2 - 49 + 50 2 true @@ -854,7 +854,7 @@ 1 Transferência Ginseng 1 - 49 + 50 46 hAPI.getCardValue("validacaoItens") == "entregue" && hAPI.getCardValue("dataEntradaNfeConsulta") != "" @@ -866,7 +866,7 @@ 1 Transferência Ginseng 2 - 49 + 50 46 true @@ -878,7 +878,7 @@ 1 Transferência Ginseng 1 - 49 + 50 107 hAPI.getCardValue("ufOrigem") == "AL" @@ -892,7 +892,7 @@ 1 Transferência Ginseng 2 - 49 + 50 107 hAPI.getCardValue("ufOrigem") == "BA" @@ -906,7 +906,7 @@ 1 Transferência Ginseng 3 - 49 + 50 107 hAPI.getCardValue("ufOrigem") == "SE" @@ -920,7 +920,7 @@ 1 Transferência Ginseng 4 - 49 + 50 107 hAPI.getCardValue("ufOrigem") == "" @@ -934,7 +934,7 @@ 1 Transferência Ginseng 5 - 49 + 50 107 hAPI.getCardValue("ufOrigem") == "VDC" @@ -948,7 +948,7 @@ 1 Transferência Ginseng 6 - 49 + 50 107 hAPI.getCardValue("ufOrigem") == "SE" @@ -1668,7 +1668,7 @@ function onlyDigits(value) { 1 Transferência Ginseng - 49 + 50 5 1 @@ -1679,7 +1679,7 @@ function onlyDigits(value) { 1 Transferência Ginseng - 49 + 50 5 2 @@ -1690,7 +1690,7 @@ function onlyDigits(value) { 1 Transferência Ginseng - 49 + 50 7 1 @@ -1701,7 +1701,7 @@ function onlyDigits(value) { 1 Transferência Ginseng - 49 + 50 26 1 @@ -1712,7 +1712,7 @@ function onlyDigits(value) { 1 Transferência Ginseng - 49 + 50 61 1 @@ -1723,7 +1723,7 @@ function onlyDigits(value) { 1 Transferência Ginseng - 49 + 50 85 1 @@ -1826,7 +1826,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 49 + 50 4 approval title @@ -1836,7 +1836,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 49 + 50 4 approval description @@ -1846,7 +1846,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 49 + 50 4 approval highlight @@ -1856,7 +1856,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 49 + 50 4 approval approve @@ -1866,7 +1866,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 49 + 50 4 approval reject @@ -1876,7 +1876,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 49 + 50 6 approval title @@ -1886,7 +1886,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 49 + 50 6 approval description @@ -1896,7 +1896,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 49 + 50 6 approval highlight @@ -1906,7 +1906,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 49 + 50 6 approval approve @@ -1916,7 +1916,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 49 + 50 6 approval reject @@ -1926,7 +1926,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 49 + 50 24 approval title @@ -1936,7 +1936,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 49 + 50 24 approval description @@ -1946,7 +1946,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 49 + 50 24 approval highlight @@ -1956,7 +1956,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 49 + 50 24 approval approve @@ -1966,7 +1966,7 @@ function onlyDigits(value) { 0 0 Transferência Ginseng - 49 + 50 24 approval reject diff --git a/Transferência Ginseng/workflow/.resources/Solicitação de transferência.png b/Transferência Ginseng/workflow/.resources/Solicitação de transferência.png index d5bc181d6cf4de942b855d1262a31021eac14646..82fede7b9dbae3ca07201c375b6022388d21c559 100644 GIT binary patch literal 52748 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

Preenchimento obrigatório.

diff --git a/compras_digital/.vscode/.advpl/_binary_class.prw b/compras_digital/.vscode/.advpl/_binary_class.prw new file mode 100644 index 0000000..eba78c5 --- /dev/null +++ b/compras_digital/.vscode/.advpl/_binary_class.prw @@ -0,0 +1,10213 @@ +#include "protheus.ch" +/*/{Protheus.doc} brgetddb +Cria um objeto do tipo grade com registros em linhas e informações em colunas. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/brgetddb + +/*/ +class brgetddb from MsBrGetDBase +data caliastrb as character +method new() +end class +/*/{Protheus.doc} brgetddb:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe BrGetDDB + +@param [nrow], numeric, Indica a coordenada vertical superior do objeto. +@param [ncol], numeric, Indica a coordenada horizontal à esquerda do objeto. +@param [nwidth], numeric, Indica a coordenada vertical inferior do objeto. +@param [nheight], numeric, Indica a coordenada horizontal à direita do objeto. +@param [bline], codeblock, Indica o bloco de código da lista de campos. Observação: Este parâmetro é utilizado quando o browse trabalha com array. +@param [aheaders], array, Indica o título dos campos no cabeçalho. +@param [acolsizes], array, Indica a largura das colunas. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [cfield], character, Indica os campos necessários para o filtro. +@param [uval1], character, Indica o início do intervalo para o filtro. +@param [uval2], character, Indica o fim do intervalo para o filtro. +@param [bchange], codeblock, Indica o bloco de código que será executado quando o estado ou conteúdo do objeto é modificado pela ação sobre o controle visual. +@param [bldblclick], codeblock, Indica o bloco de código que será executado quando clicar duas vezes, com o botão esquerdo do mouse, sobre o objeto. +@param [brclick], codeblock, Indica o bloco de código que será executado quando clicar, com o botão direito do mouse, sobre o objeto. +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [ocursor], object, Indica o tipo de ponteiro do mouse. +@param [nclrfore], numeric, Indica a cor do texto do componente. +@param [nclrback], numeric, Indica a cor de fundo do componente. +@param [cmsg], character, Indica a mensagem que será apresentada ao posicionar o ponteiro do mouse sobre o objeto. +@param [uparam20], logical, Compatibility parameter. Pass NIL. +@param [calias], character, Alias a ser utilizado como fonte dos registros do componente. No caso da fonte ser um array, deixar vazio. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, no objeto criado, estiver sendo realizada. Se o retorno for verdadeiro \(.T.\), o objeto continua habilitado; caso contrário, falso \(.F.\). +@param [uparam24], logical, Compatibility parameter. Pass NIL. +@param [bvalid], codeblock, Indica o bloco de código de validação que será executado quando o conteúdo do objeto for modificado. Retorna verdadeiro \(.T.\), se o conteúdo é válido; caso contrário, falso \(.F.\). +@param [uparam26], array, Compatibility parameter. Pass NIL. +@param [uparam27], object, Compatibility parameter. Pass NIL. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, nwidth, nheight, bline, aheaders, acolsizes, ownd, cfield, uval1, uval2, bchange, bldblclick, brclick, ofont, ocursor, nclrfore, nclrback, cmsg, uparam20, calias, lpixel, bwhen, uparam24, bvalid, uparam26, uparam27) class brgetddb +return + + +/*/{Protheus.doc} msbrgetdbase +Cria um objeto do tipo grade com registros em linhas e informações em colunas. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/msbrgetdbase + +/*/ +class msbrgetdbase from TCBrowse +data bdelete as codeblock +data bempty as codeblock +data bmove as codeblock +data bnoaltered as codeblock +data badd as codeblock +data bcustomeditcol as codeblock +method new() +method callrefresh() +method goup() +method godown() +method goleft() +method goright() +method goposition() +method gotop() +method gobottom() +method pageup() +method pagedown() +method recadd() +end class +/*/{Protheus.doc} msbrgetdbase:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe MsBrGetDBase + +@param [nrow], numeric, Indica a coordenada vertical superior do objeto. +@param [ncol], numeric, Indica a coordenada horizontal à esquerda do objeto. +@param [nwidth], numeric, Indica a coordenada vertical inferior do objeto. +@param [nheight], numeric, Indica a coordenada horizontal à direita do objeto. +@param [bline], codeblock, Indica o bloco de código da lista de campos. Observação: Este parâmetro é utilizado quando o browse trabalha com array. +@param [aheaders], array, Indica o título dos campos no cabeçalho. +@param [acolsizes], array, Indica a largura das colunas. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [cfield], character, Indica os campos necessários para o filtro. +@param [uval1], character, Indica o início do intervalo para o filtro. +@param [uval2], character, Indica o fim do intervalo para o filtro. +@param [bchange], codeblock, Indica o bloco de código que será executado quando o estado ou conteúdo do objeto é modificado pela ação sobre o controle visual. +@param [bldblclick], codeblock, Indica o bloco de código que será executado quando clicar duas vezes, com o botão esquerdo do mouse, sobre o objeto. +@param [brclick], codeblock, Indica o bloco de código que será executado quando clicar, com o botão direito do mouse, sobre o objeto. +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [ocursor], object, Indica o tipo de ponteiro do mouse. +@param [nclrfore], numeric, Indica a cor do texto do componente. +@param [nclrback], numeric, Indica a cor de fundo do componente. +@param [cmsg], character, Indica a mensagem que será apresentada ao posicionar o ponteiro do mouse sobre o objeto. +@param [uparam20], logical, Compatibility parameter. Pass NIL. +@param [calias], character, Alias a ser utilizado como fonte dos registros do componente. No caso da fonte ser um array, deixar vazio. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, no objeto criado, estiver sendo realizada. Se o retorno for verdadeiro \(.T.\), o objeto continua habilitado; caso contrário, falso \(.F.\). +@param [uparam24], logical, Compatibility parameter. Pass NIL. +@param [bvalid], codeblock, Indica o bloco de código de validação que será executado quando o conteúdo do objeto for modificado. Retorna verdadeiro \(.T.\), se o conteúdo é válido; caso contrário, falso \(.F.\). +@param [uparam26], array, Compatibility parameter. Pass NIL. +@param [uparam27], object, Compatibility parameter. Pass NIL. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, nwidth, nheight, bline, aheaders, acolsizes, ownd, cfield, uval1, uval2, bchange, bldblclick, brclick, ofont, ocursor, nclrfore, nclrback, cmsg, uparam20, calias, lpixel, bwhen, uparam24, bvalid, uparam26, uparam27) class msbrgetdbase +return +/*/{Protheus.doc} msbrgetdbase:callrefresh +Força a atualização do browse. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/callrefresh +/*/ +method callrefresh() class msbrgetdbase +return +/*/{Protheus.doc} msbrgetdbase:goup +Posiciona o ponteiro do browse uma célula acima de onde está. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/goup +/*/ +method goup() class msbrgetdbase +return +/*/{Protheus.doc} msbrgetdbase:godown +Posiciona o ponteiro do browse uma célula abaixo de onde está.. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/godown +/*/ +method godown() class msbrgetdbase +return +/*/{Protheus.doc} msbrgetdbase:goleft +Posiciona o ponteiro do browse uma célula a esquerda de onde está.. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/goleft +/*/ +method goleft() class msbrgetdbase +return +/*/{Protheus.doc} msbrgetdbase:goright +Posiciona o ponteiro do browse uma célula a direita de onde está.. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/goright +/*/ +method goright() class msbrgetdbase +return +/*/{Protheus.doc} msbrgetdbase:goposition +Posiciona o ponteiro do browse em uma linha específica. + +@type method + +@param [nlin], numeric, Número da linha a ser selecionada pelo cursor. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/goposition +/*/ +method goposition(nlin) class msbrgetdbase +return +/*/{Protheus.doc} msbrgetdbase:gotop +Posiciona o ponteiro do browse na primeira linha. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gotop +/*/ +method gotop() class msbrgetdbase +return +/*/{Protheus.doc} msbrgetdbase:gobottom +Posiciona o ponteiro do browse na última linha. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gobottom +/*/ +method gobottom() class msbrgetdbase +return +/*/{Protheus.doc} msbrgetdbase:pageup +Faz o ponteiro do browse saltar um número de linhas para cima. + +@type method + +@param [nlines], numeric, Número de linhas a serem saltadas para cima. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/pageup +/*/ +method pageup(nlines) class msbrgetdbase +return +/*/{Protheus.doc} msbrgetdbase:pagedown +Faz o ponteiro do browse saltar um número de linhas para baixo. + +@type method + +@param [nlines], numeric, Número de linhas a serem saltadas para baixo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/pagedown +/*/ +method pagedown(nlines) class msbrgetdbase +return +/*/{Protheus.doc} msbrgetdbase:recadd +Executa o codeblock bAdd. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/recadd +/*/ +method recadd() class msbrgetdbase +return + + +/*/{Protheus.doc} mscalend +Cria um objeto do tipo calendário. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/mscalend + +/*/ +class mscalend from TControl +data bchange as codeblock +data bchangemes as codeblock +data ddiaatu as date +data ddiaini as date +data ddiafim as date +data canmultsel as logical +method new() +method addrestri() +method addr_prev() +method addr_next() +method delrestri() +method delr_prev() +method delr_next() +method delallrestri() +method colorday() +method ctrlrefresh() +end class +/*/{Protheus.doc} mscalend:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe MsCalend + +@param [nrow], numeric, Indica a coordenada vertical. +@param [ncol], numeric, Indica a coordenada horizontal. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [lcanmultsel], logical, Indica se habilita \(.T.\) ou desabilita \(.F.\) a seleção de múltiplos dias. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, ownd, lcanmultsel) class mscalend +return +/*/{Protheus.doc} mscalend:addrestri +Adiciona uma data com restrição no calendário. + +@type method + +@param , numeric, Indica a data que será restringida. +@param , numeric, Indica a cor da fonte. +@param [ncorborda], numeric, Indica a cor da borda. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addrestri +/*/ +method addrestri(ndia, ncorfonte, ncorborda) class mscalend +return +/*/{Protheus.doc} mscalend:addr_prev +Adiciona uma data com restrição no calendário \(?\). + +@type method + +@param , numeric, Indica a data que será restringida. +@param , numeric, Indica a cor da fonte. +@param [ncorborda], numeric, Indica a cor da borda. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addr_prev +/*/ +method addr_prev(ndia, ncorfonte, ncorborda) class mscalend +return +/*/{Protheus.doc} mscalend:addr_next +Adiciona uma data com restrição no calendário \(?\). + +@type method + +@param , numeric, Indica a data que será restringida. +@param , numeric, Indica a cor da fonte. +@param [ncorborda], numeric, Indica a cor da borda. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addr_next +/*/ +method addr_next(ndia, ncorfonte, ncorborda) class mscalend +return +/*/{Protheus.doc} mscalend:delrestri +Exclui a restrição de uma determinada data. + +@type method + +@param [ndia], numeric, Indica a data para excluir a restrição. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/delrestri +/*/ +method delrestri(ndia) class mscalend +return +/*/{Protheus.doc} mscalend:delr_prev +Exclui a restrição de uma determinada data \(?\). + +@type method + +@param [ndia], numeric, Indica a data para excluir a restrição. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/delr_prev +/*/ +method delr_prev(ndia) class mscalend +return +/*/{Protheus.doc} mscalend:delr_next +Exclui a restrição de uma determinada data \(?\). + +@type method + +@param [ndia], numeric, Indica a data para excluir a restrição. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/delr_next +/*/ +method delr_next(ndia) class mscalend +return +/*/{Protheus.doc} mscalend:delallrestri +Exclui todas as restrições do calendário. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/delallrestri +/*/ +method delallrestri() class mscalend +return +/*/{Protheus.doc} mscalend:colorday +Define a cor das colunas \(dias da semana\). + +@type method + +@param , numeric, Indica o dia da semana que terá a cor alterada \(1 para domingo, 2 para segunda e assim sucessivamente\). +@param , numeric, Indica a cor da fonte. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/colorday +/*/ +method colorday(ndia, ncorfonte) class mscalend +return +/*/{Protheus.doc} mscalend:ctrlrefresh +Atualiza as informações do calendário. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ctrlrefresh +/*/ +method ctrlrefresh() class mscalend +return + + +/*/{Protheus.doc} mscalendgrid +Cria um objeto do tipo grade de períodos. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/mscalendgrid + +/*/ +class mscalendgrid from TControl +data ctopmsg as character +data nlineatu as numeric +data nzoom as numeric +data nintervini as numeric +data nintervfim as numeric +data ntimeunit as numeric +method new() +method add() +method changecolor() +method delete() +method getescala() +method getintervaltime() +method gonext() +method goprev() +method reset() +method setdateini() +method setdefcolor() +method setresolution() +method settimeunit() +method changepos() +method gotointerval() +method setfillalllines() +end class +/*/{Protheus.doc} mscalendgrid:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe MsCalendGrid + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [ddateini], date, Indica a data inicial do calendário. +@param [nresolution], numeric, Indica a resolução que será aplicada na grade do calendário. +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. Observação: O bloco de código retornará verdadeiro \(.T.\), se o controle permanecer habilitado; caso contrário, retornará falso \(.F.\). +@param [baction], codeblock, Indica o bloco de código que será executado quando clicar, com o botão esquerdo do mouse, sobre o botão. +@param [ndefcolor], numeric, Indica a cor de fundo da grade. +@param [brclick], codeblock, Indica o bloco de código que será executado quando clicar, com o botão direito do mouse, sobre o objeto. +@param [lfilall], logical, Indica se habilita \(.T.\) ou desabilita \(.F.\) o preenchimento de todo o período. +@param [ntypeunit], numeric, Indica o tipo de grade, 0\(Default\) = Horas e 1 = Dias. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ownd, nrow, ncol, nwidth, nheight, ddateini, nresolution, bwhen, baction, ndefcolor, brclick, lfilall, ntypeunit) class mscalendgrid +return +/*/{Protheus.doc} mscalendgrid:add +Adiciona um período na grade. + +@type method + +@param [ccaption], character, Indica o título que será inserido à esquerda da grade. +@param [nlin], numeric, Indica o número da linha que será inserido no item. +@param [ninicial], numeric, Indica a data inicial. +@param [nfinal], numeric, Indica a data final. +@param [ncolor], numeric, Indica a cor que será utilizada para destacar o item. +@param [cdescri], character, Indica a mensagem, do tipo dica de contexto \(tooltip/hint\), que será apresentada ao posicionar o ponteiro do mouse sobre o item. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/add +/*/ +method add(ccaption, nlin, ninicial, nfinal, ncolor, cdescri) class mscalendgrid +return +/*/{Protheus.doc} mscalendgrid:changecolor +Redefine a cor de um determinado intervalo. + +@type method + +@param , numeric, Indica a linha do calendário. +@param , numeric, Indica o intervalo que será redefinido no calendário. +@param , numeric, Indica a cor que será utilizada no intervalo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/changecolor +/*/ +method changecolor(nlinha, nintervalo, ncor) class mscalendgrid +return +/*/{Protheus.doc} mscalendgrid:delete +Exclui um intervalo do calendário. + +@type method + +@return logical, Retorna um valor lógico que representa falha \(.F\) ou sucesso \(.T.\) na exclusão do intervalo. + +@param , numeric, Indica a linha do calendário. +@param , numeric, Indica o intervalo que será excluído. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/delete +/*/ +method delete(nlinha, nintervalo) class mscalendgrid +return +/*/{Protheus.doc} mscalendgrid:getescala +Retorna um texto informando o intervalo e a quantidade de pixels necessários para exibição do calendário. + +@type method + +@return character, Retorna um texto informando o intervalo e a quantidade de pixels necessários para exibição do calendário. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getescala +/*/ +method getescala() class mscalendgrid +return +/*/{Protheus.doc} mscalendgrid:getintervaltime +Retorna o texto definido para o intervalo. + +@type method + +@return character, Retorna o texto que contém informações sobre o intervalo. + +@param , numeric, Indica a linha do calendário. +@param , numeric, Indica o intervalo do calendário. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getintervaltime +/*/ +method getintervaltime(nlinha, nintervalo) class mscalendgrid +return +/*/{Protheus.doc} mscalendgrid:gonext +Posiciona o ponteiro do mouse no início do próximo intervalo da linha selecionada. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gonext +/*/ +method gonext() class mscalendgrid +return +/*/{Protheus.doc} mscalendgrid:goprev +Posiciona o ponteiro do mouse no início do intervalo anterior da linha selecionada. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/goprev +/*/ +method goprev() class mscalendgrid +return +/*/{Protheus.doc} mscalendgrid:reset +Limpa todos os intervalos do calendário. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/reset +/*/ +method reset() class mscalendgrid +return +/*/{Protheus.doc} mscalendgrid:setdateini +Define a data inicial do calendário. + +@type method + +@param , date, Indica a data inicial do calendário. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setdateini +/*/ +method setdateini(ddataini) class mscalendgrid +return +/*/{Protheus.doc} mscalendgrid:setdefcolor +Define a cor de fundo do calendário. + +@type method + +@param , numeric, Indica a cor de fundo do calendário. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setdefcolor +/*/ +method setdefcolor(ncor) class mscalendgrid +return +/*/{Protheus.doc} mscalendgrid:setresolution +Define a resolução para exibição dos períodos. + +@type method + +@param , numeric, Indica a resolução que será utilizada para exibição dos períodos. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setresolution +/*/ +method setresolution(nresoluo) class mscalendgrid +return +/*/{Protheus.doc} mscalendgrid:settimeunit +Define o tipo de grade, 0 = Horas e 1 = Dias. + +@type method + +@param , numeric, Define o tipo de grade, 0 = Horas e 1 = Dias +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/settimeunit +/*/ +method settimeunit(ntypeunit) class mscalendgrid +return +/*/{Protheus.doc} mscalendgrid:changepos +Redefine a posição de um determinado intervalo dentro da mesma linha. + +@type method + +@return logical, Retorna um valor lógico que representa falha \(.F\) ou sucesso \(.T.\) na alteração. + +@param , numeric, Indica a linha do calendário. +@param , numeric, Indica o início do intervalo que será redefinido no calendário. +@param , numeric, Indica o novo início do intervalo. +@param , numeric, Indica o novo fim do intervalo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/changepos +/*/ +method changepos(nlinha, noldintervini, anewintervini, anewintervfim) class mscalendgrid +return +/*/{Protheus.doc} mscalendgrid:gotointerval +Posiciona o cursor no início do intervalo especificado. + +@type method + +@param , numeric, Indica a linha do calendário. +@param , numeric, Indica o início do intervalo que será apontado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gotointerval +/*/ +method gotointerval(nlinha, nintervini) class mscalendgrid +return +/*/{Protheus.doc} mscalendgrid:setfillalllines +Indica se habilita \(.T.\) ou desabilita \(.F.\) o preenchimento de todo o período. + +@type method + +@param , logical, Indica se habilita \(.T.\) ou desabilita \(.F.\) o preenchimento de todo o período. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setfillalllines +/*/ +method setfillalllines(lfilall) class mscalendgrid +return + + +/*/{Protheus.doc} msdialog +Cria uma janela de diálogo, no programa, para entrada de dados do tipo modal. Desta forma, não é permitido que outras janelas recebam dados enquanto esta estiver ativa. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/msdialog + +/*/ +class msdialog from TDialog +method new() +method create() +end class +/*/{Protheus.doc} msdialog:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe MsDialog + +@param [ntop], numeric, Indica a coordenada vertical superior em pixels ou caracteres. +@param [nleft], numeric, Indica a coordenada horizontal esquerda em pixels ou caracteres. +@param [nbottom], numeric, Indica a coordenada vertical inferior em pixels ou caracteres. +@param [nright], numeric, Indica a coordenada horizontal direita em pixels ou caracteres. +@param [ccaption], character, Indica o título da janela. +@param [uparam6], character, Compatibilidade. +@param [uparam7], numeric, Compatibilidade. +@param [uparam8], logical, Compatibilidade. +@param [uparam9], variant, Compatibilidade. +@param [nclrtext], numeric, Indica a cor do texto. +@param [nclrback], numeric, Indica a cor de fundo. +@param [uparam12], object, Compatibilidade. +@param [ownd], object, Indica a janela mãe \(principal\) da janela que será criada. O padrão é a janela principal do programa. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [uparam15], variant, Compatibilidade. +@param [uparam16], variant, Compatibilidade. +@param [uparam17], variant, Compatibilidade. +@param [ltransparent], logical, Se .T. permitira que a Dialog receba um fundo transparente. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ntop, nleft, nbottom, nright, ccaption, uparam6, uparam7, uparam8, uparam9, nclrtext, nclrback, uparam12, ownd, lpixel, uparam15, uparam16, uparam17, ltransparent) class msdialog +return +/*/{Protheus.doc} msdialog:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe MsDialog + +@param [ownd], object, Indica a janela mãe \(principal\) da janela que será criada. O padrão é a janela principal do programa. +@param [ntop], numeric, Indica a coordenada vertical superior em pixels ou caracteres. +@param [nleft], numeric, Indica a coordenada horizontal esquerda em pixels ou caracteres. +@param [nbottom], numeric, Indica a coordenada vertical inferior em pixels ou caracteres. +@param [nright], numeric, Indica a coordenada horizontal direita em pixels ou caracteres. +@param [ccaption], character, Indica o título da janela. +@param [uparam6], character, Compatibilidade. +@param [uparam7], numeric, Compatibilidade. +@param [uparam8], logical, Compatibilidade. +@param [uparam9], variant, Compatibilidade. +@param [nclrtext], numeric, Indica a cor do texto. +@param [nclrback], numeric, Indica a cor de fundo. +@param [uparam12], object, Compatibilidade. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [uparam15], variant, Compatibilidade. +@param [uparam16], variant, Compatibilidade. +@param [uparam17], variant, Compatibilidade. +@param [ltransparent], logical, Se .T. permitira que a Dialog receba um fundo transparente. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(ownd, ntop, nleft, nbottom, nright, ccaption, uparam6, uparam7, uparam8, uparam9, nclrtext, nclrback, uparam12, lpixel, uparam15, uparam16, uparam17, ltransparent) class msdialog +return + + +/*/{Protheus.doc} msselbr +Cria um objeto do tipo grade com registros em linhas e informações em colunas, com funcionalidades de marcação de linhas. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/msselbr + +/*/ +class msselbr from TCBrowse +data lcanallmark as codeblock +data lallmark as codeblock +data lhasmark as codeblock +method new() +method ballmark() +method allmark() +end class +/*/{Protheus.doc} msselbr:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe MsSelBr + +@param [nrow], numeric, Indica a coordenada vertical superior do objeto. +@param [ncol], numeric, Indica a coordenada horizontal à esquerda do objeto. +@param [nwidth], numeric, Indica a coordenada vertical inferior do objeto. +@param [nheight], numeric, Indica a coordenada horizontal à direita do objeto. +@param [bline], codeblock, Indica o bloco de código da lista de campos. Observação: Este parâmetro é utilizado quando o browse trabalha com array. +@param [aheaders], array, Indica o título dos campos no cabeçalho. +@param [acolsizes], array, Indica o tamanho das colunas. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [cfield], character, Indica os campos necessários para o filtro. +@param [uval1], character, Indica o início do intervalo para o filtro. +@param [uval2], character, Indica o fim do intervalo para o filtro. +@param [bchange], codeblock, Indica o bloco de código que será executado quando o estado ou conteúdo do objeto é modificado pela ação sobre o controle visual. +@param [bldblclick], codeblock, Indica o bloco de código que será executado quando clicar duas vezes, com o botão esquerdo do mouse, sobre o objeto. +@param [brclick], codeblock, Indica o bloco de código que será executado quando clicar, com o botão direito do mouse, sobre o objeto. +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [ocursor], object, Indica o tipo de ponteiro do mouse. +@param [nclrfore], numeric, Indica a cor do texto do componente. +@param [nclrback], numeric, Indica a cor de fundo do componente. +@param [cmsg], character, Indica a mensagem que será apresentada ao posicionar o ponteiro do mouse sobre o objeto. +@param [uparam20], logical, Compatibility parameter. Pass NIL. +@param [calias], character, Alias a ser utilizado como fonte dos registros do componente. No caso da fonte ser um array, deixar vazio. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, no objeto criado, estiver sendo realizada. Se o retorno for verdadeiro \(.T.\), o objeto continua habilitado; caso contrário, falso \(.F.\). +@param [uparam24], logical, Compatibility parameter. Pass NIL. +@param [bvalid], codeblock, Indica o bloco de código de validação que será executado quando o conteúdo do objeto for modificado. Retorna verdadeiro \(.T.\), se o conteúdo é válido; caso contrário, falso \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, nwidth, nheight, bline, aheaders, acolsizes, ownd, cfield, uval1, uval2, bchange, bldblclick, brclick, ofont, ocursor, nclrfore, nclrback, cmsg, uparam20, calias, lpixel, bwhen, uparam24, bvalid) class msselbr +return +/*/{Protheus.doc} msselbr:ballmark +Bloco de codigo a ser executado quando usuario clicar no header da coluna 1. Observação: sõ será executado quando o atributo lHasMark está ativado. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ballmark +/*/ +method ballmark() class msselbr +return +/*/{Protheus.doc} msselbr:allmark +Ativa/desativa a marcação de acordo com o parametro lAllMark. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/allmark +/*/ +method allmark() class msselbr +return + + +/*/{Protheus.doc} msworktime +Cria um objeto do tipo barra de período. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/msworktime + +/*/ +class msworktime from TControl +data bchange as codeblock +data ntotalmark as numeric +method new() +method getblocks() +method getintertime() +method getvalue() +method setresol() +method setvalue() +end class +/*/{Protheus.doc} msworktime:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe MsWorkTime + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nresolution], numeric, Indica a resolução que será aplicada na barra de período. +@param [cvalue], character, Indica os intervalos que serão preenchidos. Esses intervalos podem ser utilizados através do método SetValue\(\). +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. Observação: O bloco de código retornará verdadeiro \(.T.\), se o controle permanecer habilitado; caso contrário, retornará falso \(.F.\). +@param [bchange], codeblock, Indica o bloco de código que será executado quando o estado ou conteúdo do objeto é modificado pela ação sobre o controle visual. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ownd, nrow, ncol, nheight, nwidth, nresolution, cvalue, bwhen, bchange) class msworktime +return +/*/{Protheus.doc} msworktime:getblocks +Retorna o número de blocos selecionados. + +@type method + +@return numeric, Número de blocos selecionados. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getblocks +/*/ +method getblocks() class msworktime +return +/*/{Protheus.doc} msworktime:getintertime +Retorna o período selecionado no formato ``. + +@type method + +@return character, Período selecionado no formato "HH:MM:SS". + +@param [nbloco], numeric, Indica o bloco do calendário que deverá retornar o período. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getintertime +/*/ +method getintertime(nbloco) class msworktime +return +/*/{Protheus.doc} msworktime:getvalue +Retorna os itens selecionados no formato ``. + +@type method + +@return character, Itens selecionados no formato "XX X XX". + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getvalue +/*/ +method getvalue() class msworktime +return +/*/{Protheus.doc} msworktime:setresol +Método mantido apenas para compatibilidade com versões anteriores. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setresol +/*/ +method setresol() class msworktime +return +/*/{Protheus.doc} msworktime:setvalue +Define os valores de preenchimento. + +@type method + +@param [cvalor], character, Indica o valor que será definido. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setvalue +/*/ +method setvalue(cvalor) class msworktime +return + + +/*/{Protheus.doc} sbutton +Cria um objeto do tipo botão. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/sbutton + +/*/ +class sbutton from TControl +data baction as codeblock +data ntype as numeric +method create() +method new() +method ctrlrefresh() +end class +/*/{Protheus.doc} sbutton:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe SButton + +@param [ownd], object, Indica a janela ou controle visual onde o botão será criado. +@param [ntop], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [nleft], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [ntype], numeric, Indica a imagem do tipo \(Exemplo: 1=OK e 2=Cancelar\) de botão que será utilizado. Observação: Estas imagens estão carregadas no Smart Client. Para obter o número de cada tipo de botão, consulte a tabela disponível na área "Observações". +@param [baction], codeblock, Indica o bloco de código que será executado quando clicar, com o botão esquerdo do mouse, sobre o botão. +@param [lenable], logical, Indica se habilita\(.T.\)/desabilita\(.F.\) o botão. +@param [cmsg], character, Indica a mensagem, do tipo dica de contexto \(tooltip/hint\), ao posicionar o ponteiro do mouse sobre o botão. +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. Observação: O bloco de código retornará verdadeiro \(.T.\), se o controle permanecer habilitado; caso contrário, retornará falso \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(ownd, ntop, nleft, ntype, baction, lenable, cmsg, bwhen) class sbutton +return +/*/{Protheus.doc} sbutton:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe SButton + +@param [ntop], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [nleft], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [ntype], numeric, Indica a imagem do tipo \(Exemplo: 1=OK e 2=Cancelar\) de botão que será utilizado. Observação: Estas imagens estão carregadas no Smart Client. Para obter o número de cada tipo de botão, consulte a tabela disponível na área "Observações". +@param [baction], codeblock, Indica o bloco de código que será executado quando clicar, com o botão esquerdo do mouse, sobre o botão. +@param [ownd], object, Indica a janela ou controle visual onde o botão será criado. +@param [lenable], logical, Indica se habilita\(.T.\)/desabilita\(.F.\) o botão. +@param [cmsg], character, Indica a mensagem, do tipo dica de contexto \(tooltip/hint\), ao posicionar o ponteiro do mouse sobre o botão. +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. Observação: O bloco de código retornará verdadeiro \(.T.\), se o controle permanecer habilitado; caso contrário, retornará falso \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ntop, nleft, ntype, baction, ownd, lenable, cmsg, bwhen) class sbutton +return +/*/{Protheus.doc} sbutton:ctrlrefresh +Publicado porém sem implementação. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ctrlrefresh +/*/ +method ctrlrefresh() class sbutton +return + + +/*/{Protheus.doc} tbar +Barra de botões para a parte superior da interface. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tbar + +/*/ +class tbar from TControl +data nbtnwidth as numeric +data nbtnheight as numeric +method new() +method setbuttonalign() +end class +/*/{Protheus.doc} tbar:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TBar + +@param [ownd], object, Janela ou controle visual onde o objeto será criado. +@param [nbtnwidth], numeric, Largura dos botões contidos na barra. +@param [nbtnheight], numeric, Altura dos botões contidos na barra. +@param [l3d], logical, O componente terá ou não um aspecto tridimensional \(3D\). +@param [uparam5], character, Compatibility parameter. Pass NIL. +@param [ocursor], object, Objeto do tipo de cursor a ser utilizado no componente. +@param [cresource], character, Recurso a ser utilizado como fundo da barra. +@param [lnoautoadjust], logical, Ajusta ou não automaticamente o tamanho do componente. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ownd, nbtnwidth, nbtnheight, l3d, uparam5, ocursor, cresource, lnoautoadjust) class tbar +return +/*/{Protheus.doc} tbar:setbuttonalign +Define o alinhamento dos botões contidos na barra. + +@type method + +@param , numeric, Código do tipo de alinhamento. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setbuttonalign +/*/ +method setbuttonalign(nval) class tbar +return + + +/*/{Protheus.doc} tbitmap +Exibe uma imagem no objeto. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tbitmap + +/*/ +class tbitmap from TControl +data cbmpfile as character +data cresname as character +data lautosize as logical +data lstretch as logical +data ltransparent as logical +method create() +method new() +method load() +method setbmp() +method setempty() +end class +/*/{Protheus.doc} tbitmap:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TBitmap + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create() class tbitmap +return +/*/{Protheus.doc} tbitmap:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TBitmap + +@param [ntop], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [nleft], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [nwidth], numeric, Indica a largura em pixels. +@param [nheight], numeric, Indica a altura em pixels. +@param [cresname], character, Indica o nome da imagem. +@param [cbmpfile], character, Indica o nome do arquivo. +@param [lnoborder], logical, Indica se desativa \(.T.\) a apresentação da borda. +@param [ownd], object, Indica a janela ou controle visual onde a imagem será criada. +@param [blclicked], codeblock, Indica o bloco de código que será executado quando clicar, com o botão esquerdo do mouse, sobre o objeto. +@param [brclicked], codeblock, Indica o bloco de código que será executado quando clicar, com o botão direito do mouse, sobre o objeto. +@param [lscroll], logical, Indica se habilita \(.T.\)/desabilita \(.F.\) a barra de rolagem. +@param [lstretch], logical, Indica se ativa \(.T.\)/desativa \(.F.\) a extensão da imagem. +@param [ocursor], object, Indica o tipo de ponteiro do mouse. +@param [uparam14], character, Compatibilidade. +@param [uparam15], logical, Compatibilidade. +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. Observação: O bloco de código retornará verdadeiro \(.T.\), se o controle permanecer habilitado; caso contrário, retornará falso \(.F.\). +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [bvalid], codeblock, Indica o bloco de código de validação que será executado quando o conteúdo do objeto for modificado. Retorna verdadeiro \(.T.\), se o conteúdo é válido; caso contrário, falso \(.F.\). +@param [uparam19], logical, Compatibilidade. +@param [uparam20], logical, Compatibilidade. +@param [uparam21], logical, Compatibilidade. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ntop, nleft, nwidth, nheight, cresname, cbmpfile, lnoborder, ownd, blclicked, brclicked, lscroll, lstretch, ocursor, uparam14, uparam15, bwhen, lpixel, bvalid, uparam19, uparam20, uparam21) class tbitmap +return +/*/{Protheus.doc} tbitmap:load +Carrega uma imagem do repositório ou do drive local. + +@type method + +@return logical, Retorna, verdadeiro \(.T.\), se a imagem for carregada com sucesso do repositório ou do arquivo físico, caso contrário, retornará falso \(.F.\). + +@param [cresname], character, Nome da imagem do repositorio a ser carregada. +@param [cbmpfile], character, Caminho da imagem no sistema de arquivos local. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/load +/*/ +method load(cresname, cbmpfile) class tbitmap +return +/*/{Protheus.doc} tbitmap:setbmp +Carrega uma imagem do repositório. + +@type method + +@return logical, Retorna, verdadeiro \(.T.\), se a imagem for carregada com sucesso do repositório ou do arquivo físico, caso contrário, retornará falso \(.F.\). + +@param [cresname], character, Nome da imagem do repositorio a ser carregada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setbmp +/*/ +method setbmp(cresname) class tbitmap +return +/*/{Protheus.doc} tbitmap:setempty +Limpa a imagem. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setempty +/*/ +method setempty() class tbitmap +return + + +/*/{Protheus.doc} tbrowsebutton +Botão que não permite foco. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tbrowsebutton + +/*/ +class tbrowsebutton from TButton +method new() +end class +/*/{Protheus.doc} tbrowsebutton:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TBrowseButton + +@param [nrow], numeric, Indica a coordenada vertical superior do objeto. +@param [ncol], numeric, Indica a coordenada horizontal à esquerda do objeto. +@param [ccaption], character, Texto mostrado no botão. +@param [ownd], object, Janela ou controle visual onde o botão será criado. +@param [baction], codeblock, Codeblock a ser executado quando clicar no botão. +@param [nwidth], numeric, Largura do componente. +@param [nheight], numeric, Altura do componente. +@param [uparam8], numeric, Compatibility parameter. Pass NIL. +@param [ofont], object, Objeto que define a fonte do componente. +@param [uparam10], logical, Compatibility parameter. Pass NIL. +@param [lpixel], logical, Caso .F. as coordenadas serão em caracteres e não em pixels. +@param [uparam12], logical, Compatibility parameter. Pass NIL. +@param [uparam13], character, Compatibility parameter. Pass NIL. +@param [uparam14], logical, Compatibility parameter. Pass NIL. +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. Observação: O bloco de código retornará verdadeiro \(.T.\), se o controle permanecer habilitado; caso contrário, retornará falso \(.F.\). +@param [uparam16], codeblock, Compatibility parameter. Pass NIL. +@param [uparam17], logical, Compatibility parameter. Pass NIL. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, ccaption, ownd, baction, nwidth, nheight, uparam8, ofont, uparam10, lpixel, uparam12, uparam13, uparam14, bwhen, uparam16, uparam17) class tbrowsebutton +return + + +/*/{Protheus.doc} tbtnbmp +Componente do tipo botão. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tbtnbmp + +/*/ +class tbtnbmp from TControl +data baction as codeblock +method newbar() +method loadbitmaps() +method setpopupmenu() +method sethastext() +end class +/*/{Protheus.doc} tbtnbmp:newbar +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TBtnBmp + +@param [cresname1], character, Nome do recurso que contém a imagem. Este recurso deve estar compilado,no repositório de imagens, para ser utilizado. +@param [uparam2], character, Compatibility parameter. Pass NIL. +@param [uparam3], character, Compatibility parameter. Pass NIL. +@param [uparam4], character, Compatibility parameter. Pass NIL. +@param [cmsg], character, Mensagem de dica de contexto \(tooltip/hint\), ao posicionar o ponteiro do mouse sobre o botão. +@param [baction], codeblock, Bloco de código que será executado quando clicar, com o botão esquerdo do mouse, sobre o botão. +@param [uparam7], logical, Compatibility parameter. Pass NIL. +@param [ownd], object, Janela ou controle visual onde o botão será criado. +@param [uparam9], logical, Compatibility parameter. Pass NIL. +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. Observação: O bloco de código retornará verdadeiro \(.T.\) se o controle permanecer habilitado; caso contrário, retornará falso \(.F.\). +@param [ctooltip], character, Indica a mensagem que será apresentada quando o objeto exibir sua dica de contexto \(tooltip\). +@param [uparam12], logical, Compatibility parameter. Pass NIL. +@param [uparam13], codeblock, Compatibility parameter. Pass NIL. +@param [uparam14], character, Compatibility parameter. Pass NIL. +@param [uparam15], numeric, Compatibility parameter. Pass NIL. +@param [cprompt], character, Indica o texto que aparecerá no botão, caso não informado, é utilizado o cToolTip. +@param [ofont], object, Objeto que define a fonte do componente. +@param [uparam18], character, Compatibility parameter. Pass NIL. +@param [uparam19], character, Compatibility parameter. Pass NIL. +@param [uparam20], character, Compatibility parameter. Pass NIL. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/newbar +/*/ +method newbar(cresname1, uparam2, uparam3, uparam4, cmsg, baction, uparam7, ownd, uparam9, bwhen, ctooltip, uparam12, uparam13, uparam14, uparam15, cprompt, ofont, uparam18, uparam19, uparam20) class tbtnbmp +return +/*/{Protheus.doc} tbtnbmp:loadbitmaps +Define a imagem a ser utilizada como botão. + +@type method + +@param [cresname1], character, Nome do recurso que contém a imagem. Este recurso deve estar compilado no repositório para ser utilizado. +@param [uparam2], character, Compatibility parameter. Pass NIL. +@param [uparam3], character, Compatibility parameter. Pass NIL. +@param [uparam4], character, Compatibility parameter. Pass NIL. +@param [uparam5], character, Compatibility parameter. Pass NIL. +@param [uparam6], character, Compatibility parameter. Pass NIL. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/loadbitmaps +/*/ +method loadbitmaps(cresname1, uparam2, uparam3, uparam4, uparam5, uparam6) class tbtnbmp +return +/*/{Protheus.doc} tbtnbmp:setpopupmenu +Define um TMenu estilo popup para quando acionar este componente. + +@type method + +@param [omenu], object, Objeto TMenu a ser utilizado em popup para quando acionar este componente. +@param [nalignment], numeric, Define o alinhamento de abertura do menu, sendo 1 o padrão da esquerda para a direita, e 2 da direita para a esquerda. +@param [lcustom], logical, Se .T. define um leiaute diferenciado para o menu. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setpopupmenu +/*/ +method setpopupmenu(omenu, nalignment, lcustom) class tbtnbmp +return +/*/{Protheus.doc} tbtnbmp:sethastext +Define se o botão terá texto ou não, só funciona se o tema da aplicação for diferente do padrão. + +@type method + +@param [lval], logical, Se .T. o botão terá texto, caso contrário não terá. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/sethastext +/*/ +method sethastext(lval) class tbtnbmp +return + + +/*/{Protheus.doc} tcalendarevent +Cria um objeto de evento de Calendário. Esta é uma classe de apoio para as funções de calendário da classe TMobile \(addCalendarEvent, findCalendarEvent, getCalendarEvent e viewCalendarEvent\). + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcalendarevent + +/*/ +class tcalendarevent from TClassInstance +data ctitle as character +data cdescription as character +data clocation as character +data dstartdate as date +data cstarttime as character +data denddate as date +data cendtime as character +data lallday as logical +method new() +method getcalendarid() +end class +/*/{Protheus.doc} tcalendarevent:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TCalendarEvent + +@param [ctitle], character, Titulo do evento. +@param [cdescription], character, Descrição do evento. +@param [clocation], character, Localização do evento. +@param [dstartdate], date, Data inicial do evento. +@param [cstarttime], character, Horário inicial do evento. +@param [denddate], date, Data final do evento. +@param [cendtime], character, Horário final do evento. +@param [lallday], logical, Indica se o evento será o dia inteiro ou não, caso seja .T., os horários de início e fim serão desconsiderados. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ctitle, cdescription, clocation, dstartdate, cstarttime, denddate, cendtime, lallday) class tcalendarevent +return +/*/{Protheus.doc} tcalendarevent:getcalendarid +Retorna o ID do calendário \(se a classe for resultado de um getCalendarEvent ou após uma inclusão\). + +@type method + +@return character, Retorna o ID do evento. Se não existir retorna "0". + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getcalendarid +/*/ +method getcalendarid() class tcalendarevent +return + + +/*/{Protheus.doc} tcbrowse +Cria um objeto do tipo grade. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcbrowse + +/*/ +class tcbrowse from TControl +data aarray as array +data acolbmps as array +data acolsizes as array +data acolumns as array +data aheaders as array +data bbmpname as codeblock +data bdelok as codeblock +data bdrawselect as codeblock +data bgobottom as codeblock +data bgotop as codeblock +data bheaderclick as codeblock +data binrange as codeblock +data bldblclick as codeblock +data bline as codeblock +data blogiclen as codeblock +data bseekchange as codeblock +data bskip as codeblock +data bsuperdel as codeblock +data bvalid as codeblock +data calias as character +data cfield as character +data cordertype as character +data cseek as character +data ladjustcolsize as logical +data lautoedit as logical +data ldisablepaint as logical +data lhitbottom as logical +data lhittop as logical +data lhscroll as logical +data ljustific as logical +data lusedefaultcolors as logical +data lvscroll as logical +data nat as numeric +data ncolorder as numeric +data ncolpos as numeric +data nfreeze as numeric +data nlen as numeric +data nlinhas as numeric +data nrowpos as numeric +data nscrolltype as numeric +data aobfuscatedcols as array +method new() +method nrowcount() +method natcol() +method getcolsizes() +method getbrworder() +method getcellrect() +method getbrowse() +method addcolumn() +method setfilter() +method setarray() +method resetlen() +method skip() +method goup() +method godown() +method gotop() +method gobottom() +method goleft() +method goright() +method pageup() +method pagedown() +method goposition() +method gocolumn() +method drawselect() +method colpos() +method setheaderimage() +method setblkcolor() +method setblkbackcolor() +end class +/*/{Protheus.doc} tcbrowse:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TCBrowse + +@param [nrow], numeric, Indica a coordenada vertical. +@param [ncol], numeric, Indica a coordenada horizontal. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [bline], codeblock, Indica o bloco de código da lista de campos. Observação: Esse parâmetro é utilizado somente quando o browse trabalha com array. +@param [aheaders], array, Indica o título dos campos no cabeçalho. +@param [acolsizes], array, Indica a largura das colunas. +@param [ownd], object, Indica o controle visual onde o divisor será criado. +@param [cfield], character, Indica os campos necessários para o filtro. +@param [uvalue1], variant, Indica o início do intervalo para o filtro. +@param [uvalue2], variant, Indica o fim do intervalo para o filtro. +@param [bchange], codeblock, Indica o bloco de código que será executado ao mudar de linha. +@param [bldblclick], codeblock, Indica o bloco de código que será executado quando clicar duas vezes, com o botão esquerdo do mouse, sobre o objeto. +@param [brclick], codeblock, Indica o bloco de código que será executado quando clicar, com o botão direito do mouse, sobre o objeto. +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [ocursor], object, Indica o tipo de ponteiro do mouse. +@param [nclrfore], numeric, Indica a cor do texto da janela. +@param [nclrback], numeric, Indica a cor de fundo da janela. +@param [cmsg], character, Indica a mensagem ao posicionar o ponteiro do mouse sobre o objeto. +@param [uparam20], logical, Compatibilidade. +@param [calias], character, Indica se o objeto é utilizado com array \(opcional\) ou tabela \(obrigatório\). +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. Observação: O bloco de código retornará verdadeiro \(.T.\) se o controle permanecer habilitado; caso contrário, retornará falso \(.F.\). +@param [uparam24], logical, Compatibilidade. +@param [bvalid], codeblock, Indica o bloco de código de validação que será executado quando o conteúdo do objeto for modificado. Retorna verdadeiro \(.T.\), se o conteúdo é válido; caso contrário, falso \(.F.\). +@param [lhscroll], logical, Indica se habilita\(.T.\)/desabilita\(.F.\) a barra de rolagem horizontal. +@param [lvscroll], logical, Indica se habilita\(.T.\)/desabilita\(.F.\) a barra de rolagem vertical. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, nwidth, nheight, bline, aheaders, acolsizes, ownd, cfield, uvalue1, uvalue2, bchange, bldblclick, brclick, ofont, ocursor, nclrfore, nclrback, cmsg, uparam20, calias, lpixel, bwhen, uparam24, bvalid, lhscroll, lvscroll) class tcbrowse +return +/*/{Protheus.doc} tcbrowse:nrowcount +Retorna o número de linhas que estão visíveis no browse. + +@type method + +@return numeric, Retorna o número de linhas que estão visíveis no browse + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/nrowcount +/*/ +method nrowcount() class tcbrowse +return +/*/{Protheus.doc} tcbrowse:natcol +Retorna a coluna em uma determinada posição do browse. + +@type method + +@return numeric, Retorna a coluna na posição desejada. + +@param , numeric, Indica a posição em pixels para pesquisar o número da coluna do browse. +@param [lincludefreeze], logical, Indica se as colunas congeladas serão utilizadas no cálculo +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/natcol +/*/ +method natcol(ncolpix, lincludefreeze) class tcbrowse +return +/*/{Protheus.doc} tcbrowse:getcolsizes +Retorna um array com as larguras das colunas. + +@type method + +@return array, Retorna um array com as larguras das colunas. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getcolsizes +/*/ +method getcolsizes() class tcbrowse +return +/*/{Protheus.doc} tcbrowse:getbrworder +Retorna um array com os títulos, definidos pelo usuário, das colunas. + +@type method + +@return array, Retorna um array com os títulos, definidos pelo usuário, das colunas. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getbrworder +/*/ +method getbrworder() class tcbrowse +return +/*/{Protheus.doc} tcbrowse:getcellrect +Retorna o retangulo da célula, do browse, no formato da classe TRect. + +@type method + +@return object, Objeto do tipo TRect com as dimensões da célula. + +@param , numeric, Coluna da célula desejada. +@param , numeric, Linha da célula desejada. +@param , object, Objeto do Tipo TRect que receberá os dados de dimensão da célula. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getcellrect +/*/ +method getcellrect(ncoluna, nlinha, orect) class tcbrowse +return +/*/{Protheus.doc} tcbrowse:getbrowse +Retorna o objeto da classe TCBrowse. + +@type method + +@return object, Retorna o objeto da classe TCBrowse. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getbrowse +/*/ +method getbrowse() class tcbrowse +return +/*/{Protheus.doc} tcbrowse:addcolumn +Inclui coluna no browse. + +@type method + +@param , object, Indica o objeto do tipo TCColumn utilizado para incluir coluna no browse. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addcolumn +/*/ +method addcolumn(ocoluna) class tcbrowse +return +/*/{Protheus.doc} tcbrowse:setfilter +Define o filtro para os registros do browse. + +@type method + +@param , character, Indica o nome do campo que será utilizado para o filtro. +@param [uval1], variant, Indica a expressão inicial do intervalo para o filtro. +@param [uval2], variant, Indica a expressão final do intervalo para o filtro. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setfilter +/*/ +method setfilter(ccampo, uval1, uval2) class tcbrowse +return +/*/{Protheus.doc} tcbrowse:setarray +Define um array para o browse. + +@type method + +@param , array, Indica o array que contêm os dados para o browse. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setarray +/*/ +method setarray(adados) class tcbrowse +return +/*/{Protheus.doc} tcbrowse:resetlen +Reinicia o contador de linha do browse. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/resetlen +/*/ +method resetlen() class tcbrowse +return +/*/{Protheus.doc} tcbrowse:skip +Posiciona o ponteiro do mouse "n" linhas para frente. + +@type method + +@return numeric, Retorna o número de linhas que o ponteiro do mouse saltou. + +@param , numeric, Indica o número de linhas que o ponteiro do mouse irá saltar. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/skip +/*/ +method skip(nskip) class tcbrowse +return +/*/{Protheus.doc} tcbrowse:goup +Move o ponteiro do mouse uma célula acima. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/goup +/*/ +method goup() class tcbrowse +return +/*/{Protheus.doc} tcbrowse:godown +Move o ponteiro do mouse uma célula abaixo. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/godown +/*/ +method godown() class tcbrowse +return +/*/{Protheus.doc} tcbrowse:gotop +Move o ponteiro do mouse para a primeira linha do browse. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gotop +/*/ +method gotop() class tcbrowse +return +/*/{Protheus.doc} tcbrowse:gobottom +Move o ponteiro do mouse para a primeira linha do browse. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gobottom +/*/ +method gobottom() class tcbrowse +return +/*/{Protheus.doc} tcbrowse:goleft +Move o ponteiro do mouse para a célula adjacente à esquerda. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/goleft +/*/ +method goleft() class tcbrowse +return +/*/{Protheus.doc} tcbrowse:goright +Move o ponteiro do mouse para a célula adjacente à direita. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/goright +/*/ +method goright() class tcbrowse +return +/*/{Protheus.doc} tcbrowse:pageup +Move o ponteiro do mouse para cima, conforme o número de linha configurado. + +@type method + +@param , numeric, Indica o número de linhas que o ponteiro do mouse irá saltar. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/pageup +/*/ +method pageup(nlines) class tcbrowse +return +/*/{Protheus.doc} tcbrowse:pagedown +Move o ponteiro do mouse para baixo, conforme o número de linha configurado. + +@type method + +@param , numeric, Indica o número de linhas que o ponteiro do mouse irá saltar. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/pagedown +/*/ +method pagedown(nlines) class tcbrowse +return +/*/{Protheus.doc} tcbrowse:goposition +Posiciona o ponteiro do mouse na linha desejada. + +@type method + +@param , numeric, Indica a linha para posicionar o ponteiro do mouse. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/goposition +/*/ +method goposition(nlinha) class tcbrowse +return +/*/{Protheus.doc} tcbrowse:gocolumn +Posiciona o cursor na coluna desejada. + +@type method + +@param , numeric, Indica a coluna para posicionar o cursor. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gocolumn +/*/ +method gocolumn(ncoluna) class tcbrowse +return +/*/{Protheus.doc} tcbrowse:drawselect +Força a atualização do browse. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/drawselect +/*/ +method drawselect() class tcbrowse +return +/*/{Protheus.doc} tcbrowse:colpos +Retorna o número da coluna posicionada. + +@type method + +@return numeric, Retorna o número da coluna posicionada. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/colpos +/*/ +method colpos() class tcbrowse +return +/*/{Protheus.doc} tcbrowse:setheaderimage +Define uma imagem para o cabeçalho do browse. + +@type method + +@param , numeric, Indica a coluna para inserir a imagem. +@param , character, Indica o nome da imagem no RPO ou o caminho para a mesma, exemplo: `c:/diretorio/imagem.png` +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setheaderimage +/*/ +method setheaderimage(nrow, cimage) class tcbrowse +return +/*/{Protheus.doc} tcbrowse:setblkcolor +Define a cor da fonte das colunas. + +@type method + +@param , codeblock, Indica o bloco de código que permite tratar a cor da fonte da coluna. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setblkcolor +/*/ +method setblkcolor(bcolor) class tcbrowse +return +/*/{Protheus.doc} tcbrowse:setblkbackcolor +Define a cor de fundo das colunas. + +@type method + +@param , codeblock, Indica o bloco de código que permite tratar a cor de fundo da coluna. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setblkbackcolor +/*/ +method setblkbackcolor(bcolor) class tcbrowse +return + + +/*/{Protheus.doc} tccolumn +Cria um objeto do tipo coluna para ser utilizada no browse do sistema, como por exemplo: TCBrowse e BrGetDDb. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tccolumn + +/*/ +class tccolumn from TClassInstance +data bdata as codeblock +data bvalid as codeblock +data cheading as character +data cpicture as character +data ledit as logical +data cerror as character +data corder as character +data cmsg as character +data bclrfore as character +data bclrback as character +data forecolor as character +data backcolor as character +data lbitmap as logical +data lnolite as logical +data nalign as numeric +data nwidth as numeric +method new() +end class +/*/{Protheus.doc} tccolumn:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TCColumn + +@param , character, Indica o título da coluna. +@param , codeblock, Indica o bloco de código que contém o campo da tabela que será apresentado no browse. +@param [cpicture], character, Indica a picture necessária para edição da coluna. +@param [uparam4], variant, Compatibilidade. +@param [uparam5], variant, Compatibilidade. +@param [calinhamento], character, Indica o tipo de alinhamento da coluna. Sendo: Left \(à esquerda\), Center \(centralizada\) ou Right \(à direita\). +@param [nlargura], numeric, Indica a largura da coluna. +@param [lbitmap], logical, Indica se, verdadeiro \(.T.\), a coluna é uma imagem; caso contrário, falso \(.F.\) \(conteúdo padrão\). +@param [ledit], logical, Compatibilidade. +@param [uparam10], variant, Compatibilidade. +@param [bvalid], codeblock, Indica o bloco de código de validação que será executado quando o conteúdo do objeto for modificado. Retorna verdadeiro \(.T.\), se o conteúdo é válido; caso contrário, falso \(.F.\). +@param [uparam12], variant, Compatibilidade. +@param [uparam13], variant, Compatibilidade. +@param [uparam14], variant, Compatibilidade. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ctitulo, bdata, cpicture, uparam4, uparam5, calinhamento, nlargura, lbitmap, ledit, uparam10, bvalid, uparam12, uparam13, uparam14) class tccolumn +return + + +/*/{Protheus.doc} tcheckbox +Cria um objeto do tipo caixa de seleção \(CheckBox\). + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcheckbox + +/*/ +class tcheckbox from TControl +method new() +method create() +method ctrlrefresh() +end class +/*/{Protheus.doc} tcheckbox:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TCheckBox + +@param [nrow], numeric, Indica a coordenada vertical. +@param [ncol], numeric, Indica a coordenada horizontal. +@param [ccaption], character, Indica o título do objeto. +@param [bsetget], codeblock, Indica o bloco de código que será executado na mudança do item selecionado. O bloco de código é responsável pela mudança do valor, da variável lógica, que indica o item selecionado. +@param [odlg], object, Indica a janela ou controle visual onde o objeto será criado. +@param [nwidth], numeric, Indica a largura do objeto. +@param [nheight], numeric, Indica a altura do objeto. É estipulada uma altura padrão para o objeto de 21 pixels, somente sendo possível sua alteração através da aplicação de estilo, utilizando o método SetCss, devidamente documentado no TDN. +@param [uparam8], numeric, Compatibilidade. +@param [blclicked], codeblock, Indica o bloco de código que será executado quando clicar, com o botão esquerdo do mouse, sobre o objeto. +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [bvalid], codeblock, Indica o bloco de código de validação que será executado quando o conteúdo do objeto for modificado. Retorna verdadeiro \(.T.\), se o conteúdo é válido; caso contrário, falso \(.F.\). +@param [nclrtext], numeric, Indica a cor do texto da janela. +@param [nclrpane], numeric, Indica a cor de fundo da janela. +@param [uparam14], logical, Compatibilidade. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [cmsg], character, Indica a mensagem, do tipo dica de contexto \(tooltip/hint\), que será apresentada ao posicionar o ponteiro do mouse sobre o objeto. +@param [uparam17], logical, Compatibilidade. +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. Observação: O bloco de código retornará verdadeiro \(.T.\), se o controle permanecer habilitado; caso contrário, retornará falso \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, ccaption, bsetget, odlg, nwidth, nheight, uparam8, blclicked, ofont, bvalid, nclrtext, nclrpane, uparam14, lpixel, cmsg, uparam17, bwhen) class tcheckbox +return +/*/{Protheus.doc} tcheckbox:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TCheckBox + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [bsetget], codeblock, Indica o bloco de código que será executado na mudança do item selecionado. O bloco de código é responsável pela mudança do valor, da variável lógica, que indica o item selecionado. +@param [nrow], numeric, Indica a coordenada vertical. +@param [ncol], numeric, Indica a coordenada horizontal. +@param [ccaption], character, Indica o título do objeto. +@param [nwidth], numeric, Indica a largura do objeto. +@param [nheight], numeric, Indica a altura do objeto. É estipulada uma altura padrão para o objeto de 21pixels, somente sendo possível sua alteração através da aplicação de estilo, utilizando o método SetCss, devidamente documentado no TDN. +@param [uparam8], numeric, Compatibilidade. +@param [bchange], codeblock, Indica o bloco de código que será executado quando o estado ou conteúdo do objeto é modificado pela ação sobre o controle visual. +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [bvalid], codeblock, Indica o bloco de código de validação que será executado quando o conteúdo do objeto for modificado. Retorna verdadeiro \(.T.\), se o conteúdo é válido; caso contrário, falso \(.F.\). +@param [nclrfore], numeric, Indica a cor do texto da janela. +@param [nclrback], numeric, Indica a cor de fundo da janela. +@param [uparam14], logical, Compatibilidade. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [cmsg], character, Indica a mensagem, do tipo dica de contexto \(tooltip/hint\), que será apresentada ao posicionar o ponteiro do mouse sobre o objeto. +@param [uparam17], logical, Compatibilidade. +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. Observação: O bloco de código retornará verdadeiro \(.T.\), se o controle permanecer habilitado; caso contrário, retornará falso \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(ownd, bsetget, nrow, ncol, ccaption, nwidth, nheight, uparam8, bchange, ofont, bvalid, nclrfore, nclrback, uparam14, lpixel, cmsg, uparam17, bwhen) class tcheckbox +return +/*/{Protheus.doc} tcheckbox:ctrlrefresh +Atualiza as informações do objeto. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ctrlrefresh +/*/ +method ctrlrefresh() class tcheckbox +return + + +/*/{Protheus.doc} tcolortriangle +Cria um objeto do tipo paleta de cores. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcolortriangle + +/*/ +class tcolortriangle from TControl +method create() +method new() +method retcolor() +method setcolor() +method setcolorini() +method setsizetriangle() +end class +/*/{Protheus.doc} tcolortriangle:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TColorTriangle + +@param [ownd], object, Indica a janela ou controle visual onde a paleta de cores será criada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(ownd) class tcolortriangle +return +/*/{Protheus.doc} tcolortriangle:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TColorTriangle + +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [ownd], object, Indica a janela ou controle visual onde a paleta de cores será criada. +@param [nwidth], numeric, Indica a largura da paleta de cores em pixels. +@param [nheight], numeric, Indica a altura da paleta de cores em pixels. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, ownd, nwidth, nheight) class tcolortriangle +return +/*/{Protheus.doc} tcolortriangle:retcolor +Retorna uma representação numérica do RGB \(Red, Green e Blue\) da cor. + +@type method + +@return numeric, Representação numérica do RGB \(Red, Green e Blue\) da cor, gerada através de um algoritmo próprio, que pode ser validada com seu nome definido no colors.ch. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/retcolor +/*/ +method retcolor() class tcolortriangle +return +/*/{Protheus.doc} tcolortriangle:setcolor +Define o RGB \(Red, Green e Blue\) da cor que será utilizada. + +@type method + +@param [ncolor], numeric, Indica a representação numérica do RGB \(Red, Green e Blue\) da cor que será definida. O número pode ser utilizado com sua versão textual definida no colors.ch. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcolor +/*/ +method setcolor(ncolor) class tcolortriangle +return +/*/{Protheus.doc} tcolortriangle:setcolorini +Define a cor RGB \(Red, Green e Blue\) inicial. + +@type method + +@param [ncolor], numeric, Indica a representação numérica do RGB \(Red, Green e Blue\) da cor inicial. O número pode ser utilizado com sua versão textual definida no colors.ch. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcolorini +/*/ +method setcolorini(ncolor) class tcolortriangle +return +/*/{Protheus.doc} tcolortriangle:setsizetriangle +Define o tamanho do triângulo de configuração. + +@type method + +@param , numeric, Indica a largura do objeto. +@param , numeric, Indica a altura do objeto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setsizetriangle +/*/ +method setsizetriangle(nwidth, nheight) class tcolortriangle +return + + +/*/{Protheus.doc} tcombobox +Cria um objeto do tipo caixa de seleção \(ComboBox\). Este controle permite a entrada de dados de múltipla escolha através dos itens definidos em uma lista vertical. Essa lista pode ser acessada ao pressionar a tecla F4 ou pelo botão à direita do controle. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcombobox + +/*/ +class tcombobox from TControl +data aitems as array +data nat as numeric +data lobfuscate as logical +data leditable as logical +method new() +method create() +method select() +method setitems() +method setheight() +end class +/*/{Protheus.doc} tcombobox:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TComboBox + +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [bsetget], codeblock, Indica o bloco de código, no formato `{|u| if( Pcount( )>0, := u, ) }`, que será executado para atualizar a variável \(essa variável deve ser do tipo caracter\). Desta forma, se a lista for seqüencial, o controle atualizará com o conteúdo do item selecionado, se for indexada, será atualizada com o valor do índice do item selecionado. +@param [aitems], array, Indica uma lista de itens e caracteres que serão apresentados. Essa lista pode ter os seguintes formatos: Seqüencial `(Exemplo: {"item1","item2",...,"itemN"})` ou Indexada `(Exemplo: {"a=item1","b=item2",...,"n=itemN"})`. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, bsetget, aitems) class tcombobox +return +/*/{Protheus.doc} tcombobox:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TComboBox + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [bsetget], codeblock, Indica o bloco de código, no formato `{|u| if( Pcount( )>0, := u, ) }`, que será executado para atualizar a variável \(essa variável deve ser do tipo caracter\). Desta forma, se a lista for seqüencial, o controle atualizará com o conteúdo do item selecionado, se for indexada, será atualizada com o valor do índice do item selecionado. +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [aitems], array, Indica uma lista de itens e caracteres que serão apresentados. Essa lista pode ter os seguintes formatos: Seqüencial `(Exemplo: {"item1","item2",...,"itemN"})` ou Indexada `(Exemplo: {"a=item1","b=item2",...,"n=itemN"})`. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [uparam7], numeric, Compatibilidade. +@param [bchange], codeblock, Indica o bloco de código que será executado quando o item selecionado é alterado. +@param [bvalid], codeblock, Indica o bloco de código de validação que será executado quando o conteúdo do objeto for modificado. Retorna verdadeiro \(.T.\), se o conteúdo é válido; caso contrário, falso \(.F.\). +@param [nclrtext], numeric, Indica a cor de texto do objeto. +@param [nclrback], numeric, Indica a cor de fundo do objeto. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [uparam15], character, Compatibilidade. +@param [uparam16], logical, Compatibilidade. +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. Observação: O bloco de código retornará verdadeiro \(.T.\), se o controle permanecer habilitado; caso contrário, retornará falso \(.F.\). +@param [uparam18], logical, Compatibilidade. +@param [uparam19], array, Compatibilidade. +@param [uparam20], codeblock, Compatibilidade. +@param [uparam21], character, Compatibilidade. +@param [creadvar], character, Indica o nome da variável, configurada no parâmetro bSetGet, que será manipulada pelo objeto. Além disso, esse parâmetro será o retorno da função ReadVar\(\). +@param [clabeltext], character, indica o texto que será apresentado na Label. +@param [nlabelpos], numeric, Indica a posição da label, sendo 1=Topo e 2=Esquerda +@param [olabelfont], object, Indica o objeto, do tipo TFont, que será utilizado para definir as características da fonte aplicada na exibição da label. +@param [nlabelcolor], numeric, Indica a cor do texto da Label. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(ownd, bsetget, nrow, ncol, aitems, nwidth, nheight, uparam7, bchange, bvalid, nclrtext, nclrback, lpixel, ofont, uparam15, uparam16, bwhen, uparam18, uparam19, uparam20, uparam21, creadvar, clabeltext, nlabelpos, olabelfont, nlabelcolor) class tcombobox +return +/*/{Protheus.doc} tcombobox:select +Altera o item selecionado, da caixa de seleção, e executa o bloco de código `` definido para o objeto. + +@type method + +@param [nitem], numeric, Indica a posição do item que será selecionado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/select +/*/ +method select(nitem) class tcombobox +return +/*/{Protheus.doc} tcombobox:setitems +Altera os itens da caixa de seleção \(ComboBox\). + +@type method + +@param , array, Indica o array que contêm novos itens para a caixa de seleção \(ComboBox\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setitems +/*/ +method setitems(aitens) class tcombobox +return +/*/{Protheus.doc} tcombobox:setheight +Altera a altura do componente. + +@type method + +@param , numeric, Altura do componente. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setheight +/*/ +method setheight(nheight) class tcombobox +return + + +/*/{Protheus.doc} tcontrol +Classe abstrata herdada por todos os componentes visuais. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcontrol + +/*/ +class tcontrol from TSrvObject +data bchange as codeblock +data bsetget as codeblock +data lmodified as logical +data loutget as logical +data lreadonly as logical +data lvisiblecontrol as logical +data lcrypto as logical +data align as numeric +data nparent as numeric +method click() +method nextcontrol() +method setpopup() +method setaccname() +method setfocus() +method varput() +method setnextfocus() +method setpreviousfocus() +end class +/*/{Protheus.doc} tcontrol:click +Dispara o evento, configurado no bloco de código \*bLClicked\* do objeto. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/click +/*/ +method click() class tcontrol +return +/*/{Protheus.doc} tcontrol:nextcontrol +Retorna o próximo objeto da lista que permite foco. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/nextcontrol +/*/ +method nextcontrol() class tcontrol +return +/*/{Protheus.doc} tcontrol:setpopup +Define um menu do tipo popup para os componentes visuais. + +@type method + +@param , object, Objeto do tipo TMenu. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setpopup +/*/ +method setpopup(omenu) class tcontrol +return +/*/{Protheus.doc} tcontrol:setaccname +Configura o identificador do objeto de interface para integração do TOTVS Smart Client com ferramentas de acessibilidade compatíveis com o Microsoft Active Accessibility \(MSAA\). + +@type method + +@param , character, Indica o identificador do controle, caracter, obrigatório. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setaccname +/*/ +method setaccname(cidentificado) class tcontrol +return +/*/{Protheus.doc} tcontrol:setfocus +Altera o foco da entrada de dados para o objeto. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setfocus +/*/ +method setfocus() class tcontrol +return +/*/{Protheus.doc} tcontrol:varput +Atualiza o valor do objeto. + +@type method + +@param , variant, Indica o texto do objeto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varput +/*/ +method varput(uvalue) class tcontrol +return +/*/{Protheus.doc} tcontrol:setnextfocus +Altera o próximo componente a receber o foco da entrada de dados \(ao pressionar a tecla TAB por exemplo\). + +@type method + +@param , object, Objeto do tipo TControl que será o próximo a receber o foco. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setnextfocus +/*/ +method setnextfocus(oobj) class tcontrol +return +/*/{Protheus.doc} tcontrol:setpreviousfocus +Altera o componente anterior a receber o foco da entrada de dados \(ao pressionar as teclas de atalho Shift + TAB por exemplo\). + +@type method + +@param , object, Objeto do tipo TControl que será o componente anterior a receber o foco. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setpreviousfocus +/*/ +method setpreviousfocus(oobj) class tcontrol +return + + +/*/{Protheus.doc} tdialog +Cria uma janela de diálogo, no programa, para entrada de dados não modal. Desta forma, é permitido que outras janelas recebam dados enquanto esta estiver ativa. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tdialog + +/*/ +class tdialog from TWindow +data nresult as numeric +data bfocuschange as codeblock +data bwindowstate as codeblock +data lmaximized as logical +method new() +method setminimumsize() +method updategets() +method activate() +method end() +method hasfocus() +method windowstate() +end class +/*/{Protheus.doc} tdialog:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TDialog + +@param [ntop], numeric, Indica a coordenada vertical superior em pixels ou caracteres. +@param [nleft], numeric, Indica a coordenada horizontal esquerda em pixels ou caracteres. +@param [nbottom], numeric, Indica a coordenada vertical inferior em pixels ou caracteres. +@param [nright], numeric, Indica a coordenada horizontal direita em pixels ou caracteres. +@param [ccaption], character, Indica o título da janela. +@param [uparam6], variant, Compatibilidade. +@param [uparam7], variant, Compatibilidade. +@param [uparam8], variant, Compatibilidade. +@param [uparam9], variant, Compatibilidade. +@param [nclrtext], numeric, Indica a cor do texto. +@param [nclrback], numeric, Indica a cor de fundo. +@param [uparam12], variant, Compatibilidade. +@param [ownd], object, Indica a janela mãe \(principal\) da janela que será criada. O padrão é a janela principal do programa. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [uparam15], variant, Compatibilidade. +@param [uparam16], variant, Compatibilidade. +@param [uparam17], variant, Compatibilidade. +@param [nwidth], numeric, Indica a largura da janela em pixels. +@param [nheight], numeric, Indica a altura da janela em pixels. +@param [ltransparent], logical, Se .T. permitira que a Dialog receba um fundo transparente. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ntop, nleft, nbottom, nright, ccaption, uparam6, uparam7, uparam8, uparam9, nclrtext, nclrback, uparam12, ownd, lpixel, uparam15, uparam16, uparam17, nwidth, nheight, ltransparent) class tdialog +return +/*/{Protheus.doc} tdialog:setminimumsize +Define o tamanho mínimo da janela. + +@type method + +@param [nwidth], numeric, Indica a largura mínima. +@param [nheight], numeric, Indica a altura mínima. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setminimumsize +/*/ +method setminimumsize(nwidth, nheight) class tdialog +return +/*/{Protheus.doc} tdialog:updategets +Sem implementação. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/updategets +/*/ +method updategets() class tdialog +return +/*/{Protheus.doc} tdialog:activate +Apresenta o diálogo. + +@type method + +@param [uparam1], variant, Compatibilidade. +@param [uparam2], variant, Compatibilidade. +@param [uparam3], variant, Compatibilidade. +@param [lcentered], logical, Indica se a janela será \(.T.\) ou não \(.F.\) centralizada. O padrão é falso \(.F.\). +@param [bvalid], codeblock, Indica se o conteúdo do diálogo é válido. Se o retorno for falso \(.F.\), o diálogo não será fechado quando a finalização for solicitada. +@param [uparam6], variant, Compatibilidade. +@param [binit], codeblock, Indica o bloco de código que será executado quando o diálogo iniciar a exibição. +@param [uparam8], variant, Compatibilidade. +@param [uparam9], variant, Compatibilidade. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/activate +/*/ +method activate(uparam1, uparam2, uparam3, lcentered, bvalid, uparam6, binit, uparam8, uparam9) class tdialog +return +/*/{Protheus.doc} tdialog:end +Finaliza o diálogo. + +@type method + +@return logical, Retorna verdadeiro \(.T.\) se finalizar o diálogo, caso contrário, retorna falso \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/end +/*/ +method end() class tdialog +return +/*/{Protheus.doc} tdialog:hasfocus +Indica se o componente esta em foco. + +@type method + +@return logical, Retorna, verdadeiro \(.T.\), se o componente está em foco, caso contrário, falso \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hasfocus +/*/ +method hasfocus() class tdialog +return +/*/{Protheus.doc} tdialog:windowstate +Indica o estado atual do componente. + +@type method + +@return numeric, Retorna um número inteiro indicando o estado atual do componente. Sendo: 0=Restaurado, 1=Minimizado e 2=Maximizado. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/windowstate +/*/ +method windowstate() class tdialog +return + + +/*/{Protheus.doc} tdrawer +Abre e manipula imagens com extensões BMP \(Bitmap\), JPG \(Joint Photographic Group\) e PNG \(Portable Network Graphics\). + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tdrawer + +/*/ +class tdrawer from TControl +data blclicked as codeblock +data brclicked as codeblock +method new() +method create() +method addtext() +method clearimage() +method crop() +method openimage() +method paste() +method resizeimage() +method saveimage() +method setcolors() +method setfonttext() +method settype() +method undo() +method setpenwidth() +end class +/*/{Protheus.doc} tdrawer:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TDrawer + +@param [nrow], numeric, Indica a coordenada vertical. +@param [ncol], numeric, Indica a coordenada horizontal. +@param [odlg], object, Indica a janela ou controle visual onde o objeto será criado. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [cfilename], character, Indica o nome do arquivo que será aberto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, odlg, nwidth, nheight, cfilename) class tdrawer +return +/*/{Protheus.doc} tdrawer:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TDrawer + +@param [odlg], object, Indica a janela ou controle visual onde o objeto será criado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(odlg) class tdrawer +return +/*/{Protheus.doc} tdrawer:addtext +Inclui um texto em uma determinada posição da imagem. + +@type method + +@param [ntop], numeric, Indica a posição do texto em relação ao topo. +@param [nleft], numeric, Indica a posição do texto à esquerda +@param [ctexto], numeric, Indica o texto que será incluído. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addtext +/*/ +method addtext(ntop, nleft, ctexto) class tdrawer +return +/*/{Protheus.doc} tdrawer:clearimage +Limpa o conteúdo da imagem. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/clearimage +/*/ +method clearimage() class tdrawer +return +/*/{Protheus.doc} tdrawer:crop +Mantém apenas o trecho selecionado da imagem. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/crop +/*/ +method crop() class tdrawer +return +/*/{Protheus.doc} tdrawer:openimage +Abre imagem com extensão BMP \(Bitmap\), JPG \(Joint Photographic Group\) e PNG \(Portable Network Graphics\). + +@type method + +@param [cimagem], character, Indica o diretório e o nome do arquivo que será aberto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/openimage +/*/ +method openimage(cimagem) class tdrawer +return +/*/{Protheus.doc} tdrawer:paste +Copia o conteúdo da memória para a figura, desde que esse conteúdo seja uma imagem. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/paste +/*/ +method paste() class tdrawer +return +/*/{Protheus.doc} tdrawer:resizeimage +Redimensiona a imagem. + +@type method + +@param [nlargura], numeric, Indica a largura da imagem. +@param [naltura], numeric, Indica a altura da imagem. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/resizeimage +/*/ +method resizeimage(nlargura, naltura) class tdrawer +return +/*/{Protheus.doc} tdrawer:saveimage +Salva uma imagem. + +@type method + +@param [cnomeimagem], character, Indica o diretório e o nome do arquivo. +@param [cextensao], character, Indica a extensão \(BMP, JPG e PNG\) do arquivo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/saveimage +/*/ +method saveimage(cnomeimagem, cextensao) class tdrawer +return +/*/{Protheus.doc} tdrawer:setcolors +Define a cor da linha e do fundo. + +@type method + +@param , numeric, Indica a cor da linha. +@param , numeric, Indica a cor de fundo. Observação: Caso esse parâmetro seja definido com -1, o fundo ficará transparente. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcolors +/*/ +method setcolors(ncorlinha, ncorfundo) class tdrawer +return +/*/{Protheus.doc} tdrawer:setfonttext +Define a fonte do texto. + +@type method + +@return logical, Retorna verdadeiro \(.T.\), se a fonte selecionada estiver correta; caso contrário, retornará falso \(.F.\). + +@param , object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setfonttext +/*/ +method setfonttext(ofont) class tdrawer +return +/*/{Protheus.doc} tdrawer:settype +Define o tipo de formato \(Shape\) da imagem. + +@type method + +@param [nshape], numeric, Indica o tipo do formato \(Shape\) da imagem, sendo: 0=Seleção \(Marca um traço da imagem para que possa ser recortada pelo método Crop\), 1=Traço, 2=Traço livre, 3=Círculo, 4=Retângulo e 5=Retângulo com bordas arredondadas. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/settype +/*/ +method settype(nshape) class tdrawer +return +/*/{Protheus.doc} tdrawer:undo +Defaz a última ação realizada na imagem. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/undo +/*/ +method undo() class tdrawer +return +/*/{Protheus.doc} tdrawer:setpenwidth +Indica a espessura da linha a ser desenhada. + +@type method + +@param [nwidth], numeric, Indica a espessura da linha a ser desenhada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setpenwidth +/*/ +method setpenwidth(nwidth) class tdrawer +return + + +/*/{Protheus.doc} tflowlayout +Herda as características de um TPanel e acrescenta a funcionalidade de responsividade aos componentes nele inseridos, mantendo a altura e largura de cada um, porém reposicionando-os dinamicamente de acordo com o espaço disponível no layout. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tflowlayout + +/*/ +class tflowlayout from TPanel +method new() +method addinlayout() +end class +/*/{Protheus.doc} tflowlayout:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TFlowLayout + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [nalign], numeric, Indica o alinhamento do objeto \(container TFlowLayout\) no espaço disponibilizado pelo seu objeto pai. +@param [nwidth], numeric, Indica a largura em pontos do objeto. +@param [nheight], numeric, Indica a altura em pontos do objeto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ownd, nalign, nwidth, nheight) class tflowlayout +return +/*/{Protheus.doc} tflowlayout:addinlayout +Insere um componente no layout. + +@type method + +@param , object, Indica o componente que será inserido no layout. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addinlayout +/*/ +method addinlayout(ocontrol) class tflowlayout +return + + +/*/{Protheus.doc} tfolder +Cria um objeto para exibir pastas. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tfolder + +/*/ +class tfolder from TControl +data adialogs as array +data aprompts as array +data bsetoption as codeblock +data noption as numeric +method new() +method additem() +method aenable() +method hidepage() +method setoption() +method getcaption() +method showpage() +end class +/*/{Protheus.doc} tfolder:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TFolder + +@param [ntop], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [nleft], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [aprompts], array, Indica o título das pastas. +@param [adialogs], array, Indica o nome do diálogo. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [noption], numeric, Indica a pasta selecionada. +@param [nclrfore], numeric, Indica a cor de frente da pasta. +@param [nclrback], numeric, Indica a cor de fundo da pasta. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [uparam10], logical, Compatibilidade +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [cmsg], character, Indica a mensagem, do tipo dica de contexto \(tooltip/hint\), que será apresentada ao posicionar o ponteiro do mouse sobre o objeto. +@param [uparam14], logical, Compatibilidade +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ntop, nleft, aprompts, adialogs, ownd, noption, nclrfore, nclrback, lpixel, uparam10, nwidth, nheight, cmsg, uparam14) class tfolder +return +/*/{Protheus.doc} tfolder:additem +Inclui uma pasta. + +@type method + +@param [citem], character, Indica a título da pasta. +@param [lvisible], logical, Indica se a pasta está \(.T.\) ou não \(.F.\) visível. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/additem +/*/ +method additem(citem, lvisible) class tfolder +return +/*/{Protheus.doc} tfolder:aenable +Habilita/Desabilita uma pasta. + +@type method + +@return logical, Retorna verdadeiro \(.T.\) se o processo ocorrer com sucesso; caso contrário, retornará falso \(.F.\). + +@param [nitem], numeric, Indica a pasta que será habilitada/desabilitada. +@param [lenable], logical, Indica se habilita\(.T.\)/desabilita\(.F.\) a pasta. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/aenable +/*/ +method aenable(nitem, lenable) class tfolder +return +/*/{Protheus.doc} tfolder:hidepage +Oculta uma pasta. + +@type method + +@param , numeric, Indica a pasta que será oculta. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hidepage +/*/ +method hidepage(nitem) class tfolder +return +/*/{Protheus.doc} tfolder:setoption +Seleciona a pasta desejada. + +@type method + +@param [noption], numeric, Indica a pasta que será selecionada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setoption +/*/ +method setoption(noption) class tfolder +return +/*/{Protheus.doc} tfolder:getcaption +Retorna a descrição da aba ativa da Folder + +@type method + +@return character, Retorna a descrição da aba ativa. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getcaption +/*/ +method getcaption() class tfolder +return +/*/{Protheus.doc} tfolder:showpage +Apresenta uma pasta. + +@type method + +@param , numeric, Indica a pasta que será apresentada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/showpage +/*/ +method showpage(nitem) class tfolder +return + + +/*/{Protheus.doc} tfont +Cria um objeto para alterar as características da fonte utilizada em outros controles visuais. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tfont + +/*/ +class tfont from TFontAbs +data cname as character +data nwidth as numeric +data nheight as numeric +data bold as logical +data italic as logical +data underline as logical +method new() +end class +/*/{Protheus.doc} tfont:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TFont + +@param [cname], character, Indica o nome da fonte que será utilizada. +@param [upar2], numeric, Compatibilidade. +@param [nheight], numeric, Indica o tamanho da fonte. +@param [upar4], logical, Compatibilidade. +@param [lbold], logical, Indica se habilita\(.T.\)/desabilita\(.F.\) o estilo negrito. +@param [upar6], numeric, Compatibilidade. +@param [upar7], logical, Compatibilidade. +@param [upar8], numeric, Compatibilidade. +@param [upar9], logical, Compatibilidade. +@param [lunderline], logical, Indica se habilita\(.T.\)/desabilita\(.F.\) o estilo sublinhado. +@param [litalic], logical, Indica se habilita\(.T.\)/desabilita\(.F.\) o estilo itálico. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(cname, upar2, nheight, upar4, lbold, upar6, upar7, upar8, upar9, lunderline, litalic) class tfont +return + + +/*/{Protheus.doc} tftpclient +Classe destinada a comunicação com servidores de FTP \(File Transfer Protocol\). + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tftpclient + +/*/ +class tftpclient +data ntransfertype as numeric +data ntransfermode as numeric +data nconnecttimeout as numeric +data ntransferstruct as numeric +data bfirewallmode as logical +data ndataport as numeric +data ncontrolport as numeric +data ndirinfo as numeric +data ndirinfocount as numeric +data cerrorstring as character +data busesipconnection as logical +method new() +method getlastresponse() +method ftpconnect() +method close() +method directory() +method sendfile() +method receivefile() +method renamefile() +method resumereceivefile() +method deletefile() +method getcurdir() +method chdir() +method cdup() +method mkdir() +method rmdir() +method noop() +method getdirentry() +method gethelp() +method quote() +method getmlcount() +method getmlline() +method settype() +method gettype() +end class +/*/{Protheus.doc} tftpclient:new +Cria uma nova instância da classe TFtpClient. + +@type method + +@return object, Nova instância da classe tFtpClient + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new() class tftpclient +return +/*/{Protheus.doc} tftpclient:getlastresponse +Retorna a resposta do último comando executado no servidor remoto. + +@type method + +@return character, String com a resposta do último comando que foi executado no servidor. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getlastresponse +/*/ +method getlastresponse() class tftpclient +return +/*/{Protheus.doc} tftpclient:ftpconnect +Estabelece uma conexão com um servidor de FTP \( File Transfer Protocol \) . + +@type method + +@return numeric, Retorna 0 em caso de uma conexão bem sucedida. Caso contrário retorna um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ftpconnect +/*/ +method ftpconnect() class tftpclient +return +/*/{Protheus.doc} tftpclient:close +Termina uma conexão estabelecida com um servidor. + +@type method + +@return numeric, Retorna sempre 0. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/close +/*/ +method close() class tftpclient +return +/*/{Protheus.doc} tftpclient:directory +Semelhante a função Directory, lista os arquivos e diretórios do diretório corrente. + +@type method + +@return array, Retorna um array de subarrays, sendo que cada subarray contém informações sobre cada arquivo que atenda o parâmetro **cMask**. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/directory +/*/ +method directory() class tftpclient +return +/*/{Protheus.doc} tftpclient:sendfile +Trasfere um arquivo da máquina local para o servidor remoto. + +@type method + +@return numeric, Retorna 0 em caso de sucesso. Caso contrário retorna um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/sendfile +/*/ +method sendfile() class tftpclient +return +/*/{Protheus.doc} tftpclient:receivefile +Trasfere um arquivo do servidor remoto para a máquina local. + +@type method + +@return numeric, Retorna 0 em caso de sucesso. Caso contrário retorna um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/receivefile +/*/ +method receivefile() class tftpclient +return +/*/{Protheus.doc} tftpclient:renamefile +Renomeia um arquivo hospedado no servidor remoto. + +@type method + +@return numeric, Retorna 0 em caso de sucesso. Caso contrário retorna um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/renamefile +/*/ +method renamefile() class tftpclient +return +/*/{Protheus.doc} tftpclient:resumereceivefile +Retoma a trasferência de um arquivo do servidor remoto para a máquina local. + +@type method + +@return numeric, Retorna 0 em caso de sucesso. Caso contrário retorna um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/resumereceivefile +/*/ +method resumereceivefile() class tftpclient +return +/*/{Protheus.doc} tftpclient:deletefile +Deleta um arquivo hospedado no servidor remoto. + +@type method + +@return numeric, Retorna 0 em caso de sucesso. Caso contrário retorna um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/deletefile +/*/ +method deletefile() class tftpclient +return +/*/{Protheus.doc} tftpclient:getcurdir +Devolve o nome do diretório atual no servidor FTP conectado. + +@type method + +@return numeric, Retorna 0 em caso de sucesso. Caso contrário retorna um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getcurdir +/*/ +method getcurdir() class tftpclient +return +/*/{Protheus.doc} tftpclient:chdir +Muda o diretório corrente do servidor remoto. + +@type method + +@return numeric, Retorna 0 em caso de sucesso. Caso contrário retorna um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/chdir +/*/ +method chdir() class tftpclient +return +/*/{Protheus.doc} tftpclient:cdup +Muda o diretório corrente do servidor remoto para um imediatamente anterior. Correspondente a "cd .." em ambientes Linux. + +@type method + +@return numeric, Retorna 0 em caso de sucesso. Caso contrário retorna um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/cdup +/*/ +method cdup() class tftpclient +return +/*/{Protheus.doc} tftpclient:mkdir +Cria um diretório no servidor remoto. + +@type method + +@return numeric, Retorna 0 em caso de sucesso. Caso contrário retorna um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/mkdir +/*/ +method mkdir() class tftpclient +return +/*/{Protheus.doc} tftpclient:rmdir +Apaga um diretório no servidor remoto. + +@type method + +@return numeric, Retorna 0 em caso de sucesso. Caso contrário retorna um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/rmdir +/*/ +method rmdir() class tftpclient +return +/*/{Protheus.doc} tftpclient:noop +Executa uma operação No-op. + +@type method + +@return numeric, Retorna 0 em caso de sucesso. Caso contrário retorna um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/noop +/*/ +method noop() class tftpclient +return +/*/{Protheus.doc} tftpclient:getdirentry +Devolve o nome de um item de um diretório baseado em um índice. + +@type method + +@return numeric, Retorna 0 em caso de sucesso. Caso contrário retorna um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getdirentry +/*/ +method getdirentry() class tftpclient +return +/*/{Protheus.doc} tftpclient:gethelp +Obtem informação de ajuda do servidor remoto. + +@type method + +@return numeric, Retorna 0 em caso de sucesso. Caso contrário retorna um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gethelp +/*/ +method gethelp() class tftpclient +return +/*/{Protheus.doc} tftpclient:quote +Envia um comando customizado para o servidor. + +@type method + +@return numeric, Retorna 0 em caso de sucesso. Caso contrário retorna um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/quote +/*/ +method quote() class tftpclient +return +/*/{Protheus.doc} tftpclient:getmlcount +Retorna a quantidade de linhas do buffer de resposta. + +@type method + +@return numeric, Número de linhas do buffer de resposta do server. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getmlcount +/*/ +method getmlcount() class tftpclient +return +/*/{Protheus.doc} tftpclient:getmlline +Retorna a linha especificada do buffer de resposta do server. + +@type method + +@return character, String com o conteúdo correspondente a linha passada como parâmetro do buffer de resposta do servidor. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getmlline +/*/ +method getmlline() class tftpclient +return +/*/{Protheus.doc} tftpclient:settype +Seta o tipo de transferência que será usado na recepção e envio de arquivos. + +@type method + +@return numeric, Retorna 0 em caso de sucesso. Caso contrário retorna um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/settype +/*/ +method settype() class tftpclient +return +/*/{Protheus.doc} tftpclient:gettype +Obtém o tipo de transferência que está setada com o servidor. + +@type method + +@return numeric, Retorna o tipo da transferência. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gettype +/*/ +method gettype() class tftpclient +return + + +/*/{Protheus.doc} tget +Cria um objeto para entrada de dados editáveis. Esta classe permite armazenar ou alterar o conteúdo de uma variável através da digitação. No entanto, o conteúdo da variável será alterado quando o objeto perder o foco de edição para outro objeto. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tget + +/*/ +class tget from TControl +data buffer as character +data pictvar as character +data picture as character +data ctext as character +data lpassword as logical +data cplacehold as character +data lobfuscate as logical +data cretf3 as character +data oget as object +data pos as numeric +data exitdirection as numeric +data lcalendario as logical +data lallwaysupdateserver as logical +data aconvkeys as array +method create() +method new() +method ctrlrefresh() +method selectall() +method setcontentalign() +method assign() +method updatebuffer() +method setpos() +method insert() +method ctext() +method jumptonextctrl() +method sethasbutton() +method setnobutton() +method setconvkey() +end class +/*/{Protheus.doc} tget:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TGet + +@param [bsetget], codeblock, Indica o bloco de código, no formato \{\|u\| if\( Pcount\( \)>0, := u, \) \}, que será executado para atualizar a variável \(essa variável deve ser do tipo caracter\). Desta forma, se a lista for sequencial, o controle atualizará com o conteúdo do item selecionado, se for indexada, será atualizada com o valor do índice do item selecionado. +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [cpict], character, Indica a máscara de formatação do conteúdo que será apresentada. Verificar [Tabela de Pictures de Formatação](https://tdn.totvs.com/pages/releaseview.action?pageId=22479526) +@param [bvalid], codeblock, Indica o bloco de código de validação, que será executado quando este objeto estiver em foco, e o operador tentar mover o foco para outro componente da interface. Caso o bloco executado retorne .T., será permitida a mudança de foco. Caso o bloco executado retorne .F., não será permitido a remoção do foco do componente. +@param [nclrfore], numeric, Indica a cor do texto do objeto. +@param [nclrback], numeric, Indica a cor de fundo do objeto. +@param [ofont], object, Indica o objeto, do tipo [TFont](TFont), que será utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [uparam12], logical, Compatibilidade +@param [uparam13], object, Compatibilidade +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [uparam15], character, Compatibilidade +@param [uparam16], logical, Compatibilidade +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados no objeto criado estiver sendo realizada. Se o retorno for verdadeiro \(.T.\), o objeto continua habilitado; caso contrário, falso \(.F.\). +@param [uparam18], logical, Compatibilidade +@param [uparam19], logical, Compatibilidade +@param [bchange], codeblock, Indica o bloco de código que será executado quando o estado ou conteúdo do objeto é modificado pela ação sobre o controle visual. +@param [lreadonly], logical, Indica se o objeto pode ser editado. +@param [lpassword], logical, Indica se, verdadeiro \(.T.\), o objeto apresentará asterisco \(\*\) para entrada de dados de senha; caso contrário, falso \(.F.\). +@param [uparam23], character, Compatibilidade +@param [creadvar], character, Indica o nome da variável, configurada no parâmetro bSetGet, que será manipulada pelo objeto. Além disso, esse parâmetro será o retorno da função ReadVar\(\). +@param [uparam25], character, Compatibilidade +@param [uparam26], character, Compatibilidade +@param [uparam27], logical, Compatibilidade +@param [lhasbutton], logical, Se definido .T. indica que deve ser aplicado o botão para seleção de Data ou Calculadora. +@param [uparam29], logical, Compatibilidade +@param [uparam30], logical, Compatibilidade +@param [clabeltext], character, indica o texto que será apresentado na Label. +@param [nlabelpos], numeric, Indica a posição da label, sendo 1=Topo e 2=Esquerda +@param [olabelfont], object, Indica o objeto, do tipo [TFont](TFont), que será utilizado para definir as características da fonte aplicada na exibição da label. +@param [nlabelcolor], numeric, Indica a cor do texto da Label. +@param [cplacehold], character, Define o texto a ser utilizado como place holder, ou seja, o texto que ficará escrito em cor mais opaca quando nenhuma informação tiver sido digitada no campo. \(disponível em builds superiores a 7.00.121227P\) +@param [lpicturepriority], logical, Quando .T. define que a quantidade de caracteres permitidos no TGet será baseada no tamanho da máscara \(Picture\) definida, mesmo que isto exceda a quantidade de caracteres definida na variável bSetGet, até mesmo se ela for vazia \(essa variável deve ser do tipo caracter\). Além disso este parâmetro ativa o controle dos espaços em branco, não incluindo na variável bSetGet os espaços inseridos automaticamente pela Picture. Ou seja, o TGet retornará somente os espaços em branco efetivamente digitados pelo usuário ou aqueles espaços que já foram inicializados na variável bSetGet. Disponível somente a partir da build 7.00.170117A. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(bsetget, nrow, ncol, nwidth, nheight, cpict, bvalid, nclrfore, nclrback, ofont, uparam12, uparam13, lpixel, uparam15, uparam16, bwhen, uparam18, uparam19, bchange, lreadonly, lpassword, uparam23, creadvar, uparam25, uparam26, uparam27, lhasbutton, uparam29, uparam30, clabeltext, nlabelpos, olabelfont, nlabelcolor, cplacehold, lpicturepriority) class tget +return +/*/{Protheus.doc} tget:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TGet + +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [bsetget], codeblock, Indica o bloco de código, no formato \{\|u\| if\( Pcount\( \)>0, := u, \) \}, que será executado para atualizar a variável \(essa variável deve ser do tipo caracter\). Desta forma, se a lista for sequencial, o controle atualizará com o conteúdo do item selecionado, se for indexada, será atualizada com o valor do índice do item selecionado. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [cpict], character, Indica a máscara de formatação do conteúdo que será apresentada. Verificar [Tabela de Pictures de Formatação](https://tdn.totvs.com/pages/releaseview.action?pageId=22479526) +@param [bvalid], codeblock, Indica o bloco de código de validação que será executado quando o conteúdo do objeto for modificado. Retorna verdadeiro \(.T.\), se o conteúdo é válido; caso contrário, falso \(.F.\). +@param [nclrfore], numeric, Indica a cor do texto do objeto. +@param [nclrback], numeric, Indica a cor de fundo do objeto. +@param [ofont], object, Indica o objeto, do tipo [TFont](TFont), que será utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [uparam12], logical, Compatibilidade +@param [uparam13], object, Compatibilidade +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [uparam15], character, Compatibilidade +@param [uparam16], logical, Compatibilidade +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados no objeto criado estiver sendo realizada. Se o retorno for verdadeiro \(.T.\), o objeto continua habilitado; caso contrário, falso \(.F.\). +@param [uparam18], logical, Compatibilidade +@param [uparam19], logical, Compatibilidade +@param [bchange], codeblock, Indica o bloco de código que será executado quando o estado ou conteúdo do objeto é modificado pela ação sobre o controle visual. +@param [lreadonly], logical, Indica se o objeto pode ser editado. +@param [lpassword], logical, Indica se, verdadeiro \(.T.\), o objeto apresentará asterisco \(\*\) para entrada de dados de senha; caso contrário, falso \(.F.\). +@param [uparam23], character, Compatibilidade +@param [creadvar], character, Indica o nome da variável, configurada no parâmetro bSetGet, que será manipulada pelo objeto. Além disso, esse parâmetro será o retorno da função ReadVar\(\). +@param [uparam25], character, Compatibilidade +@param [uparam26], character, Compatibilidade +@param [uparam27], logical, Compatibilidade +@param [lhasbutton], logical, Indica se, verdadeiro \(.T.\), o uso dos botões padrão, como calendário e calculadora. +@param [lnobutton], logical, Oculta o botão F3 \(HasButton\). +@param [uparam30], logical, Compatibilidade +@param [clabeltext], character, indica o texto que será apresentado na Label. +@param [nlabelpos], numeric, Indica a posição da label, sendo 1=Topo e 2=Esquerda +@param [olabelfont], object, Indica o objeto, do tipo [TFont](TFont), que será utilizado para definir as características da fonte aplicada na exibição da label. +@param [nlabelcolor], numeric, Indica a cor do texto da Label. +@param [cplacehold], character, Define o texto a ser utilizado como place holder, ou seja, o texto que ficará escrito em cor mais opaca quando nenhuma informação tiver sido digitada no campo. \(disponível em builds superiores a 7.00.121227P\) +@param [lpicturepriority], logical, Quando .T. define que a quantidade de caracteres permitidos no TGet será baseada no tamanho da máscara \(Picture\) definida, mesmo que isto exceda a quantidade de caracteres definida na variável bSetGet, até mesmo se ela for vazia \(essa variável deve ser do tipo caracter\). Além disso este parâmetro ativa o controle dos espaços em branco, não incluindo na variável bSetGet os espaços inseridos automaticamente pela Picture. Ou seja, o TGet retornará somente os espaços em branco efetivamente digitados pelo usuário ou aqueles espaços que já foram inicializados na variável bSetGet. Disponível somente a partir da build 7.00.170117A. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ncol, bsetget, ownd, nwidth, nheight, cpict, bvalid, nclrfore, nclrback, ofont, uparam12, uparam13, lpixel, uparam15, uparam16, bwhen, uparam18, uparam19, bchange, lreadonly, lpassword, uparam23, creadvar, uparam25, uparam26, uparam27, lhasbutton, lnobutton, uparam30, clabeltext, nlabelpos, olabelfont, nlabelcolor, cplacehold, lpicturepriority) class tget +return +/*/{Protheus.doc} tget:ctrlrefresh +Força a atualização do objeto. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ctrlrefresh +/*/ +method ctrlrefresh() class tget +return +/*/{Protheus.doc} tget:selectall +Seleciona todo o conteúdo da Get. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/selectall +/*/ +method selectall() class tget +return +/*/{Protheus.doc} tget:setcontentalign +Alinha o conteúdo interno do objeto. + +@type method + +@param , numeric, Indica o tipo de alinhamento. Para informações dos tipos disponíveis, consulte a área Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcontentalign +/*/ +method setcontentalign(nalign) class tget +return +/*/{Protheus.doc} tget:assign +Compatibilidade. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/assign +/*/ +method assign() class tget +return +/*/{Protheus.doc} tget:updatebuffer +Compatibilidade. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/updatebuffer +/*/ +method updatebuffer() class tget +return +/*/{Protheus.doc} tget:setpos +Compatibilidade. + +@type method + +@param [nstart], numeric, Compatibilidade. +@param [nend], numeric, Compatibilidade. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setpos +/*/ +method setpos(nstart, nend) class tget +return +/*/{Protheus.doc} tget:insert +Compatibilidade. + +@type method + +@param [cstring], character, Compatibilidade. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/insert +/*/ +method insert(cstring) class tget +return +/*/{Protheus.doc} tget:ctext +Compatibilidade. + +@type method + +@param [cval], character, Compatibilidade. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ctext +/*/ +method ctext(cval) class tget +return +/*/{Protheus.doc} tget:jumptonextctrl +Compatibilidade. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/jumptonextctrl +/*/ +method jumptonextctrl() class tget +return +/*/{Protheus.doc} tget:sethasbutton +Compatibilidade. + +@type method + +@param [lval], logical, Compatibilidade. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/sethasbutton +/*/ +method sethasbutton(lval) class tget +return +/*/{Protheus.doc} tget:setnobutton +Compatibilidade. + +@type method + +@param [lval], logical, Compatibilidade. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setnobutton +/*/ +method setnobutton(lval) class tget +return +/*/{Protheus.doc} tget:setconvkey +Compatibilidade. + +@type method + +@param [adados], array, Compatibilidade. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setconvkey +/*/ +method setconvkey(adados) class tget +return + + +/*/{Protheus.doc} tgrid +Exibe os dados organizados em uma tabela. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tgrid + +/*/ +class tgrid from TControl +data bcursormove as codeblock +data bcolumnchanged as codeblock +data browleftclick as codeblock +data bgridinfo as codeblock +data bkeyblock as codeblock +data nfreeze as numeric +data ninterval as numeric +data lshowgrid as logical +data nhscroll as numeric +data lcolsresizable as logical +data lcolsmovable as logical +data aobfuscatedcols as array +method new() +method addcolumn() +method clearrows() +method colorder() +method colpos() +method getcellrect() +method getvisiblerows() +method removecolumn() +method scrolllines() +method setheaderclick() +method setrowcolor() +method setrowdata() +method setrowheight() +method setselectedrow() +method setselectionmode() +method setheaderimage() +method gocolumn() +method setkeyvalue() +method setcolumncolor() +method getcolumnssize() +method setcolumnsize() +method setcolumnfont() +method getcursorpos() +end class +/*/{Protheus.doc} tgrid:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TGrid + +@param , object, Indica a janela ou componente parent onde o objeto será criado. +@param [nrow], numeric, Indica a coordenada vertical em pixels. +@param [ncol], numeric, Indica a coordenada horizontal em pixels. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(oparent, nrow, ncol, nwidth, nheight) class tgrid +return +/*/{Protheus.doc} tgrid:addcolumn +Adiciona colunas no objeto. + +@type method + +@param , numeric, Indica o ID de identificação da coluna que será criada. +@param , character, Indica o título da coluna. +@param , numeric, Indica a largura inicial da coluna em pixels. +@param , numeric, Indica o alinhamento do texto na coluna. Para informações das opções disponíveis, consulte a área Observações. +@param [lheaderfollowsdataalign], logical, Indica se o alinhamento do texto do cabeçalho seguirá o mesmo alinhamento do texto na coluna. Este parâmetro está disponível somente em builds superiores a 7.00.120420A. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addcolumn +/*/ +method addcolumn(nid, ccaption, nwidth, nalign, lheaderfollowsdataalign) class tgrid +return +/*/{Protheus.doc} tgrid:clearrows +Apaga todas as linhas visíveis do objeto. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/clearrows +/*/ +method clearrows() class tgrid +return +/*/{Protheus.doc} tgrid:colorder +Preenche o array do objeto com as colunas representadas no componente. + +@type method + +@param , array, Indica o número de posições inteiras que representará a ordem das colunas que constam no componente. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/colorder +/*/ +method colorder(adata) class tgrid +return +/*/{Protheus.doc} tgrid:colpos +Retorna a coluna selecionada. + +@type method + +@return numeric, Índice da coluna selecionada. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/colpos +/*/ +method colpos() class tgrid +return +/*/{Protheus.doc} tgrid:getcellrect +Preenche um array com as propriedades \(Top, Left, Right e Bottom\) do formato da célula selecionada. + +@type method + +@param , array, Indica um array com as propriedades \(Top, Left, Right e Bottom\) do formato da célula selecionada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getcellrect +/*/ +method getcellrect(aret) class tgrid +return +/*/{Protheus.doc} tgrid:getvisiblerows +Retorna o número de linhas visíveis no Grid. + +@type method + +@return numeric, Número de linhas visíveis no Grid. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getvisiblerows +/*/ +method getvisiblerows() class tgrid +return +/*/{Protheus.doc} tgrid:removecolumn +Remove a coluna do objeto. + +@type method + +@param , numeric, Indica o ID de identificação da coluna criada através do método AddColumn\(\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/removecolumn +/*/ +method removecolumn(nid) class tgrid +return +/*/{Protheus.doc} tgrid:scrolllines +Movimenta as linhas de exibição, do objeto, para cima ou para baixo. + +@type method + +@param , numeric, Indica o número de linhas que serão movimentadas. Para mais detalhes, consulte a área Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/scrolllines +/*/ +method scrolllines(nlines) class tgrid +return +/*/{Protheus.doc} tgrid:setheaderclick +Determina o bloco de código que será executado ao clicar no header da coluna do grid. + +@type method + +@param , codeblock, Indica o bloco de código que será executado ao clicar no header da coluna do grid. Para mais detalhes, consulte a área Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setheaderclick +/*/ +method setheaderclick(bblock) class tgrid +return +/*/{Protheus.doc} tgrid:setrowcolor +Determina a cor exibida em uma linha visível do browse com as propriedades \(nLinha, nColorBack, nColorFore\). + +@type method + +@param [nlinha], numeric, Indica a linha visível do browse. +@param [ncolorback], numeric, Indica a RGB da cor de fundo. +@param [ncolorfore], numeric, Indica a RGB da cor do texto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setrowcolor +/*/ +method setrowcolor(nlinha, ncolorback, ncolorfore) class tgrid +return +/*/{Protheus.doc} tgrid:setrowdata +Confgura os dados que serão apresentados em determinada linha do objeto. + +@type method + +@param , numeric, Indica a linha visual que será atualizada. +@param , codeblock, Indica o bloco de código responsável pela geração dos dados que serão apresentados. Para mais detalhes, consulte a área Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setrowdata +/*/ +method setrowdata(nrow, bdata) class tgrid +return +/*/{Protheus.doc} tgrid:setrowheight +Configura a altura de cada linha do grid. + +@type method + +@param [nval], numeric, Indica a altura em pixels. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setrowheight +/*/ +method setrowheight(nval) class tgrid +return +/*/{Protheus.doc} tgrid:setselectedrow +Posiciona na linha selecionada do objeto. + +@type method + +@param [nrow], numeric, Indica a linha que será selecionada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setselectedrow +/*/ +method setselectedrow(nrow) class tgrid +return +/*/{Protheus.doc} tgrid:setselectionmode +Indica o tipo \(linha ou célula\) de navegação no componente. + +@type method + +@param , numeric, Indica o tipo \(0=linha ou 1=célula\) de navegação no componente. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setselectionmode +/*/ +method setselectionmode(nselmode) class tgrid +return +/*/{Protheus.doc} tgrid:setheaderimage +Coloca uma imagem em um header criado previamente. + +@type method + +@param , numeric, Número da coluna a ser aplicada a imagem. +@param , character, Nome do resource da imagem. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setheaderimage +/*/ +method setheaderimage(ncol, cimage) class tgrid +return +/*/{Protheus.doc} tgrid:gocolumn +Posiciona o cursor em uma coluna específica. + +@type method + +@param , numeric, Número da coluna a ser posicionado o cursor. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gocolumn +/*/ +method gocolumn(ncol) class tgrid +return +/*/{Protheus.doc} tgrid:setkeyvalue +Adiciona ou remove uma tecla modificadora. + +@type method + +@param , numeric, Código ASCII da tecla. +@param , numeric, Código para se irá adicionar \(1\) ou remover \(0\) a tecla da lista de modificadores. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setkeyvalue +/*/ +method setkeyvalue(nkey, naddorremove) class tgrid +return +/*/{Protheus.doc} tgrid:setcolumncolor +Define a cor de fundo e do texto de uma coluna. + +@type method + +@param [ncol], numeric, Número da coluna a ser modificada \(a ordem começa do 0, sendo então necessário subtrair 1 do número da coluna\). Caso nenhuma coluna seja informada, limpa as informações sobre cores de fundo e texto de todas as colunas. +@param [nclrback], numeric, Cor de fundo. Caso não seja informada, irá para a cor padrão. +@param [nclrfore], numeric, Cor do texto. Caso não seja informada irá para a cor padrão. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcolumncolor +/*/ +method setcolumncolor(ncol, nclrback, nclrfore) class tgrid +return +/*/{Protheus.doc} tgrid:getcolumnssize +Retorna o tamanho das colunas em pixels. + +@type method + +@return array, Retorna um array com os tamanhos das colunas, sendo cada posição o tamanho da largura de uma coluna em pixels, seguindo a ordem das colunas. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getcolumnssize +/*/ +method getcolumnssize() class tgrid +return +/*/{Protheus.doc} tgrid:setcolumnsize +Define o tamanho da largura de uma coluna em pixels. + +@type method + +@param , numeric, Número \(índice\) da coluna começando por 0. +@param , numeric, Tamanho em pixels da largura da coluna a ser alterada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcolumnsize +/*/ +method setcolumnsize(ncol, nsize) class tgrid +return +/*/{Protheus.doc} tgrid:setcolumnfont +Define a fonte de texto de uma coluna específica. + +@type method + +@param , numeric, Índice da coluna \(iniciando em 1\). +@param , object, Indica o objeto do tipo [TFont](TFont) utilizado para definir as características da fonte aplicada na exibição do texto das linhas da coluna especificada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcolumnfont +/*/ +method setcolumnfont(ncol, ofont) class tgrid +return +/*/{Protheus.doc} tgrid:getcursorpos +Retorna a linha e coluna onde o cursor está atualmente posicionado. + +@type method + +@return array, Array contendo o número da linha \(posição 1\) e coluna \(posição 2\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getcursorpos +/*/ +method getcursorpos() class tgrid +return + + +/*/{Protheus.doc} tgridlayout +Herda as características de um TPanel e acrescenta a funcionalidade de responsividade aos componentes nele inseridos, isto é, tais componentes se adaptam automaticamente ao tamanho do layout disponível, reajustando-se dinamicamente a largura e/ou altura de acordo com o espaço disponível. Os componentes são inseridos em um layout em formato de grid, dispostos em linhas e colunas. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tgridlayout + +/*/ +class tgridlayout from TPanel +method new() +method addinlayout() +method addspacer() +end class +/*/{Protheus.doc} tgridlayout:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TGridLayout + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [nalign], numeric, Indica o alinhamento do objeto \(container TGridLayout\) no espaço disponibilizado pelo seu objeto pai. +@param [nwidth], numeric, Indica a largura em pontos do objeto. +@param [nheight], numeric, Indica a altura em pontos do objeto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ownd, nalign, nwidth, nheight) class tgridlayout +return +/*/{Protheus.doc} tgridlayout:addinlayout +Insere um componente no layout. + +@type method + +@param , object, Indica o componente que será inserido no layout. +@param [nrow], numeric, Especifica em qual linha do grid o componente será inserido. +@param [ncolumn], numeric, Especifica em qual coluna do grid o componente será inserido. +@param [nrowspan], numeric, Especifica quantas linhas serão mescladas. +@param [ncolumnspan], numeric, Especifica quantas colunas serão mescladas. +@param [nalign], numeric, Especifica o alinhamento horizontal e/ou vertical do componente dentro de seu espaço no Layout. Um valor horizontal pode ser combinado a um vertical, por exemplo: LAYOUT_ALIGN_HCENTER + LAYOUT_ALIGN_TOP. Consulte a área de observações para conhecer as opções disponíveis. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addinlayout +/*/ +method addinlayout(ocontrol, nrow, ncolumn, nrowspan, ncolumnspan, nalign) class tgridlayout +return +/*/{Protheus.doc} tgridlayout:addspacer +Insere um espaçador no layout. + +@type method + +@param [nrow], numeric, Representa a linha do grid onde será inserido um espaçador. +@param [ncolumn], numeric, Representa a coluna do grid onde será inserido um espaçador. +@param [nspacefactor], numeric, Especifica um fator que representa sua proporcionalidade em relação a outros espaçadores inseridos no mesmo layout. Um fator maior que zero é suficiente, caso seja o único espaçador no Layout. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addspacer +/*/ +method addspacer(nrow, ncolumn, nspacefactor) class tgridlayout +return + + +/*/{Protheus.doc} tgroup +Cria um objeto do tipo painel, com borda e título, para que outros possam ser agrupados ou classificados. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tgroup + +/*/ +class tgroup from TControl +method new() +method create() +end class +/*/{Protheus.doc} tgroup:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TGroup + +@param [ntop], numeric, Indica a coordenada vertical superior em pixels ou caracteres. +@param [nleft], numeric, Indica a coordenada horizontal à esquerda em pixels ou caracteres. +@param [nbottom], numeric, Indica a coordenada vertical inferior em pixels ou caracteres. +@param [nright], numeric, Indica a coordenada horizontal à direita em pixels ou caracteres. +@param [ccaption], character, Indica o título do grupo. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [nclrtext], numeric, Indica a cor do texto. +@param [nclrpane], numeric, Indica a cor de fundo. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [uparam10], logical, Compatibilidade. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ntop, nleft, nbottom, nright, ccaption, ownd, nclrtext, nclrpane, lpixel, uparam10) class tgroup +return +/*/{Protheus.doc} tgroup:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TGroup + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [ntop], numeric, Indica a coordenada vertical superior em pixels ou caracteres. +@param [nleft], numeric, Indica a coordenada horizontal à esquerda em pixels ou caracteres. +@param [nbottom], numeric, Indica a coordenada vertical inferior em pixels ou caracteres. +@param [nright], numeric, Indica a coordenada horizontal à direita em pixels ou caracteres. +@param [clabel], character, Indica o título do grupo. +@param [nclrtext], numeric, Indica a cor do texto. +@param [nclrpane], numeric, Indica a cor de fundo. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [uparam10], logical, Compatibilidade. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(ownd, ntop, nleft, nbottom, nright, clabel, nclrtext, nclrpane, lpixel, uparam10) class tgroup +return + + +/*/{Protheus.doc} thashmap +Cria um HashMap para acessar elementos em uma lista, a chave de busca dos elementos pode ser Numérica, de Caracteres ou de Datas, os valores armazenados podem ser de qualquer tipo. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/thashmap + +/*/ +class thashmap +data nstatus as numeric +method new() +method set() +method get() +method del() +method list() +method clean() +end class +/*/{Protheus.doc} thashmap:new +Cria um objeto da Classe HashMap. + +@type method + +@return object, Nova instância da classe tHashMap + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new() class thashmap +return +/*/{Protheus.doc} thashmap:set +Atualiza o valor correspondente a chave. + +@type method + +@return logical, Verdadeiro \(.T.\) se executou corretamente e Falso \(.F\) se houve erro + +@param , variant, Chave de armazenamento do valor +@param , variant, Valor a ser armazenado na chave +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/set +/*/ +method set(ykey, xval) class thashmap +return +/*/{Protheus.doc} thashmap:get +Obtém o valor armazenado correspondente a chave. + +@type method + +@return logical, Retorna verdadeiro \(.T.\) se achar a chave, ou falso \(.F.\) se não achar. + +@param , variant, Chave de armazenamento do valor +@param <@aval>, array, Retorna o valor armazenado na chave +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/get +/*/ +method get(ykey, aval) class thashmap +return +/*/{Protheus.doc} thashmap:del +Remove o valor armazenado correspondente a chave + +@type method + +@return logical, Verdadeiro \(.T.\) se deletou o valor e Falso \(.F\) se não encontrou + +@param , variant, Chave de armazenamento do valor +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/del +/*/ +method del(ykey) class thashmap +return +/*/{Protheus.doc} thashmap:list +Lista todos os elementos do objeto HashMap em um array. + +@type method + +@return logical, Verdadeiro \(.T.\) se conseguiu listar todos os elementos ou Falso \(.F.\) caso contrário + +@param <@aelem>, array, Array para retorno da lista dos elementos do HashMap +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/list +/*/ +method list(aelem) class thashmap +return +/*/{Protheus.doc} thashmap:clean +Limpa todos os dados alocados no HashMap + +@type method + +@return logical, Verdadeiro \(.T.\) se limpou todos os dados ou falso \(.F.\) se houve algum erro + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/clean +/*/ +method clean() class thashmap +return + + +/*/{Protheus.doc} thbutton +Cria um objeto do tipo botão com aparência de hiperlink \(como em um navegar de Internet\). Desta forma, esse objeto terá os mesmos eventos e ações da classe TButton. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/thbutton + +/*/ +class thbutton from TControl +method new() +end class +/*/{Protheus.doc} thbutton:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe THButton + +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [ccaption], character, Indica o título do botão. +@param [ownd], object, Indica a janela ou controle visual onde o botão será criado. +@param [blclicked], codeblock, Indica o bloco de código que será executado quando clicar, com o botão esquerdo do mouse, sobre o botão. +@param [nwidth], numeric, Indica a largura em pixels do botão. +@param [nheight], numeric, Indica a altura em pixels do botão. +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do título do botão. +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. Observação: O bloco de código retornará verdadeiro \(.T.\), se o controle permanecer habilitado; caso contrário, retornará falso \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, ccaption, ownd, blclicked, nwidth, nheight, ofont, bwhen) class thbutton +return + + +/*/{Protheus.doc} tibrowser +Cria um objeto do tipo página de internet. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tibrowser + +/*/ +class tibrowser from TControl +method new() +method navigate() +method gohome() +method print() +end class +/*/{Protheus.doc} tibrowser:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TIBrowser + +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [ninitlink], character, Indica a URL Uniform Resource Locator da página de internet. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, nwidth, nheight, ninitlink, ownd) class tibrowser +return +/*/{Protheus.doc} tibrowser:navigate +Direciona para uma nova página Web. + +@type method + +@param [curl], character, Indica a URL Uniform Resource Locator da página Web. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/navigate +/*/ +method navigate(curl) class tibrowser +return +/*/{Protheus.doc} tibrowser:gohome +Direciona para a página \(URL - Uniform Resource Locator\) configurada na construção do objeto. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gohome +/*/ +method gohome() class tibrowser +return +/*/{Protheus.doc} tibrowser:print +Abre uma janela para impressão da página. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/print +/*/ +method print() class tibrowser +return + + +/*/{Protheus.doc} tlinearlayout +Herda as características de um TPanel e acrescenta a funcionalidade de responsividade aos componentes nele inseridos, isto é, tais componentes se adaptam automaticamente ao tamanho do layout disponível, reajustando-se dinamicamente a largura e/ou altura de acordo com o espaço disponível. Os componentes são inseridos linearmente na horizontal ou na vertical dependendo da configuração. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tlinearlayout + +/*/ +class tlinearlayout from TPanel +data ndirection as numeric +method new() +method addinlayout() +method addspacer() +end class +/*/{Protheus.doc} tlinearlayout:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TLinearLayout + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [ndirection], numeric, Indica a direção linear na qual os componentes serão dispostos no layout. Consulte a área de observações para conhecer as opções disponíveis. +@param [nalign], numeric, Indica o alinhamento do objeto \(container TAlignLayout\) no espaço disponibilizado pelo seu objeto pai. +@param [nwidth], numeric, Indica a largura em pontos do objeto. +@param [nheight], numeric, Indica a altura em pontos do objeto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ownd, ndirection, nalign, nwidth, nheight) class tlinearlayout +return +/*/{Protheus.doc} tlinearlayout:addinlayout +Insere um componente no layout. + +@type method + +@param , object, Indica o componente que será inserido no layout. +@param [nalign], numeric, Especifica o alinhamento horizontal e/ou vertical do componente dentro de seu espaço no Layout. Um valor horizontal pode ser combinado a um vertical, por exemplo: LAYOUT_ALIGN_HCENTER + LAYOUT_ALIGN_TOP. Consulte a área de observações para conhecer as opções disponíveis. +@param [nspacerfactor], numeric, Especifica o fator de redimensionamento do componente \(respeitando sua política\) dentro do layout. Para maior legibilidade, pode ser usado um valor que represente a porcentagem. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addinlayout +/*/ +method addinlayout(ocontrol, nalign, nspacerfactor) class tlinearlayout +return +/*/{Protheus.doc} tlinearlayout:addspacer +Insere um espaçador no layout. + +@type method + +@param [nindex], numeric, Representa o indice da lista de componentes do layout onde será inserido um espaçador. +@param [nspacefactor], numeric, Especifica um fator que representa sua proporcionalidade em relação a outros espaçadores inseridos no mesmo layout. É desnecessário quando o layout possuir somente um espaçador. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addspacer +/*/ +method addspacer(nindex, nspacefactor) class tlinearlayout +return + + +/*/{Protheus.doc} tlistbox +Cria um objeto do tipo lista de itens com barra de rolagem. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tlistbox + +/*/ +class tlistbox from TControl +data aitems as array +data nat as numeric +method create() +method new() +method change() +method del() +method getpos() +method getseltext() +method gobottom() +method gotop() +method insert() +method len() +method modify() +method reset() +method select() +method setarray() +method setitems() +method add() +method set() +end class +/*/{Protheus.doc} tlistbox:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TListBox + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [bsetget], codeblock, Indica o bloco de código, no formato \{\|u\| if\( Pcount\( \)>0, := u, \) \}, que será executado para atualizar a variável \(essa variável deve ser do tipo caracter\). Desta forma, se a lista for seqüencial, o controle atualizará com o conteúdo do item selecionado, se for indexada, será atualizada com o valor do índice do item selecionado. +@param [aitems], array, Indica uma lista de itens e caracteres que serão apresentados. Essa lista pode ter os seguintes formatos: Seqüencial \(Exemplo: \{"item1","item2",...,"itemN"\}\) ou Indexada \(Exemplo: \{"a=item1","b=item2",...,"n=itemN"\}\). +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [bchange], codeblock, Indica o bloco de código que será executado quando o estado ou conteúdo do objeto é modificado pela ação sobre o controle visual. +@param [bvalid], codeblock, Indica o bloco de código de validação que será executado quando o conteúdo do objeto for modificado. Retorna verdadeiro \(.T.\), se o conteúdo é válido; caso contrário, falso \(.F.\). +@param [uparam10], object, Compatibility parameter. Pass NIL. +@param [uparam11], object, Compatibility parameter. Pass NIL. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [uparam13], logical, Compatibility parameter. Pass NIL. +@param [bldblclick], codeblock, Indica o bloco de código que será executado quando clicar duas vezes, com o botão esquerdo do mouse, sobre o objeto. +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [uparam16], character, Compatibility parameter. Pass NIL. +@param [uparam17], logical, Compatibility parameter. Pass NIL. +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. Observação: O bloco de código retornará verdadeiro \(.T.\) se o controle permanecer habilitado; caso contrário, retornará falso \(.F.\). +@param [uparam19], array, Compatibility parameter. Pass NIL. +@param [uparam20], codeblock, Compatibility parameter. Pass NIL. +@param [uparam21], logical, Compatibility parameter. Pass NIL. +@param [uparam22], logical, Compatibility parameter. Pass NIL. +@param [brclicked], codeblock, Indica o bloco de código que será executado quando clicar, com o botão direito do mouse, sobre o objeto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(ownd, nrow, ncol, bsetget, aitems, nwidth, nheight, bchange, bvalid, uparam10, uparam11, lpixel, uparam13, bldblclick, ofont, uparam16, uparam17, bwhen, uparam19, uparam20, uparam21, uparam22, brclicked) class tlistbox +return +/*/{Protheus.doc} tlistbox:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TListBox + +@param , numeric, Indica a coordenada vertical em pixels ou caracteres. +@param , numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [bsetget], codeblock, Indica o bloco de código, no formato \{\|u\| if\( Pcount\( \)>0, := u, \) \}, que será executado para atualizar a variável \(essa variável deve ser do tipo caracter\). Desta forma, se a lista for seqüencial, o controle atualizará com o conteúdo do item selecionado, se for indexada, será atualizada com o valor do índice do item selecionado. +@param [aitems], array, Indica uma lista de itens e caracteres que serão apresentados. Essa lista pode ter os seguintes formatos: Seqüencial \(Exemplo: \{"item1","item2",...,"itemN"\}\) ou Indexada \(Exemplo: \{"a=item1","b=item2",...,"n=itemN"\}\). +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [bchange], codeblock, Indica o bloco de código que será executado quando o estado ou conteúdo do objeto é modificado pela ação sobre o controle visual. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [bvalid], codeblock, Indica o bloco de código de validação que será executado quando o conteúdo do objeto for modificado. Retorna verdadeiro \(.T.\), se o conteúdo é válido; caso contrário, falso \(.F.\). +@param [uparam10], object, Compatibility parameter. Pass NIL. +@param [uparam11], object, Compatibility parameter. Pass NIL. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [uparam13], logical, Compatibility parameter. Pass NIL. +@param [bldblclick], codeblock, Indica o bloco de código que será executado quando clicar duas vezes, com o botão esquerdo do mouse, sobre o objeto. +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [uparam16], character, Compatibility parameter. Pass NIL. +@param [uparam17], logical, Compatibility parameter. Pass NIL. +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, no objeto criado, estiver sendo realizada. Se o retorno for verdadeiro \(.T.\), o objeto continua habilitado; caso contrário, falso \(.F.\). +@param [uparam19], array, Compatibility parameter. Pass NIL. +@param [uparam20], codeblock, Compatibility parameter. Pass NIL. +@param [uparam21], logical, Compatibility parameter. Pass NIL. +@param [uparam22], logical, Compatibility parameter. Pass NIL. +@param [brclicked], codeblock, Indica o bloco de código que será executado quando clicar, com o botão direito do mouse, sobre o objeto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, bsetget, aitems, nwidth, nheight, bchange, ownd, bvalid, uparam10, uparam11, lpixel, uparam13, bldblclick, ofont, uparam16, uparam17, bwhen, uparam19, uparam20, uparam21, uparam22, brclicked) class tlistbox +return +/*/{Protheus.doc} tlistbox:change +Executa o bloco de código configurado no parâmetro bChange, ao mudar de linha. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/change +/*/ +method change() class tlistbox +return +/*/{Protheus.doc} tlistbox:del +Exclui um item. + +@type method + +@param [npos], numeric, Indica a posição do item que será excluído. Observação: Essa posição deve ser maior que 0 e menor ou igual que o número de itens. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/del +/*/ +method del(npos) class tlistbox +return +/*/{Protheus.doc} tlistbox:getpos +Retorna a posição do item selecionado na lista. + +@type method + +@return numeric, Retorna a posição do item selecionado. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getpos +/*/ +method getpos() class tlistbox +return +/*/{Protheus.doc} tlistbox:getseltext +Retorna o texto do item selecionado na lista. + +@type method + +@return character, Retorna a posição do item selecionado. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getseltext +/*/ +method getseltext() class tlistbox +return +/*/{Protheus.doc} tlistbox:gobottom +Posiciona no último item da lista. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gobottom +/*/ +method gobottom() class tlistbox +return +/*/{Protheus.doc} tlistbox:gotop +Posiciona no primeiro item da lista. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gotop +/*/ +method gotop() class tlistbox +return +/*/{Protheus.doc} tlistbox:insert +Insere um novo item. + +@type method + +@param [ctext], character, Indica o texto do item que será inserido. +@param [npos], numeric, Indica a posição do novo item, deslocando o item \(anterior\) daquela posição para baixo. Obs.: É necessário que exista um item naquela posição para inserir outro em seu lugar. Se este parâmetro não for passado, o item será inserido na posição do item que está selecionado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/insert +/*/ +method insert(ctext, npos) class tlistbox +return +/*/{Protheus.doc} tlistbox:len +Retorna o número de itens. + +@type method + +@return numeric, Retorna o número de itens. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/len +/*/ +method len() class tlistbox +return +/*/{Protheus.doc} tlistbox:modify +Altera o texto do item. + +@type method + +@param [ctext], character, Indica o novo texto do item. +@param [npos], numeric, Indica a posição do item que terá seu texto alterado. Observação: A posição deve ser maior que 0 e menor ou igual que o número de itens. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/modify +/*/ +method modify(ctext, npos) class tlistbox +return +/*/{Protheus.doc} tlistbox:reset +Limpa todos os itens da ListBox. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/reset +/*/ +method reset() class tlistbox +return +/*/{Protheus.doc} tlistbox:select +Força a seleção de um item. + +@type method + +@param , numeric, Indica a posição do item que será selecionado +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/select +/*/ +method select(nitem) class tlistbox +return +/*/{Protheus.doc} tlistbox:setarray +Define o vetor de itens para a lista. Caso exista uma definição anterior ela será substituida. + +@type method + +@param , array, Indica um array, no formato texto, com os itens para a lista. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setarray +/*/ +method setarray(avetor) class tlistbox +return +/*/{Protheus.doc} tlistbox:setitems +Define o array de itens para a lista. Caso exista uma definição anterior ela será substituida. + +@type method + +@param , array, Indica o array, no formato texto, com os itens para a lista. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setitems +/*/ +method setitems(avetor) class tlistbox +return +/*/{Protheus.doc} tlistbox:add +Adiciona um novo item. + +@type method + +@param [ctext], character, Indica o texto do item que será adicionado. +@param [npos], numeric, Indica a posição do novo item, deslocando o item \(anterior\) daquela posição para baixo. Obs.: Diferente do método Insert, não é necessário que exista um item naquela posição para inserir outro em seu lugar. Se este parâmetro não for passado, o item será inserido no final da lista. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/add +/*/ +method add(ctext, npos) class tlistbox +return +/*/{Protheus.doc} tlistbox:set +Força a seleção de um item. + +@type method + +@param [ctext], character, Indica o texto do item que será selecionado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/set +/*/ +method set(ctext) class tlistbox +return + + +/*/{Protheus.doc} tmailmanager +A classe TMailManager realiza a comunicação com o servidor de e-mail. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tmailmanager + +/*/ +class tmailmanager +method new() +method popconnect() +method popdisconnect() +method getnummsgs() +method deletemsg() +method init() +method smtpconnect() +method smtpdisconnect() +method geterrorstring() +method setpoptimeout() +method setsmtptimeout() +method getsmtptimeout() +method sendmail() +method imapconnect() +method imapdisconnect() +method getfolderlist() +method changefolder() +method deletefolder() +method createfolder() +method renamefolder() +method getmsgheader() +method getmsgbody() +method movemsg() +method copymsg() +method getfolder() +method setmsgflag() +method setfoldersubscribe() +method purge() +method smtpauth() +method imapstore() +method getuser() +method startgetallmsgheader() +method endgetallmsgheader() +method setuserealid() +method setusetls() +method setusessl() +end class +/*/{Protheus.doc} tmailmanager:new +Cria uma nova instância da classe TMailManager. + +@type method + +@return object, Nova instância da classe TMailManager + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new() class tmailmanager +return +/*/{Protheus.doc} tmailmanager:popconnect +Conecta com o servidor POP - Post Office Protocol. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso. Caso contrário, retornará um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/popconnect +/*/ +method popconnect() class tmailmanager +return +/*/{Protheus.doc} tmailmanager:popdisconnect +Encerra a conexão com o servidor POP - Post Office Protocol. + +@type method + +@return numeric, Retorna 0 \(zero\) ao encerrar a conexão com sucesso. Caso contrário, será retornado um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/popdisconnect +/*/ +method popdisconnect() class tmailmanager +return +/*/{Protheus.doc} tmailmanager:getnummsgs +Obtém o número de mensagens existentes no servidor de e-mail. + +@type method + +@return numeric, Retorna 0 \(zero\) se a execução for realizada com sucesso. Caso contrário, será retornado o código de erro ocorrido. + +@param <@nnummsg>, variant, Indica o número de mensagens que estão no servidor. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getnummsgs +/*/ +method getnummsgs(nnummsg) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:deletemsg +Exclui uma mensagem do servidor de e-mail. + +@type method + +@return numeric, Retorna 0 \(zero\) se encontrar e excluir a mensagem. Caso contrário, será retornado o código de erro ocorrido. + +@param , numeric, Indica o número da mensagem que será excluéda. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/deletemsg +/*/ +method deletemsg(nmsg) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:init +Define as configurações da classe TMailManager para realizar uma conexão com o servidor de e-mail. + +@type method + +@return numeric, Retorna sempre 0 \(zero\). Exceto quando for utilizado o protocolo MAPI e o servidor não estiver rodando em plataforma Windows, o retorno será -1. + +@param , character, Indica o endereço ou alias do servidor de e-mail IMAP/POP/MAPI. +@param , character, Indica o endereço ou alias do servidor de e-mail SMTP. +@param , character, Indica a conta de e-mail do usuário no servidor de e-mail. +@param , character, Indica a senha do usuário no servidor de e-mail. +@param [nmailport], numeric, Indica a porta de comunicação para conexão IMAP/POP/MAPI. +@param [nsmtpport], numeric, Indica o Indica a porta de comunicação para conexão SMTP \(Padrão 25\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/init +/*/ +method init(cmailserver, csmtpserver, caccount, cpassword, nmailport, nsmtpport) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:smtpconnect +Conecta com o servidor SMTP - Simple Mail Transfer Protocol. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso. Caso contrário, retornará um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/smtpconnect +/*/ +method smtpconnect() class tmailmanager +return +/*/{Protheus.doc} tmailmanager:smtpdisconnect +Finaliza a conexão entre a aplicação e o servidor SMTP - Simple Mail Transfer Protocol. + +@type method + +@return numeric, Retorna 0 \(zero\) ao encerrar a conexão com sucesso. Caso contrário, retornará um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/smtpdisconnect +/*/ +method smtpdisconnect() class tmailmanager +return +/*/{Protheus.doc} tmailmanager:geterrorstring +Obtém a descrição do código de erro informado. + +@type method + +@return character, Retorna uma string com a descrição do código de erro informado. + +@param , numeric, Indica o código numérico do erro. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/geterrorstring +/*/ +method geterrorstring(nerror) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:setpoptimeout +Define o tempo de espera para uma conexão estabelecida com o servidor POP - Post Office Protocol. + +@type method + +@return numeric, Retorna 0 \(zero\) se o tempo de espera for definido com sucesso. Caso contrário, será retornado um código de erro. + +@param , numeric, Indica o tempo de espera em segundos. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setpoptimeout +/*/ +method setpoptimeout(ntimeout) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:setsmtptimeout +Define o tempo de espera para uma conexão estabelecida com o servidor SMTP - Simple Mail Transfer Protocol. + +@type method + +@return numeric, Retorna 0 \(zero\) se o tempo de espera for definido com sucesso. Caso contrário, será retornado um código de erro. + +@param , numeric, Indica o tempo de espera em segundos. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setsmtptimeout +/*/ +method setsmtptimeout(ntimeout) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:getsmtptimeout +Obtém o tempo de espera para uma conexão estabelecida com o servidor SMTP - Simple Mail Transfer Protocol. + +@type method + +@return numeric, Retorna o tempo de espera em segundos. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getsmtptimeout +/*/ +method getsmtptimeout() class tmailmanager +return +/*/{Protheus.doc} tmailmanager:sendmail +Envia e-mail através do protocolo SMTP - Simple Mail Transfer Protocol ou MAPI. + +@type method + +@return numeric, Retorna 0 \(zero\) se o e-mail for enviado com sucesso. Caso contrário, retornará um código de erro. + +@param , character, Indica o endereço de uma conta de e-mail \(remetente\) para representar o e-mail enviado. Exemplo: usuário@provedor.com.br. +@param , character, Indica o endereço de uma conta de e-mail que será utilizada para enviar o respectivo e-mail. +@param [csubject], character, Indica o assunto do e-mail. Caso não seja especificado, o assunto será enviado em branco. +@param [cbody], character, Indica o conteúdo da mensagem que será enviada. +@param [ccc], character, Indica o endereço de e-mail, na seção Com Cópia \(CC\), que receberá a mensagem. +@param [cbcc], character, Indica o endereço de e-mail, na seção Cópia Oculta, que receberá a mensagem. +@param [aattach], array, Indica um array de caracteres com o caminho do arquivo que será anexado no e-mail +@param , numeric, Indica a quantidade de arquivos que serão anexados no e-mail, no caso a quantidade de elementos do array. +@param [npriority], numeric, Indica a prioridade da mensagem. Caso não seja preenchido, a prioridade será normal. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/sendmail +/*/ +method sendmail(cfrom, cto, csubject, cbody, ccc, cbcc, aattach, nnumattach, npriority) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:imapconnect +Realiza a conexão com o servidor IMAP - Internet Message Access Protocol. + +@type method + +@return numeric, Retorna 0 \(zero\) se realizar a conexão com o servidor IMAP. Caso contrário, retornará um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/imapconnect +/*/ +method imapconnect() class tmailmanager +return +/*/{Protheus.doc} tmailmanager:imapdisconnect +Encerra a conexão entre a aplicação e o servidor IMAP - Internet Message Access Protocol. + +@type method + +@return numeric, Retorna 0 \(zero\) se finalizar a conexão com o servidor IMAP. Caso contrário, retornará um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/imapdisconnect +/*/ +method imapdisconnect() class tmailmanager +return +/*/{Protheus.doc} tmailmanager:getfolderlist +Obtém todas as pastas assinadas de uma conta de e-mail, através do servidor IMAP. + +@type method + +@return array, Retorna um array com todas as pastas assinadas de uma conta de e-mail, com as seguintes informações: nome, status, número de mensagens existentes, número de mensagens lidas e número de mensagens não lidas. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getfolderlist +/*/ +method getfolderlist() class tmailmanager +return +/*/{Protheus.doc} tmailmanager:changefolder +Permite trocar de pasta, no servidor IMAP, informando uma nova pasta. + +@type method + +@return logical, Retorna verdadeiro \(.T.\), se a pasta informada for válida \(existir\) para realizar a troca de pasta. Caso contrário, retorna falso \(.F.\). + +@param , character, Indica o nome da pasta desejada no servidor. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/changefolder +/*/ +method changefolder(cfolder) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:deletefolder +Exclui uma pasta do servidor IMAP. + +@type method + +@return logical, Retorna verdadeiro \(.T.\), se a pasta for excluéda com sucesso. Caso contrário, retorna falso \(.F.\). + +@param , character, Indica o nome da pasta que será excluéda. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/deletefolder +/*/ +method deletefolder(cfolder) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:createfolder +Cria uma nova pasta de mensagens no servidor IMAP. + +@type method + +@return logical, Retorna verdadeiro \(.T.\), se a pasta for criada com sucesso. Caso contrário, retorna falso \(.F.\). + +@param , character, Indica o nome da pasta que será criada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/createfolder +/*/ +method createfolder(cfolder) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:renamefolder +Altera o nome da pasta no servidor IMAP. + +@type method + +@return logical, Retorna verdadeiro \(.T.\), se alterar o nome da pasta. Caso contrário, retorna falso \(.F.\). + +@param , character, Indica o nome atual da pasta no servidor IMAP. +@param , character, Indica o novo nome da pasta. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/renamefolder +/*/ +method renamefolder(ccurfolder, cnewfolder) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:getmsgheader +Obtém o cabeçalho da mensagem, retornando os campos que foram incluédos na mensagem. + +@type method + +@return array, Retorna um array com os campos do cabeçalho da mensagem. Em caso de erro, retorna nulo. + +@param , numeric, Indica o número da mensagem na pasta do servidor de e-mail IMAP. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getmsgheader +/*/ +method getmsgheader(nmsg) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:getmsgbody +Obtém o corpo da mensagem através do servidor IMAP. + +@type method + +@return array, Retorna um array com as informações da mensagem. + +@param , numeric, Indica o número sequencial da mensagem que deseja obter. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getmsgbody +/*/ +method getmsgbody(nmsg) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:movemsg +Move uma mensagem da pasta em uso, do servidor IMAP, para outra pasta contida na conta de e-mail. + +@type method + +@return logical, Retorna verdadeiro \(.T.\) caso tenha sido movida a mensagem com sucesso. Caso contrário, retornará falso \(.F.\). + +@param , numeric, Indica o número sequencial da mensagem que deseja obter. +@param , character, Indica o nome da pasta que armazenará a mensagem. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/movemsg +/*/ +method movemsg(nmsg, cfolder) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:copymsg +Copia uma mensagem da pasta corrente, do servidor IMAP, para outra pasta ou a mesma. + +@type method + +@return logical, Retorna verdadeiro \(.T.\) se realizar a copia da mensagem para a pasta informada. Caso contrário, retorna falso \(.F.\). + +@param , numeric, Indica o número sequencial da mensagem no servidor IMAP. +@param , character, Indica o nome da pasta, do servidor IMAP, para qual a mensagem será transferida. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/copymsg +/*/ +method copymsg(nmsg, cfolder) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:getfolder +Obtém o nome da pasta atual no servidor IMAP. + +@type method + +@return character, Retorna uma string com o nome da pasta em uso pela aplicação. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getfolder +/*/ +method getfolder() class tmailmanager +return +/*/{Protheus.doc} tmailmanager:setmsgflag +Define o status de uma determinada mensagem no servidor IMAP. + +@type method + +@return logical, Retorna verdadeiro \(.T.\) se a mensagem for posicionada corretamente. Caso contrário, retorna falso \(.F.\). + +@param , numeric, Indica o número sequencial da mensagem que deseja obter. +@param , character, Indica o novo status da mensagem, sendo: A=Answered, F=Flagged, D=Deleted, S=Seen, R=Draft, C=Recent, P=Special. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setmsgflag +/*/ +method setmsgflag(nmsg, cflag) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:setfoldersubscribe +Define uma determinada pasta, do servidor IMAP, assinada. Desta forma, a pasta ficará visével, na caixa de correio, e suas mensagens serão baixadas. + +@type method + +@return logical, Retorna verdadeiro \(.T.\) se a operação for realizada com sucesso. Caso contrário, retorna falso \(.F.\). + +@param , character, Indica o nome da pasta que será ou não assinada \(subscribe\). +@param , logical, Indica se a pasta será assinada \(.T.\) ou não \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setfoldersubscribe +/*/ +method setfoldersubscribe(cfolder, lsign) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:purge +Remove permanentemente todas as mensagens contidas na caixa de e-mail e pasta informada, que contenham a flag definidas. + +@type method + +@return logical, Retorna verdadeiro \(.T.\) se a operação for realizada com sucesso. Caso contrário, retorna falso \(.F.\). + +@param , character, Indica o nome da pasta que será realizado o purge. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/purge +/*/ +method purge(cfolder) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:smtpauth +Realiza a autenticação no servidor SMTP - Simple Mail Transfer Protocol - para envio de mensagens. + +@type method + +@return numeric, Retorna 0 \(zero\) em caso de sucesso. Caso contrário, retornará um código de erro. + +@param , character, Indica o usuário no qual será feita a autenticação. +@param , character, Indica a senha do usuário para autenticação. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/smtpauth +/*/ +method smtpauth(cuser, cpass) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:imapstore +Armazena uma mensagem em alguma pasta do servidor IMAP. + +@type method + +@return numeric, Retorna 0 \(zero\) em caso de sucesso. Caso contrário, retornará um código de erro. + +@param , character, Indica o nome da pasta que armazenará a mensagem. +@param , object, Indica um objeto, da classe TMailMessage, que contém informações da mensagem que será armazenada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/imapstore +/*/ +method imapstore(cfolder, omsg) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:getuser +Obtém o nome do usuário de e-mail, informado nos métodos de inicialização ou autenticação. + +@type method + +@return character, Retorna o nome da conta de e-mail em uso. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getuser +/*/ +method getuser() class tmailmanager +return +/*/{Protheus.doc} tmailmanager:startgetallmsgheader +Inicia o processo para adquirir todos os cabeçalhos \(headers\) e mensagens de uma determinada pasta. + +@type method + +@return logical, Retorna verdadeiro \(.T.\), se iniciar o processo para adquirir os cabeçalhos e mensagens. Caso contrário, retorna falso \(.F.\). + +@param , character, Indica a pasta, no servidor de e-mail, em que serão adquiridos os cabeçalhos das mensagens. +@param , array, Indica as informações que serão retornadas nos cabeçalhos das mensagens. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/startgetallmsgheader +/*/ +method startgetallmsgheader(cfolder, aheader) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:endgetallmsgheader +Obtém o cabeçalho de todas as mensagens existentes no servidor IMAP. + +@type method + +@return logical, Retorna verdadeiro \(.T.\) quando o servidor IMAP terminar o envio do cabeçalho da mensagem. Caso contrário, retorna falso \(.F.\). + +@param <@aheader>, array, Indica o vetor que será utilizado como referência para retornar o cabeçalho da mensagem. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/endgetallmsgheader +/*/ +method endgetallmsgheader(aheader) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:setuserealid +Define o tipo de identificação, no servidor IMAP, para utilização do ID único da mensagem para a busca de mensagens. + +@type method + +@param , logical, Indica se será utilizado o ID real da mensagem \(.T.\) ou será utilizado o número da mensagem \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setuserealid +/*/ +method setuserealid(lopt) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:setusetls +Define no envio de e-mail o uso de STARTTLS durante o protocolo de comunicação. + +@type method + +@param , logical, Indica se será utilizará a comunicação segura através de SSL/TLS \(.T.\) ou não \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setusetls +/*/ +method setusetls(ltls) class tmailmanager +return +/*/{Protheus.doc} tmailmanager:setusessl +Define o envio de e-mail utilizando uma comunicação segura através do SSL - Secure Sockets Layer. + +@type method + +@param , logical, Indica se será utilizará a comunicação segura através de SSL \(.T.\) ou não \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setusessl +/*/ +method setusessl(lssl) class tmailmanager +return + + +/*/{Protheus.doc} tmailmessage +A classe TMailMessage representa uma mensagem de e-mail. Através dela é possível obter todas informações sobre a mensagem carregada e realizar diversas operações, como envio e recebimento de e-mail. + +TMailMessage possui todos atributos possíveis a uma mensagem de e-mail e podemos utilizar seus métodos para inserir arquivos, documentos e outras mensagens como anexo da mensagem atual. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tmailmessage + +/*/ +class tmailmessage +data cfrom as character +data cto as character +data ccc as character +data cbcc as character +data csubject as character +data cbody as character +data creplyto as character +data cmessageid as character +data cdate as character +data cnewsgroups as character +data creferences as character +data cxref as character +data cxnewsreader as character +data cxmailer as character +data nxpriority as numeric +data cnotification as character +data lsigned as logical +method new() +method receive() +method send() +method clear() +method attachfile() +method attach() +method attachfullpath() +method addatthtag() +method tostr() +method fromstr() +method addcustomheader() +method getcustomheader() +method getattachcount() +method getattachinfo() +method getattach() +method saveattach() +method save() +method load() +method msgbodytype() +method msgbodyencode() +method setconfirmread() +method receive2() +method send2() +end class +/*/{Protheus.doc} tmailmessage:new +Cria uma nova instância da classe TMailMessage. + +@type method + +@return object, Nova instância da classe TMailMessage + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new() class tmailmessage +return +/*/{Protheus.doc} tmailmessage:receive +Recebe uma nova mensagem do servidor populando o objeto da mensagem. + +@type method + +@return numeric, Retorna 0 \(zero\) quando o e-mail for recebido com sucesso. Caso contrário, retorna outro valor. + +@param , object, Indica o objeto do servidor de e-mail, criado através da classe TMailManager. +@param , numeric, Indica o número da mensagem que será criada, recebido através do método TMailManager:GetNumMsgs. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/receive +/*/ +method receive(oserver, nmsg) class tmailmessage +return +/*/{Protheus.doc} tmailmessage:send +Envia um e-mail, de acordo com os dados passados pelo objeto da classe TMailManager por parâmetro, para o método. + +@type method + +@return numeric, Retorna 0 \(zero\) quando o e-mail for enviado com sucesso. Caso contrário, retorna outro valor. + +@param , object, Indica o objeto do servidor de e-mail, criado através da classe TMailManager. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/send +/*/ +method send(oserver) class tmailmessage +return +/*/{Protheus.doc} tmailmessage:clear +Limpa o conteúdo do objeto. Desta forma, é possível receber várias mensagens no mesmo objeto, apenas limpando o seu conteúdo antes. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/clear +/*/ +method clear() class tmailmessage +return +/*/{Protheus.doc} tmailmessage:attachfile +Anexa um arquivo ao objeto de e-mail. + +@type method + +@return numeric, Em caso de sucesso, retorna o índice do arquivo anexado, iniciando em 0 \(zero\). Em caso de erro, retorna -1. + +@param , character, Indica o nome do arquivo, a partir do rootpath, a ser anexado no e-mail. +@param [nparam2], numeric, Parâmetro de compatiblidade. Passar Nil \(nulo\). +@param [cparam3], character, Parâmetro de compatiblidade. Passar Nil \(nulo\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/attachfile +/*/ +method attachfile(cfile, nparam2, cparam3) class tmailmessage +return +/*/{Protheus.doc} tmailmessage:attach +Anexa o conteúdo de um arquivo ao objeto de e-mail. + +@type method + +@return numeric, Em caso de sucesso, retorna o índice do arquivo anexado, iniciando em 0 \(zero\). Em caso de erro, retorna -1. + +@param , character, Indica o conteúdo do arquivo a ser anexado no e-mail. +@param , character, Parâmetro de compatiblidade. Passar string vazia \(""\). +@param , numeric, Parâmetro de compatiblidade. Passar 0. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/attach +/*/ +method attach(ccontent, cparam2, nparam3) class tmailmessage +return +/*/{Protheus.doc} tmailmessage:attachfullpath +Anexa um arquivo ao objeto de e-mail. + +@type method + +@return numeric, Em caso de sucesso, retorna o índice do arquivo anexado, iniciando em 0 \(zero\). Em caso de erro, retorna -1. + +@param , character, Indica o nome do arquivo, com o caminho completo, a ser anexado no e-mail. +@param [nparam2], numeric, Parâmetro de compatiblidade. Passar Nil \(nulo\). +@param [cparam3], character, Parâmetro de compatiblidade. Passar Nil \(nulo\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/attachfullpath +/*/ +method attachfullpath(cfile, nparam2, cparam3) class tmailmessage +return +/*/{Protheus.doc} tmailmessage:addatthtag +Permite definir um header ao último arquivo anexado na mensagem a ser enviada. + +@type method + +@return numeric, Retorna o índice do header adicionado na lista caso existe algum anexo. Caso não tenha anexos, retorna -1. + +@param , character, Indica os dados que se deseja informar para o último arquivo anexado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addatthtag +/*/ +method addatthtag(ctag) class tmailmessage +return +/*/{Protheus.doc} tmailmessage:tostr +Converte um objeto da classe TMailMessage para uma string. + +@type method + +@return character, String com o objeto de e-mail. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tostr +/*/ +method tostr() class tmailmessage +return +/*/{Protheus.doc} tmailmessage:fromstr +Carrega um e-mail a partir de uma string para um objeto da classe TMailMessage. + +@type method + +@param , character, Obejto da classe TMailMessage convertido para string. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/fromstr +/*/ +method fromstr(cstr) class tmailmessage +return +/*/{Protheus.doc} tmailmessage:addcustomheader +Adiciona um header personalizado à mensagem. + +@type method + +@param , character, Nome do header que será adicionado à mensagem. +@param , character, Valor do header que será adicionado à mensagem. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addcustomheader +/*/ +method addcustomheader(cname, cvalue) class tmailmessage +return +/*/{Protheus.doc} tmailmessage:getcustomheader +Devolve o valor de um header da mensagem. + +@type method + +@return character, Valor do header que está na mensagem. + +@param , character, Nome do header que está na mensagem. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getcustomheader +/*/ +method getcustomheader(cname) class tmailmessage +return +/*/{Protheus.doc} tmailmessage:getattachcount +Informa quantidade de arquivos anexados a mensagem. + +@type method + +@return numeric, Retorna o número de anexos da mensagem. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getattachcount +/*/ +method getattachcount() class tmailmessage +return +/*/{Protheus.doc} tmailmessage:getattachinfo +Apresenta informações de um anexo de uma mensagem. + +@type method + +@return array, Retorna Nil \(nulo\) caso não encontre o anexo. Caso encontre, retorna um vetor com informações do anexo. + +@param , numeric, Indica o número da mensagem que deseja verificar. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getattachinfo +/*/ +method getattachinfo(nmsg) class tmailmessage +return +/*/{Protheus.doc} tmailmessage:getattach +Permite obter o conteúdo do arquivo atachado e retornar esse conteúdo através de uma string. + +@type method + +@return character, Retorna uma string \(cadeia de caracteres\) contendo o conteúdo do arquivo anexado na mensagem. + +@param , numeric, Indica o ID \(número de identificação da mensagem\) que se deseja obter informações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getattach +/*/ +method getattach(cnummsg) class tmailmessage +return +/*/{Protheus.doc} tmailmessage:saveattach +Salva um arquivo anexo a mensagem em disco. + +@type method + +@return logical, Retorna verdadeiro \(.T.\) caso consiga salvar o anexo com sucesso. Falso \(.F.\) caso contrário. + +@param , numeric, Índice do anexo iniciando em 1. +@param , character, Caminho com o nome do arquivo que será gravado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/saveattach +/*/ +method saveattach(nindex, cpath) class tmailmessage +return +/*/{Protheus.doc} tmailmessage:save +Salva uma mensagem de e-mail em disco. + +@type method + +@param , character, Indica o arquivo no disco a partir do RootPath do servidor. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/save +/*/ +method save(cfilepath) class tmailmessage +return +/*/{Protheus.doc} tmailmessage:load +Carrega um e-mail salvo em disco para um objeto da classe TMailMessage. + +@type method + +@param , character, Indica o arquivo no disco a partir do RootPath do servidor. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/load +/*/ +method load(cfile) class tmailmessage +return +/*/{Protheus.doc} tmailmessage:msgbodytype +Permite definir o tipo do corpo do e-mail. + +@type method + +@param , character, Indica o valor do tipo do corpo do e-mail que será definido. Valor padrão: text/html. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/msgbodytype +/*/ +method msgbodytype(cvalue) class tmailmessage +return +/*/{Protheus.doc} tmailmessage:msgbodyencode +Define a codificação do corpo do e-mail. + +@type method + +@param , numeric, Valor da codificação do corpo do e-mail. Valores aceitos: 0 \(UUEncode\) e 1 \(MIME\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/msgbodyencode +/*/ +method msgbodyencode(nvalue) class tmailmessage +return +/*/{Protheus.doc} tmailmessage:setconfirmread +Define se a mensagem enviada terá confirmação de leitura. + +@type method + +@param , logical, Indica se haverá confirmação de leitura ou não. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setconfirmread +/*/ +method setconfirmread(lread) class tmailmessage +return +/*/{Protheus.doc} tmailmessage:receive2 +Recebe uma nova mensagem do servidor populando o objeto da mensagem. + +@type method + +@return numeric, Retorna 0 \(zero\) quando o e-mail for recebido com sucesso. Caso contrário, retorna outro valor. + +@param , object, Indica o objeto do servidor de e-mail, criado através da classe TMailMng. +@param , numeric, Indica o número da mensagem que será criada, recebido através do método TMailMng:GetNumMsgs. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/receive2 +/*/ +method receive2(oserver, nmsg) class tmailmessage +return +/*/{Protheus.doc} tmailmessage:send2 +Envia um e-mail, de acordo com os dados passados pelo objeto da classe TMailMng por parâmetro, para o método. + +@type method + +@return numeric, Retorna 0 \(zero\) quando o e-mail for enviado com sucesso&$ caso contrário, retorna outro valor. + +@param , object, Indica o objeto do servidor de e-mail, criado através da classe TMailMng. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/send2 +/*/ +method send2(oserver) class tmailmessage +return + + +/*/{Protheus.doc} tmailmng +A classe TMailMng vem como substituição à classe TMailManager, realizando a comunicação com o servidor de e-mail, e possuindo maior flexibilidade de configuração e maior suporte de protocolos. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tmailmng + +/*/ +class tmailmng +data lverbose as logical +data nprotocol as numeric +data nsrvssl as numeric +data nsmtpssl as numeric +data cuser as character +data cpass as character +data lsrvretryssl as logical +data csrvaddr as character +data nsrvport as numeric +data nsrvtimeout as numeric +data lsmtpretryssl as logical +data csmtpaddr as character +data nsmtpport as numeric +data nsmtptimeout as numeric +data csmtplocalhost as character +data lauthlogin as logical +data lauthntlm as logical +data lauthplain as logical +data lextendsmtp as logical +data lkeepmsg as logical +data lconnected as logical +data lsmtpconnected as logical +data ccurrentfolder as character +data luserealid as logical +data ltryencode as logical +method new() +method connect() +method disconnect() +method smtpconnect() +method smtpdisconnect() +method smtpauth() +method getnummsgs() +method deletemsg() +method geterrorstring() +method createfolder() +method changefolder() +method deletefolder() +method getfolderlist() +method getallfolderlist() +method renamefolder() +method setfoldersubscribe() +method getmsgbody() +method getmsgheader() +method startgetallmsgheader() +method endgetallmsgheader() +method copymsg() +method movemsg() +method setmsgflags() +method purge() +method imapstore() +end class +/*/{Protheus.doc} tmailmng:new +Cria uma nova instância da classe TMailMng. + +@type method + +@return object, Nova instância da classe TMailMng + +@param , numeric, Indica o protocolo que será utilizado para recepção de emails. +@param [nserverssl], numeric, Indica a versão de protocolo seguro que será utilizada para o recebimento de emails. +@param [nsmtpssl], numeric, Indica a versão de protocolo seguro que será utilizada para o envio de emails. +@param [loldtls], logical, Indica se utilizará o protocolo SSL v3 para conexão TLS para SMTP. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nprotocol, nserverssl, nsmtpssl, loldtls) class tmailmng +return +/*/{Protheus.doc} tmailmng:connect +Conecta com o servidor de recebimento de emails. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso; caso contrário, retornará um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/connect +/*/ +method connect() class tmailmng +return +/*/{Protheus.doc} tmailmng:disconnect +Disconecta do servidor de recebimento de emails. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso; caso contrário, retornará um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/disconnect +/*/ +method disconnect() class tmailmng +return +/*/{Protheus.doc} tmailmng:smtpconnect +Conecta com o servidor SMTP, para envio de emails. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso; caso contrário, retornará um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/smtpconnect +/*/ +method smtpconnect() class tmailmng +return +/*/{Protheus.doc} tmailmng:smtpdisconnect +Disconecta do servidor SMTP, de envio de emails. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso; caso contrário, retornará um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/smtpdisconnect +/*/ +method smtpdisconnect() class tmailmng +return +/*/{Protheus.doc} tmailmng:smtpauth +Realiza a autenticação no servidor SMTP. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso; caso contrário, retornará um código de erro. + +@param , character, Indica o nome de usuário que será utilizado para autenticação. +@param , character, Indica a senha do usuário para autenticação. +@param [cpopaddress], character, Indica o endereço do servidor POP3 para autenticação. +@param [cpopport], character, Indica a porta para o servidor POP3 para autenticação. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/smtpauth +/*/ +method smtpauth(cuser, cpass, cpopaddress, cpopport) class tmailmng +return +/*/{Protheus.doc} tmailmng:getnummsgs +Obtém o número de mensagens existentes no servidor de e-mail. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso; caso contrário, retornará um código de erro. + +@param <@nnummsg>, numeric, Indica o número de mensagens que estão no servidor. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getnummsgs +/*/ +method getnummsgs(nnummsg) class tmailmng +return +/*/{Protheus.doc} tmailmng:deletemsg +Exclui uma mensagem do servidor de e-mail. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso; caso contrário, retornará um código de erro. + +@param , numeric, Indica o número da mensagem que será excluída. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/deletemsg +/*/ +method deletemsg(nmsg) class tmailmng +return +/*/{Protheus.doc} tmailmng:geterrorstring +Obtém a descrição do código de erro informado. + +@type method + +@return character, Retorna uma string com a descrição do código de erro informado. + +@param , numeric, Indica o código numérico do erro. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/geterrorstring +/*/ +method geterrorstring(nerror) class tmailmng +return +/*/{Protheus.doc} tmailmng:createfolder +Cria uma nova pasta de mensagens no servidor IMAP. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso; caso contrário, retornará um código de erro. + +@param , character, Indica o nome da pasta que será criada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/createfolder +/*/ +method createfolder(cfolder) class tmailmng +return +/*/{Protheus.doc} tmailmng:changefolder +Permite trocar de pasta, no servidor IMAP, informando uma nova pasta. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso; caso contrário, retornará um código de erro. + +@param , character, Indica o nome da pasta desejada no servidor. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/changefolder +/*/ +method changefolder(cfolder) class tmailmng +return +/*/{Protheus.doc} tmailmng:deletefolder +Exclui uma pasta do servidor IMAP. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso; caso contrário, retornará um código de erro. + +@param , character, Indica o nome da pasta que será excluída. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/deletefolder +/*/ +method deletefolder(cfolder) class tmailmng +return +/*/{Protheus.doc} tmailmng:getfolderlist +Obtém todas as pastas assinadas de uma conta de e-mail, através do servidor IMAP. + +@type method + +@return array, Retorna um array com todas as pastas assinadas de uma conta de e-mail, com as seguintes informações: nome, status, número de mensagens existentes, número de mensagens lidas e número de mensagens não lidas. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getfolderlist +/*/ +method getfolderlist() class tmailmng +return +/*/{Protheus.doc} tmailmng:getallfolderlist +Obtém todas as pastas \(Assinadas/Não assinadas\) de uma conta de email do servidor IMAP. + +@type method + +@return array, Retorna um array com todas as pastas \(Assinadas/Não assinadas\) de uma conta de e-mail, com as seguintes informações: nome, status, número de mensagens existentes, número de mensagens lidas e número de mensagens não lidas. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getallfolderlist +/*/ +method getallfolderlist() class tmailmng +return +/*/{Protheus.doc} tmailmng:renamefolder +Altera o nome da pasta no servidor IMAP. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso; caso contrário, retornará um código de erro. + +@param , character, Indica o nome atual da pasta no servidor IMAP. +@param , character, Indica o novo nome da pasta. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/renamefolder +/*/ +method renamefolder(ccurfolder, cnewfolder) class tmailmng +return +/*/{Protheus.doc} tmailmng:setfoldersubscribe +Define uma determinada pasta, do servidor IMAP, assinada. Desta forma, a pasta ficará visível, na caixa de correio, e suas mensagens serão baixadas. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso; caso contrário, retornará um código de erro. + +@param , character, Indica o nome da pasta que será ou não assinada \(subscribe\). +@param , logical, Indica se a pasta será assinada \(.T.\) ou não \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setfoldersubscribe +/*/ +method setfoldersubscribe(cfolder, lsign) class tmailmng +return +/*/{Protheus.doc} tmailmng:getmsgbody +Obtém o corpo da mensagem através do servidor IMAP. + +@type method + +@return array, Retorna um array com as informações da mensagem. + +@param , numeric, Indica o número sequencial da mensagem que deseja obter. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getmsgbody +/*/ +method getmsgbody(nmsg) class tmailmng +return +/*/{Protheus.doc} tmailmng:getmsgheader +Obtém o cabeçalho da mensagem, retornando os campos que foram incluídos na mensagem. + +@type method + +@return array, Retorna um array com os campos do cabeçalho da mensagem. Em caso de erro, retorna nulo. + +@param , numeric, Indica o número da mensagem na pasta do servidor de e-mail IMAP. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getmsgheader +/*/ +method getmsgheader(nmsg) class tmailmng +return +/*/{Protheus.doc} tmailmng:startgetallmsgheader +Inicia o processo para adquirir todos os cabeçalhos \(headers\) e mensagens de uma determinada pasta. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso; caso contrário, retornará um código de erro. + +@param , character, Indica a pasta, no servidor de e-mail, em que serão adquiridos os cabeçalhos das mensagens. +@param , array, Indica as informações que serão retornadas nos cabeçalhos das mensagens. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/startgetallmsgheader +/*/ +method startgetallmsgheader(cfolder, aheader) class tmailmng +return +/*/{Protheus.doc} tmailmng:endgetallmsgheader +Obtém o cabeçalho de todas as mensagens existentes no servidor IMAP. + +@type method + +@return logical, Retorna verdadeiro \(.T.\) quando o servidor IMAP terminar o envio do cabeçalho da mensagem; caso contrário, retorna falso \(.F.\). + +@param <@aheader>, array, Indica o vetor que será utilizado como referência para retornar o cabeçalho da mensagem. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/endgetallmsgheader +/*/ +method endgetallmsgheader(aheader) class tmailmng +return +/*/{Protheus.doc} tmailmng:copymsg +Copia uma mensagem da pasta corrente, do servidor IMAP, para outra pasta ou a mesma. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso; caso contrário, retornará um código de erro. + +@param , numeric, Indica o número sequencial da mensagem no servidor IMAP. +@param , character, Indica o nome da pasta, do servidor IMAP, para qual a mensagem será transferida. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/copymsg +/*/ +method copymsg(nmsg, cfolder) class tmailmng +return +/*/{Protheus.doc} tmailmng:movemsg +Move uma mensagem da pasta em uso, do servidor IMAP, para outra pasta contida na conta de e-mail. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso; caso contrário, retornará um código de erro. + +@param , numeric, Indica o número sequencial da mensagem no servidor IMAP. +@param , character, Indica o nome da pasta que armazenará a mensagem. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/movemsg +/*/ +method movemsg(nmsg, cfolder) class tmailmng +return +/*/{Protheus.doc} tmailmng:setmsgflags +Define o status de uma determinada mensagem no servidor IMAP. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso; caso contrário, retornará um código de erro. + +@param , numeric, Indica o número sequencial da mensagem no servidor IMAP. +@param , character, Indica o novo status da mensagem. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setmsgflags +/*/ +method setmsgflags(nmsg, cflag) class tmailmng +return +/*/{Protheus.doc} tmailmng:purge +Remove permanentemente na pasta informada todas as mensagens que contenham a flag `` definidas. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso; caso contrário, retornará um código de erro. + +@param , character, Indica o nome da pasta que será realizado o purge. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/purge +/*/ +method purge(cfolder) class tmailmng +return +/*/{Protheus.doc} tmailmng:imapstore +Armazena uma mensagem em alguma pasta do servidor IMAP. + +@type method + +@return numeric, Retorna 0 \(zero\) quando a operação é completada com sucesso; caso contrário, retornará um código de erro. + +@param , object, Indica um objeto da classe TMailMessage que contém informações da mensagem que será armazenada. +@param , character, Indica o nome da pasta que armazenará a mensagem. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/imapstore +/*/ +method imapstore(omsg, cfolder) class tmailmng +return + + +/*/{Protheus.doc} tmediaplayer +Cria um objeto para reprodução de vídeos e áudios. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tmediaplayer + +/*/ +class tmediaplayer from TControl +data nvolume as numeric +data nplaycount as numeric +method new() +method play() +method stop() +method pause() +method openfile() +method setvolume() +method setshowbar() +method setmute() +end class +/*/{Protheus.doc} tmediaplayer:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TMediaPlayer + +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [cfile], character, Indica o nome do arquivo de mídia\(MP4 ou MP3\), que caso preenchido iniciara automaticamente a reprodução . +@param [nvolume], numeric, Indica o volume de audio, de 0 a 100. +@param [lshowbar], logical, Se .T. indica que será exibida a barra de comandos do próprio Windows Media Player®. +@param [nplaycount], numeric, Indica a quantidade de vezes que a mídia será reproduzida. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, nwidth, nheight, ownd, cfile, nvolume, lshowbar, nplaycount) class tmediaplayer +return +/*/{Protheus.doc} tmediaplayer:play +Inicia reprodução. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/play +/*/ +method play() class tmediaplayer +return +/*/{Protheus.doc} tmediaplayer:stop +Para a reprodução. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/stop +/*/ +method stop() class tmediaplayer +return +/*/{Protheus.doc} tmediaplayer:pause +Pausa a reprodução. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/pause +/*/ +method pause() class tmediaplayer +return +/*/{Protheus.doc} tmediaplayer:openfile +Abre e inicia a reprodução de um arquivo de mídia. + +@type method + +@param [cfile], character, Indica o nome do arquivo de mídia\(MP4 ou MP3\), que caso preenchido iniciara automaticamente a reprodução. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/openfile +/*/ +method openfile(cfile) class tmediaplayer +return +/*/{Protheus.doc} tmediaplayer:setvolume +Ajusta a altura do volume de áudio. + +@type method + +@param , numeric, Indica o volume de audio, de 0 a 100 +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setvolume +/*/ +method setvolume(nvolume) class tmediaplayer +return +/*/{Protheus.doc} tmediaplayer:setshowbar +Habilita a exibição da barra de ferramentas do Windows Media Player®. + +@type method + +@param , logical, Se .T. indica que será exibida a barra de comandos do próprio Windows Media Player® +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setshowbar +/*/ +method setshowbar(showbar) class tmediaplayer +return +/*/{Protheus.doc} tmediaplayer:setmute +Liga e desliga a opção silencio \(mute\). + +@type method + +@param , logical, Se .T. habilita a opção silencio \(mute\) +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setmute +/*/ +method setmute(mute) class tmediaplayer +return + + +/*/{Protheus.doc} tmenu +Cria um objeto do tipo menu. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tmenu + +/*/ +class tmenu from TControl +method new() +method add() +method removeitem() +method reset() +method setimagename() +end class +/*/{Protheus.doc} tmenu:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TMenu + +@param [ntop], numeric, Indica a coordenada vertical em pixels. +@param [nleft], numeric, Indica a coordenada horizontal em pixels. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [lpopup], logical, Indica se o objeto será Pop-up. +@param [cbmpname], character, Indica o nome da imagem que será utilizada no menu. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [nclrnoselect], numeric, Indica o nome da cor que será utilizada quando o item não é selecionado. +@param [nclrselect], numeric, Indica o nome da cor que será utilizada quando o item é selecionado. +@param [carrowupnosel], character, Indica a imagem seta para cima quando o item não é selecionado. +@param [carrowupsel], character, Indica a imagem seta para cima quando o item é selecionado. +@param [carrowdownnosel], character, Indica a imagem seta para baixo quando o item não é selecionado. +@param [carrowdownsel], character, Indica a imagem seta para baixo quando o item é selecionado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ntop, nleft, nheight, nwidth, lpopup, cbmpname, ownd, nclrnoselect, nclrselect, carrowupnosel, carrowupsel, carrowdownnosel, carrowdownsel) class tmenu +return +/*/{Protheus.doc} tmenu:add +Inclui item e subitem ao menu. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/add +/*/ +method add() class tmenu +return +/*/{Protheus.doc} tmenu:removeitem +Remove um item do menu. + +@type method + +@param , object, Indica o objeto do tipo TMenuItem que será removido. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/removeitem +/*/ +method removeitem(omenu) class tmenu +return +/*/{Protheus.doc} tmenu:reset +Exclui os itens do menu. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/reset +/*/ +method reset() class tmenu +return +/*/{Protheus.doc} tmenu:setimagename +Define a imagem de fundo do menu. + +@type method + +@param [cimage], character, Indica o nome da imagem de fundo do menu. Observação: Antes de definir uma imagem para o objeto, é necessário que a mesma esteja compilada no repositório. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setimagename +/*/ +method setimagename(cimage) class tmenu +return + + +/*/{Protheus.doc} tmenubar +Cria um objeto do tipo barra de menu. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tmenubar + +/*/ +class tmenubar from TControl +method new() +method additem() +method addmenuitem() +method reset() +method setdefaultup() +end class +/*/{Protheus.doc} tmenubar:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TMenuBar + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ownd) class tmenubar +return +/*/{Protheus.doc} tmenubar:additem +Inclui um novo item ao menu. + +@type method + +@param [ctitulo], character, Indica o título do item no menu superior. +@param [omenu], object, Indica o objeto do tipo TMenu que será executado na solicitação do menu superior. +@param [lmenu], logical, Lógico Indica se, verdadeiro \(.T.\), o item incluído será um item de menu; caso contrário, falso \(.F.\) +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/additem +/*/ +method additem(ctitulo, omenu, lmenu) class tmenubar +return +/*/{Protheus.doc} tmenubar:addmenuitem +Inclui um novo item ao menu da barra superior. + +@type method + +@param [ctitulo], character, Indica o título do item no menu superior. +@param [omenu], object, Indica o objeto do tipo TMenu utilizado para incluir um menu. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addmenuitem +/*/ +method addmenuitem(ctitulo, omenu) class tmenubar +return +/*/{Protheus.doc} tmenubar:reset +Exclui todas as opções do menu. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/reset +/*/ +method reset() class tmenubar +return +/*/{Protheus.doc} tmenubar:setdefaultup +Direciona o menu para cima. + +@type method + +@param [isdefup], logical, Indica se habilita \(.T.\)/desabilita\(.F.\) a apresentação do menu para cima. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setdefaultup +/*/ +method setdefaultup(isdefup) class tmenubar +return + + +/*/{Protheus.doc} tmenuitem +Cria um objeto do tipo menu/item de menu. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tmenuitem + +/*/ +class tmenuitem from TControl +data aitems as array +data baction as codeblock +data lchecked as logical +data omenu as object +data lselected as logical +method new() +method new2() +method add() +method addseparator() +method setactive() +end class +/*/{Protheus.doc} tmenuitem:new +Método Inicia uma nova instância da classe TMenuItem. + +@type method + +@return object, Nova instância da classe TMenuItem + +@param , object, Indica o controle visual onde o objeto será criado. +@param [ctitle], character, Indica o texto do item. +@param [cparam3], character, Compatibilidade. +@param [lparam4], logical, Compatibilidade. +@param [lactive], logical, Indica se, verdadeiro \(.T.\), o item está ativo; caso contrário, falso \(.F.\). +@param [baction], codeblock, Indica o bloco de código que será executado quando clicar, com o botão esquerdo do mouse, sobre o objeto. +@param [cparam7], character, Compatibilidade. +@param [cresname], character, Indica a imagem, do repositório, que será apresentada quando o ponteiro do mouse não estiver posicionado sobre o item. +@param [nparam9], numeric, Compatibilidade. +@param [cparam10], character, Compatibilidade. +@param [lparam11], logical, Compatibilidade. +@param [nparam12], numeric, Compatibilidade. +@param [bparam13], codeblock, Compatibilidade. +@param [lparam14], logical, Compatibilidade. +@param [lpopup], logical, Indica se, verdadeiro \(.T.\), o item faz parte de um popup; caso contrário, falso \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(oparent, ctitle, cparam3, lparam4, lactive, baction, cparam7, cresname, nparam9, cparam10, lparam11, nparam12, bparam13, lparam14, lpopup) class tmenuitem +return +/*/{Protheus.doc} tmenuitem:new2 +Método Inicia uma nova instância da classe TMenuItem. + +@type method + +@return object, Nova instância da classe TMenuItem + +@param [oparent], object, Indica a janela ou controle visual onde o objeto será criado. +@param [ctitle], character, Indica o texto do item. +@param [cparam3], character, Compatibilidade. +@param [lactive], logical, Indica se, verdadeiro \(.T.\), o item está ativo; caso contrário, falso \(.F.\). +@param [baction], codeblock, Indica o bloco de código que será executado quando clicar, com o botão esquerdo do mouse, sobre o objeto. +@param [cresname], character, Indica a imagem, do repositório, que será apresentada quando o ponteiro do mouse não estiver posicionado sobre o item. +@param [creshover], character, Indica a imagem, do repositório, que será apresentada quando o ponteiro do mouse estiver posicionado sobre o item. +@param [nclrnoselect], numeric, Indica a cor do item que não está selecionado. +@param [nclrselect], numeric, Indica a cor do item quando selecionado. +@param [carrowrightnosel], character, Indica a imagem do repositório, no formato de seta para a direita, que será apresentada quando o item estiver fechado e não selecionado. Observação: Essa imagem é apresentada quando o item contém subitens. +@param [carrowrightsel], character, Indica a imagem do repositório, no formato de seta para a direita, que será apresentada quando o item estiver fechado e selecionado. Observação: Essa imagem é apresentada quando o item contém subitens. +@param [carrowdownnosel], character, Indica a imagem do repositório, no formato de seta para baixo, que será apresentada quando o item estiver aberto e não selecionado. Observação: Essa imagem é apresentada quando o item contém subitens. +@param [carrowdownsel], character, Indica a imagem do repositório, no formato de seta para baixo, que será apresentada quando o item estiver aberto e selecionado. Observação: Essa imagem é apresentada quando o item contém subitens. +@param [cresselected], character, Nome do resource a ser usado como fundo quando o item for selecionado \(clicado\). Disponível apenas em build superior a 7.00.121227P. +@param [cresseldetail], character, Nome do resource a ser usado como detalhe \(canto esquerdo ou direito\) do item quando estiver selecionado \(clicado\). O resource pode conter transparência para não sobrepor totalmente o resource de fundo. Disponível apenas em build superior a 7.00.121227P. +@param [nposseldetail], numeric, Código da posição em que o resource de detalhe quando selecionado ficará, sendo 0 para esquerda e 1 para direita. Disponível apenas em build superior a 7.00.121227P. +@param [lselected], logical, Indica se este item já vira selecionado por padrão. Disponível apenas em build superior a 7.00.121227P. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new2 +/*/ +method new2(oparent, ctitle, cparam3, lactive, baction, cresname, creshover, nclrnoselect, nclrselect, carrowrightnosel, carrowrightsel, carrowdownnosel, carrowdownsel, cresselected, cresseldetail, nposseldetail, lselected) class tmenuitem +return +/*/{Protheus.doc} tmenuitem:add +Adiciona um subitem ao menu. + +@type method + +@param [omenu], object, Indica o objeto do tipo TMenuItem utilizado para incluir um item ou subitem de menu. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/add +/*/ +method add(omenu) class tmenuitem +return +/*/{Protheus.doc} tmenuitem:addseparator +Adiciona um separador no menu. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addseparator +/*/ +method addseparator() class tmenuitem +return +/*/{Protheus.doc} tmenuitem:setactive +Ativa a opção do menu com o clique do mouse. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setactive +/*/ +method setactive() class tmenuitem +return + + +/*/{Protheus.doc} tmobile +TMobile é uma classe utilitária que agrupa métodos focados na plataforma móvel TOTVS \| FatClient Embarcado e promove as integrações com aplicativos ou com o hardware do dispositivo móvel. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tmobile + +/*/ +class tmobile +data bscreenorientationchanged as codeblock +data bgeocoordinateupdate as codeblock +data bnotificationtapped as codeblock +data bonpause as codeblock +data bonresume as codeblock +method new() +method takepicture() +method barcode() +method getpairedbluetoothdevices() +method getscreenorientation() +method setscreenorientation() +method getgeocoordinate() +method enablegeocoordinateupdate() +method opensettings() +method testdevice() +method createnotification() +method gettemppath() +method vibrate() +method readaccelerometer() +method addcontact() +method findcontact() +method findcalendarevent() +method getcalendarevent() +method viewcalendarevent() +method addcalendarevent() +end class +/*/{Protheus.doc} tmobile:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TMobile + +@param [ownd], object, Indica a janela ou controle visual que responderá como pai do controle. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ownd) class tmobile +return +/*/{Protheus.doc} tmobile:takepicture +Inicia o aplicativo da câmera e permite que uma foto seja registrada e gravada em um arquivo. + +@type method + +@return character, Retorna uma string contendo o caminho do arquivo da foto registrada. Uma string vazia será retornada se a operação falhar ou for cancelada pela usuário. + +@param [nscaletowidth], numeric, Se for informado algum valor maior que 0 \(zero\), altera a largura da imagem final mantendo a proporção. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/takepicture +/*/ +method takepicture(nscaletowidth) class tmobile +return +/*/{Protheus.doc} tmobile:barcode +Efetua a leitura de código de barras. + +@type method + +@return array, Retorna um array de duas posições do tipo caractere onde a primeira posição contém o valor decodificado do código de barras e a segunda posição contém o nome do tipo de código de barras lido \(por exemplo: UPC_A, EAN_8, QR_CODE, etc\). Se o usuário pressionar o botão voltar do dispositivo, nenhum código será lido e as duas posições do array estarão vazias. + +@param [cbartype], character, Restringe os tipos de códigos de barras que poderão ser lidos \(consulte a área de observações abaixo para conhecer os valores possíveis para este parâmetro\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/barcode +/*/ +method barcode(cbartype) class tmobile +return +/*/{Protheus.doc} tmobile:getpairedbluetoothdevices +Obtém uma lista contendo nomes e endereços dos dispositivos Bluetooth pareados + +@type method + +@return array, Retorna um array de duas dimensões, isto é, cada elemento do array é um outro array de duas posições do tipo caractere contendo em sua primeira posição o nome, e em sua segunda posição o endereço no formato 00:00:00:00:00:00 que é único e exclusivo para cada dispositivo Bluetooth. As duas posições estarão vazias caso nenhum dispositivo esteja pareado ou a interface Bluetooth esteja disativada. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getpairedbluetoothdevices +/*/ +method getpairedbluetoothdevices() class tmobile +return +/*/{Protheus.doc} tmobile:getscreenorientation +Obtém a orientação da tela do dispositivo. + +@type method + +@return numeric, Retorna um valor numérico que representa a orientação da tela do dispositivo. Consulte a área de observações abaixo para conhecer os valores possíveis para o retorno. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getscreenorientation +/*/ +method getscreenorientation() class tmobile +return +/*/{Protheus.doc} tmobile:setscreenorientation +Especifica a orientação da tela de um dispositivo móvel. + +@type method + +@param [norientation], numeric, Valor correspondente a orientação desejada. Consulte a área de observações abaixo para conhecer os valores possíveis para este parâmetro. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setscreenorientation +/*/ +method setscreenorientation(norientation) class tmobile +return +/*/{Protheus.doc} tmobile:getgeocoordinate +Obtém a mais recente coordenada de geolocalização disponibilizada pelo dispositivo móvel. + +@type method + +@return character, Retorna uma cadeia de caracteres contendo as coordenadas em latitude e longitude no formato escolhido. + +@param [nformat], numeric, Valor correspondente ao formato da coordenada desejado. Consulte a área de observações abaixo para conhecer os valores possíveis para este parâmetro. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getgeocoordinate +/*/ +method getgeocoordinate(nformat) class tmobile +return +/*/{Protheus.doc} tmobile:enablegeocoordinateupdate +Habilita, desabilita e também parametriza o recebimento de coordenadas de geolocalização através do bloco de código bGeoCoordinateUpdate. + +@type method + +@return character, Retorna uma cadeia de caracteres contendo as coordenadas em latitude e longitude no formato escolhido. + +@param [ninterval], numeric, Indica o tempo de intervalo mínimo em milissegundos entre as notificações de atualizações de coordenadas do dispositivo móvel ao bloco de código bGeoCoordinateUpdate. O valor 0 indica que o dispositivo móvel deve notificar o bloco de código bGeoCoordinateUpdate imediatamente e sempre que houver atualizações de coordenadas de geolocalização \(isso pode elevar o uso da bateria\). O valor -1 desativa a notificação de atualizações de coordenadas por parte do dispositivo móvel. +@param [nformat], numeric, Valor correspondente ao formato desejado da coordenada. Consulte a área de observações abaixo para conhecer os valores possíveis para este parâmetro. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/enablegeocoordinateupdate +/*/ +method enablegeocoordinateupdate(ninterval, nformat) class tmobile +return +/*/{Protheus.doc} tmobile:opensettings +Abre e mostra ao usuário do dispositivo móvel o menu de configurações da funcionalidade especificada. + +@type method + +@param [nsettings], numeric, Identificação do menu de configurações. Consulte a área de observações abaixo para conhecer os valores possíveis para este parâmetro. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/opensettings +/*/ +method opensettings(nsettings) class tmobile +return +/*/{Protheus.doc} tmobile:testdevice +Realiza um teste para verificar se a funcionalidade desejada está presente e ativada no dispositivo móvel. + +@type method + +@return logical, Retorna um valor lógico que se verdadeiro \(.T.\) indica que o componente/funcionalidade está presente e habilitado no dispositivo móvel. É importante destacar que um retorno falso \(.F.\) nesta função pode significar que a funcionalidade está desativada ou que até mesmo não está presente no dispostivo móvel \(por exemplo um tablet sem suporte a NFC\). + +@param [ncomponent], numeric, Identificação do componente ou funcionalidade. Consulte a área de observações abaixo para conhecer os valores possíveis para este parâmetro. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/testdevice +/*/ +method testdevice(ncomponent) class tmobile +return +/*/{Protheus.doc} tmobile:createnotification +Dispara uma notificação no dispositivo móvel. + +@type method + +@param , numeric, Identificador único da notificação que será disparada. Com este identificador torna-se possível identificar qual notificação foi tocada na tela do dispositivo móvel \(veja a documentação do bloco de código [bNotificationTapped](bNotificationTapped) que retorna este identificador\). Use um valor maior que zero. +@param , character, Título da notificação que será disparada. +@param , character, Mensagem da notificação que será disparada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/createnotification +/*/ +method createnotification(nnotificationid, ctitle, cmessage) class tmobile +return +/*/{Protheus.doc} tmobile:gettemppath +Retorna o caminho do diretório temporário. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gettemppath +/*/ +method gettemppath() class tmobile +return +/*/{Protheus.doc} tmobile:vibrate +Faz o dispositivo vibrar. + +@type method + +@param [*nmilliseconds], numeric, Tempo de duração da vibração em milissegundos \(\*disponível apenas para Android\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/vibrate +/*/ +method vibrate(*nmilliseconds) class tmobile +return +/*/{Protheus.doc} tmobile:readaccelerometer +Efetua uma leitura no sensor acelerômetro do dispositivo móvel. + +@type method + +@return array, Retorna um array com três posições númericas no formato double \(decimal de ponto flutuante\) onde cada posição representa a aceleração de um eixo na ordem X, Y e Z e os valores são representados em metros por segundo ao quadrado \(m/s²\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/readaccelerometer +/*/ +method readaccelerometer() class tmobile +return +/*/{Protheus.doc} tmobile:addcontact +Chama a interface de adicionar um contato, com informações previamente preenchidas e fornecidas pelo ADVPL. + +@type method + +@return character, Retorna o identificador único do contato fornecido pelo SO do dispositivo. + +@param , object, Instância da classe TMobileContact com quaisquer informações previamente preenchidas do contato. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addcontact +/*/ +method addcontact(ocontact) class tmobile +return +/*/{Protheus.doc} tmobile:findcontact +Procura nos contatos do dispositivo por um filtro específico. + +@type method + +@return array, Array contendo instâncias da classe TMobileContact para cada contato encontrado. + +@param , character, Texto a ser usado na busca. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/findcontact +/*/ +method findcontact(cfilter) class tmobile +return +/*/{Protheus.doc} tmobile:findcalendarevent +Procura eventos no calendário do dispositivo por um período. + +@type method + +@return array, Array contendo os Ids dos eventos do calendário encontrados + +@param , date, Data de início da pesquisa. +@param , date, Data final da pesquisa. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/findcalendarevent +/*/ +method findcalendarevent(dinidate, denddate) class tmobile +return +/*/{Protheus.doc} tmobile:getcalendarevent +Retorna informações de um evento do calendário específico. + +@type method + +@return array, Instância da classe TCalendarEvent contendo as informações do evento. + +@param , character, Identificador do calendário. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getcalendarevent +/*/ +method getcalendarevent(cid) class tmobile +return +/*/{Protheus.doc} tmobile:viewcalendarevent +Utiliza o API do sistema \(Android/IOS\) para mostrar o evento. + +@type method + +@return logical, Retorna .T. se achou o evento e .F. se o evento não existe \(ou não foi possível acessar\). + +@param , character, Identificador do calendário. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/viewcalendarevent +/*/ +method viewcalendarevent(cid) class tmobile +return +/*/{Protheus.doc} tmobile:addcalendarevent +Utiliza o API do sistema \(Android/IOS\) para adicionar um evento ao calendário do dispositivo. + +@type method + +@return character, Retorna o ID do evento criado. Se o usuário cancelou a criação do evento, retorna um ID "0". + +@param , object, Instância da classe TCalendarEvent com os dados que devem ser inseridos no calendário. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addcalendarevent +/*/ +method addcalendarevent(ocalev) class tmobile +return + + +/*/{Protheus.doc} tmobilecontact +A classe TMobileContact serve para lidar com as informações de contatos pessoas, seja para adicionar um contato ao dispositivo ou para buscar contatos no dispositivo. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tmobilecontact + +/*/ +class tmobilecontact +data ccompany as character +data cjobtitle as character +data cname as character +data cnote as character +data aemails as array +data aphones as array +data apostals as array +method new() +end class +/*/{Protheus.doc} tmobilecontact:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TMobileContact + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new() class tmobilecontact +return + + +/*/{Protheus.doc} tmobilecontactemail +Classe para conter as informações sobre um endereço de e-mail de um contato qualquer. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tmobilecontactemail + +/*/ +class tmobilecontactemail +data ntype as numeric +data caddress as character +method new() +method new2() +end class +/*/{Protheus.doc} tmobilecontactemail:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TMobileContactEmail + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new() class tmobilecontactemail +return +/*/{Protheus.doc} tmobilecontactemail:new2 +Método construtor da classe que já popula as informações básicas. + +@type method + +@return object, Nova instância da classe TMobileContactEmail + +@param , numeric, Tipo do e-mail. +@param , character, Endereço do e-mail. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new2 +/*/ +method new2(ntype, caddress) class tmobilecontactemail +return + + +/*/{Protheus.doc} tmobilecontactphone +Classe para conter as informações sobre um número de telefone de um contato qualquer. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tmobilecontactphone + +/*/ +class tmobilecontactphone +data ntype as numeric +data cnumber as character +method new() +method new2() +end class +/*/{Protheus.doc} tmobilecontactphone:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TMobileContactPhone + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new() class tmobilecontactphone +return +/*/{Protheus.doc} tmobilecontactphone:new2 +Método construtor da classe que já popula as informações básicas. + +@type method + +@return object, Nova instância da classe TMobileContactPhone + +@param , numeric, Tipo do telefone. +@param , character, Número do telefone. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new2 +/*/ +method new2(ntype, cnumber) class tmobilecontactphone +return + + +/*/{Protheus.doc} tmobilecontactpostal +Classe para conter as informações sobre o endereço de um contato qualquer. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tmobilecontactpostal + +/*/ +class tmobilecontactpostal +data ntype as numeric +data caddress as character +method new() +method new2() +end class +/*/{Protheus.doc} tmobilecontactpostal:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TMobileContactPostal + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new() class tmobilecontactpostal +return +/*/{Protheus.doc} tmobilecontactpostal:new2 +Método construtor da classe que já popula as informações básicas. + +@type method + +@return object, Nova instância da classe TMobileContactPostal + +@param , numeric, Tipo do endereço. +@param , character, Endereço. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new2 +/*/ +method new2(ntype, caddress) class tmobilecontactpostal +return + + +/*/{Protheus.doc} tmsgbar +Cria um objeto do tipo barra de status. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tmsgbar + +/*/ +class tmsgbar from TControl +data aitem as array +data cmsgdef as character +method new() +method setmsg() +end class +/*/{Protheus.doc} tmsgbar:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TMsgBar + +@param [ownd], object, Indica a janela ou controle visual onde objeto será criado. +@param [cprompt], character, Indica a descrição que será apresentada na barra de status. +@param [uparam3], logical, Compatibilidade. +@param [uparam4], logical, Compatibilidade. +@param [uparam5], logical, Compatibilidade. +@param [uparam6], logical, Compatibilidade. +@param [nclrfore], numeric, Indica a cor da fonte que será utilizada na barra. +@param [uparam8], numeric, Compatibilidade. +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada para exibir o conteúdo do controle visual. +@param [uparam10], logical, Compatibilidade. +@param [cimagename], character, Indica a imagem que será incluída na lateral esquerda. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ownd, cprompt, uparam3, uparam4, uparam5, uparam6, nclrfore, uparam8, ofont, uparam10, cimagename) class tmsgbar +return +/*/{Protheus.doc} tmsgbar:setmsg +Altera a descrição da barra de status. + +@type method + +@param [ctext], character, Indica o texto que será incluído na barra de status. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setmsg +/*/ +method setmsg(ctext) class tmsgbar +return + + +/*/{Protheus.doc} tmsgitem +Cria um objeto do tipo subitem da barra de status. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tmsgitem + +/*/ +class tmsgitem from TControl +data baction as codeblock +data nsize as numeric +data omsgbar as object +method new() +method settext() +end class +/*/{Protheus.doc} tmsgitem:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TMsgItem + +@param [omsgbar], object, Indica o objeto do tipo TMsgBar utilizado para criar um controle visual do tipo rodapé. +@param [cmsg], character, Indica o texto do item. +@param [nsize], numeric, Indica a largura do item. +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [nclrtext], numeric, Indica a cor do texto do item. +@param [uparam6], numeric, Compatibilidade. +@param [ladd], logical, Indica se, verdadeiro \(.T.\), o item é incluído; caso contrário, falso \(.F.\). +@param [baction], codeblock, Indica o bloco de código que será executado quando clicar, com o botão esquerdo do mouse, sobre o botão. +@param [cresource], character, Indica o nome do recurso que contém a imagem. Este recurso deve estar compilado,no repositório de imagens, para ser utilizado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(omsgbar, cmsg, nsize, ofont, nclrtext, uparam6, ladd, baction, cresource) class tmsgitem +return +/*/{Protheus.doc} tmsgitem:settext +Define o texto do item. + +@type method + +@param , character, Indica o texto para o item. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/settext +/*/ +method settext(ctexto) class tmsgitem +return + + +/*/{Protheus.doc} tmsprinterspool +Componente que mostra um preview de um relatório normalmente para impressão. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tmsprinterspool + +/*/ +class tmsprinterspool from TControl +data lportrait as logical +data lcasesensitive as logical +data ctexthighlight as character +data nzoom as numeric +data bscrollclick as codeblock +method new() +method settextpage() +method setpageinfo() +end class +/*/{Protheus.doc} tmsprinterspool:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TMSPrinterSpool + +@param [nrow], numeric, Linha em que o componente visual deverá ser desenhado. +@param [ncol], numeric, Coluna em que o componente visual deverá ser desenhado. +@param [nwidth], numeric, Largura do componente visual. +@param [nheight], numeric, Altura do componente visual. +@param , object, Componente visual pai. +@param , character, Texto a ser apresentado no preview. +@param [lportrait], logical, Define se a orientação do documento será retrato \(.T.\) ou paisagem \(.F.\). +@param , character, Tamanho do documento \("P" para pequeno, "M" para médio, "G" para grande\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, nwidth, nheight, ownd, ctextpage, lportrait, crelsize) class tmsprinterspool +return +/*/{Protheus.doc} tmsprinterspool:settextpage +Define o texto do relatório. + +@type method + +@param , character, Texto do relatório. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/settextpage +/*/ +method settextpage(ctextpage) class tmsprinterspool +return +/*/{Protheus.doc} tmsprinterspool:setpageinfo +Define o tamanho do relatório e a orientação das páginas. + +@type method + +@param , character, Tamanho do relatório sendo "P" pequeno, "M" médio e "G" grande. +@param [lsetportrait], logical, Orientação das páginas sendo .T. retrato e .F. paisagem. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setpageinfo +/*/ +method setpageinfo(crelsize, lsetportrait) class tmsprinterspool +return + + +/*/{Protheus.doc} tmultibtn +Cria um objeto do tipo múltiplos botões. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tmultibtn + +/*/ +class tmultibtn from TControl +data baction as codeblock +method new() +method addbutton() +method setfonts() +end class +/*/{Protheus.doc} tmultibtn:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TMultiBtn + +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [ownd], object, Indica a janela ou controle visual onde o botão será criado. +@param [baction], codeblock, Indica o bloco de código que será executado quando clicar, com o botão esquerdo do mouse, sobre o botão. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [cimgname], character, Indica o nome da imagem que será inserida ao lado esquerdo do componente. +@param [nori], numeric, Indica a coordenada \(vertical/horizontal\) do botão na janela. +@param [cmsg], character, Indica a mensagem, do tipo dica de contexto \(tooltip/hint\), ao posicionar o ponteiro do mouse sobre o botão. +@param [nbtnperline], numeric, Indica a quantidade de botões por linha. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, ownd, baction, nwidth, nheight, cimgname, nori, cmsg, nbtnperline) class tmultibtn +return +/*/{Protheus.doc} tmultibtn:addbutton +Adiciona um botão. + +@type method + +@param [onovobotao], object, Indica o botão que será criado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addbutton +/*/ +method addbutton(onovobotao) class tmultibtn +return +/*/{Protheus.doc} tmultibtn:setfonts +Adiciona um botão. + +@type method + +@param [cfontetitulo], character, Indica o nome da fonte que será utilizada no título. +@param [nsizetitulo], numeric, Indica o tamanho da fonte no título. +@param [cfontebotoes], character, Indica o nome da fonte que será utilizada nos botões. +@param [nsizebotoes], numeric, Indica o tamanho da fonte no botão. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setfonts +/*/ +method setfonts(cfontetitulo, nsizetitulo, cfontebotoes, nsizebotoes) class tmultibtn +return + + +/*/{Protheus.doc} tmultiget +Cria um objeto do tipo campo memo. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tmultiget + +/*/ +class tmultiget from TControl +data npos as numeric +data lobfuscate as logical +method new() +method create() +method enablevscroll() +method appendtext() +method goend() +method gotop() +method goto() +end class +/*/{Protheus.doc} tmultiget:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TMultiGet + +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [bsetget], codeblock, Indica o bloco de código, no formato \{\|u\| if\( Pcount\( \)>0, := u, \) \}, que será executado para atualizar a variável \(essa variável deve ser do tipo caracter\). Desta forma, se a lista for sequencial, o controle atualizará com o conteúdo do item selecionado, se for indexada, será atualizada com o valor do índice do item selecionado. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [uparam8], logical, Compatibility parameter. Pass NIL. +@param [uparam9], numeric, Compatibility parameter. Pass NIL. +@param [uparam10], numeric, Compatibility parameter. Pass NIL. +@param [uparam11], object, Compatibility parameter. Pass NIL. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [uparam13], character, Compatibility parameter. Pass NIL. +@param [uparam14], logical, Compatibility parameter. Pass NIL. +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. Observação: O bloco de código retornará verdadeiro \(.T.\) se o controle permanecer habilitado; caso contrário, retornará falso \(.F.\). +@param [uparam16], logical, Compatibility parameter. Pass NIL. +@param [uparam17], logical, Compatibility parameter. Pass NIL. +@param [lreadonly], logical, Indica se o conteúdo da variável associada ao objeto permanecerá apenas para leitura +@param [bvalid], codeblock, Indica o bloco de código de validação que será executado quando o conteúdo do objeto for modificado. Retorna verdadeiro \(.T.\), se o conteúdo é válido; caso contrário, falso \(.F.\). +@param [uparam20], codeblock, Compatibility parameter. Pass NIL. +@param [uparam21], logical, Compatibility parameter. Pass NIL. +@param [lnoborder], logical, Indica se habilita\(.T.\)/desabilita\(.F.\) a apresentação da borda no objeto. +@param [lvscroll], logical, Indica se habilita\(.T.\)/desabilita\(.F.\) a barra de rolagem vertical. Obs.: O valor default é Desabilitado. +@param [clabeltext], character, Indica o texto que será apresentado na Label. +@param [nlabelpos], numeric, Indica a posição da label, sendo 1=Topo e 2=Esquerda +@param [olabelfont], object, Indica o objeto, do tipo TFont, que será utilizado para definir as características da fonte aplicada na exibição da label. +@param [nlabelcolor], numeric, Indica a cor do texto da Label. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, bsetget, ownd, nwidth, nheight, ofont, uparam8, uparam9, uparam10, uparam11, lpixel, uparam13, uparam14, bwhen, uparam16, uparam17, lreadonly, bvalid, uparam20, uparam21, lnoborder, lvscroll, clabeltext, nlabelpos, olabelfont, nlabelcolor) class tmultiget +return +/*/{Protheus.doc} tmultiget:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TMultiGet + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [bsetget], codeblock, Indica o bloco de código, no formato \{\|u\| if\( Pcount\( \)>0, := u, \) \}, que será executado para atualizar a variável \(essa variável deve ser do tipo caracter\). Desta forma, se a lista for sequencial, o controle atualizará com o conteúdo do item selecionado, se for indexada, será atualizada com o valor do índice do item selecionado. +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [uparam8], logical, Compatibility parameter. Pass NIL. +@param [uparam9], numeric, Compatibility parameter. Pass NIL. +@param [uparam10], numeric, Compatibility parameter. Pass NIL. +@param [uparam11], character, Compatibility parameter. Pass NIL. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [uparam13], character, Compatibility parameter. Pass NIL. +@param [uparam14], logical, Compatibility parameter. Pass NIL. +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. Observação: O bloco de código retornará verdadeiro \(.T.\) se o controle permanecer habilitado; caso contrário, retornará falso \(.F.\). +@param [uparam16], logical, Compatibility parameter. Pass NIL. +@param [uparam17], logical, Compatibility parameter. Pass NIL. +@param [lreadonly], logical, Indica se o conteúdo da variável associada ao objeto permanecerá apenas para leitura. +@param [bvalid], codeblock, Indica o bloco de código de validação que será executado quando o conteúdo do objeto for modificado. Retorna verdadeiro \(.T.\), se o conteúdo é válido; caso contrário, falso \(.F.\). +@param [uparam20], codeblock, Compatibility parameter. Pass NIL. +@param [uparam21], logical, Compatibility parameter. Pass NIL. +@param [lnoborder], logical, Indica se habilita\(.T.\)/desabilita\(.F.\) a apresentação da borda no objeto. +@param [lvscroll], logical, Indica se habilita\(.T.\)/desabilita\(.F.\) a barra de rolagem vertical. O valor default é Desabilitado. +@param [clabeltext], character, indica o texto que será apresentado na Label. +@param [nlabelpos], numeric, Indica a posição da label, sendo 1=Topo e 2=Esquerda +@param [olabelfont], object, Indica o objeto, do tipo TFont, que será utilizado para definir as características da fonte aplicada na exibição da label. +@param [nlabelcolor], numeric, Indica a cor do texto da Label. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(ownd, bsetget, nrow, ncol, nwidth, nheight, ofont, uparam8, uparam9, uparam10, uparam11, lpixel, uparam13, uparam14, bwhen, uparam16, uparam17, lreadonly, bvalid, uparam20, uparam21, lnoborder, lvscroll, clabeltext, nlabelpos, olabelfont, nlabelcolor) class tmultiget +return +/*/{Protheus.doc} tmultiget:enablevscroll +Habilita/desabilita a barra de rolagem vertical. + +@type method + +@param [lenable], logical, Indica se habilita\(.T.\)/desabilita\(.F.\) a barra de rolagem vertical. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/enablevscroll +/*/ +method enablevscroll(lenable) class tmultiget +return +/*/{Protheus.doc} tmultiget:appendtext +Adiciona um texto no fim do texto já existente. + +@type method + +@param [ctext], character, Indica o texto que será incluído +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/appendtext +/*/ +method appendtext(ctext) class tmultiget +return +/*/{Protheus.doc} tmultiget:goend +Posiciona o cursor no fim do texto. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/goend +/*/ +method goend() class tmultiget +return +/*/{Protheus.doc} tmultiget:gotop +Posiciona o cursor no início do texto. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gotop +/*/ +method gotop() class tmultiget +return +/*/{Protheus.doc} tmultiget:goto +Posiciona o cursor no início da linha especificada. + +@type method + +@param , numeric, Indica a linha em que o cursor será posicionado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/goto +/*/ +method goto(nline) class tmultiget +return + + +/*/{Protheus.doc} tolecontainer +Cria um objeto do tipo botão vinculado a um objeto OLE \(Object Linking and Embedding\). + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tolecontainer + +/*/ +class tolecontainer from TControl +method new() +method openfromfile() +method doverbdefault() +end class +/*/{Protheus.doc} tolecontainer:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TOleContainer + +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [lautoactivate], logical, Compatibilidade. +@param [cfilename], character, Indica o diretório e arquivo OLE que será aberto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, nwidth, nheight, ownd, lautoactivate, cfilename) class tolecontainer +return +/*/{Protheus.doc} tolecontainer:openfromfile +Abre arquivo do tipo OLE \(Object Linking and Embedding\). + +@type method + +@return logical, Retorna verdadeiro \(.T.\) se o processo ocorrer com sucesso; caso contrário, retornará falso \(.F.\). + +@param [cfilename], character, Indica o caminho para o arquivo OLE que será aberto. +@param [lasicon], logical, Indica se o objeto OLE será ícone. +@param [lallowinplace], logical, Indica se a abertura do arquivo será local ou não \(dependendo do arquivo OLE poderá exibir as barras de ferramentas do aplicativo editor\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/openfromfile +/*/ +method openfromfile(cfilename, lasicon, lallowinplace) class tolecontainer +return +/*/{Protheus.doc} tolecontainer:doverbdefault +Chama o método padrão do objeto OLE \(Object Linking and Embedding\) utilizado. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/doverbdefault +/*/ +method doverbdefault() class tolecontainer +return + + +/*/{Protheus.doc} tpaintpanel +Cria um objeto do tipo painel que permite adicionar subpainéis e shapes. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tpaintpanel + +/*/ +class tpaintpanel from TControl +data blclicked as codeblock +data bldblclick as codeblock +data brclicked as codeblock +data frameatu as numeric +data shapeatu as numeric +data leftold as numeric +data leftatu as numeric +data topold as numeric +data topatu as numeric +method new() +method addshape() +method clearall() +method addcommand() +method insertblinker() +method deleteblinker() +method setblinker() +method deleteitem() +method setcandeform() +method setcanmove() +method setgradient() +method setimagesize() +method setposition() +method setreleasebutton() +method setscale() +method settooltip() +method settransparent() +method savetopng() +method setvisible() +method setpopup() +end class +/*/{Protheus.doc} tpaintpanel:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TPaintPanel + +@param [nrow], numeric, Indica a coordenada vertical em pixels. +@param [ncol], numeric, Indica a coordenada horizontal em pixels. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [lcentered], logical, Indica se, verdadeiro \(.T.\), apresenta o texto de título no centro do objeto; caso contrário, falso \(.F.\). +@param [lright], logical, Indica se, verdadeiro \(.T.\), posiciona o objeto à direita. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, nwidth, nheight, lcentered, lright) class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:addshape +Adiciona um container ou um shape ao painel. + +@type method + +@param , character, Indica o texto que contém o construtor. Para mais informações, consulte a área Observações.. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addshape +/*/ +method addshape(ctextparser) class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:clearall +Limpa todos os shapes do painel. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/clearall +/*/ +method clearall() class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:addcommand +Executa um comando referente ao comportamento do TPaintPanel. + +@type method + +@param , numeric, Indica o comando que deverá ser executado. Para mais informações, consulte a área Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addcommand +/*/ +method addcommand(ccommand) class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:insertblinker +Inclui um shape na lista que define os objetos que devem piscar quando o método SetBlinker\(\) for configurado. + +@type method + +@param , numeric, Indica o ID \(número de identificação\) do shape que será excluído. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/insertblinker +/*/ +method insertblinker(nid) class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:deleteblinker +Exclui um shape da lista que define os objetos que devem piscar quando o método SetBlinker\(\) for configurado. + +@type method + +@param , numeric, Indica o ID \(número de identificação\) do shape. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/deleteblinker +/*/ +method deleteblinker(nid) class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:setblinker +Define o tempo, em milisegundos, que os shapes da lista deverão piscar. + +@type method + +@param , numeric, Indica o tempo, em milisegundos, que o shape deverá piscar. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setblinker +/*/ +method setblinker(ntimer) class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:deleteitem +Exclui um shape da lista. + +@type method + +@param , numeric, Indica o ID \(número de identificação\) do shape que será excluído. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/deleteitem +/*/ +method deleteitem(nid) class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:setcandeform +Define se o shape pode ou não ser movido dentro do seu próprio container. + +@type method + +@param , numeric, Indica o ID \(número de identificação\) do shape que será movido. +@param , logical, Indica se, verdadeiro \(.T.\), o shape pode ser movido dentro do seu próprio container; caso contrário, falso \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcandeform +/*/ +method setcandeform(cid, lcandeform) class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:setcanmove +Define se o shape pode ou não ser movido. + +@type method + +@param , numeric, Indica o ID \(número de identificação\) do shape que será movido. +@param , logical, Indica se, verdadeiro \(.T.\), o shape pode ser movido; caso contrário, falso \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcanmove +/*/ +method setcanmove(cid, lcandeform) class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:setgradient +Define o gradient do shape. + +@type method + +@param , numeric, Indica o ID \(número de identificação\) do shape. +@param , logical, Indica se, verdadeiro \(.T.\), o gradient será aplicado quando o shape estiver com o ponteiro do mouse posicionado; caso contrário, falso \(.F.\). +@param , character, Indica o texto do gradient. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setgradient +/*/ +method setgradient(nid, lhover, cgradient) class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:setimagesize +Altera as dimensões de uma shape do tipo 8 \(imagem\). + +@type method + +@param , character, Indica o ID \(número de identificação\) do shape que será movido. +@param , numeric, Largura para redimensionamento do shape. +@param , numeric, Altura para redimensionamento do shape. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setimagesize +/*/ +method setimagesize(cid, nwidth, nheight) class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:setposition +Define a posição do container ou do shape. + +@type method + +@param , numeric, Indica o ID do objeto que será movido. +@param , numeric, Indica a nova posição à esquerda do objeto. +@param , numeric, Indica a altura em pixels do objeto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setposition +/*/ +method setposition(nid, nleft, ntop) class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:setreleasebutton +SetReleaseButtonDefine se o bloco de código blClicked do Shape, será disparado no release do botão do mouse, mesmo estando este dentro no mesmo Container de origem do click do mouse. + +@type method + +@param , logical, Se Verdadeiro, define que o bloco de código blClicked do Shape, será disparado no release do botão do mouse, mesmo estando este dentro no mesmo Container de origem do click do mouse. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setreleasebutton +/*/ +method setreleasebutton(isreleasebutton) class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:setscale +Define a escala\(zoom\) de para visualização do painel principal. + +@type method + +@param , numeric, Escala para visualização sendo que 1 define visualização de 100%.É possível utilizar valores fracionados, como 0.4 ou 3.7, por exemplo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setscale +/*/ +method setscale(nscale) class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:settooltip +Define a dica de contexto \(tooltip/hint\) do shape. + +@type method + +@param , numeric, Indica o ID \(número de identificação\) do shape. +@param , character, Indica a nova mensagem, do tipo dica de contexto \(tooltip/hint\), do shape +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/settooltip +/*/ +method settooltip(nid, ctext) class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:settransparent +Define, para o método SaveToPNG, se o fundo da imagem será salvo transparente. + +@type method + +@param , logical, Se verdadeiro, define que o fundo da imagem será salvo transparente, através do método SaveToPNG. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/settransparent +/*/ +method settransparent(istransparent) class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:savetopng +Salva o conteúdo do painel como imagem no formato PNG \(Portable Network Graphics\). + +@type method + +@param , numeric, Indica a posição à esquerda onde a imagem será salva. +@param , numeric, Indica a posição ao topo onde a imagem será salva. +@param , numeric, Indica a comprimento, a partir da esquerda, que a imagem será salva. +@param , numeric, Indica a altura, a partir do topo, que a imagem será salva. +@param , character, Indica o nome do arquivo que será salvo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/savetopng +/*/ +method savetopng(nleft, ntop, nwidth, nheight, cfiletarget) class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:setvisible +Define se o objeto \(container ou shape\) será visível. + +@type method + +@param [nid], numeric, Indica o ID do objeto que será visível/invisível. +@param [lisvisible], logical, Indica se o objeto é visível \(.T.\) ou invisível \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setvisible +/*/ +method setvisible(nid, lisvisible) class tpaintpanel +return +/*/{Protheus.doc} tpaintpanel:setpopup +Define um menu do tipo popup. + +@type method + +@param , object, Objeto do tipo TMenu. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setpopup +/*/ +method setpopup(omenu) class tpaintpanel +return + + +/*/{Protheus.doc} tpanel +Cria um objeto do tipo painel estático. Além disso, permite criar outros controles visuais com objetivo de organizar ou agrupar outros componentes visuais. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tpanel + +/*/ +class tpanel from TControl +method create() +method new() +end class +/*/{Protheus.doc} tpanel:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TPanel + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [ctext], character, Indica o texto que será apresentado ao fundo do objeto. +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [lcentered], logical, Indica se, verdadeiro \(.T.\), apresenta o texto do título no centro do objeto; caso contrário, falso \(.F.\). +@param [uparam7], logical, Compatibilidade. +@param [nclrtext], numeric, Indica a cor do texto do objeto. +@param [nclrback], numeric, Indica a cor de fundo do objeto. +@param [nwidth], numeric, Indica a largura em pontos do objeto. +@param [nheight], numeric, Indica a altura em pontos do objeto. +@param [llowered], logical, Indica se, verdadeiro \(.T.\), apresenta o painel rebaixado em relação ao objeto de fundo; caso contrário, falso \(.F.\). +@param [lraised], logical, Indica se, verdadeiro \(.T.\), apresenta a borda do objeto rebaixada em relação ao objeto de fundo; caso contrário, falso \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(ownd, nrow, ncol, ctext, ofont, lcentered, uparam7, nclrtext, nclrback, nwidth, nheight, llowered, lraised) class tpanel +return +/*/{Protheus.doc} tpanel:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TPanel + +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [ctext], character, Indica o texto que será apresentado ao fundo do objeto. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [lcentered], logical, Indica se, verdadeiro \(.T.\), apresenta o texto do título no centro do objeto; caso contrário, falso \(.F.\). +@param [uparam7], logical, Compatibilidade. +@param [nclrtext], numeric, Indica a cor do texto do objeto. +@param [nclrback], numeric, Indica a cor de fundo do objeto. +@param [nwidth], numeric, Indica a largura em pontos do objeto. +@param [nheight], numeric, Indica a altura em pontos do objeto. +@param [llowered], logical, Indica se, verdadeiro \(.T.\), apresenta o painel rebaixado em relação ao objeto de fundo; caso contrário, falso \(.F.\). +@param [lraised], logical, Indica se, verdadeiro \(.T.\), apresenta a borda do objeto rebaixada em relação ao objeto de fundo; caso contrário, falso \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, ctext, ownd, ofont, lcentered, uparam7, nclrtext, nclrback, nwidth, nheight, llowered, lraised) class tpanel +return + + +/*/{Protheus.doc} tpanelcss +Cria um objeto do tipo painel que permite receber CSS \(Cascading Style Sheet\). + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tpanelcss + +/*/ +class tpanelcss from TControl +method new() +end class +/*/{Protheus.doc} tpanelcss:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TPanelCss + +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [uparam3], character, Compatibility parameter. Pass NIL. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [uparam5], object, Compatibility parameter. Pass NIL. +@param [uparam6], logical, Compatibility parameter. Pass NIL. +@param [uparam7], logical, Compatibility parameter. Pass NIL. +@param [uparam8], numeric, Compatibility parameter. Pass NIL. +@param [uparam9], numeric, Compatibility parameter. Pass NIL. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [uparam12], numeric, Compatibility parameter. Pass NIL. +@param [uparam13], numeric, Compatibility parameter. Pass NIL. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, uparam3, ownd, uparam5, uparam6, uparam7, uparam8, uparam9, nwidth, nheight, uparam12, uparam13) class tpanelcss +return + + +/*/{Protheus.doc} tradmenu +Cria um objeto do tipo Radio Button \(elemento de seleção de única escolha\). + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tradmenu + +/*/ +class tradmenu from TControl +data aitems as array +data bchange as codeblock +data bsetget as codeblock +data bvalid as codeblock +data bwhen as codeblock +data lhoriz as logical +method new() +method create() +method disable() +method enable() +method enableitem() +method setoptions() +end class +/*/{Protheus.doc} tradmenu:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TRadMenu + +@param [nrow], numeric, Indica a coordenada vertical. +@param [ncol], numeric, Indica a coordenada horizontal. +@param [aitems], array, Indica o array que contêm os itens no formato texto. +@param [bsetget], codeblock, Indica o bloco de código que será executado na mudança do item selecionado. O bloco de código é responsável pela mudança do valor, da variável numérica, que indica o item selecionado. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [uparam6], variant, Compatibilidade. +@param [bchange], codeblock, Indica o bloco de código que será executado quando o estado ou conteúdo do objeto é modificado pela ação sobre o controle visual. +@param [nclrtext], numeric, Indica a cor do texto da janela. +@param [nclrpane], numeric, Indica a cor de fundo da janela. +@param [cmsg], character, Indica a mensagem, do tipo dica de contexto \(tooltip/hint\), que será apresentada ao posicionar o ponteiro do mouse sobre o objeto. +@param [uparam11], logical, Compatibilidade. +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. Observação: O bloco de código retornará verdadeiro \(.T.\), se o controle permanecer habilitado; caso contrário, retornará falso \(.F.\). +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [bvalid], codeblock, Compatibilidade. +@param [uparam16], logical, Compatibilidade. +@param [uparam17], logical, Compatibilidade. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [lhoriz], logical, Indica se o menu deverá ser montado na horizontal \(.T.\) ao invés do padrão na vertical \(.F.\). \(disponível em builds superiores a 7.00.121227P\) +@param [lautoheight], logical, Se verdadeiro \(.T.\) indica que a altura do objeto será aplicada automaticamente \(valor padrão\). Caso contrário \(.F.\) a altura respeitará o valor indicado no parâmetro nHeight do construtor. Disponível somente a partir da build 7.00.170117A - 17.2.1.2. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, aitems, bsetget, ownd, uparam6, bchange, nclrtext, nclrpane, cmsg, uparam11, bwhen, nwidth, nheight, bvalid, uparam16, uparam17, lpixel, lhoriz, lautoheight) class tradmenu +return +/*/{Protheus.doc} tradmenu:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TRadMenu + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [bsetget], codeblock, Indica o bloco de código que será executado na mudança do item selecionado. O bloco de código é responsável pela mudança do valor, da variável numérica, que indica o item selecionado. +@param [nrow], numeric, Indica a coordenada vertical. +@param [ncol], numeric, Indica a coordenada horizontal. +@param [aitems], array, Indica o array que contêm os itens no formato texto. +@param [uparam6], variant, Compatibilidade. +@param [bchange], codeblock, Indica o bloco de código que será executado quando o estado ou conteúdo do objeto é modificado pela ação sobre o controle visual. +@param [nclrtext], numeric, Indica a cor do texto da janela. +@param [nclrpane], numeric, Indica a cor de fundo da janela. +@param [cmsg], character, Indica a mensagem, do tipo dica de contexto \(tooltip/hint\), ao posicionar o ponteiro do mouse sobre o botão. +@param [uparam11], logical, Compatibilidade. +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. Observação: O bloco de código retornará verdadeiro \(.T.\), se o controle permanecer habilitado; caso contrário, retornará falso \(.F.\). +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [uparam15], codeblock, Compatibilidade. +@param [uparam16], logical, Compatibilidade. +@param [uparam17], logical, Compatibilidade. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [lhoriz], logical, Indica se o menu deverá ser montado na horizontal \(.T.\) ao invés do padrão na vertical \(.F.\). \(disponível em builds superiores a 7.00.121227P\) +@param [lautoheight], logical, Se verdadeiro \(.T.\) indica que a altura do objeto será aplicada automaticamente \(valor padrão\). Caso contrário \(.F.\) a altura respeitará o valor indicado no parâmetro nHeight do construtor. Disponível somente a partir da build 7.00.170117A - 17.2.1.2. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(ownd, bsetget, nrow, ncol, aitems, uparam6, bchange, nclrtext, nclrpane, cmsg, uparam11, bwhen, nwidth, nheight, uparam15, uparam16, uparam17, lpixel, lhoriz, lautoheight) class tradmenu +return +/*/{Protheus.doc} tradmenu:disable +Desabilita um item. + +@type method + +@param [nitem], numeric, Indica o item que será desabilitado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/disable +/*/ +method disable(nitem) class tradmenu +return +/*/{Protheus.doc} tradmenu:enable +Habilita um item. + +@type method + +@param [nitem], numeric, Indica o item que será habilitado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/enable +/*/ +method enable(nitem) class tradmenu +return +/*/{Protheus.doc} tradmenu:enableitem +Habilita/Desabilita um item. + +@type method + +@param [nitem], numeric, Indica o item que terá seu status alterado. +@param [lstatus], logical, Indica o status \(.T. - Habilita ou .F. - Desabilita\) que será atribuído ao item. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/enableitem +/*/ +method enableitem(nitem, lstatus) class tradmenu +return +/*/{Protheus.doc} tradmenu:setoptions +Seleciona um item. + +@type method + +@param [nitem], numeric, Indica o item que será selecionado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setoptions +/*/ +method setoptions(nitem) class tradmenu +return + + +/*/{Protheus.doc} tsay +Cria um objeto do tipo label. Desta forma, o objeto apresentará o conteúdo do texto estático sobre uma janela ou controle visual. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tsay + +/*/ +class tsay from TControl +data ltransparent as logical +data lwordwrap as logical +method new() +method create() +method ctrlrefresh() +method settext() +method settextalign() +method setpopup() +end class +/*/{Protheus.doc} tsay:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TSay + +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [btext], codeblock, Indica o bloco de código que será executado para retornar e apresentar uma string. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [cpicture], character, Indica a máscara de formatação, do conteúdo, que será apresentada. Verificar [Tabela de Pictures de Formatação](Tabela de Pictures de Formatação). +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [uparam7], logical, Compatibilidade. +@param [uparam8], logical, Compatibilidade. +@param [uparam9], logical, Compatibilidade. +@param [lpixels], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [nclrtext], numeric, Indica a cor do texto do objeto. +@param [nclrback], numeric, Indica a cor de fundo do objeto. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [uparam15], logical, Compatibilidade. +@param [uparam16], logical, Compatibilidade. +@param [uparam17], logical, Compatibilidade. +@param [uparam18], logical, Compatibilidade. +@param [uparam19], logical, Compatibilidade. +@param [lhtml], logical, Indica se, verdadeiro \(.T.\), habilita a visualização do texto no formato HTML; caso contrário, falso \(.F.\). +@param [ntxtalghor], numeric, Alinhamento horizontal do texto \(Consulte tabela na página do método SetTextAlign\). Disponível a partir da versão 17.3.0.0. +@param [ntxtalgver], numeric, Alinhamento vertical do texto \(Consulte tabela na página do método SetTextAlign\). Disponível a partir da versão 17.3.0.0. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, btext, ownd, cpicture, ofont, uparam7, uparam8, uparam9, lpixels, nclrtext, nclrback, nwidth, nheight, uparam15, uparam16, uparam17, uparam18, uparam19, lhtml, ntxtalghor, ntxtalgver) class tsay +return +/*/{Protheus.doc} tsay:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TSay + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [btext], codeblock, Indica o bloco de código que será executado para retornar e apresentar uma string. +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [cpicture], character, Indica a máscara de formatação, do conteúdo, que será apresentada. Verificar [Tabela de Pictures de Formatação](Tabela de Pictures de Formatação). +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [uparam7], logical, Compatibilidade. +@param [uparam8], logical, Compatibilidade. +@param [uparam9], logical, Compatibilidade. +@param [lpixels], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [nclrtext], numeric, Indica a cor do texto do objeto. +@param [nclrback], numeric, Indica a cor de fundo do objeto. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [uparam15], logical, Compatibilidade. +@param [uparam16], logical, Compatibilidade. +@param [uparam17], logical, Compatibilidade. +@param [uparam18], logical, Compatibilidade. +@param [uparam19], logical, Compatibilidade. +@param [uparam20], logical, Compatibilidade. +@param [ntxtalghor], numeric, Alinhamento horizontal do texto \(Consulte tabela na página do método SetTextAlign\). Disponível a partir da versão 17.3.0.0. +@param [ntxtalgver], numeric, Alinhamento vertical do texto \(Consulte tabela na página do método SetTextAlign\). Disponível a partir da versão 17.3.0.0. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(ownd, btext, nrow, ncol, cpicture, ofont, uparam7, uparam8, uparam9, lpixels, nclrtext, nclrback, nwidth, nheight, uparam15, uparam16, uparam17, uparam18, uparam19, uparam20, ntxtalghor, ntxtalgver) class tsay +return +/*/{Protheus.doc} tsay:ctrlrefresh +Força a atualização do objeto. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ctrlrefresh +/*/ +method ctrlrefresh() class tsay +return +/*/{Protheus.doc} tsay:settext +Altera o texto que será apresentado pelo objeto. + +@type method + +@param [xval], character, Indica o texto que será apresentado. Observação: O tipo de dado desse parâmetro pode ser: Caracter, Numérico e Data. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/settext +/*/ +method settext(xval) class tsay +return +/*/{Protheus.doc} tsay:settextalign +Define o alinhamento horizontal e vertical do texto dentro do alcance do campo. + +@type method + +@param , numeric, Tipo de alinhamento horizontal. +@param , numeric, Tipo de alinhamento vertical. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/settextalign +/*/ +method settextalign(nhoriz, nvert) class tsay +return +/*/{Protheus.doc} tsay:setpopup +Define um menu do tipo popup. + +@type method + +@param , object, Objeto do tipo TMenu. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setpopup +/*/ +method setpopup(omenu) class tsay +return + + +/*/{Protheus.doc} tscrollarea +Cria um objeto do tipo painel com barra de rolagem \(Scroll\). + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tscrollarea + +/*/ +class tscrollarea from TControl +data ltracking as logical +method new() +method setframe() +end class +/*/{Protheus.doc} tscrollarea:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TScrollArea + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [ntop], numeric, Indica a coordenada vertical em pixels. +@param [nleft], numeric, Indica a coordenada horizontal em pixels. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ownd, ntop, nleft, nheight, nwidth) class tscrollarea +return +/*/{Protheus.doc} tscrollarea:setframe +Define o objeto que será apresentado na área. + +@type method + +@param [o], object, Indica o objeto que será apresentado na área. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setframe +/*/ +method setframe(o) class tscrollarea +return + + +/*/{Protheus.doc} tscrollbox +Cria um objeto do tipo painel com barra de rolagem \(Scroll\). + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tscrollbox + +/*/ +class tscrollbox from TControl +method new() +method create() +method reset() +end class +/*/{Protheus.doc} tscrollbox:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TScrollBox + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [ntop], numeric, Indica a coordenada vertical em pixels. +@param [nleft], numeric, Indica a coordenada horizontal em pixels. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [lvertical], logical, Indica se verdadeiro \(.T.\) a barra de rolagem vertical será apresentada, caso contrário falso \(.F.\). +@param [lhorizontal], logical, Indica se verdadeiro \(.T.\) a barra de rolagem horizontal será apresentada, caso contrário falso \(.F.\). +@param [lborder], logical, Indica se verdadeiro \(.T.\) a borda do objeto será apresentada, caso contrário falso \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ownd, ntop, nleft, nheight, nwidth, lvertical, lhorizontal, lborder) class tscrollbox +return +/*/{Protheus.doc} tscrollbox:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TScrollBox + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [ntop], numeric, Indica a coordenada vertical em pixels. +@param [nleft], numeric, Indica a coordenada horizontal em pixels. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [lvertical], logical, Indica se verdadeiro \(.T.\) a barra de rolagem vertical será apresentada, caso contrário falso \(.F.\). +@param [lhorizontal], logical, Indica se verdadeiro \(.T.\) a barra de rolagem horizontal será apresentada, caso contrário falso \(.F.\). +@param [lborder], logical, Indica se verdadeiro \(.T.\) a borda do objeto será apresentada, caso contrário falso \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(ownd, ntop, nleft, nheight, nwidth, lvertical, lhorizontal, lborder) class tscrollbox +return +/*/{Protheus.doc} tscrollbox:reset +Retorna a barra de rolagem para a posição inicial à esquerda e ao topo. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/reset +/*/ +method reset() class tscrollbox +return + + +/*/{Protheus.doc} tsimpleeditor +Cria um objeto do tipo editor de texto simples. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tsimpleeditor + +/*/ +class tsimpleeditor from TControl +data bchanged as codeblock +data bgetkey as codeblock +data lobfuscate as logical +method create() +method new() +method load() +method rettext() +method rettextsel() +method textalign() +method textbold() +method textfamily() +method textcolor() +method textformat() +method textitalic() +method textsize() +method textstatus() +method textstyle() +method gotop() +method goend() +method goto() +method textunderline() +method savetopdf() +method setmaxtextlength() +method setwordwrap() +end class +/*/{Protheus.doc} tsimpleeditor:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TSimpleEditor + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(ownd) class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TSimpleEditor + +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [ctext], character, Indica o texto que será apresentado na inicialização do objeto. +@param [lreadonly], logical, Indica se, verdadeiro \(.T.\), o texto não pode ser editado; caso contrário, falso \(.F.\). +@param [bsetget], codeblock, Indica o bloco de código, no formato \{\|u\| if\( Pcount\( \)>0, := u, \) \}, que será executado para atualizar a variável \(essa variável deve ser do tipo caracter\). Desta forma, se a lista for sequencial, o controle atualizará com o conteúdo do item selecionado, se for indexada, será atualizada com o valor do índice do item selecionado. +@param [ofont], object, Indica o objeto do tipo [TFont](TFont) que será utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. Observação: O bloco de código retornará verdadeiro \(.T.\) se o controle permanecer habilitado; caso contrário, retornará falso \(.F.\). +@param [bvalid], codeblock, Indica o bloco de código de validação que será executado quando o conteúdo do objeto for modificado. Retorna verdadeiro \(.T.\), se o conteúdo é válido; caso contrário, falso \(.F.\). +@param [clabeltext], character, indica o texto que será apresentado na Label. +@param [nlabelpos], numeric, Indica a posição da label, sendo 1=Topo e 2=Esquerda +@param [olabelfont], object, Indica o objeto, do tipo [TFont](TFont), que será utilizado para definir as características da fonte aplicada na exibição da label. +@param [nlabelcolor], numeric, Indica a cor do texto da Label. +@param [bchanged], codeblock, Indica o bloco de código que será disparado no método Load e no Recortar \(CTRL+X\) e Colar \(CTRL+V\). Parâmetro disponível em builds superiores à 131227A. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, ownd, nwidth, nheight, ctext, lreadonly, bsetget, ofont, lpixel, bwhen, bvalid, clabeltext, nlabelpos, olabelfont, nlabelcolor, bchanged) class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:load +Carrega um texto para o editor. + +@type method + +@param [ctexto], character, Indica o texto que inicializará o editor. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/load +/*/ +method load(ctexto) class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:rettext +Retorna uma string com o conteúdo do editor. + +@type method + +@return character, String contendo o conteúdo do editor. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/rettext +/*/ +method rettext() class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:rettextsel +Retorna uma string com o conteúdo selecionado do editor. + +@type method + +@return character, Retorna uma string com o conteúdo selecionado do editor. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/rettextsel +/*/ +method rettextsel() class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:textalign +Define o tipo de alinhamento do texto. + +@type method + +@param [nalign], numeric, Indica o tipo de alinhamento do texto, sendo: 1-À esquerda, 2-À direita, 3-Centralizado e 4-Justificado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/textalign +/*/ +method textalign(nalign) class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:textbold +Aplica o estilo negrito no texto. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/textbold +/*/ +method textbold() class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:textfamily +Aplica um tipo de fonte no texto. + +@type method + +@param [cfamily], character, Indica o nome da fonte que será utilizada na seção do texto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/textfamily +/*/ +method textfamily(cfamily) class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:textcolor +Aplica uma cor no texto. + +@type method + +@param , numeric, Indica a cor do texto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/textcolor +/*/ +method textcolor(ncolor) class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:textformat +Define o formato do texto. + +@type method + +@param [nformat], numeric, Indica o formato do texto, sendo: 1 = Html e 2 = Plain Text. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/textformat +/*/ +method textformat(nformat) class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:textitalic +Aplica o estilo itálico no texto. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/textitalic +/*/ +method textitalic() class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:textsize +Aplica o tamanho da fonte no texto. + +@type method + +@param [nsize], numeric, Indica o tamanho da fonte que será utilizada na seção do texto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/textsize +/*/ +method textsize(nsize) class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:textstatus +Retorna um array com as propriedades do texto posicionado. + +@type method + +@return array, Retorna um array com as propriedades do texto. Consulte tabela da área de observações. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/textstatus +/*/ +method textstatus() class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:textstyle +Define o estilo do parágrafo. + +@type method + +@param [nstyle], numeric, Indica o estilo do parágrafo que será utilizado na seção do texto. Consulte tabela na área de observações para conhecer os valores possíveis. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/textstyle +/*/ +method textstyle(nstyle) class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:gotop +Posiciona o cursor no início do texto. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gotop +/*/ +method gotop() class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:goend +Posiciona o cursor no fim do texto. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/goend +/*/ +method goend() class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:goto +Posiciona o cursor no início da linha especificada. + +@type method + +@param , numeric, Indica a linha em que o cursor será posicionado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/goto +/*/ +method goto(nline) class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:textunderline +Aplica o estilo sublinhado no texto. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/textunderline +/*/ +method textunderline() class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:savetopdf +Salva o conteúdo do editor em um arquivo PDF. + +@type method + +@param , character, Indica o caminho e nome do arquivo PDF para salvamento. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/savetopdf +/*/ +method savetopdf(cpdffile) class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:setmaxtextlength +Limita a quantidade de caracteres aceitos no componente. + +@type method + +@param , numeric, Indica a quantidade de caracteres aceitos no componente. Se for informado o valor -1, o limite será desativado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setmaxtextlength +/*/ +method setmaxtextlength(nlimit) class tsimpleeditor +return +/*/{Protheus.doc} tsimpleeditor:setwordwrap +Desativa ou ativa a quebra automática de linha no editor. + +@type method + +@param , logical, Indica se desativa \(.F.\) ou ativa \(.T.\) a quebra automática de linha. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setwordwrap +/*/ +method setwordwrap(lenable) class tsimpleeditor +return + + +/*/{Protheus.doc} tslider +Cria um objeto do tipo botão deslizante. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tslider + +/*/ +class tslider from TControl +data bchange as codeblock +method create() +method new() +method setrange() +method setmarks() +method setinterval() +method setvalue() +method setstep() +method setorient() +end class +/*/{Protheus.doc} tslider:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TSlider + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(ownd) class tslider +return +/*/{Protheus.doc} tslider:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TSlider + +@param [nrow], numeric, Indica a coordenada vertical em pixels. +@param [ncol], numeric, Indica a coordenada horizontal em pixels. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [bchange], codeblock, Indica o bloco de código que será executado quando o estado ou conteúdo do objeto é modificado pela ação sobre o controle visual. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [cmsg], character, Indica a mensagem, do tipo dica de contexto \(tooltip/hint\), ao posicionar o ponteiro do mouse sobre o botão. +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, ownd, bchange, nwidth, nheight, cmsg, bwhen) class tslider +return +/*/{Protheus.doc} tslider:setrange +Especifica os valores \(de/até\) da faixa do botão. + +@type method + +@param [nmin], numeric, Indica o valor mínimo do botão. +@param [nmax], numeric, Indica o valor máximo do botão. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setrange +/*/ +method setrange(nmin, nmax) class tslider +return +/*/{Protheus.doc} tslider:setmarks +Especifica o tipo de marcação do botão. + +@type method + +@param [nmark], numeric, Indica o tipo de marcação do botão, sendo: 0=Botão com identificação Padrão/Default, 1=Botão com indicação para cima, 2=Botão com indicação para baixo e 3=Botão com indicação para cima/baixo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setmarks +/*/ +method setmarks(nmark) class tslider +return +/*/{Protheus.doc} tslider:setinterval +Especifica a distância entre os marcadores. + +@type method + +@param [ninterval], numeric, Indica o valor de intervalo entre os marcadores. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setinterval +/*/ +method setinterval(ninterval) class tslider +return +/*/{Protheus.doc} tslider:setvalue +Especifica um valor para o botão. + +@type method + +@param [nval], numeric, Indica o valor do botão. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setvalue +/*/ +method setvalue(nval) class tslider +return +/*/{Protheus.doc} tslider:setstep +Especifica o valor de etapa do botão. + +@type method + +@param [nstep], numeric, Indica o valor de etapa do botão. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setstep +/*/ +method setstep(nstep) class tslider +return +/*/{Protheus.doc} tslider:setorient +Especifica a coordenada \(horizontal/vertical\) do botão. + +@type method + +@param [norient], numeric, Indica a coordenada \(horizontal/vertical\) do botão, sendo: 0=Horizontal e 1=Vertical. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setorient +/*/ +method setorient(norient) class tslider +return + + +/*/{Protheus.doc} tsocketclient +Estabelece uma conexão client de socket do tipo TCP genérica.Através desta classe, é possível enviar e receber dados por meio de um socket genérico e utilizar como base para implementação de protocolo não suportado pela aplicação. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tsocketclient + +/*/ +class tsocketclient +method new() +method connect() +method geterror() +method isconnected() +method send() +method receive() +method reset() +method closeconnection() +end class +/*/{Protheus.doc} tsocketclient:new +Cria o objeto TSocketClient sem conexão ativa. + +@type method + +@return object, Nova instância da classe TSocketClient + +@param [lclient], logical, Indica se o client de socket será criado do lado do Client \(.T.\) ou do lado do AppServer \(.F.\). O padrão é \(.F.\) AppServer. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(lclient) class tsocketclient +return +/*/{Protheus.doc} tsocketclient:connect +Estabelece uma conexão TCP genérica \(socket\). + +@type method + +@return numeric, Retorna 0 \(zero\) se conectar com sucesso; caso contrário, a conexão falhou. + +@param , numeric, Indica o número da porta onde a conexão será realizada. +@param , character, Indica o número IP ou nome do servidor onde a conexão será realizada. +@param , numeric, Indica o número em milissegundos onde o método deve esperar para conectar. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/connect +/*/ +method connect(nport, caddress, ntimeout) class tsocketclient +return +/*/{Protheus.doc} tsocketclient:geterror +Permite recuperar um código e uma string correspondendo à ultima ocorrência do Socket client registrada em caso de falha. + +@type method + +@return numeric, Retorna o código do último erro ocorrido. + +@param <@cdesc>, character, Retorna um código e uma string que corresponde à última ocorrência de SocketClient registrada em caso de falha. Caso não haja nenhuma falha registrada, a função retorna 0 \(zero\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/geterror +/*/ +method geterror(cdesc) class tsocketclient +return +/*/{Protheus.doc} tsocketclient:isconnected +Retorna se o socket está conectado ou não + +@type method + +@return codeblock, Retorna verdadeiro \(.T.\) caso conectado. Caso contrário retorna \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/isconnected +/*/ +method isconnected() class tsocketclient +return +/*/{Protheus.doc} tsocketclient:send +Transmite o buffer pela conexão TCP genérica ativa. + +@type method + +@return numeric, Retorna o número de bytes transmitidos. Caso o número seja diferente do tamanho especificado, no parâmetro cBuffer, algum erro aconteceu. + +@param , character, Indica a buffer que contém os dados que serão transmitidos pela conexão. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/send +/*/ +method send(cdata) class tsocketclient +return +/*/{Protheus.doc} tsocketclient:receive +Recebe qualquer tipo de dado pela conexão ativa do objeto. + +@type method + +@return numeric, Retorna a quantidade de bytes recebidos. Caso ocorra algum erro, a quantidade recebida será menor que zero. + +@param <@cbuffer>, variant, Indica o buffer que contém os dados a serem recebidos. +@param , numeric, o tempo em milissegundos, que o método receive aguarda, para receber algum dado pela conexão. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/receive +/*/ +method receive(cbuffer, indica) class tsocketclient +return +/*/{Protheus.doc} tsocketclient:reset +Encerra a conexão sem avisar o outro lado. + +@type method + +@return numeric, Retorna 0 em caso de sucesso. Caso contrário retorna um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/reset +/*/ +method reset() class tsocketclient +return +/*/{Protheus.doc} tsocketclient:closeconnection +Encerra a conexão TCP genérica \(socket\) do objeto corrente. + +@type method + +@return numeric, Retorna 0 em caso de uma conexão bem sucedida. Caso contrário retorna um código de erro. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/closeconnection +/*/ +method closeconnection() class tsocketclient +return + + +/*/{Protheus.doc} tspinbox +Cria um objeto do tipo caixa de seleção, cujo os itens são definidos a partir de um intervalo numérico. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tspinbox + +/*/ +class tspinbox from TControl +data bchange as codeblock +method create() +method new() +method setrange() +method setvalue() +method setstep() +method setwrap() +end class +/*/{Protheus.doc} tspinbox:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TSpinBox + +@param [ownd], object, Indica a janela ou controle visual onde objeto será criado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(ownd) class tspinbox +return +/*/{Protheus.doc} tspinbox:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TSpinBox + +@param [nrow], numeric, Indica a coordenada vertical em pixels. +@param [ncol], numeric, Indica a coordenada horizontal em pixels. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [bchange], codeblock, Indica o bloco de código que será executado quando o estado ou conteúdo do objeto é modificado pela ação sobre o controle visual. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [cmsg], character, Indica a mensagem do tipo dica de contexto \(tooltip/hint\) ao posicionar o ponteiro do mouse sobre o botão. +@param [bwhen], codeblock, Indica o bloco de código que será executado quando a mudança de foco da entrada de dados, na janela em que o controle foi criado, estiver sendo efetuada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, ownd, bchange, nwidth, nheight, cmsg, bwhen) class tspinbox +return +/*/{Protheus.doc} tspinbox:setrange +Especifica os valores \(de/até\) da faixa do botão. + +@type method + +@param [nmin], numeric, Indica o valor mínimo do botão. +@param [nmax], numeric, Indica o valor máximo do botão. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setrange +/*/ +method setrange(nmin, nmax) class tspinbox +return +/*/{Protheus.doc} tspinbox:setvalue +Especifica um valor para o botão. + +@type method + +@param [nval], numeric, Indica o valor do botão. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setvalue +/*/ +method setvalue(nval) class tspinbox +return +/*/{Protheus.doc} tspinbox:setstep +Especifica o valor de etapa do botão. + +@type method + +@param [nstep], numeric, Indica o valor de etapa do botão. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setstep +/*/ +method setstep(nstep) class tspinbox +return +/*/{Protheus.doc} tspinbox:setwrap +Especifica se a caixa de giro é circular. + +@type method + +@param [lwrap], logical, Se habilita\(.T.\), Quando o número chegar ao valor máximo\(50\) espeficicado por `( oSpinBox:SetRange(0,50) )` irá levá-lo ao mínimo\(0\) e vica versa. Ao setar /desabilita\(.F.\), o valor não entra em giro circular. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setwrap +/*/ +method setwrap(lwrap) class tspinbox +return + + +/*/{Protheus.doc} tsplitter +Cria um objeto do tipo barra de divisão. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tsplitter + +/*/ +class tsplitter from TControl +method new() +method create() +method setorient() +method setchildcollapse() +method setcollapse() +method movetolast() +method movetofirst() +method setopaqueresize() +method setresizemode() +end class +/*/{Protheus.doc} tsplitter:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TSplitter + +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [norientation], numeric, Indica a posição que a barra de divisão será criada, sendo 0 = Horizontal e 1 = Vertical. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, ownd, nwidth, nheight, norientation) class tsplitter +return +/*/{Protheus.doc} tsplitter:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TSplitter + +@param [ownd], object, Indica a janela ou controle visual onde objeto será criado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(ownd) class tsplitter +return +/*/{Protheus.doc} tsplitter:setorient +Especifica a posição \(horizontal ou vertical\) do objeto. + +@type method + +@param [norient], numeric, Indica a posição do objeto, sendo 0 = Horizontal e 1 = Vertical. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setorient +/*/ +method setorient(norient) class tsplitter +return +/*/{Protheus.doc} tsplitter:setchildcollapse +Define se os elementos serão fechados \(Collapsibles\). + +@type method + +@param [lcoll], logical, Indica se habilita\(.T.\)/desabilita\(.F.\) a opção de fechar \(Collapsibles\) os elementos. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setchildcollapse +/*/ +method setchildcollapse(lcoll) class tsplitter +return +/*/{Protheus.doc} tsplitter:setcollapse +Define qual objeto será fechado \(Collapsible\). + +@type method + +@param [oobj], object, Indica o objeto que será fechado \(Collapsed\). +@param [lcoll], logical, Indica se habilita\(.T.\)/desabilita\(.F.\) a opção de fechar. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcollapse +/*/ +method setcollapse(oobj, lcoll) class tsplitter +return +/*/{Protheus.doc} tsplitter:movetolast +Define qual objeto será o último das divisões. + +@type method + +@param [oobj], object, Indica qual objeto será o último da divisão. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/movetolast +/*/ +method movetolast(oobj) class tsplitter +return +/*/{Protheus.doc} tsplitter:movetofirst +Define qual objeto será o primeiro das divisões. + +@type method + +@param [oobj], object, Indica qual objeto será o primeiro da divisão. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/movetofirst +/*/ +method movetofirst(oobj) class tsplitter +return +/*/{Protheus.doc} tsplitter:setopaqueresize +Define se o redimensionamento \(resize\) será opaco. + +@type method + +@param [lopaq], logical, Indica se habilita\(.T.\)/desabilita\(.F.\) o redimensionamento opaco. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setopaqueresize +/*/ +method setopaqueresize(lopaq) class tsplitter +return +/*/{Protheus.doc} tsplitter:setresizemode +Define a maneira de redimensionar \(resize\) o objeto. + +@type method + +@param [oobj], object, Indica o objeto que será redimensionado. +@param [nmode], numeric, Indica a maneira que o objeto será redimensionado, sendo: 0 = Stretch, 1 = KeepSize, 2 = FollowSizeHint e 3 = Auto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setresizemode +/*/ +method setresizemode(oobj, nmode) class tsplitter +return + + +/*/{Protheus.doc} tsrvobject +Classe abstrata herdada por todos os componentes visuais. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tsrvobject + +/*/ +class tsrvobject +data acontrols as array +data bgotfocus as codeblock +data bhelp as codeblock +data blclicked as codeblock +data bldblclick as codeblock +data blostfocus as codeblock +data brclicked as codeblock +data bvalid as codeblock +data bwhen as codeblock +data ccaption as character +data cmsg as character +data cname as character +data creadvar as character +data ctooltip as character +data lactive as logical +data lcangotfocus as logical +data lvisible as logical +data nbottom as numeric +data nclientheight as numeric +data nclientwidth as numeric +data nclrpane as numeric +data nclrtext as numeric +data nheight as numeric +data nleft as numeric +data nright as numeric +data ntop as numeric +data nwidth as numeric +data nwnd as numeric +data cargo as object +data ocursor as object +data ofont as object +data oparent as object +data ownd as object +method classname() +method coorsupdate() +method disable() +method enable() +method freechildren() +method getclientrect() +method getfont() +method setfont() +method gettext() +method hide() +method show() +method hwhandle() +method move() +method owner() +method refresh() +method saveasbmp() +method setcolor() +method setcoors() +method setcss() +method setdisable() +method setenable() +method setfocus() +method settext() +method setupdatesenabled() +end class +/*/{Protheus.doc} tsrvobject:classname +Retorna o nome da classe. + +@type method + +@return character, Nome da classe + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/classname +/*/ +method classname() class tsrvobject +return +/*/{Protheus.doc} tsrvobject:coorsupdate +Atualiza informação no AppServer do posicionamento \(vertical superior, horizontal esquerda, vertical inferior e horizontal direita\) do objeto. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/coorsupdate +/*/ +method coorsupdate() class tsrvobject +return +/*/{Protheus.doc} tsrvobject:disable +Desabilita o objeto + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/disable +/*/ +method disable() class tsrvobject +return +/*/{Protheus.doc} tsrvobject:enable +Habilita o objeto + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/enable +/*/ +method enable() class tsrvobject +return +/*/{Protheus.doc} tsrvobject:freechildren +Elimina/Libera todos os objetos da classe onde este método é chamado. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/freechildren +/*/ +method freechildren() class tsrvobject +return +/*/{Protheus.doc} tsrvobject:getclientrect +Retorna as coordenadas de posicionamento e dimensão \(vertical superior, horizontal à esquerda, vertical inferior e horizontal à direita\) do objeto + +@type method + +@return array, Retorna um array com as coordenadas de posicionamento e dimensão \(vertical superior, horizontal esquerda, vertical inferior e horizontal direita\) do objeto. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getclientrect +/*/ +method getclientrect() class tsrvobject +return +/*/{Protheus.doc} tsrvobject:getfont +Retorna a fonte do objeto. + +@type method + +@return object, Fonte do Objeto + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getfont +/*/ +method getfont() class tsrvobject +return +/*/{Protheus.doc} tsrvobject:setfont +Define a fonte do objeto. + +@type method + +@param , object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setfont +/*/ +method setfont(ofont) class tsrvobject +return +/*/{Protheus.doc} tsrvobject:gettext +Retorna o título do objeto contido na propriedade cCaption. + +@type method + +@return character, Título do objeto. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gettext +/*/ +method gettext() class tsrvobject +return +/*/{Protheus.doc} tsrvobject:hide +Torna o objeto invisível. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hide +/*/ +method hide() class tsrvobject +return +/*/{Protheus.doc} tsrvobject:show +Torna o objeto visível. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/show +/*/ +method show() class tsrvobject +return +/*/{Protheus.doc} tsrvobject:hwhandle +Retorna o handle do objeto. + +@type method + +@return numeric, Retorna o handle do objeto. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hwhandle +/*/ +method hwhandle() class tsrvobject +return +/*/{Protheus.doc} tsrvobject:move +Move o objeto. + +@type method + +@param , numeric, Indica a posição ao topo. +@param , numeric, Indica a posição a esquerda. +@param , numeric, Indica a largura. +@param , numeric, Indica a altura. +@param [uparam5], logical, Compatibility parameter. Pass NIL. +@param [lrealcoords], logical, Indica se as bordas do objeto serão consideradas no cálculo de movimentação. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/move +/*/ +method move(ntop, nleft, nwidth, nheight, uparam5, lrealcoords) class tsrvobject +return +/*/{Protheus.doc} tsrvobject:owner +Retorna o objeto do tipo tWindow ou tDialog utilizado na criação desta classe. + +@type method + +@return object, Retorna o objeto do tipo tWindow ou tDialog onde este foi criado. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/owner +/*/ +method owner() class tsrvobject +return +/*/{Protheus.doc} tsrvobject:refresh +Atualiza as propriedades do objeto no TOTVS Smart Client. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/refresh +/*/ +method refresh() class tsrvobject +return +/*/{Protheus.doc} tsrvobject:saveasbmp +Salva uma cópia do objeto no formato Bitmap \(\*.BMP\). + +@type method + +@return logical, Retorna verdadeiro \(.T.\), se a imagem for salva com sucesso; caso contrário, retorna falso \(.F.\). + +@param , character, Indica o caminho do arquivo no client. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/saveasbmp +/*/ +method saveasbmp(cfile) class tsrvobject +return +/*/{Protheus.doc} tsrvobject:setcolor +Define as cores do objeto. + +@type method + +@param , numeric, Indica a cor da fonte. +@param , numeric, Indica a cor de fundo do objeto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcolor +/*/ +method setcolor(nclrfore, nclrback) class tsrvobject +return +/*/{Protheus.doc} tsrvobject:setcoors +Define as coordenadas \(à esquerda, ao topo, largura e altura\) do objeto utilizando a classe TRect. + +@type method + +@param , object, Indica o objeto do tipo TRect é utilizado para definir as coordenadas. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcoors +/*/ +method setcoors(orect) class tsrvobject +return +/*/{Protheus.doc} tsrvobject:setcss +Aplica estilo no objeto utilizando o CSS \(Cascading Style Sheets\) + +@type method + +@param , character, Indica o texto com formato CSS para o objeto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcss +/*/ +method setcss(ccss) class tsrvobject +return +/*/{Protheus.doc} tsrvobject:setdisable +Habilita ou desabilita o objeto. + +@type method + +@param , logical, Indica se o habilita \(.F.\) ou desabilita \(.T.\) o objeto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setdisable +/*/ +method setdisable(lenable) class tsrvobject +return +/*/{Protheus.doc} tsrvobject:setenable +Habilita ou desabilita o objeto. + +@type method + +@param , logical, Indica se o habilita \(.T.\) ou desabilita \(.F.\) o objeto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setenable +/*/ +method setenable(lenable) class tsrvobject +return +/*/{Protheus.doc} tsrvobject:setfocus +Altera o foco da entrada de dados para o objeto. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setfocus +/*/ +method setfocus() class tsrvobject +return +/*/{Protheus.doc} tsrvobject:settext +Define o texto do objeto. + +@type method + +@param , character, Indica o texto do objeto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/settext +/*/ +method settext(ctexto) class tsrvobject +return +/*/{Protheus.doc} tsrvobject:setupdatesenabled +Habilita ou desabilita a atualização de pintura do objeto. + +@type method + +@param , logical, Indica se habilita \(.T.\) ou desabilita \(.F.\) a atualização do objeto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setupdatesenabled +/*/ +method setupdatesenabled(lenable) class tsrvobject +return + + +/*/{Protheus.doc} ttabs +Cria um objeto do tipo aba. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ttabs + +/*/ +class ttabs from TControl +data baction as codeblock +data noption as numeric +data aprompts as object +method new() +method moveopt() +method additem() +method delitem() +method setoption() +method settabs() +end class +/*/{Protheus.doc} ttabs:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TTabs + +@param [ntop], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [nleft], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [aprompts], object, Indica o array, no formato texto, que contêm as descrições das abas. +@param [baction], codeblock, Indica o bloco de código que será executado quando mudar de aba. +@param [ownd], object, Indica a janela ou controle visual onde objeto será criado. +@param [noption], numeric, Indica a aba que será selecionada. +@param [nclrfore], numeric, Indica a cor de frente do objeto. +@param [uparam8], numeric, Compatibility parameter. Pass NIL. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@param [uparam10], logical, Compatibility parameter. Pass NIL. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [cmsg], character, Indica a mensagem, do tipo dica de contexto \(tooltip/hint\), que será apresentada ao posicionar o ponteiro do mouse sobre o objeto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ntop, nleft, aprompts, baction, ownd, noption, nclrfore, uparam8, lpixel, uparam10, nwidth, nheight, cmsg) class ttabs +return +/*/{Protheus.doc} ttabs:moveopt +Move o conteúdo de uma aba para outra e exclui a de origem. + +@type method + +@param [nabaorigem], numeric, Indica a aba que terá seu conteúdo movido e será excluída. +@param [nabadestino], numeric, Indica a aba que receberá o conteúdo da aba excluída. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/moveopt +/*/ +method moveopt(nabaorigem, nabadestino) class ttabs +return +/*/{Protheus.doc} ttabs:additem +Adiciona uma aba. + +@type method + +@param [ctitulo], character, Indica o título da aba que será adicionada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/additem +/*/ +method additem(ctitulo) class ttabs +return +/*/{Protheus.doc} ttabs:delitem +Exclui uma aba. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/delitem +/*/ +method delitem() class ttabs +return +/*/{Protheus.doc} ttabs:setoption +Seleciona uma aba. + +@type method + +@param [nnraba], numeric, Indica o número da aba que será selecionada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setoption +/*/ +method setoption(nnraba) class ttabs +return +/*/{Protheus.doc} ttabs:settabs +Inclui um novo array no formato texto, com novas abas. + +@type method + +@param , object, Indica um array no formato texto, com as novas abas. +@param , numeric, Indica o número da aba que será apresentada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/settabs +/*/ +method settabs(aabas, nopt) class ttabs +return + + +/*/{Protheus.doc} ttimer +Cria um objeto que executa um bloco de código respeitando o temporizador, atrelado a um componente da interface visual. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ttimer + +/*/ +class ttimer from TSrvObject +data baction as codeblock +data lactive as logical +data ninterval as numeric +data lliveany as logical +method new() +method activate() +method deactivate() +end class +/*/{Protheus.doc} ttimer:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TTimer + +@param [ninterval], numeric, Indica o intervalo em milissegundos para disparar o bloco de código \(\*\). +@param [baction], codeblock, Indica o bloco de código que será executado a cada intervalo definido \(\*\*\). +@param [ownd], object, Indica a janela ou controle visual onde o divisor será criado \(\*\*\*\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ninterval, baction, ownd) class ttimer +return +/*/{Protheus.doc} ttimer:activate +Inicia a execução do timer. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/activate +/*/ +method activate() class ttimer +return +/*/{Protheus.doc} ttimer:deactivate +Suspende a execução do timer. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/deactivate +/*/ +method deactivate() class ttimer +return + + +/*/{Protheus.doc} ttoolbox +Cria um objeto do tipo caixa de ferramenta, cujo objetivo é agrupar diferentes tipos de objetos. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ttoolbox + +/*/ +class ttoolbox from TControl +data bchangegrp as codeblock +method create() +method new() +method addgroup() +method removegroup() +method setcurrentgroup() +end class +/*/{Protheus.doc} ttoolbox:create +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TToolBox + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/create +/*/ +method create(ownd) class ttoolbox +return +/*/{Protheus.doc} ttoolbox:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TToolBox + +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [ofont], object, Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. +@param [cmsg], character, Indica a mensagem do tipo dica de contexto \(tooltip/hint\), que será apresentada ao posicionar o ponteiro do mouse sobre o objeto. +@param [bwhen], codeblock, Indica o bloco de código que será executado, quando a mudança de foco da entrada de dados no objeto criado estiver sendo realizada. Se o retorno for verdadeiro \(.T.\) o objeto continua habilitado, caso contrário falso \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(nrow, ncol, ownd, nwidth, nheight, ofont, cmsg, bwhen) class ttoolbox +return +/*/{Protheus.doc} ttoolbox:addgroup +Adiciona um grupo. + +@type method + +@param [oobj], object, Indica o objeto \(pai\) que será adicionado no grupo. +@param [cname], character, Indica a descrição do grupo. +@param [oicon], object, Indica o ícone que representará o grupo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addgroup +/*/ +method addgroup(oobj, cname, oicon) class ttoolbox +return +/*/{Protheus.doc} ttoolbox:removegroup +Exclui o grupo. + +@type method + +@param [oobj], object, Indica qual objeto \(pai\) será excluído do grupo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/removegroup +/*/ +method removegroup(oobj) class ttoolbox +return +/*/{Protheus.doc} ttoolbox:setcurrentgroup +Define o grupo corrente. + +@type method + +@param [oobj], object, Indica qual objeto \(pai\) será posicionado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcurrentgroup +/*/ +method setcurrentgroup(oobj) class ttoolbox +return + + +/*/{Protheus.doc} ttree +Cria um objeto do tipo árvore de itens. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ttree + +/*/ +class ttree from TControl +data currentnodeid as character +data ncolumns as numeric +data nflags as numeric +data bpromptchanged as codeblock +data bdragnode as codeblock +data bvalidnodes as codeblock +method new() +method beginupdate() +method ptaddnodes() +method ptsendnodes() +method ptaddarraynodes() +method ptsendtree() +method endupdate() +method ptgetprompt() +method ptgetnodecount() +method ptgetnivel() +method ptcollapse() +method ptgototonode() +method ptdeletecurrentnode() +method ptchangeprompt() +method ptchangebmp() +method setscroll() +method ptreset() +method setflags() +method setcolwidth() +method setcolsalign() +end class +/*/{Protheus.doc} ttree:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TTree + +@param [ntop], numeric, Indica a coordenada vertical superior do objeto. +@param [nleft], numeric, Indica a coordenada horizontal à esquerda do objeto. +@param [nbottom], numeric, Indica a coordenada vertical inferior do objeto. +@param [nright], numeric, Indica a coordenada horizontal à direita do objeto. +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [bchange], codeblock, Indica o bloco de código que será executado quando o estado ou conteúdo do objeto é modificado pela ação sobre o controle visual. +@param [brclick], codeblock, Indica o bloco de código que será executado quando clicar com o botão direito do mouse sobre o objeto. +@param [cheaders], character, Indica o texto que será exibido no\(s\) cabeçalho\(s\), também definindo a quantidade de colunas que a árvore conterá. Para mais de uma coluna utilize valores separados por ponto e vírgula. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ntop, nleft, nbottom, nright, ownd, bchange, brclick, cheaders) class ttree +return +/*/{Protheus.doc} ttree:beginupdate +Prepara a árvore para receber os itens. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/beginupdate +/*/ +method beginupdate() class ttree +return +/*/{Protheus.doc} ttree:ptaddnodes +Adiciona um item no buffer para posteriormente ser enviado à árvore. + +@type method + +@param , character, Nível do item. +@param , character, ID que identificará este item. +@param , character, Compatibilidade. Configure sempre com aspas "". +@param , character, Descrição que será apresentada no item. Para mais de uma coluna utilize valores separados por ponto e vírgula.\* +@param , character, Imagem quando o item da árvore estiver fechado. +@param , character, Imagem quando o item da árvore estiver aberto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ptaddnodes +/*/ +method ptaddnodes(cnivel, ciditem, cparam3, cprompt, cfile1, cfile2) class ttree +return +/*/{Protheus.doc} ttree:ptsendnodes +Envia um array pré-definido de itens juntamente com um possível buffer já carregado anteriormente para a árvore. + +@type method + +@param [anodes], array, Indica o array pré-definido com informações para criar a árvore. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ptsendnodes +/*/ +method ptsendnodes(anodes) class ttree +return +/*/{Protheus.doc} ttree:ptaddarraynodes +Adiciona um array pré-definido de itens no buffer para posteriormente ser enviado à árvore. + +@type method + +@param , array, Indica o array pré-definido com informações para criar a árvore. Para mais informações referente ao formato do array, consulte a área Observações abaixo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ptaddarraynodes +/*/ +method ptaddarraynodes(anodes) class ttree +return +/*/{Protheus.doc} ttree:ptsendtree +Envia um array pré-definido de itens juntamente com um possível buffer já carregado anteriormente para a árvore. + +@type method + +@param , array, Indica o array pré-definido com informações para criar a árvore. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ptsendtree +/*/ +method ptsendtree(anodes) class ttree +return +/*/{Protheus.doc} ttree:endupdate +Encerra a criação dos itens. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/endupdate +/*/ +method endupdate() class ttree +return +/*/{Protheus.doc} ttree:ptgetprompt +Retorna a descrição do item selecionado. + +@type method + +@return character, Retorna a descrição do item selecionado. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ptgetprompt +/*/ +method ptgetprompt() class ttree +return +/*/{Protheus.doc} ttree:ptgetnodecount +Retorna o número de itens na árvore. + +@type method + +@return numeric, Retorna o número de itens na árvore. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ptgetnodecount +/*/ +method ptgetnodecount() class ttree +return +/*/{Protheus.doc} ttree:ptgetnivel +Retorna o nível do item selecionado. + +@type method + +@return numeric, Retorna o nível do item selecionado, sendo que um item raiz será nível 1, seus filhos nível 2 e assim sucessivamente. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ptgetnivel +/*/ +method ptgetnivel() class ttree +return +/*/{Protheus.doc} ttree:ptcollapse +Contrai o item selecionado ocultando seus subitens. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ptcollapse +/*/ +method ptcollapse() class ttree +return +/*/{Protheus.doc} ttree:ptgototonode +Localiza e seleciona um determinado item. + +@type method + +@param , character, ID que identifica o item a ser localizado e selecionado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ptgototonode +/*/ +method ptgototonode(ciditem) class ttree +return +/*/{Protheus.doc} ttree:ptdeletecurrentnode +Exclui o item selecionado e, consequentemente, todos os seus subitens. + +@type method + +@return character, Retorna o ID que identifica o novo item selecionado automaticamente após exclusão. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ptdeletecurrentnode +/*/ +method ptdeletecurrentnode() class ttree +return +/*/{Protheus.doc} ttree:ptchangeprompt +Altera a descrição de um item da árvore. + +@type method + +@param , character, Indica a nova descrição do item. Para mais de uma coluna utilize valores separados por ponto e vírgula.\* +@param , character, Indica a chave de identificação do item na árvore. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ptchangeprompt +/*/ +method ptchangeprompt(cprompt, ciditem) class ttree +return +/*/{Protheus.doc} ttree:ptchangebmp +Altera as imagens definidas para um item da árvore. + +@type method + +@param , character, Imagem quando o item da árvore estiver fechado. +@param , character, Imagem quando o item da árvore estiver aberto. +@param , character, Indica a chave de identificação do item na árvore. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ptchangebmp +/*/ +method ptchangebmp(cfile1, cfile2, ciditem) class ttree +return +/*/{Protheus.doc} ttree:setscroll +Define a barra de rolagem da árvore. + +@type method + +@param , numeric, Indica o tipo \(1 = horizontal e 2 = vertical\) da barra de rolagem. +@param , logical, Indica se habilita \(.T.\) ou desabilita \(.F.\) a barra de rolagem. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setscroll +/*/ +method setscroll(ntipo, lhabilita) class ttree +return +/*/{Protheus.doc} ttree:ptreset +Limpa todos os itens da árvore. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ptreset +/*/ +method ptreset() class ttree +return +/*/{Protheus.doc} ttree:setflags +Habilita/Desabilita certas funcionalidades do componente. + +@type method + +@param , numeric, Valor que representa a\(s\) funcionalidade\(s\) a ser\(em\) habilitada\(s\). Valores de flags podem ser somados para que mais de uma funcionalidade seja habilitada ao mesmo tempo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setflags +/*/ +method setflags(nflags) class ttree +return +/*/{Protheus.doc} ttree:setcolwidth +Define a largura de uma coluna. + +@type method + +@param , numeric, Número da coluna a ser alterada \(começando por 1\). +@param , numeric, Tamanho em píxels da largura a ser definida para a coluna. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcolwidth +/*/ +method setcolwidth(ncol, nwidth) class ttree +return +/*/{Protheus.doc} ttree:setcolsalign +Define o alinhamento das informações nas colunas. + +@type method + +@param , array, Array contendo informações sobre a coluna desejada e seu novo alinhamento no formato: \{\{coluna, alinhamento\}, \{coluna, alinhamento\}\}. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcolsalign +/*/ +method setcolsalign(ainfo) class ttree +return + + +/*/{Protheus.doc} twebchannel +Cria um objeto para comunicação entre o SmartClient e o Componente TWebEngine através do protocolo WebSocket. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/twebchannel + +/*/ +class twebchannel +data lconnected as logical +data bjstoadvpl as codeblock +data nport as numeric +method new() +method connect() +method disconnect() +method advpltojs() +end class +/*/{Protheus.doc} twebchannel:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TWebChannel + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new() class twebchannel +return +/*/{Protheus.doc} twebchannel:connect +Executa a conexão entre o Navegador \(TWebEngine\) e o SmartClient. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/connect +/*/ +method connect() class twebchannel +return +/*/{Protheus.doc} twebchannel:disconnect +Executa a desconexão entre o Navegador \(TWebEngine\) e o SmartClient. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/disconnect +/*/ +method disconnect() class twebchannel +return +/*/{Protheus.doc} twebchannel:advpltojs +Executa o envio de informações para a pagina HTML carregada no componente TWebEngine que esta configurado para a Porta do TWebChannel. Assim é possivel, por exemplo, injetar um trecho JavaScript na página via ADVPL. + +@type method + +@param , character, Indica o tipo de mensagem que será enviada à página HTML. +@param , character, Indica o conteudo que será enviado à pagina HTML. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/advpltojs +/*/ +method advpltojs(ccodetype, ccontent) class twebchannel +return + + +/*/{Protheus.doc} twebengine +Cria um objeto para manipular uma página HTML, trocando informações em tempo real entre o SmartClient e o Navegador através do protocolo WebSocket. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/twebengine + +/*/ +class twebengine from TControl +data curl as character +data bloadfinished as codeblock +data bdlstatus as codeblock +data clang as character +data bjsconmsg as codeblock +method new() +method navigate() +method runjavascript() +method goback() +method goforward() +method setasmain() +method sethtml() +method clearcache() +method reload() +end class +/*/{Protheus.doc} twebengine:new +M�todo construtor da classe. + +@type method + +@return object, Nova instância da classe TWebEngine + +@param [ownd], object, Indica a janela ou controle visual onde o objeto será criado. +@param [nrow], numeric, Indica a coordenada vertical em pixels ou caracteres. +@param [ncol], numeric, Indica a coordenada horizontal em pixels ou caracteres. +@param [nwidth], numeric, Indica a largura em pixels do objeto. +@param [nheight], numeric, Indica a altura em pixels do objeto. +@param [curl], character, Indica a URL a ser executada, em schemas como: http:// https:// ou file:// +@param [nport], numeric, Porta do WebSocket para comunicação entre o Navegador e o SmartClient +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ownd, nrow, ncol, nwidth, nheight, curl, nport) class twebengine +return +/*/{Protheus.doc} twebengine:navigate +Executa a navegação para URL selecionada + +@type method + +@param , character, Indica a URL a ser executada, em schemas como: http:// https:// ou file:// +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/navigate +/*/ +method navigate(curl) class twebengine +return +/*/{Protheus.doc} twebengine:runjavascript +Executa uma instrução JavaScript na página carregada. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/runjavascript +/*/ +method runjavascript() class twebengine +return +/*/{Protheus.doc} twebengine:goback +Retorno à página anterior, caso exista. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/goback +/*/ +method goback() class twebengine +return +/*/{Protheus.doc} twebengine:goforward +Avança para página posterior, caso exista. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/goforward +/*/ +method goforward() class twebengine +return +/*/{Protheus.doc} twebengine:setasmain +Indica ao SmartClient que o navegador em questão será o principal, recebendo a intrução para executar o comando goBack\(\) através da tecla KEY_BACK do dipositivo Móvel.. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setasmain +/*/ +method setasmain() class twebengine +return +/*/{Protheus.doc} twebengine:sethtml +Renderiza e exibe o código HTML informado. + +@type method + +@param , character, Deve conter o código HTML. +@param [cbaseurl], character, Usado para resolver URLs relativas no documento, como imagens referenciadas ou folhas de estilo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/sethtml +/*/ +method sethtml(chtml, cbaseurl) class twebengine +return +/*/{Protheus.doc} twebengine:clearcache +Limpa o cache de navegação. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/clearcache +/*/ +method clearcache() class twebengine +return +/*/{Protheus.doc} twebengine:reload +Recarrega a página corrente. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/reload +/*/ +method reload() class twebengine +return + + +/*/{Protheus.doc} twindow +Cria a janela principal do programa. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/twindow + +/*/ +class twindow from TSrvObject +data bstart as codeblock +data omenu as object +data lescclose as logical +data nresult as numeric +data bwindowstate as codeblock +data bfocuschange as codeblock +method new() +method activate() +method center() +method commitcontrols() +method ctrlrefresh() +method end() +method hasfocus() +method setmenu() +method windowstate() +end class +/*/{Protheus.doc} twindow:new +Método construtor da classe. + +@type method + +@return object, Nova instância da classe TWindow + +@param [ntop], numeric, Indica a coordenada vertical superior em pixels ou caracteres. +@param [nleft], numeric, Indica a coordenada horizontal esquerda em pixels ou caracteres. +@param [nbottom], numeric, Indica a coordenada vertical inferior em pixels ou caracteres. +@param [nright], numeric, Indica a coordenada horizontal direita em pixels ou caracteres. +@param [ctitle], character, Indica o título da janela. +@param [uparam6], numeric, Compatibility parameter. Pass NIL. +@param [uparam7], object, Compatibility parameter. Pass NIL. +@param [uparam8], object, Compatibility parameter. Pass NIL. +@param [uparam9], object, Compatibility parameter. Pass NIL. +@param [oparent], object, Indica a janela mãe \(principal\) da janela corrente. +@param [uparam11], logical, Compatibility parameter. Pass NIL. +@param [uparam12], logical, Compatibility parameter. Pass NIL. +@param [nclrfore], numeric, Indica a cor do texto da janela. +@param [nclrback], numeric, Indica a cor do fundo da janela. +@param [uparam15], object, Compatibility parameter. Pass NIL. +@param [uparam16], character, Compatibility parameter. Pass NIL. +@param [uparam17], logical, Compatibility parameter. Pass NIL. +@param [uparam18], logical, Compatibility parameter. Pass NIL. +@param [uparam19], logical, Compatibility parameter. Pass NIL. +@param [uparam20], logical, Compatibility parameter. Pass NIL. +@param [lpixel], logical, Indica se considera as coordenadas passadas em pixels \(.T.\) ou caracteres \(.F.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new(ntop, nleft, nbottom, nright, ctitle, uparam6, uparam7, uparam8, uparam9, oparent, uparam11, uparam12, nclrfore, nclrback, uparam15, uparam16, uparam17, uparam18, uparam19, uparam20, lpixel) class twindow +return +/*/{Protheus.doc} twindow:activate +Apresenta a janela. + +@type method + +@param [cshow], character, Indica se a janela será minimizada \(Iconized\) ou maximizada \(Maximized\). +@param [uparam2], codeblock, Compatibility parameter. Pass NIL. +@param [uparam3], codeblock, Compatibility parameter. Pass NIL. +@param [uparam4], codeblock, Compatibility parameter. Pass NIL. +@param [uparam5], codeblock, Compatibility parameter. Pass NIL. +@param [uparam6], codeblock, Compatibility parameter. Pass NIL. +@param [uparam7], codeblock, Compatibility parameter. Pass NIL. +@param [uparam8], codeblock, Compatibility parameter. Pass NIL. +@param [uparam9], codeblock, Compatibility parameter. Pass NIL. +@param [uparam10], codeblock, Compatibility parameter. Pass NIL. +@param [uparam11], codeblock, Compatibility parameter. Pass NIL. +@param [uparam12], codeblock, Compatibility parameter. Pass NIL. +@param [uparam13], codeblock, Compatibility parameter. Pass NIL. +@param [uparam14], codeblock, Compatibility parameter. Pass NIL. +@param [uparam15], codeblock, Compatibility parameter. Pass NIL. +@param [uparam16], codeblock, Compatibility parameter. Pass NIL. +@param [uparam17], codeblock, Compatibility parameter. Pass NIL. +@param [uparam18], codeblock, Compatibility parameter. Pass NIL. +@param [uparam19], codeblock, Compatibility parameter. Pass NIL. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/activate +/*/ +method activate(cshow, uparam2, uparam3, uparam4, uparam5, uparam6, uparam7, uparam8, uparam9, uparam10, uparam11, uparam12, uparam13, uparam14, uparam15, uparam16, uparam17, uparam18, uparam19) class twindow +return +/*/{Protheus.doc} twindow:center +Centraliza a janela. + +@type method + +@param [lcenter], logical, Define se a janela será centralizada ou não. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/center +/*/ +method center(lcenter) class twindow +return +/*/{Protheus.doc} twindow:commitcontrols +Força a atualização da informação contida no componente atualmente com foco entre o SmartClient e o AppServer. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/commitcontrols +/*/ +method commitcontrols() class twindow +return +/*/{Protheus.doc} twindow:ctrlrefresh +Força a atualização do objeto. + +@type method + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ctrlrefresh +/*/ +method ctrlrefresh() class twindow +return +/*/{Protheus.doc} twindow:end +Finaliza a janela. + +@type method + +@return logical, Retorna verdadeiro \(.T.\) se finalizar a janela. Caso contrário, retorna falso \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/end +/*/ +method end() class twindow +return +/*/{Protheus.doc} twindow:hasfocus +Indica se a janela esta em foco. + +@type method + +@return logical, Retorna verdadeiro \(.T.\) se o componente está em foco. Caso contrário, falso \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hasfocus +/*/ +method hasfocus() class twindow +return +/*/{Protheus.doc} twindow:setmenu +Define o objeto que será o menu da janela. + +@type method + +@param [omenu], object, Indica o objeto do tipo TMenuBar que será criado no controle visual. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setmenu +/*/ +method setmenu(omenu) class twindow +return +/*/{Protheus.doc} twindow:windowstate +Indica o estado atual do componente. + +@type method + +@return numeric, Retorna um número inteiro indicando o estado atual do componente, sendo: 0=Restaurado 1=Minimizado 2=Maximizado + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/windowstate +/*/ +method windowstate() class twindow +return + + +/*/{Protheus.doc} twsdlmanager +A classe TWsdlManager faz o tratamento para arquivos WSDL \(Web Services Description Language\). Esta classe implementa métodos para identificação das informações de envio e resposta das operações definidas, além de métodos para envio e recebimento do documento SOAP. + +@type binary class + + + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/twsdlmanager + +/*/ +class twsdlmanager +data lverbose as logical +data lstatus as logical +data lrememptytags as logical +data lenableoptattr as logical +data ccurrentoperation as character +data ntimeout as numeric +data nconnecttimeout as numeric +data lprocresp as logical +data cerror as character +data cfaultcode as character +data cfaultsubcode as character +data cfaultstring as character +data cfaultactor as character +data clocation as character +data nsslversion as numeric +data csslcacertfile as character +data csslcertfile as character +data csslkeyfile as character +data csslkeypwd as character +data lusensprefix as logical +data lcheckinput as logical +data lcompressed as logical +data lsslinsecure as logical +data lalwayssendsa as logical +method new() +method parsefile() +method parseurl() +method listoperations() +method setoperation() +method getwsdldoc() +method simpleinput() +method complexinput() +method simpleoutput() +method complexoutput() +method simplefault() +method complexfault() +method setcomplexoccurs() +method setvalue() +method setvalues() +method setfirst() +method setfirstarray() +method setvalpar() +method setvalpararray() +method addhttpheader() +method setwssheader() +method getsoapmsg() +method sendsoapmsg() +method getsoapresponse() +method getparsedresponse() +method setproxy() +method getproxy() +method setcredentials() +method getcredentials() +method setauthentication() +method getauthentication() +method nextcomplex() +method getservices() +method getports() +method setport() +end class +/*/{Protheus.doc} twsdlmanager:new +Cria uma nova instância da classe TWsdlManager. + +@type method + +@return object, Nova instância da classe TWsdlManager + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/new +/*/ +method new() class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:parsefile +Realiza o parse de um arquivo WSDL através do parâmetro recebido indicando o local do mesmo. + +@type method + +@return logical, Retorna verdadeiro \(.T.\) caso tenha sido realizado o parse com sucesso. Falso \(.F.\) caso contrário. + +@param , character, Indica o diretório, a partir do rootpath, e o nome de um arquivo WSDL. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/parsefile +/*/ +method parsefile(cfile) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:parseurl +Realiza o parse de uma URL que aponta para um arquivo WSDL através do parâmetro recebido indicando o local do mesmo. + +@type method + +@return logical, Retorna verdadeiro \(.T.\) caso tenha sido realizado o parse com sucesso. Falso \(.F.\) caso contrário. + +@param , character, Indica a URL apontando para um arquivo WSDL. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/parseurl +/*/ +method parseurl(curl) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:listoperations +Lista as operações disponibilizadas pelo WebService através do documento WSDL. + +@type method + +@return array, Retorna um array com as operações disponibilizadas. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/listoperations +/*/ +method listoperations() class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:setoperation +O método define a operação que será realizada. + +@type method + +@return logical, Verdadeiro \(.T.\) caso consiga definir; falso \(.F.\) caso contrário. + +@param , character, Nome da operação que será realizada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setoperation +/*/ +method setoperation(coperation) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:getwsdldoc +Retorna a documentação do documento WSDL. + +@type method + +@return character, Retorna a documentação do documento WSDL ou uma string vazia caso não exista. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getwsdldoc +/*/ +method getwsdldoc() class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:simpleinput +Retorna os tipos simples utilizados na mensagem do tipo input para a operação definida. + +@type method + +@return array, Retorna um array contendo os tipos simples da mensagem do tipo input da operação atual. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/simpleinput +/*/ +method simpleinput() class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:complexinput +Retorna os tipos complexos utilizados na mensagem do tipo input para a operação definida que possuem número variável de ocorrências \(minOccurs < maxOccurs\). + +@type method + +@return array, Retorna um array contendo os tipos complexos da mensagem do tipo input da operação atual com número variável de ocorrências. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/complexinput +/*/ +method complexinput() class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:simpleoutput +Retorna os tipos simples utilizados na mensagem do tipo output para a operação definida. + +@type method + +@return array, Retorna um array contendo os tipos simples da mensagem do tipo output da operação atual. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/simpleoutput +/*/ +method simpleoutput() class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:complexoutput +Retorna os tipos complexos utilizados na mensagem do tipo output para a operação definida. + +@type method + +@return array, Retorna um array contendo os tipos complexos da mensagem do tipo output da operação atual. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/complexoutput +/*/ +method complexoutput() class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:simplefault +Retorna os tipos simples utilizados em mensagens do tipo fault para a operação definida. + +@type method + +@return array, Retorna um array contendo os tipos simples das mensagens do tipo fault da operação atual. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/simplefault +/*/ +method simplefault() class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:complexfault +Retorna os tipos complexos utilizados em mensagens do tipo fault para a operação definida. + +@type method + +@return array, Retorna um array contendo os tipos complexos das mensagens do tipo fault da operação atual. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/complexfault +/*/ +method complexfault() class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:setcomplexoccurs +O método define o número de vezes que um elemento do tipo complexo vai aparecer. + +@type method + +@return logical, Verdadeiro \(.T.\) caso consiga definir. Falso \(.F.\) caso contrário. + +@param , numeric, ID do elemento igual ao informado pelo método [NextComplex](TWsdlManager:NextComplex). +@param , numeric, Quantidade de vezes que o elemento vai aparecer. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcomplexoccurs +/*/ +method setcomplexoccurs(nid, nvalue) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:setvalue +O método define o valor de entrada para um elemento do tipo simples do WSDL. + +@type method + +@return logical, Verdadeiro \(.T.\) caso consiga definir; falso \(.F.\) caso contrário. + +@param , numeric, ID do elemento igual ao informado pela função [SimpleInput](TWsdlManager:SimpleInput). +@param , character, Valor para esse elemento. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setvalue +/*/ +method setvalue(nid, cvalue) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:setvalues +O método define um vetor de valores de entrada para um elemento do tipo simples do WSDL. + +@type method + +@return logical, Verdadeiro \(.T.\) caso consiga definir; falso \(.F.\) caso contrário. + +@param , numeric, ID do elemento igual ao informada pela função [SimpleInput](TWsdlManager:SimpleInput). +@param , array, Vetor de valores para esse elemento. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setvalues +/*/ +method setvalues(nid, avalues) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:setfirst +O método define o valor de entrada para a primeira ocorrência de um elemento do tipo simples do WSDL. + +@type method + +@return logical, Verdadeiro \(.T.\) caso consiga definir; falso \(.F.\) caso contrário. + +@param , character, Nome do elemento igual ao informado pela função [SimpleInput](TWsdlManager:SimpleInput). +@param , character, Valor para esse elemento. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setfirst +/*/ +method setfirst(cname, cvalue) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:setfirstarray +O método define um vetor de valores de entrada para a primeira ocorrência de um elemento do tipo simples do WSDL. + +@type method + +@return logical, Verdadeiro \(.T.\) caso consiga definir; falso \(.F.\) caso contrário. + +@param , character, Nome do elemento igual ao informado pela função [SimpleInput](TWsdlManager:SimpleInput). +@param , array, Vetor de valores para esse elemento. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setfirstarray +/*/ +method setfirstarray(cname, avalues) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:setvalpar +O método define o valor de entrada para um elemento do tipo simples do WSDL, dado os elementos pais. + +@type method + +@return logical, Verdadeiro \(.T.\) caso consiga definir; falso \(.F.\) caso contrário. + +@param , character, Nome do elemento igual ao informado pela função [SimpleInput](TWsdlManager:SimpleInput). +@param , array, Vetor com os nomes dos elementos pais de **cName**. +@param , character, Valor para esse elemento. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setvalpar +/*/ +method setvalpar(cname, aparents, cvalue) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:setvalpararray +O método define um vetor de valores de entrada para um elemento do tipo simples do WSDL, dado os elementos pais. + +@type method + +@return logical, Verdadeiro \(.T.\) caso consiga definir; falso \(.F.\) caso contrário. + +@param , character, Nome do elemento igual ao informado pela função [SimpleInput](TWsdlManager:SimpleInput). +@param , array, Vetor com os elementos pais de **cName**. +@param , array, Vetor de valores para esse elemento. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setvalpararray +/*/ +method setvalpararray(cname, aparents, avalues) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:addhttpheader +O método adiciona um cabeçalho HTTP à lista de cabeçalhos que serão enviados na mensagem SOAP destinada ao servidor WSDL. + +@type method + +@return logical, Verdadeiro \(.T.\) caso consiga adicionar. Falso \(.F.\) caso contrário. + +@param , character, Nome do cabeçalho que será adicionado. +@param , character, Valor do cabeçalho que será adicionado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addhttpheader +/*/ +method addhttpheader(cname, cvalue) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:setwssheader +O método adiciona ao cabeçalho da mensagem SOAP uma string contendo as tags de cabeçalho WS-Security. + +@type method + +@param , character, Conteúdo que será inserido no cabeçalho da mensagem SOAP, exatamente como for passado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setwssheader +/*/ +method setwssheader(cheader) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:getsoapmsg +Retorna o documento SOAP que será enviado ao servidor. + +@type method + +@return character, Retorna o documento SOAP que será enviado ao servidor. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getsoapmsg +/*/ +method getsoapmsg() class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:sendsoapmsg +Envio o documento SOAP gerado ao endereço definido. + +@type method + +@return logical, Verdadeiro \(.T.\) caso consiga enviar o documento e receber a reposta do servidor. Falso \(.F.\) caso contrário. + +@param [cmsg], character, Indica a mensagem SOAP que será enviada, ao invés da mensagem gerada pela classe usando os valores que foram definidos. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/sendsoapmsg +/*/ +method sendsoapmsg(cmsg) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:getsoapresponse +Retorna o documento SOAP de resposta recebido do servidor. + +@type method + +@return character, Retorna o documento SOAP de resposta recebido do servidor. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getsoapresponse +/*/ +method getsoapresponse() class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:getparsedresponse +Retorna uma string contendo a mensagem SOAP de resposta parseada. + +@type method + +@return character, Retorna uma string contendo a mensagem SOAP de resposta parseada. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getparsedresponse +/*/ +method getparsedresponse() class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:setproxy +Define o host e porta do proxy para fazer a conexão HTTP. + +@type method + +@param , character, Indica o host do proxy para fazer a conexão HTTP. +@param , numeric, Indica a porta do proxy para fazer a conexão HTTP. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setproxy +/*/ +method setproxy(chost, nport) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:getproxy +Retorna o host e porta do proxy para fazer a conexão HTTP. + +@type method + +@return logical, Retorna se o proxy está habilitado \(.T.\) ou não \(.F.\). + +@param <@chost>, character, Indica o host do proxy para fazer a conexão HTTP. +@param <@nport>, numeric, Indica a porta do proxy para fazer a conexão HTTP. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getproxy +/*/ +method getproxy(chost, nport) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:setcredentials +Define o usuário e senha do proxy para fazer a conexão HTTP. + +@type method + +@param , character, Indica o usuário do proxy para fazer a conexão HTTP. +@param , character, Indica a senha do proxy para fazer a conexão HTTP. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcredentials +/*/ +method setcredentials(cuser, cpass) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:getcredentials +Retorna o usuário e senha do proxy para fazer a conexão HTTP. + +@type method + +@return logical, Retorna se o proxy está habilitado \(.T.\) ou não \(.F.\). + +@param <@cuser>, character, Indica o usuário do proxy para fazer a conexão HTTP. +@param <@cpass>, character, Indica a senha do proxy para fazer a conexão HTTP. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getcredentials +/*/ +method getcredentials(cuser, cpass) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:setauthentication +Define o usuário e senha usados para fazer autenticação HTTP. + +@type method + +@param , character, Indica o usuário usado para fazer autenticação HTTP. +@param , character, Indica a senha usada para fazer autenticação HTTP. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setauthentication +/*/ +method setauthentication(cuser, cpass) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:getauthentication +Retorna o usuário e senha usados para fazer autenticação HTTP. + +@type method + +@return logical, Retorna se a autenticação HTTP está habilitada \(.T.\) ou não \(.F.\). + +@param <@cuser>, character, Indica o usuário usado para fazer autenticação HTTP. +@param <@cpass>, character, Indica a senha usada para fazer autenticação HTTP. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getauthentication +/*/ +method getauthentication(cuser, cpass) class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:nextcomplex +Retorna o elemento de tipo complexo que necessita definir o número de ocorrências \(minOccurs < maxOccurs\). Esse método deve ser chamado enquanto retornar um array com os dados do elemento complexo, e logo após deve ser chamado o método [SetComplexOccurs](TWsdlManager:SetComplexOccurs), definido o número de ocorrências do elemento. + +@type method + +@return array, Retorna um array contendo os dados do elemento de tipo complexo da mensagem da operação atual com número variável de ocorrências. Em caso de não ter mais elementos complexos a serem definidos, ou não ter algum elemento complexo que necessite de definição do número de ocorrências, o método retorna **Nil**. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/nextcomplex +/*/ +method nextcomplex() class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:getservices +Retorna a lista de serviços disponíveis no Web Service. + +@type method + +@return array, Retorna um array contendo o nome dos serviços declarados no Web Service. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getservices +/*/ +method getservices() class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:getports +Retorna a lista de ports declarados apara o primeiro serviço do Web Service. + +@type method + +@return array, Retorna um array contendo as informações de cada port do primeiro serviço do Web Service. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getports +/*/ +method getports() class twsdlmanager +return +/*/{Protheus.doc} twsdlmanager:setport +Define o port ativo para o primeiro serviço disponível no Web Service. + +@type method + +@return logical, Retorna verdadeiro \(.T.\) se o port foi ativo com sucesso; caso contrário, retorna falso \(.F.\). + +@param , character, Indica o nome do port que será atvio. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setport +/*/ +method setport(cport) class twsdlmanager +return + + diff --git a/compras_digital/.vscode/.advpl/_binary_functions.prw b/compras_digital/.vscode/.advpl/_binary_functions.prw new file mode 100644 index 0000000..b1ad9a1 --- /dev/null +++ b/compras_digital/.vscode/.advpl/_binary_functions.prw @@ -0,0 +1,9808 @@ +#include "protheus.ch" +#xtranslate binary function => function x_ + +/*/{Protheus.doc} changequery +Esta função tem como objetivo retornar uma query modificada de acordo a escrita adequada para o banco de dados em uso. + +@type binary function +@sintax ChangeQuery() => character +@return character, String contendo a query com os ajustes e compatibilizações necessárias para ser executada execução através da conexão com o SGDB atual. + +@param , character, String contendo query de consulta de dados \( SELECT \) a ser avaliado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/changequery +/*/ +binary function changequery(cquery) +return + + +/*/{Protheus.doc} dbapp +Esta função faz migração de dados de uma tabela/arquivo para tabela/arquivo + +@type binary function +@sintax DBApp(, [aFields], [bFirstCondition], [bSecondCondition], [nCount], [nRecno], [xRest], [cRDD]) => Nil +@return Nil, Sempre retorna nulo. + +@param , character, String contendo o nome da tabela origem. +@param [afields], array, Array com campos TODO. +@param [bfirstcondition], codeblock, Primeiro Code Block com condição para inserir registro. +@param [bsecondcondition], codeblock, Segundo Code Block com condição para inserir registro. +@param [ncount], numeric, Numero maximo de registros a ser processado. +@param [nrecno], numeric, Unico registro a ser processado. +@param [xrest], variant, Compatibilidade. +@param [crdd], character, RDD utilizado para abertura da tabela cSource. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbapp +/*/ +binary function dbapp(csource, afields, bfirstcondition, bsecondcondition, ncount, nrecno, xrest, crdd) +return + + +/*/{Protheus.doc} dbcopy +Esta função cria a tabela com a estrutura e dados da tabela corrente. + +@type binary function +@sintax DBCopy(, [aFields], [bFirstCondition], [bSecondCondition], [nCount], [nRecno], [xRest], [cRDD]) => Nil +@return Nil, Sempre retorna nulo. + +@param , character, String contendo o nome da nova tabela. +@param [afields], array, Array com campos para ser criados. +@param [bfirstcondition], codeblock, Primeiro Code Block com condição para inserir registro. +@param [bsecondcondition], codeblock, Segundo Code Block com condição para inserir registro. +@param [ncount], numeric, Numero maximo de registros a ser processado. +@param [nrecno], numeric, Unico registro a ser processado. +@param [xrest], logical, Compatibilidade. +@param [crdd], character, RDD utilizado para abertura da tabela cSource. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbcopy +/*/ +binary function dbcopy(cfile, afields, bfirstcondition, bsecondcondition, ncount, nrecno, xrest, crdd) +return + + +/*/{Protheus.doc} dbdelim +Esta função cria um arquivo no Local File com a estrutura e dados da tabela corrente. + +@type binary function +@sintax DBDelim(, , [cDelim], [aFields], [bFirstCondition], [bSecondCondition], [nCount], [nRecno], [lRest]) => Nil +@return Nil, Sempre retorna nulo. + +@param , logical, Realizar a cópia ou não +@param , character, String contendo o diretorio e nome do arquivo aonde será salvo +@param [cdelim], character, Delimitador +@param [afields], array, Array com campos para ser criados. +@param [bfirstcondition], codeblock, Primeiro Code Block com condição para inserir registro. +@param [bsecondcondition], codeblock, Segundo Code Block com condição para inserir registro. +@param [ncount], numeric, Numero maximo de registros a ser processado. +@param [nrecno], numeric, Unico registro a ser processado. +@param [lrest], logical, Compatibilidade. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbdelim +/*/ +binary function dbdelim(lcopy, cfile, cdelim, afields, bfirstcondition, bsecondcondition, ncount, nrecno, lrest) +return + + +/*/{Protheus.doc} dblocate1 +Esta função seleciona o recno dependendo das condições passadas. + +@type binary function +@sintax DBLocate1([bFirstCondition], [bSecondCondition], [nCount], [xRecno], [lRest]) => Nil +@return Nil, Sempre retorna nulo. + +@param [bfirstcondition], codeblock, Primeiro Code Block com condição para encontrar o registro. +@param [bsecondcondition], codeblock, Segundo Code Block com condição para encontrar o registro. +@param [ncount], numeric, Numero maximo de registros a ser processado. +@param [xrecno], variant, Unico registro a ser processado. +@param [lrest], logical, Compatibilidade. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dblocate1 +/*/ +binary function dblocate1(bfirstcondition, bsecondcondition, ncount, xrecno, lrest) +return + + +/*/{Protheus.doc} dbsdf +Esta função cria um arquivo no Local File com a estrutura e dados da tabela corrente. + +@type binary function +@sintax DBSdf(, , [aFields], [bFirstCondition], [bSecondCondition], [nCount], [nRecno], [lRest]) => Nil +@return Nil, Sempre retorna nulo. + +@param , logical, Realizar a cópia ou não +@param , character, String contendo o diretorio e nome do arquivo aonde será salvo +@param [afields], array, Array com campos para ser criados. +@param [bfirstcondition], codeblock, Primeiro Code Block com condição para inserir registro. +@param [bsecondcondition], codeblock, Segundo Code Block com condição para inserir registro. +@param [ncount], numeric, Numero maximo de registros a ser processado. +@param [nrecno], numeric, Unico registro a ser processado. +@param [lrest], logical, Compatibilidade. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbsdf +/*/ +binary function dbsdf(lcopy, cfile, afields, bfirstcondition, bsecondcondition, ncount, nrecno, lrest) +return + + +/*/{Protheus.doc} dbzap +Exclui todos os registros da tabela/arquivo. + +@type binary function +@sintax DBZap() => Nil +@return Nil, Retorno sempre é nulo. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbzap +/*/ +binary function dbzap() +return + + +/*/{Protheus.doc} hextodec +Converte um número da base hexadecimal para base decimal. + +@type binary function +@sintax hextodec([cHex]) => numeric +@return numeric, Retorna um número em base decimal + +@param [chex], character, Valor hexadecimal a ser convertido +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hextodec +/*/ +binary function hextodec(chex) +return + + +/*/{Protheus.doc} dbskipper +Desloca para outro registro da tabela/arquivo. + +@type binary function +@sintax DBSkipper([nCount]) => numeric +@return numeric, Retorno a quantidade de registros deslocados. + +@param [ncount], numeric, Numero maximo de registros a ser deslocados \(Pode ser numero negativo\) +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbskipper +/*/ +binary function dbskipper(ncount) +return + + +/*/{Protheus.doc} aadd +Inclui um elemento no array e ao elemento, do array recém-criado, é atribuído o valor especificado por parâmetro. + +@type binary function +@sintax AAdd(, ) => variant +@return variant, Retorna o valor especificado em <**xExpr**>. + +@param , array, Indica o array que receberá o novo elemento. +@param , variant, Indica uma expressão válida que será o valor do novo elemento. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/aadd +/*/ +binary function aadd(adest, xexpr) +return + + +/*/{Protheus.doc} ablavailable +descrição da funcao + +@type binary function +@sintax AblAvailable([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ablavailable +/*/ +binary function ablavailable(tnomevar) +return + + +/*/{Protheus.doc} abs +Retorna o valor absoluto \(independente do sinal\) de uma expressão numérica. + +@type binary function +@sintax Abs() => numeric +@return numeric, Retorna um número que representa o valor absoluto da expressão informada. O valor será um número positivo ou zero. + +@param , numeric, Indica a expressão que será avaliada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/abs +/*/ +binary function abs(nexp) +return + + +/*/{Protheus.doc} acopy +Copia elementos de um array para outro. + +@type binary function +@sintax ACopy(, , [nInicio], [nCont], [nPosDestino]) => array +@return array, Retorna uma referência do array aDestino. + +@param , array, Indica o array onde estão os elementos que serão copiados. +@param , array, Indica o array de destino onde os elementos serão copiados. +@param [ninicio], numeric, Indica o elemento inicial do array aOrigem a partir do qual os conteúdos serão copiados. Caso não seja especificado, o valor padrão será um \(1\). +@param [ncont], numeric, Indica a quantidade de elementos que serão copiados do array a partir do nInicio. Caso não seja especificado, será copiado do nInicio até o último elemento. +@param [nposdestino], numeric, Indica a partir de qual posição do array aDestino os elementos serão copiados. Caso não seja especificado, o valor padrão é um \(1\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/acopy +/*/ +binary function acopy(aorigem, adestino, ninicio, ncont, nposdestino) +return + + +/*/{Protheus.doc} acos +Calcula o valor em radianos do arco cosseno de um valor que representa o cosseno de um ângulo. + +@type binary function +@sintax ACos() => numeric +@return numeric, Retorna um valor entre 0 e PI radianos. + +@param , numeric, Indica o valor que representa o cosseno de um ângulo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/acos +/*/ +binary function acos(ncos) +return + + +/*/{Protheus.doc} addcssrule +descrição da funcao + +@type binary function +@sintax addcssrule([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addcssrule +/*/ +binary function addcssrule(tnomevar) +return + + +/*/{Protheus.doc} addfontalias +descrição da funcao + +@type binary function +@sintax addfontalias([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/addfontalias +/*/ +binary function addfontalias(tnomevar) +return + + +/*/{Protheus.doc} adel +Elimina um elemento do array e "arrasta" os demais para trás tornando nulo o último elemento. + +@type binary function +@sintax ADel(, ) => array +@return array, Retorna o array especificado em <**aSource**>. + +@param , array, Indica o array que contém um elemento para ser eliminado. +@param , numeric, Indica a posição do elemento no array, a partir do primeiro, que será eliminado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/adel +/*/ +binary function adel(asource, npos) +return + + +/*/{Protheus.doc} adir +Preenche uma série de arrays com informações de arquivos e diretórios \(nomes de arquivos, tamanhos, datas, horas e atributos\). + +@type binary function +@sintax ADir([cEspecArq], [@aNomesArq], [@aTamanhos], [@aDatas], [@aHoras], [@aAtributos], [lChangeCase]) => numeric +@return numeric, Retorna a quantidade de arquivos encontrados que correspondem à máscara de pesquisa no diretório especificado. + +@param [cespecarq], character, Indica o path e máscara de arquivos a ser pesquisado. Para isso, pode-se incluir caracteres do tipo curinga \* e ?, como também se referenciar ao diretório ou path. Caso nada seja especificado, o parâmetro assumirá como padrão \*.\* +@param [@anomesarq], array, Indica o array que será preenchido com os nomes de arquivos que correspondem a . Cada elemento contém o nome do arquivo e extensão no formato string em maiúsculo. +@param [@atamanhos], array, Indica o array que será preenchido com os tamanhos dos arquivos correspondentes no array . Cada elemento será numérico. +@param [@adatas], array, Indica o array que será preenchido com as datas dos arquivos correspondentes no array . Cada elemento será do tipo data \(D\) +@param [@ahoras], array, Indica o array que será preenchido com as horas dos arquivos correspondentes no array . Cada elemento preenchido, contém uma string no formato hora, minutos e segundos \(hh:mm:ss\). +@param [@aatributos], array, Indica o array que será preenchido com os atributos dos arquivos correspondentes no array . Cada elemento é uma string. Caso seja especificado, os arquivos de diretório, sistema e escondidos são inclusos, assim como os arquivos normais. Mas se não for especificado, somente os arquivos normais serão inclusos. +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/adir +/*/ +binary function adir(cespecarq, anomesarq, atamanhos, adatas, ahoras, aatributos, lchangecase) +return + + +/*/{Protheus.doc} aduservalid +Faz a autenticação de uma conta de usuário de um domínio baseado no Active Directory do Microsoft Windows. + +@type binary function +@sintax ADUserValid(, , ) => codeblock +@return codeblock, Retorna verdadeiro \(.T.\) se a autenticação no domínio foi realizada com sucesso, caso contrário, falso \(.F.\). + +@param , character, Cenário 1: Nome do domínio no qual encontra-se a estação. Cenário 2: Código SID do usuário autenticado na estação. +@param , character, Cenário 1: Nome do usuário pertencente ao domínio informado. Cenário 2: String vazia, obrigatoriamente. +@param , character, Ambos os cenários: Senha do usuário informado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/aduservalid +/*/ +binary function aduservalid(cdomainname, cusername, cpassword) +return + + +/*/{Protheus.doc} aesdecrypt +Decripta textos usando o algoritmo AES no modo definido. + +@type binary function +@sintax AESDecrypt(, , , [cIV]) => array +@return array, Array com o resultado do processo de decriptação. + +@param , numeric, Código identificador do modo do algoritmo AES a ser usado na decriptação. +@param , character, Texto de entrada a ser decriptado. +@param , character, Key da decriptação, conforme o modo do algoritmo AES a ser usado. +@param [civ], character, IV \(Vetor de Inicialização\) da decriptação, conforme o modo do algoritmo AES a ser usado. **Obrigatório para o modo CBC.** +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/aesdecrypt +/*/ +binary function aesdecrypt(ncipherid, cciphertext, ckey, civ) +return + + +/*/{Protheus.doc} aesencrypt +Encripta textos usando o algoritmo AES no modo definido. + +@type binary function +@sintax AESEncrypt(, , [cPassword], [cKey], [cIV]) => array +@return array, Array com o resultado do processo de encriptação. + +@param , numeric, Código identificador do modo do algoritmo AES a ser usado na encriptação. +@param , character, Texto de entrada a ser encriptado. +@param [cpassword], character, Texto auxiliar na geração da key da encriptação. +@param [ckey], character, Key da encriptação, conforme o modo do algoritmo AES a ser usado. +@param [civ], character, IV \(Vetor de Inicialização\) da encriptação, conforme o modo do algoritmo AES a ser usado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/aesencrypt +/*/ +binary function aesencrypt(ncipherid, cplaintext, cpassword, ckey, civ) +return + + +/*/{Protheus.doc} aeval +Executa um bloco de código para cada elemento de um array. + +@type binary function +@sintax AEval(, , [nStart], [nCount]) => array +@return array, Retorna uma cópia do array indicado por **aArray** após a operação. + +@param , array, Indica o array que será lido. +@param , codeblock, Indica o bloco de código que será executado para cada elemento encontrado. +@param [nstart], numeric, Indica o elemento inicial. +@param [ncount], numeric, Indica a quantidade de elementos que serão processados a partir do parâmetro **nStart**. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/aeval +/*/ +binary function aeval(aarray, bblock, nstart, ncount) +return + + +/*/{Protheus.doc} afields +Preenche arrays com a estrutura da tabela atualmente em uso. + +@type binary function +@sintax afields([@aFields], [@aTypes], [@aWidths], [@aDecimals]) => numeric +@return numeric, Retorna a quantidade de colunas. + +@param [@afields], array, Nome dos campos +@param [@atypes], array, Tipo dos campos +@param [@awidths], array, Tamanho dos campos +@param [@adecimals], array, Casas decimais dos campos. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/afields +/*/ +binary function afields(afields, atypes, awidths, adecimals) +return + + +/*/{Protheus.doc} afill +Preenche um array com um único valor de qualquer tipo de dados \(inclusive array´s, blocos de código ou nulo\) na faixa especificada. + +@type binary function +@sintax AFill(, , [nStart], [nCount]) => array +@return array, Retorna uma cópia do array indicado por **aDest** após a operação. + +@param , array, Indica o array que será preenchido. +@param , variant, Indica o valor que será alocado em cada elemento do array. O conteúdo desse parâmetro, pode ser uma expressão de qualquer tipo de dado válido. +@param [nstart], numeric, Indica a posição do primeiro elemento que será preenchido. Caso não seja informado, o padrão é 1. +@param [ncount], numeric, Indica a quantidade de elementos que serão preenchidos. Caso não seja especificado, os elementos são preenchidos até o final do array. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/afill +/*/ +binary function afill(adest, xvalue, nstart, ncount) +return + + +/*/{Protheus.doc} ains +Inclui um elemento nulo na posição informada e "empurra" os demais para frente descartando o último elemento. + +@type binary function +@sintax AIns(, ) => array +@return array, Retorna uma cópia do array indicado por **aDest** após a operação. + +@param , array, Indica o array que será manipulado. +@param , numeric, Indica a posição, a partir da primeira, na qual será inserido um elemento nulo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ains +/*/ +binary function ains(adest, npos) +return + + +/*/{Protheus.doc} alias +Retorna o alias de uma área de trabalho especificada. + +@type binary function +@sintax Alias([nWorkArea]) => character +@return character, Retorna o alias da área de trabalho, no formato string, em letras maiúsculas. Caso o parâmetro \(nWorkArea\) não seja informado, o retorna será o alias da área de trabalho corrente ou, se não houver nenhum arquivo em uso, uma string vazia \(""\). + +@param [nworkarea], numeric, Indica o número \(entre 0 e 511\) da área de trabalho que será verificada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/alias +/*/ +binary function alias(nworkarea) +return + + +/*/{Protheus.doc} alltrim +Remove os espaços em branco à direita e à esquerda de uma string. + +@type binary function +@sintax AllTrim() => character +@return character, Retorna uma string com espaços em branco à direita e à esquerda removidos. + +@param , variant, Indica o texto cujos espaços em branco serão removidos. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/alltrim +/*/ +binary function alltrim(ctext) +return + + +/*/{Protheus.doc} allwaysfalse +Função de compatibilidade que sempre retornará um valor falso \(.F.\). + +@type binary function +@sintax AllwaysFalse() => logical +@return logical, Retorna um valor lógico falso \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/allwaysfalse +/*/ +binary function allwaysfalse() +return + + +/*/{Protheus.doc} allwaystrue +Função de compatibilidade que sempre retornará um valor verdadeiro \(.T.\). + +@type binary function +@sintax AllwaysTrue() => logical +@return logical, Retorna um valor lógico verdadeiro \(.T.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/allwaystrue +/*/ +binary function allwaystrue() +return + + +/*/{Protheus.doc} ansitooem +Converte uma string do formato ANSI Text \(formato Microsoft Windows\) para OEM/MS-DOS + +@type binary function +@sintax ANSIToOEM() => character +@return character, Retorna a string convertida \(formato OEM/MS-DOS\) para ser exibida no MS-DOS + +@param , character, Indica a string \(formato ANSI Text\) que será convertida. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ansitooem +/*/ +binary function ansitooem(cstringansi) +return + + +/*/{Protheus.doc} arc4 +Cria uma sequência de caracteres criptografada, utilizando o algoritmo de criptografia de fluxo ARC4, a partir de uma sequência de caracteres que compõe o dado a ser criptografado e uma sequência de caracteres adicional usada como base para a criptografia, chamada de chave. +Essa função é obsoleta, e deve ser substituída pela função [RC4Crypt](RC4Crypt). + +@type binary function +@sintax Arc4(, ) => character +@return character, Retorna uma string criptografada contendo os caracteres ASCII em hexadecimal separados por hífen \(-\). + +@param , character, Indica a sequência de caracteres que serão criptografadas. +@param , character, Indica a sequência de caracteres a serem utilizados como chave para o algoritmo de criptografia. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/arc4 +/*/ +binary function arc4(cbase, cchave) +return + + +/*/{Protheus.doc} asc +Converte um caractere para seu valor ASCII mais à esquerda em uma string. + +@type binary function +@sintax Asc() => numeric +@return numeric, Retorna um valor numérico inteiro, na faixa de 0 à 255, que representa o valor ASCII do parâmetro <**cString**>. + +@param , character, Indica a string que será convertida para um número. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/asc +/*/ +binary function asc(cstring) +return + + +/*/{Protheus.doc} ascan +Percorre um array procurando por um valor especificado. Pode ser especificado um valor a ser buscado, ou pode ser informada uma condição de busca através de um bloco de código. + +@type binary function +@sintax AScan(, , [nStart], [nCount]) => numeric +@return numeric, Caso o valor procurado seja encontrado, será retornado o número do elemento do array correspondente. Caso contrário, é retornado o valor 0 \(zero\). + +@param , array, Array onde será feita a busca. +@param , variant, Indica a expressão de busca. Para um array de dimensão simples, pode ser colocado diretamente um valor a ser procurado. Para uma busca mais complexa ou para uma busca em array muti-dimensional, deve ser especificado um bloco de código. +@param [nstart], numeric, Indica a partir de qual elemento será realizada a busca. Por padrão a pesquisa inicia no elemento 1. +@param [ncount], numeric, Indica por quantos elementos serão considerados na operação de busca. Caso não especificado, todos os elementos do array a partir da posição inicial de busca serão considerados. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ascan +/*/ +binary function ascan(adest, xexpr, nstart, ncount) +return + + +/*/{Protheus.doc} ascanx +Realiza a leitura do array à procura de um valor específico. Funciona da mesma forma que a função **AScan**, porém quando utilizado um bloco de código para realizar a busca, o mesmo é chamado com um segundo parâmetro, informando qual é o elemento do array em questão que está sendo verificado na chamada corrente do bloco de código. + +@type binary function +@sintax AScanX(, , [nStart], [nCount]) => numeric +@return numeric, Retorna um valor numérico que representa a posição que ocupa no array pelo último elemento lido. Quando não encontrado é retornado 0. + +@param , array, Indica o array onde será feita a busca. +@param , codeblock, Indica o valor que será pesquisado através de um bloco de código. +@param [nstart], numeric, Indica a partir de qual elemento será realizada busca. Por padrão a pesquisa inicia no elemento 1. +@param [ncount], numeric, Indica por quantos elementos serão considerados na operação de busca. Caso não especificado, todos os elementos do array a partir da posição inicial de busca serão considerados. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ascanx +/*/ +binary function ascanx(adest, bsearch, nstart, ncount) +return + + +/*/{Protheus.doc} asin +Retorna o valor em radianos do arco seno de um ângulo a partir do valor que representa o seno desse ângulo. + +@type binary function +@sintax ASin() => numeric +@return numeric, Retorna um valor entre -PI/2 e PI/2. + +@param , numeric, Indica o valor que representa o seno de um ângulo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/asin +/*/ +binary function asin(nsin) +return + + +/*/{Protheus.doc} asize +Aumenta ou diminui um array a um tamanho especificado + +@type binary function +@sintax ASize(, ) => Nil +@return Nil, Retorna Nulo \(nil\) + +@param , array, Indica o array que terá o tamanho manipulado. +@param , numeric, Indica o novo tamanho do array. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/asize +/*/ +binary function asize(adestino, ntamanho) +return + + +/*/{Protheus.doc} asort +Ordena uma parte ou o array inteiro. + +@type binary function +@sintax ASort(, [nInicio], [nCont]) => array +@return array, Retorna uma referência ao array de origem aVetor. + +@param , array, Indica o array cujos elementos serão ordenados. +@param [ninicio], numeric, Indica a partir de qual elemento a ordenação será iniciada. Caso não seja especificado, a posição inicial será um \(1\). +@param [ncont], numeric, Indica a quantidade de elementos que serão ordenados. Caso não seja especificado, todos elementos a partir do nInicio serão ordenados. advpl_param bOrdem BO Indica o bloco de código utilizado para determinar a ordem que será seguida. Caso não seja especificado, a ordem padrão será ascendente. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/asort +/*/ +binary function asort(avetor, ninicio, ncont) +return + + +/*/{Protheus.doc} at +Retorna a posição da primeira ocorrência de uma substring em uma string. Para isso, a função pesquisa a string destino a partir da esquerda. + +@type binary function +@sintax At(, , [nStart]) => numeric +@return numeric, Retorna a posição da string localizada, dentro da procurada, na forma de um valor numérico inteiro. Caso a string não seja localizada, o retorno será 0 \(zero\). + +@param , character, Indica a string que será localizada. +@param , character, Indica a string que será procurada. +@param [nstart], numeric, Indica a partir de qual caractere iniciará a busca procurada, na forma de um valor numérico inteiro. O nStart deverá ser maior que zero, caso contrário o retorno será 0 \(zero\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/at +/*/ +binary function at(cpesquisa, cdestino, nstart) +return + + +/*/{Protheus.doc} atail +Retorna o último elemento do array + +@type binary function +@sintax ATail() => variant +@return variant, O último elemento do array. + +@param , array, Indica o array o qual o último elemento será retornado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/atail +/*/ +binary function atail(aarray) +return + + +/*/{Protheus.doc} atan +Calcula o valor em radianos do arco tangente de um valor que representa a tangente de um ângulo. + +@type binary function +@sintax ATan() => numeric +@return numeric, Retorna um valor entre 0 e PI radianos. + +@param , numeric, Indica o valor que representa a tangente de um ângulo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/atan +/*/ +binary function atan(ntan) +return + + +/*/{Protheus.doc} atn2 +Calcula o valor do ângulo, em radianos, de um valor que representa o seno e de um valor que representa o cosseno. + +@type binary function +@sintax Atn2(, ) => numeric +@return numeric, Retorna um valor entre 0 e PI radianos. + +@param , numeric, Indica o valor que representa o seno de um ângulo. +@param , numeric, Indica o valor que representa o cosseno de um ângulo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/atn2 +/*/ +binary function atn2(nsin, ncos) +return + + +/*/{Protheus.doc} atohm +Converte uma matriz de dados em um tHashMap, podendo combinar as colunas para a chave de busca. + +@type binary function +@sintax AToHM(, [nColuna_1], [nTrim_1], [nColuna_N], [nTrim_N]) => object +@return object, Objeto da classe HashMap \(tHashMap\) + +@param , array, Matriz com os elementos a serem convertidos +@param [ncoluna_1], numeric, Indica o número da coluna que contem o valor da chave \(pesquisa\) +@param [ntrim_1], numeric, Tipo de Trim para as colunas do tipo caractere. +@param [ncoluna_n], numeric, Informar mais de uma coluna se necessário +@param [ntrim_n], numeric, Tipo de Trim para as colunas do tipo caractere. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/atohm +/*/ +binary function atohm(amatriz, ncoluna_1, ntrim_1, ncoluna_n, ntrim_n) +return + + +/*/{Protheus.doc} attismemberof +Indica se uma propriedade informada através de uma string por parâmetro existe na classe. + +@type binary function +@sintax AttIsMemberOf(, , [lRecursive]) => logical +@return logical, Retorna verdadeiro \(.T.\), se a propriedade for encontrada; caso contrário, falso \(.F.\). + +@param , object, Indica o objeto que representa a instância da classe a ser pesquisada. +@param , character, Indica o nome da propriedade a ser pesquisada. +@param [lrecursive], logical, \*Indica se as classes superiores também devem ser pesquisada, caso a instância atual possua herança. \( Default = .F. \) +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/attismemberof +/*/ +binary function attismemberof(oobj, cattname, lrecursive) +return + + +/*/{Protheus.doc} b_and +Realiza a operação binária **E** entre 2 números. + +@type binary function +@sintax B_AND(, ) => numeric +@return numeric, Retorna o valor do E binário entre **nNum1** e **nNum2**. + +@param , numeric, 1º número a ser utlizado na operação de E binário. +@param , numeric, 2º número a ser utlizado na operação de E binário. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/b_and +/*/ +binary function b_and(nnum1, nnum2) +return + + +/*/{Protheus.doc} b_or +Realiza a operação binária **OU** entre 2 números. + +@type binary function +@sintax B_OR(, ) => numeric +@return numeric, Retorna o valor do OU binário entre **nNum1** e **nNum2**. + +@param , numeric, 1º número a ser utlizado na operação de OU binário. +@param , numeric, 2º número a ser utlizado na operação de OU binário. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/b_or +/*/ +binary function b_or(nnum1, nnum2) +return + + +/*/{Protheus.doc} b_xor +Realiza a operação binária **OU EXCLUSIVO** entre 2 números. + +@type binary function +@sintax B_XOR(, ) => numeric +@return numeric, Retorna o valor do OU EXCLUSIVO binário entre **nNum1** e **nNum2**. + +@param , numeric, 1º número a ser utlizado na operação de OU EXCLUSIVO binário. +@param , numeric, 2º número a ser utlizado na operação de OU EXCLUSIVO binário. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/b_xor +/*/ +binary function b_xor(nnum1, nnum2) +return + + +/*/{Protheus.doc} beep +Emite um sinal sonoro + +@type binary function +@sintax Beep() => logical +@return logical, Retorna True caso seja efetivamente mandado o comando para o lado cliente. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/beep +/*/ +binary function beep() +return + + +/*/{Protheus.doc} bin2d +Converte um caractere de 64 bits sinalizado para um numérico de ponto flutuante. + +@type binary function +@sintax Bin2D() => numeric +@return numeric, Retorna um valor numérico de ponto flutuante que representa o caractere informado. + +@param , character, Indica um caractere de oito bytes. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/bin2d +/*/ +binary function bin2d(cstring) +return + + +/*/{Protheus.doc} bin2f +Converte um caractere de 32 bits sinalizado para um numérico de ponto flutuante. + +@type binary function +@sintax Bin2F() => numeric +@return numeric, Retorna um valor numérico de ponto flutuante que representa o caractere informado. + +@param , character, Indica um caractere de quatro bytes. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/bin2f +/*/ +binary function bin2f(cstring) +return + + +/*/{Protheus.doc} bin2i +Converte um caractere de 16 bits sinalizado para um numérico. + +@type binary function +@sintax Bin2I() => numeric +@return numeric, Retorna um valor numérico inteiro que representa o caractere informado. + +@param , character, Indica o caractere de dois bytes. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/bin2i +/*/ +binary function bin2i(cstring) +return + + +/*/{Protheus.doc} bin2l +Converte um caractere de 32 bits sinalizado para um numérico. + +@type binary function +@sintax Bin2L() => numeric +@return numeric, Retorna um valor numérico inteiro que representa o caractere informado. + +@param , character, Indica um caractere de quatro bytes. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/bin2l +/*/ +binary function bin2l(cstring) +return + + +/*/{Protheus.doc} bin2str +Converte uma string com caracteres para uma string com o valor binário de cada caractere. + +@type binary function +@sintax Bin2Str() => character +@return character, Retorna uma string formatada de acordo com a string informada. + +@param , character, Indica a string que será convertida. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/bin2str +/*/ +binary function bin2str(cstring) +return + + +/*/{Protheus.doc} bin2w +Converte um caractere de 16 bits não sinalizado para um numérico. + +@type binary function +@sintax Bin2W() => numeric +@return numeric, Retorna um valor numérico inteiro que representa o caractere informado. + +@param , character, Indica o caractere de dois bytes. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/bin2w +/*/ +binary function bin2w(cstring) +return + + +/*/{Protheus.doc} biton +Verifica se os primeiros bits de uma string são zero. + +@type binary function +@sintax BitOn(, , , ) => NIL +@param , character, Indica a string que será verificada. +@param , numeric, Indica o índice do bit inicial. +@param , numeric, Indica a quantidade de bits que devem estar em 0. +@param , numeric, Indica a quantidade de bites que serão testados. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/biton +/*/ +binary function biton(cstr, nstart, nquant, nlength) +return + + +/*/{Protheus.doc} bmptojpg +Converte uma imagem do tipo BMP \(Bitmap\) para JPG \(Joint Photographic Group\). + +@type binary function +@sintax BmpToJpg(, , [bChangeCase]) => codeblock +@return codeblock, 0, se o arquivo for salvo com sucesso, caso contrário retorna -1 + +@param , character, Indica o caminho, respeitando o diretório do Application Server, e o nome do arquivo, com extensão BMP \(Bitmap\), de origem. +@param , character, Indica o caminho, respeitando o diretório do Application Server, e o nome do arquivo, com extensão JPG \(Joint Photographic Group\), de destino. +@param [bchangecase], logical, Caso .T. o caminho e nome dos arquivos informados \(cFileOld, e cFileNew\) serão convertidos para letras minúsculas. Valor padrão o valor é .F. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/bmptojpg +/*/ +binary function bmptojpg(cfileold, cfilenew, bchangecase) +return + + +/*/{Protheus.doc} bof +Informa se está no inicio do Arquivo/Tabela + +@type binary function +@sintax Bof() => logical +@return logical, Retorna .T. \(Verdadeiro\) se estiver no início do arquivo/tabela; Caso contrário, .F. \(Falso\) + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/bof +/*/ +binary function bof() +return + + +/*/{Protheus.doc} cdow +Retorna o dia da semana de uma determinada data. + +@type binary function +@sintax CDow() => character +@return character, Retorna o nome do dia da semana no formato de uma string, no idioma Inglês. A primeira letra será maiúscula e as demais minúsculas. Para uma data em branco ou inválida, o retorno será uma string vazia \(""\). + +@param , date, Indica o valor data que será considerado para obter o dia da semana. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/cdow +/*/ +binary function cdow(dexp) +return + + +/*/{Protheus.doc} ceiling +Calcula o arrendodamento \(para cima\) do valor do ponto flutuante. + +@type binary function +@sintax Ceiling() => numeric +@return numeric, Retorna o menor inteiro que é maior ou igual ao valor do ponto flutuante. + +@param , numeric, Indica o valor que será arredondado \(para cima\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ceiling +/*/ +binary function ceiling(nvalor) +return + + +/*/{Protheus.doc} chdclsarr +descrição da funcao + +@type binary function +@sintax ChdClsArr([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/chdclsarr +/*/ +binary function chdclsarr(tnomevar) +return + + +/*/{Protheus.doc} chkrpochg +Verifica se houve alteração da configuração de SourcePath \(RPO Ativo\) após o início do processo atual. + +@type binary function +@sintax ChkRpoChg() => logical +@return logical, Retorna verdadeiro \(.T.\), se o programa atual for carregado a partir do SourcePath do arquivo de configuração \(totvsappserver.ini\) do TOTVS Application Server; caso contrário, falso \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/chkrpochg +/*/ +binary function chkrpochg() +return + + +/*/{Protheus.doc} chmod +Altera as permissões de um arquivo. + +@type binary function +@sintax CHMOD(, , [uParam3], [lChangeCase]) => logical +@return logical, Retorna verdadeiro \(.T.\), se a alteração da restrição for realizada com sucesso; caso contrário, falso \(.F.\). + +@param , character, Indica o nome do arquivo no qual se deseja alterar suas propriedades \(atributos\) do sistema. +@param , numeric, Indica a permissão que será atribuída ao proprietário, grupo ou representante do arquivo indicado no parâmetro . +@param [uparam3], numeric, Compatibility parameter. Pass NIL. +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/chmod +/*/ +binary function chmod(cfilename, nfilemode, uparam3, lchangecase) +return + + +/*/{Protheus.doc} chr +Converte um código ASCII para caractere. + +@type binary function +@sintax Chr() => character +@return character, Retorna um único valor caractere cujo código ASCII está especificado no parâmetro nCodigo. + +@param , numeric, Indica um código ASCII na faixa de 0 à 255. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/chr +/*/ +binary function chr(ncodigo) +return + + +/*/{Protheus.doc} classdataarr +Retorna um array multidimensional com todas as informações das propriedades da instância da classe contida no objeto informado como parâmetro + +@type binary function +@sintax ClassDataArr(, [lParent]) => array +@return array, Retorna um array multidimensional com todas as informações das propriedades da instância da classe contida no objeto informado como parâmetro. + +@param , object, Indica um objeto para obter os dados / propriedades. +@param [lparent], logical, Se verdadeiro \(.T.\) retorna todos os parametros, inclusive os parâmetros herdados de outras classes, adiciona o nome da classe na 4ª coluna do array +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/classdataarr +/*/ +binary function classdataarr(oobj, lparent) +return + + +/*/{Protheus.doc} classmetharr +Retorna um array multidimensional com todas as informações dos métodos da instância da classe contida no objeto informado como parâmetro + +@type binary function +@sintax ClassMethArr(, [lParent]) => array +@return array, Retorna um array multidimensional com todas as informações das propriedades da instância da classe contida no objeto informado como parâmetro. + +@param , object, Indica um objeto para obter os métodos. +@param [lparent], logical, Se verdadeiro \(.T.\) retorna todos os parametros, inclusive os parâmetros herdados de outras classes, adiciona o nome da classe na 3ª coluna do array +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/classmetharr +/*/ +binary function classmetharr(oobj, lparent) +return + + +/*/{Protheus.doc} clearglbvalue +Limpa um conteúdo armazenado em uma variável global. + +@type binary function +@sintax ClearGlbValue(, [nTimeOut]) => numeric +@return numeric, Retorna o número de variáveis globais limpas da memória. + +@param , character, Indica o nome da variável global. +@param [ntimeout], numeric, Indica o tempo mínimo \(em segundos\) a partir do último acesso/leitura desta variável, para ela ser eliminada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/clearglbvalue +/*/ +binary function clearglbvalue(cglbname, ntimeout) +return + + +/*/{Protheus.doc} clearvarsetget +Retira o bloco de código atribuído ao uso da variável, de forma que quando a variável for usada o bloco não será mais executado. + +@type binary function +@sintax ClearVarSetGet() => NIL +@param , character, Indica o nome da variável que deve estar declarada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/clearvarsetget +/*/ +binary function clearvarsetget(cnamevar) +return + + +/*/{Protheus.doc} cmonth +Retorna o mês, como string, a partir de uma data passada como parâmetro. + +@type binary function +@sintax CMonth() => character +@return character, Retorna o mês \(em inglês\) a partir de uma data passada como parâmetro. A primeira letra será maiúscula e as demais minúsculas. Para uma data em branco ou inválida, o retorno será uma string nula \(""\). + +@param , date, Indica a data que terá seu mês convertido. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/cmonth +/*/ +binary function cmonth(ddata) +return + + +/*/{Protheus.doc} cmpbuildstr +Compara duas strings em formato nnn.nnn.nnn.nnn, considerando os quatro primeiros blocos numéricos + +@type binary function +@sintax CmpBuildStr(, ) => numeric +@return numeric, Retorna 0 se ambas são iguais, 1 se a primeira build é maior que a segunda, e -1 se a primeira build for menor que a segunda. + +@param , character, Primeira string para comparação +@param , character, Segunda string para comparação +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/cmpbuildstr +/*/ +binary function cmpbuildstr(cleft, cright) +return + + +/*/{Protheus.doc} colortorgb +A partir do valor numérico que representa uma cor, retorna uma lista dos números que representam o RGB. + +@type binary function +@sintax ColorToRGB() => array +@return array, Vetor com quatro posições indicando o vermelho, o verde, o azul e a transparência, sendo cada uma delas representadas por um valor numérico na escala de 0 a 255. + +@param , numeric, Cor representada por um único valor numérico, por exemplo CLR_HRED definida no arquivo colors.ch. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/colortorgb +/*/ +binary function colortorgb(ncolor) +return + + +/*/{Protheus.doc} compress +Compacta um buffer recebido através de algoritmo proprietário. + +@type binary function +@sintax Compress(<@cBufferOut>, <@nLenghtOut>, , ) => logical +@return logical, Retorna verdadeiro \(.T.\), se o buffer for compactado com sucesso; caso contrário, falso \(.F.\). + +@param <@cbufferout>, character, Retorna o buffer compactado, que contém os caracteres binários. +@param <@nlenghtout>, numeric, Retorna o tamanho do buffer compactado. +@param , character, Indica o buffer que será compactado. +@param , numeric, Indica o tamanho do buffer informado que deverá ser considerado para compactação. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/compress +/*/ +binary function compress(cbufferout, nlenghtout, cbufferin, nlenghtin) +return + + +/*/{Protheus.doc} computername +Retorna o nome da máquina \(hostname\) onde o SmartClient está sendo executado. + +@type binary function +@sintax ComputerName() => character +@return character, Nome da máquina. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/computername +/*/ +binary function computername() +return + + +/*/{Protheus.doc} conout +Apresenta no console, do Application Server, uma mensagem. + +@type binary function +@sintax Conout() => NIL +@param , character, Indica a mensagem que será apresentada no console do Application Server. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/conout +/*/ +binary function conout(cmensagem) +return + + +/*/{Protheus.doc} conttype +Retorna um array com o tipo da variável. Diferente do ValType, retorna o tipo original da variável. No caso de ADPL puro irá sempre retornar o ValType \(Variant\), porém se for chamada com uma variável que veio do 4GL \(interop\) retorna o tipo que ela foi criada. + +@type binary function +@sintax ContType() => array +@return array, Retorna um array com duas posições, a primeira \(Caracter\) sempre é relativo ao Valor que a variável aceita \(valtype\), a segunda é o contentType \(Inteiro\) propriamente dito. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/conttype +/*/ +binary function conttype() +return + + +/*/{Protheus.doc} cos +Calcula o valor do cosseno de um ângulo \(em radianos\). + +@type binary function +@sintax Cos() => numeric +@return numeric, Retorna o valor do cosseno de acordo com o ângulo informado. + +@param , numeric, Indica o valor do ângulo em radianos. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/cos +/*/ +binary function cos(nangle) +return + + +/*/{Protheus.doc} countexecutablelines +descrição da funcao + +@type binary function +@sintax CountExecutableLines([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/countexecutablelines +/*/ +binary function countexecutablelines(tnomevar) +return + + +/*/{Protheus.doc} cpyf2web +A função copia um arquivo do ambiente do servidor \(a partir do rootpath\) ou do cliente \(WebAgent\), para o SmartClient HTML. Se o arquivo for copiado para a pasta temporária \( user \) no Servidor Web, esta pasta é deletada automaticamente quando a sessão é finalizada. Já se o arquivo for copiado para a pasta de persistência \(Cache\) do servidor Web, a pasta será mantida no servidor Web até que seja excluída manualmente pelo administrador do ambiente. + +@type binary function +@sintax CpyF2Web(, [lIsUserDiskDir], [lCompactCopy], [lChangeCase], [lUnZipFile]) => numeric +@return numeric, Retorna o caminho do servidor web onde o arquivo foi salvo com sucesso. Caso ocorra alguma falha na cópia, retorna um valor vazio. + +@param , character, Indica o arquivo a ser usado como origem da cópia. +@param [lisuserdiskdir], logical, Indica se o arquivo vai ser salvo na pasta temporária ou na pasta do Environment onde está o Servidor Web. Default = .T. \(verdadeiro\). +@param [lcompactcopy], logical, Indica se o arquivo deve ser internamente compactado antes de fazer a cópia. Default = .T. \(verdadeiro\). +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Default = .T. \(verdadeiro\). Veja maiores informações em Observações. +@param [lunzipfile], logical, Se verdadeiro \(.T.\), o arquivo será descompactado. caso contrário, falso \(.F.\), não faz nada. Default = .F. \(false\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/cpyf2web +/*/ +binary function cpyf2web(corigem, lisuserdiskdir, lcompactcopy, lchangecase, lunzipfile) +return + + +/*/{Protheus.doc} cpys2t +Copia um arquivo do ambiente do servidor, a partir do rootpath, para um diretório na máquina onde está sendo executado o SmartClient. + +@type binary function +@sintax CpyS2T(, , [lCompress], [lChangeCase]) => logical +@return logical, Retorna verdadeiro \(.T.\), se o arquivo for copiado com sucesso; Retorna falso \(.F.\), em caso de falha na cópia. + +@param , character, Indica o arquivo no servidor que será copiado \(a partir do rootpath\). +@param , character, Indica a pasta de destino na máquina onde está o SmartClient. +@param [lcompress], logical, Indica se o arquivo deve ser internamente compactado antes de fazer a cópia. Default = .T. \(verdadeiro\) +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/cpys2t +/*/ +binary function cpys2t(cfile, cfolder, lcompress, lchangecase) +return + + +/*/{Protheus.doc} cpys2tex +Copia um arquivo de um path absoluto da máquina onde o Application Server está sendo executado, para um path absoluto na máquina onde o Smartclient está sendo executado, atualizando também o datetime do arquivo copiado, para ser igual ao arquivo de origem. + +@type binary function +@sintax CpyS2TEx(, , [lChangeCase]) => logical +@return logical, Retorna verdadeiro \(.T.\) se o arquivo for copiado com sucesso; retorna falso \(.F.\) em caso de falha na cópia. + +@param , character, Indica o caminho completo do arquivo na máquina do servidor que será copiado. +@param , character, Indica o caminho completo do arquivo de destino na máquina onde está o SmartClient. +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/cpys2tex +/*/ +binary function cpys2tex(cserver, cclient, lchangecase) +return + + +/*/{Protheus.doc} cpyt2s +Copia um arquivo da máquina onde está sendo executado o SmartClient, para um diretório no ambiente do servidor, a partir do rootpath. + +@type binary function +@sintax CpyT2S(, , [lCompress], [lChangeCase]) => logical +@return logical, Retorna verdadeiro \(.T.\), se o arquivo for copiado com sucesso; Retorna falso \(.F.\), em caso de falha na cópia. + +@param , character, Indica o arquivo na máquina onde está o SmartClient que será copiado. +@param , character, Indica a pasta de destino no servidor \(a partir do rootpath\). +@param [lcompress], logical, Indica se o arquivo deve ser internamente compactado antes de fazer a cópia. Default = .T. \(verdadeiro\) +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/cpyt2s +/*/ +binary function cpyt2s(cfile, cfolder, lcompress, lchangecase) +return + + +/*/{Protheus.doc} crccalc +Calcula o CRC de um texto informado. + +@type binary function +@sintax CRCCalc(, , [@cRetHex]) => numeric +@return numeric, Retorna valor decimial do CRC calculado. + +@param , numeric, Algoritmo CRC que sera utilizado para o cálculo. Os algoritmos disponíveis ver Observações. +@param , character, Texto que será utilizado para cálculo do CRC. +@param [@crethex], character, Variável que receberá o valor CRC no formato hexadecimal. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/crccalc +/*/ +binary function crccalc(nalgoritmo, cinput, crethex) +return + + +/*/{Protheus.doc} ctod +Converte uma string formatada para o tipo data. + +@type binary function +@sintax CToD() => date +@return date, Retorna a data convertida. + +@param , character, Indica a string que contém uma data a ser convertida. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ctod +/*/ +binary function ctod(cdata) +return + + +/*/{Protheus.doc} curdir +Exibe o diretório atual servidor. + +@type binary function +@sintax curdir() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/curdir +/*/ +binary function curdir() +return + + +/*/{Protheus.doc} cvaltochar +Converte uma informação do tipo caractere, data, lógico ou numérico para string, sem adição de espaços na informação. + +@type binary function +@sintax cValToChar() => character +@return character, Retorna uma string de acordo com o valor e tipo do parâmetro informado. + +@param , variant, Indica um valor do tipo caractere, data, lógico ou numérico para converter em string. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/cvaltochar +/*/ +binary function cvaltochar(xparametro) +return + + +/*/{Protheus.doc} d2bin +Converte o número informado como parâmetro em uma string de 8 caracteres, correspondente à representação binária do número em ponto flutuante. + +@type binary function +@sintax D2Bin() => numeric +@return numeric, Retorna uma string de oito bytes que contém a representação binária do número em ponto flutuante. + +@param , numeric, Indica o valor numérico em ponto flutuante que será convertido. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/d2bin +/*/ +binary function d2bin(ndouble) +return + + +/*/{Protheus.doc} date +Retorna a data do sistema como sendo um valor do tipo data. +Essa função dispõe um meio de inicializar variáveis de memória com a data corrente, comparando outros valores do tipo data e realizando operações aritméticas relativas à data corrente. + +@type binary function +@sintax Date() => date +@return date, Retorna a data do sistema como sendo um valor do tipo data. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/date +/*/ +binary function date() +return + + +/*/{Protheus.doc} datetimeutc +Retorna uma string com informações de data e hora no formato UTC. + +@type binary function +@sintax DateTimeUtc([aDate]) => character +@return character, Retorna uma string no formato UTC. + +@param [adate], array, Quando informado por referência, o array será preenchido com data UTC onde a posição 1 será data e a posição 2 a hora. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/datetimeutc +/*/ +binary function datetimeutc(adate) +return + + +/*/{Protheus.doc} day +Retorna o dia do mês de uma determinada data. + +@type binary function +@sintax Day() => numeric +@return numeric, Retorna um valor numérico inteiro \(dia do mês\) na faixa de zero a 31. + +@param , date, Indica a data que será convertida. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/day +/*/ +binary function day(ddata) +return + + +/*/{Protheus.doc} dbappend +Adiciona um novo registro vazio na tabela corrente. + +@type binary function +@sintax DBAppend([lUnlock]) => Nil +@return Nil, Retorno sempre é nulo. + +@param [lunlock], logical, Indica se, verdadeiro \(.T.\), libera todos os registros bloqueados anteriormente \(locks\); caso contrário, falso \(.F.\), todos os bloqueios anteriores são mantidos durante a inserção. O Valor padrão é verdadeiro \(.T.\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbappend +/*/ +binary function dbappend(lunlock) +return + + +/*/{Protheus.doc} dbchangealias +Muda o alias de uma área de trabalho aberta. + +@type binary function +@sintax DBChangeAlias(, ) => logical +@return logical, Retorna se o alias foi alterado ou não. + +@param , character, Indica o alias aberto de uma tabela. +@param , character, Indica o novo alias da tabela. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbchangealias +/*/ +binary function dbchangealias(coldalias, cnewalias) +return + + +/*/{Protheus.doc} dbclearallfilter +Limpa todas as condições de filtro de todas as tabelas abertas. + +@type binary function +@sintax DBClearAllFilter() => Nil +@return Nil, Retorno sempre é nulo. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbclearallfilter +/*/ +binary function dbclearallfilter() +return + + +/*/{Protheus.doc} dbclearfilter +Limpa todas as condições de filtro. + +@type binary function +@sintax DBClearFilter() => Nil +@return Nil, Retorno sempre é nulo. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbclearfilter +/*/ +binary function dbclearfilter() +return + + +/*/{Protheus.doc} dbclearindex +Fecha todos os índices da área de trabalho corrente. + +@type binary function +@sintax DBClearIndex() => Nil +@return Nil, Retorno sempre é nulo. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbclearindex +/*/ +binary function dbclearindex() +return + + +/*/{Protheus.doc} dbcloseall +Fecha todas as áreas de trabalho em uso. + +@type binary function +@sintax DBCloseAll() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbcloseall +/*/ +binary function dbcloseall() +return + + +/*/{Protheus.doc} dbclosearea +Fecha a área de trabalho corrente. + +@type binary function +@sintax DBCloseArea() => Nil +@return Nil, Retorno sempre é nulo. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbclosearea +/*/ +binary function dbclosearea() +return + + +/*/{Protheus.doc} dbcommit +Salva em disco todas as atualizações pendentes na área de trabalho corrente. + +@type binary function +@sintax DBCommit() => Nil +@return Nil, Retorno sempre é nulo. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbcommit +/*/ +binary function dbcommit() +return + + +/*/{Protheus.doc} dbcommitall +Salva em disco todas as atualizações pendentes na área de trabalho corrente. + +@type binary function +@sintax DBCommitAll() => Nil +@return Nil, Retorno sempre é nulo. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbcommitall +/*/ +binary function dbcommitall() +return + + +/*/{Protheus.doc} dbcreateindex +Cria um indice para Tabela/View + +@type binary function +@sintax DBCreateIndex(, , [bExprKey], [lUnique]) => Nil +@return Nil, Retorno sempre é nulo. + +@param , character, Indica o nome do arquivo de índice que será criado +@param , character, Expressão das chaves do índice que será criado na forma de string. +@param [bexprkey], codeblock, Expressão das chaves do índice que será criado na forma executável. +@param [lunique], logical, Valor lógico para especificar que o indice será unico. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbcreateindex +/*/ +binary function dbcreateindex(cname, cexprkey, bexprkey, lunique) +return + + +/*/{Protheus.doc} dbdelete +Marca o registro atual para exclusão. + +@type binary function +@sintax DBDelete() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbdelete +/*/ +binary function dbdelete() +return + + +/*/{Protheus.doc} dbeval +Avalia um bloco de código para cada registro que atenda um escopo definido, através dos blocos da primeira e segunda condição. + +@type binary function +@sintax DBEval(, [bFirstCondition], [bSecondCondition], [nCount], [nRecno], [lRest]) => Nil +@return Nil, Sempre retorna nulo. + +@param , codeblock, Indica o bloco de código que será executado para cada registro processado. +@param [bfirstcondition], codeblock, Primeiro Code Block com condição para inserir registro. +@param [bsecondcondition], codeblock, Segundo Code Block com condição para inserir registro. +@param [ncount], numeric, Numero maximo de registros a ser processado. +@param [nrecno], numeric, Unico registro a ser processado. +@param [lrest], logical, Indica que os demais registros serão processados. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbeval +/*/ +binary function dbeval(bblock, bfirstcondition, bsecondcondition, ncount, nrecno, lrest) +return + + +/*/{Protheus.doc} dbfieldinfo +Obtém informação de um determinado campo da tabela corrente. + +@type binary function +@sintax DBFieldInfo(, ) => variant +@return variant, Retorna a informação do campo. + +@param , numeric, Indica o tipo de informação que será verificada. +@param , numeric, Indica a posição do campo que será verificado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbfieldinfo +/*/ +binary function dbfieldinfo(ntype, nfield) +return + + +/*/{Protheus.doc} dbfilter +Retorna a expressão do filtro ativo na área de trabalho corrente. + +@type binary function +@sintax DBFilter() => character +@return character, Retorna a expressão do filtro ativo na área de trabalho corrente. Caso não exista um filtro ativo, o retorno será uma string nula \(""\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbfilter +/*/ +binary function dbfilter() +return + + +/*/{Protheus.doc} dbfiltercb +Retorna o codeblock do filtro ativo na área de trabalho corrente. + +@type binary function +@sintax DBFilterCB() => codeblock +@return codeblock, Retorna o codeblock ativo na área de trabalho corrente. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbfiltercb +/*/ +binary function dbfiltercb() +return + + +/*/{Protheus.doc} dbgetactfld +Retorna os campos visíveis de um alias. + +@type binary function +@sintax dbGetActFld() => character +@return character, Retorna uma string separada por vírgulas \(","\) com todos os campos visíveis de um alias e cuja visibilidade lógica não foi desativada. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbgetactfld +/*/ +binary function dbgetactfld() +return + + +/*/{Protheus.doc} dbgobottom +Posiciona a tabela corrente no último registro lógico. + +@type binary function +@sintax DBGoBottom() => Nil +@return Nil, Retorno sempre é nulo. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbgobottom +/*/ +binary function dbgobottom() +return + + +/*/{Protheus.doc} dbgoto +Posiciona a tabela corrente em um determinado registro, conforme a ordem física \(sequência sobre o recno\). + +@type binary function +@sintax DBGoTo() => Nil +@return Nil, Retorno sempre é nulo. + +@param , numeric, Indica a posição desejada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbgoto +/*/ +binary function dbgoto(npos) +return + + +/*/{Protheus.doc} dbgotop +Posiciona a tabela corrente no primeiro registro lógico. + +@type binary function +@sintax DBGoTop() => Nil +@return Nil, Retorno sempre é nulo. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbgotop +/*/ +binary function dbgotop() +return + + +/*/{Protheus.doc} dbinfo +Obtêm informações sobre a tabela corrente. + +@type binary function +@sintax DBInfo() => variant +@return variant, Retorna a informação da tabela, ou seja, a informação requisitada pelo usuário \(O tipo depende da informação requisitada\). Caso não tenha tabela corrente, o retorno será nulo. + +@param , numeric, Indica o tipo de informação que será verificada. Para mais informações, consulte a área Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbinfo +/*/ +binary function dbinfo(ninfo) +return + + +/*/{Protheus.doc} dbininsert +Retorna se a tabela está em modo de inserção de registros ou não. + +@type binary function +@sintax DBInInsert() => logical +@return logical, Retorna **.T.** se estiver inserindo registros; caso contrário, **.F.**. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbininsert +/*/ +binary function dbininsert() +return + + +/*/{Protheus.doc} dbl2dt +Converte uma Data em double \(decimal de ponto flutuante\) para data no formato "YYYYMMDD hh:mm:ss.fff" + +@type binary function +@sintax Dbl2Dt() => character +@return character, Retorna a data no formato "YYYYMMDD hh:mm:ss.fff" + +@param , numeric, Número decimal de ponto flutuante onde a parte inteira é o numero de dias e a parte decimal é o número de milissegundos a partir das 00:00:00.000 +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbl2dt +/*/ +binary function dbl2dt(ndt) +return + + +/*/{Protheus.doc} dbnickindexkey +Retorna o IndexKey, ou seja, a expressão do índice identificado pelo apelido. + +@type binary function +@sintax DBNickIndexKey() => character +@return character, Retorna a expressão do índice identificado pelo apelido. Caso não exista índice com o apelido especificado, o retorno será uma string nula \(""\). + +@param , character, Indica o apelido da ordem do índice. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbnickindexkey +/*/ +binary function dbnickindexkey(cnick) +return + + +/*/{Protheus.doc} dborderinfo +Obtêm informações sobre determinada ordem de índice. + +@type binary function +@sintax DBOrderInfo() => variant +@return variant, Retorna a informação requisitada pelo usuário para a ordem atual do alias corrente em uso. De acordo com o tipo de informação solicitado, o retorno pode ser "C" caractere ou "N" numérico. + +@param , numeric, Indica a informação desejada do índice corrente. Para mais informações, consulte a área de Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dborderinfo +/*/ +binary function dborderinfo(ntipoinfo) +return + + +/*/{Protheus.doc} dbrecall +Desmarca o registro atual caso ele tenha sido marcado para exclusão. + +@type binary function +@sintax DBRecall() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbrecall +/*/ +binary function dbrecall() +return + + +/*/{Protheus.doc} dbrecordinfo +Obtêm informações sobre o registro atual da tabela corrente. + +@type binary function +@sintax DBRecordInfo(, [@nRecord]) => variant +@return variant, Retorna a informação do registro. + +@param , numeric, Indica o tipo de informação que será verificada. +@param [@nrecord], numeric, Indica o número do registro em que está posicionado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbrecordinfo +/*/ +binary function dbrecordinfo(ninfotype, nrecord) +return + + +/*/{Protheus.doc} dbrlock +Bloqueia o registro atual ou o especificado. + +@type binary function +@sintax DBRLock([nRec]) => logical +@return logical, Retorna verdadeiro \(.T.\), se o registro for bloqueado com sucesso; caso contrário, falso \(.F.\). + +@param [nrec], numeric, Indica o número do registro que será bloqueado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbrlock +/*/ +binary function dbrlock(nrec) +return + + +/*/{Protheus.doc} dbrlocklist +Retorna um array com o índice registros que estão bloqueados na tabela atual. + +@type binary function +@sintax DBRLockList() => array +@return array, Retorna uma lista com os números dos registros bloqueados na tabela corrente. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbrlocklist +/*/ +binary function dbrlocklist() +return + + +/*/{Protheus.doc} dbrunlock +Libera determinado registro bloqueado. + +@type binary function +@sintax DBRUnlock([nRec]) => NIL +@param [nrec], numeric, Indica o número do registro que será desbloqueado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbrunlock +/*/ +binary function dbrunlock(nrec) +return + + +/*/{Protheus.doc} dbseek +Localiza um registro com determinado valor da expressão de chave de índice. + +@type binary function +@sintax DBSeek(, [lSoftSeek], [lLast]) => logical +@return logical, Retorna verdadeiro \(.T.\), se encontrar um registro com o valor especificado; caso contrário, falso \(.F.\). + +@param , variant, Indica o valor da chave que será encontrada do tipo caracter. +@param [lsoftseek], logical, Indica se, verdadeiro \(.T.\), posiciona no primeiro registro com expressão de chave maior que o valor procurado; caso contrário, falso \(.F.\) \(Valor padrão\). +@param [llast], logical, Parâmetro de compatibilidade. Deve ser informado o valor nulo \( NIL \). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbseek +/*/ +binary function dbseek(xexp, lsoftseek, llast) +return + + +/*/{Protheus.doc} dbselectarea +Define a área de trabalho especificada como ativa. + +@type binary function +@sintax DBSelectArea() => NIL +@param , variant, Indica a área de trabalho que ficará ativa. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbselectarea +/*/ +binary function dbselectarea(xarea) +return + + +/*/{Protheus.doc} dbsetactfld +Altera a visibilidade lógica de um ou mais campos de um alias. + +@type binary function +@sintax dbSetActFld() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbsetactfld +/*/ +binary function dbsetactfld() +return + + +/*/{Protheus.doc} dbsetdriver +Retorna a RDD padrão que é utilizada, podendo alterá-la. + +@type binary function +@sintax DBSetDriver([cRDD]) => character +@return character, Retorna o nome da RDD padrão. + +@param [crdd], character, Indica a nova RDD padrão. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbsetdriver +/*/ +binary function dbsetdriver(crdd) +return + + +/*/{Protheus.doc} dbsetfilter +Define um filtro de visualização do alias corrente. + +@type binary function +@sintax DBSetFilter(, ) => Nil +@return Nil, Retorno sempre é nulo. + +@param , codeblock, Bloco de código AdvPL avaliado para determinar a visibilidade dos registros. +@param , character, Condição de filtro expressada no bloco de código como string. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbsetfilter +/*/ +binary function dbsetfilter(bcond, ccond) +return + + +/*/{Protheus.doc} dbsetnickname +Define um apelido para uma determinada ordem. + +@type binary function +@sintax DBSetNickname(, [cNickname]) => character +@return character, Retorna o apelido corrente. Caso a ordem especificada não seja encontrada, não consiga setar o apelido ou não havia apelido, o retorno será uma string nula \(""\). + +@param , character, Indica o nome da ordem que receberá o apelido. +@param [cnickname], character, Indica o nome do apelido da ordem que será setada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbsetnickname +/*/ +binary function dbsetnickname(cindex, cnickname) +return + + +/*/{Protheus.doc} dbstruct +Retorna um array contendo a estrutura da tabela aberta sob a Alias atual. + +@type binary function +@sintax DBStruct() => array +@return array, Retorna um array com a estrutura dos campos. Cada elemento é um subarray contendo nome, tipo, tamanho e decimais. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbstruct +/*/ +binary function dbstruct() +return + + +/*/{Protheus.doc} dbunlock +Retira todos os bloqueios de registros e de arquivos da tabela atual. + +@type binary function +@sintax DBUnlock() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbunlock +/*/ +binary function dbunlock() +return + + +/*/{Protheus.doc} dbunlockall +Retira o bloqueio de todos os registro e arquivos de todas as tabelas abertas em uma área de trabalho. + +@type binary function +@sintax DBUnlockAll() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbunlockall +/*/ +binary function dbunlockall() +return + + +/*/{Protheus.doc} dbusearea +Abre uma tabela de dados na área de trabalho atual ou na primeira área de trabalho disponível. + +@type binary function +@sintax DBUseArea([lNewArea], [cDriver], , , [lShared], [lReadOnly]) => Nil +@return Nil, Retorno sempre é nulo. + +@param [lnewarea], logical, Caso verdadeiro, indica que a tabela deve ser aberta em uma nova workarea \(Default=.F.\) +@param [cdriver], character, Informa o Driver \(RDD\) a ser utilizada para a abertura da tabela. Caso não especificado \(NIL\), será usado o driver default de acesso a arquivos locais. +@param , character, Nome da arquivo/tabela a ser aberta. Caso o driver utilizado acesse tabelas no sistema de arquivos, deve ser informado um path no servidor de aplicação. Não é possível abrir tabelas de dados no SmartClient. +@param , character, Nome dado ao ALIAS desta tabela, para ser referenciado no programa Advpl. +@param [lshared], logical, Caso verdadeiro, indica que a tabela deve ser aberta em modo compartilhado, isto é, outros processos também poderão abrir esta tabela. +@param [lreadonly], logical, Caso verdadeiro, indica que este alias será usado apenas para leitura de dados. Caso contrário, estas operações serão permitidas. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dbusearea +/*/ +binary function dbusearea(lnewarea, cdriver, cfile, calias, lshared, lreadonly) +return + + +/*/{Protheus.doc} dec_add +Realiza a soma dos decimais especificados, nos parâmetros <**dLeft**> e <**dRight**>, e retorna um novo decimal com o valor do resultado. + +@type binary function +@sintax DEC_ADD(, ) => decimal +@return decimal, Retorna o resultado da soma dos dois valores \(<**dLeft**> + <**dRight**>\). + +@param , decimal, Indica o valor base. +@param , decimal, Indica o valor a ser somado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dec_add +/*/ +binary function dec_add(dleft, dright) +return + + +/*/{Protheus.doc} dec_create +Esta função permite criar um decimal com valor inicial, precisão e escala especificados. + +@type binary function +@sintax DEC_CREATE(, , ) => decimal +@return decimal, Retorna o novo decimal criado. + +@param , variant, Indica o valor inicial do decimal. Somente caractere ou numérico. +@param , numeric, Indica a precisão do decimal. O valor deve ser maior que zero e menor que 64. +@param , numeric, Indica a escala do decimal. Valor deve ser maior ou igual a zero e menor que o parâmetro <**iPrecision**>. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dec_create +/*/ +binary function dec_create(xvalue, iprecision, iscale) +return + + +/*/{Protheus.doc} dec_div +Realiza a divisão de decimais de ponto fixo. + +@type binary function +@sintax DEC_DIV(, ) => decimal +@return decimal, Retorna o resultado da divisão dos dois valores \(<**dLeft**> / <**dRight**>\). + +@param , decimal, Indica o dividendo da operação. +@param , decimal, Indica o divisor da operação. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dec_div +/*/ +binary function dec_div(dleft, dright) +return + + +/*/{Protheus.doc} dec_mod +Retorna o resto da divisão de decimais de ponto fixo. + +@type binary function +@sintax DEC_MOD(, ) => decimal +@return decimal, Retorna o resto da divisão \(<**dLeft**> % <**dRight**>\). + +@param , decimal, Indica o dividendo da operação. +@param , decimal, Indica o divisor da operação. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dec_mod +/*/ +binary function dec_mod(dleft, dright) +return + + +/*/{Protheus.doc} dec_mul +Realiza a multiplicação de decimais de ponto fixo. + +@type binary function +@sintax DEC_MUL(, ) => decimal +@return decimal, Retorna o resultado da multiplicação dos dois valores \(<**dLeft**> \* <**dRight**>\). + +@param , decimal, Indica o valor base. +@param , decimal, Indica o valor a ser multiplicado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dec_mul +/*/ +binary function dec_mul(dleft, dright) +return + + +/*/{Protheus.doc} dec_pow +Retorna a potenciação de decimais de ponto fixo. + +@type binary function +@sintax DEC_POW(, ) => decimal +@return decimal, Retorna a potenciação dos parâmetros \(<**dLeft**> ^ <**dRight**>\). + +@param , decimal, Indica a base da operação. +@param , decimal, Indica o expoente da operação. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dec_pow +/*/ +binary function dec_pow(dleft, dright) +return + + +/*/{Protheus.doc} dec_rescale +Realiza rescale de um decimal de ponto fixo + +@type binary function +@sintax DEC_RESCALE(, , [nRound]) => decimal +@return decimal, Retorna o número reescalonado. + +@param , decimal, Indica o número que deve ser reescalonado. +@param , numeric, Indica a nova escala do número. +@param [nround], numeric, Indica o tipo de rescale. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dec_rescale +/*/ +binary function dec_rescale(dnum, nscale, nround) +return + + +/*/{Protheus.doc} dec_resize +Permite alterar a precisão e a escala de um decimal de ponto fixo. + +@type binary function +@sintax DEC_RESIZE(, , , [nRound]) => decimal +@return decimal, Retorna o decimal modificado de acordo com os parâmetros informados. + +@param , decimal, Indica o número que será alterado. +@param , numeric, Indica a quantidade de dígitos do decimal. +@param , numeric, Indica a quantidade de casas decimais. +@param [nround], numeric, Indica o tipo de arredondamento das casas decimais. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dec_resize +/*/ +binary function dec_resize(dnum, nprecision, nscale, nround) +return + + +/*/{Protheus.doc} dec_round +Arredonda um decimal de ponto fixo sem alterar a quantidade de dígitos total ou a quantidade de casas decimais. + +@type binary function +@sintax DEC_ROUND(, ) => decimal +@return decimal, Retorna o decimal arredondado para a quantidade de casas decimais indicado em <**nRound**>. + +@param , decimal, Indica o número que será arredonado. +@param , numeric, Indica a quantidade de casas decimais. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dec_round +/*/ +binary function dec_round(dnum, nround) +return + + +/*/{Protheus.doc} dec_sub +Realiza a subtração de decimais de ponto fixo. + +@type binary function +@sintax DEC_SUB(, ) => decimal +@return decimal, Retorna o resultado da subtração dos dois valores \(<**dLeft**> - <**dRight**>\). + +@param , decimal, Indica o valor base. +@param , decimal, Indica o valor a ser subtraído. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dec_sub +/*/ +binary function dec_sub(dleft, dright) +return + + +/*/{Protheus.doc} dec_to_dbl +Retorna o resultado da conversão de um tipo decimal de ponto fixo para numérico. + +@type binary function +@sintax DEC_TO_DBL() => numeric +@return numeric, Resultado da conversão. + +@param , decimal, Indica o valor a ser convertido. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dec_to_dbl +/*/ +binary function dec_to_dbl(dvar) +return + + +/*/{Protheus.doc} decode64 +Converte uma string contendo um buffer codificado em BASE64 para o seu formato original + +@type binary function +@sintax Decode64(, [cFilePath*], [lChangeCase*]) => character +@return character, Retorna uma string convertida para o formato original + +@param , character, Indica uma string codificada em BASE64 que será decodificada. +@param [cfilepath*], character, Indica um arquivo para salvar o resultado da conversão +@param [lchangecase*], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/decode64 +/*/ +binary function decode64(ctoconvert, cfilepath*, lchangecase*) +return + + +/*/{Protheus.doc} decodeutf16 +Converte uma string UTF-16 \(16-bit Unicode Transformation Format\) para a codificação CP1252. SetTitleMatchMode, 2 \* @advpl_param cText CR Indica a string UTF-16 que será convertida para o formato CP1252. + +@type binary function +@sintax DecodeUTF16([nEndian]) => character +@return character, Retorna uma nova string no formato CP1252. + +@param [nendian], numeric, Indica o endianness do texto de entrada, podendo ser: 0 - Auto-Select \(padrão\), 1 - Big-Endian e 2 - Little-Endian. Caso não seja especificado se é big-endian ou little-endian, a função verifica os primeiros bytes da sequência, procurando o Byte Order Mark \(BOM\). Caso não seja encontrado o BOM, a string é tratada como utf-16be \( big-endian \) +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/decodeutf16 +/*/ +binary function decodeutf16(nendian) +return + + +/*/{Protheus.doc} decodeutf8 +Converte uma string UTF-8 \(8-bit Unicode Transformation Format\) para a codificação CP1252. + +@type binary function +@sintax DecodeUTF8() => character +@return character, Retorna uma nova string no formato CP1252. + +@param , character, Indica a string UTF-8 que será convertida para o formato CP1252. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/decodeutf8 +/*/ +binary function decodeutf8(ctext) +return + + +/*/{Protheus.doc} delclassintf +Exclui todas classes de interface da thread. + +@type binary function +@sintax DelClassIntf() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/delclassintf +/*/ +binary function delclassintf() +return + + +/*/{Protheus.doc} deleted +Verifica se o registro atual está com marcado para exclusão. + +@type binary function +@sintax Deleted() => logical +@return logical, Retorna verdadeiro \(**.T.**\), se o registro tem marca de excluído; caso contrário, falso \(**.F.**\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/deleted +/*/ +binary function deleted() +return + + +/*/{Protheus.doc} deletekeyini +Exclui a chave de uma determinada seção do arquivo de configuração \(\*.INI\). + +@type binary function +@sintax DeleteKeyIni(, , ) => logical +@return logical, Retorna verdadeiro \(.T.\), se a chave for excluída com sucesso; caso contrário, falso \(.F.\). + +@param , character, Indica o nome da seção que a chave será excluída. Exemplo: Environment, Jobs, General, etc. +@param , character, Indica o nome da chave, no arquivo de configuração \(\*.INI\), que será criada ou alterada na seção do ambiente em uso. +@param , character, Indica o nome do arquivo de configuração \(\*.INI\) do binário. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/deletekeyini +/*/ +binary function deletekeyini(csecao, cchave, cinifile) +return + + +/*/{Protheus.doc} deletesectionini +Exclui uma determinada seção do arquivo de configuração \(\*.INI\). + +@type binary function +@sintax DeleteSectionIni(, ) => logical +@return logical, Retorna verdadeiro \(.T.\), se a chave for excluída; caso contrário, falso \(.F.\). + +@param , character, Indica a seção que será excluída. +@param , character, Indica o nome do arquivo de configuração \(.INI\) do binário. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/deletesectionini +/*/ +binary function deletesectionini(csecao, cinifile) +return + + +/*/{Protheus.doc} delksyslog +Remove um identificador previamente adicionado utilizando a função SetKSysLog + +@type binary function +@sintax DelKSysLog() => NIL +@param , character, chave de identificação +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/delksyslog +/*/ +binary function delksyslog(ckey) +return + + +/*/{Protheus.doc} delnamedclassintf +descrição da funcao + +@type binary function +@sintax DelNamedClassIntf([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/delnamedclassintf +/*/ +binary function delnamedclassintf(tnomevar) +return + + +/*/{Protheus.doc} delobjdata +descrição da funcao + +@type binary function +@sintax DelObjData([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/delobjdata +/*/ +binary function delobjdata(tnomevar) +return + + +/*/{Protheus.doc} descend +Converte e retorna a forma complementada da expressão string especificada. + +@type binary function +@sintax Descend() => character +@return character, Retorna a string especificada como parâmetro de uma forma complementada. Um DESCEND\(\) de CHR\(0\) sempre retorna CHR\(0\). + +@param , character, Indica a seqüência de caracteres que será analisada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/descend +/*/ +binary function descend(cstring) +return + + +/*/{Protheus.doc} directory +Cria um array bidimensional com o conteúdo de um diretório. +Para isso, retorna informações a respeito dos arquivos no diretório corrente ou especificado. Essa função é semelhante a ADir\(\), porém, retorna um único array ao invés de adicionar valores a uma séria de arrays existentes passados por referência. + +@type binary function +@sintax Directory(, [cAtributos], [uParam3], [lCaseSensitive], [nTypeOrder]) => array +@return array, Retorna um array de subarrays, sendo que cada subarray contém informações sobre cada arquivo que atenda o parâmetro \(\). Para mais detalhes, consulte a tabela B na área Observações. + +@param , character, Indica o diretório que será pesquisado e os arquivos que serão apresentados. Além disso, caracteres do tipo curinga são permitidos na especificação de arquivos. Caso esse parâmetro não seja especificado, o valor padrão é \*.\*. +@param [catributos], character, Indica quais arquivos com atributos especiais devem ser incluídos no array. Esse parâmetro consiste em uma string que contém um ou mais dos caracteres H, S, D e V. Para mais detalhes, consulte a tabela A na área Observações. +@param [uparam3], numeric, Compatibility parameter. Pass NIL. +@param [lcasesensitive], logical, Se verdadeiro \(.T.\), indica o nome do arquivo será transformado para letra maiúscula. Caso falso \(.F.\), o nome do arquivo será retornado conforme escrito no disco rígido. +@param [ntypeorder], numeric, Indica o tipo de ordenação do resultado da função. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/directory +/*/ +binary function directory(cdiresp, catributos, uparam3, lcasesensitive, ntypeorder) +return + + +/*/{Protheus.doc} dirremove +Remove um diretório específico. + +@type binary function +@sintax DirRemove(, [uParam2], [lChangeCase]) => logical +@return logical, Retorna verdadeiro \(.T.\), se o diretório for removido com sucesso; caso contrário, falso \(.F.\). + +@param , character, Indica o nome do diretório que será removido. +@param [uparam2], numeric, Compatibility parameter. Pass NIL. +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dirremove +/*/ +binary function dirremove(cpath, uparam2, lchangecase) +return + + +/*/{Protheus.doc} diskspace +Retorna o número de bytes que estão disponíveis em uma determinada unidade de disco da estação remota. + +@type binary function +@sintax DiskSpace([nDrive]) => numeric +@return numeric, Retorna o número de bytes que estão disponíveis na unidade de disco. +Em caso de erro, retorna -1. + +@param [ndrive], numeric, Indica o número da unidade de disco \(drive\). Sendo: 0=Unidade de disco atual da estação \(Padrão\), 1=Drive A: da estação remota, 2=Drive B da estação remota, 3=Drive C: da estação remota, 4=Drive D: da estação remota e etc. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/diskspace +/*/ +binary function diskspace(ndrive) +return + + +/*/{Protheus.doc} dow +Retorna o dia da semana no formato numérico. + +@type binary function +@sintax Dow() => numeric +@return numeric, Retorna o número \(entre 0 e 7\) do dia da semana. Sendo, Domingo=1 e Sábado=7. No entanto, se o parâmetro dData estiver vazio, a função retornará zero \(0\). + +@param , date, Indica o valor data que será considerado para obter o dia da semana. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dow +/*/ +binary function dow(ddata) +return + + +/*/{Protheus.doc} dt2dbl +Converte uma Data no formato "YYYYMMDD hh:mm:ss.fff" para um double \(decimal de ponto flutuante\) + +@type binary function +@sintax Dt2Dbl() => numeric +@return numeric, Retorna um número Double com a informação de data/hora. + +@param , character, Data a ser convertida, sempre deve ser informada no formato "YYYYMMDD hh:mm:ss.fff" +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dt2dbl +/*/ +binary function dt2dbl(cexp) +return + + +/*/{Protheus.doc} dtoc +Converte um valor data para uma string com formato mês, dia e ano \(mm/dd/aa\). + +@type binary function +@sintax DToC() => character +@return character, Retorna a data convertida. + +@param , date, Indica a data que será convertida. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dtoc +/*/ +binary function dtoc(ddata) +return + + +/*/{Protheus.doc} dtos +Converte um valor data para uma string com formato ano, mês e dia \(aaaammdd\). + +@type binary function +@sintax DToS() => character +@return character, Retorna a data convertida para oito caracteres no formato aaaammdd. + +@param , date, Indica a data que será convertida. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/dtos +/*/ +binary function dtos(ddata) +return + + +/*/{Protheus.doc} elaptime +Retorna uma string, com o número de segundos decorridos entre dois horários \(hora inicial e final\) diferentes, no formato hh:mm:ss. + +@type binary function +@sintax ElapTime(, ) => character +@return character, Retorna a diferença do tempo no formato hh:mm:ss. + +@param , character, Indica a hora inicial no formato hh:mm:ss +@param , character, Indica a hora final no formato hh:mm:ss +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/elaptime +/*/ +binary function elaptime(chorainicial, chorafinal) +return + + +/*/{Protheus.doc} embaralha +Embaralha/Desembaralha uma string. + +@type binary function +@sintax Embaralha(, ) => character +@return character, Retorna string embaralhada/desembaralhada. + +@param , character, Indica o texto que será embaralhado. +@param , numeric, Quando 0 embaralha String. Quando 1 desembaralha string. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/embaralha +/*/ +binary function embaralha(ctexto, ntipo) +return + + +/*/{Protheus.doc} empty +Determina se o resultado de uma expressão é vazio. + +@type binary function +@sintax Empty() => logical +@return logical, Retorna verdadeiro \(.T.\), se a expressão resultar em um valor vazio; caso contrário, falso \(.F.\) + +@param , variant, Indica uma expressão ou variável de qualquer tipo de dado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/empty +/*/ +binary function empty(xexp) +return + + +/*/{Protheus.doc} encode64 +Converte uma string ou arquivo\* de texto ou binário para uma nova string codificada segundo o padrão BASE64 + +@type binary function +@sintax Encode64([cToConvert], [cFilePath*], [lZip*], [lChangeCase*]) => character +@return character, Retorna a string codificada em BASE64. + +@param [ctoconvert], character, Indica a string ASCII que será convertida para BASE64 +@param [cfilepath*], character, Caminho para arquivo\* que será convertido para BASE64 +@param [lzip*], logical, Se verdadeiro\(.T.\), irá compactar o conteúdo do arquivo antes de transformar em BASE64; caso contrário \(.F.\) não compacta o conteúdo do arquivo. Valor padrão \(.F.\) +@param [lchangecase*], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/encode64 +/*/ +binary function encode64(ctoconvert, cfilepath*, lzip*, lchangecase*) +return + + +/*/{Protheus.doc} encodeutf16 +Converte uma string de origem em CP1252 \( Windows 1252 code-page \) para a codificação UTF-16 \( 16-bit Unicode Transformation Format \). + +@type binary function +@sintax EncodeUTF16(, [nEndian]) => character +@return character, Retorna uma nova string no formato UTF-16. + +@param , character, Indica a string que será convertida para o formato UTF-16. A string usada como parâmetro deve atender à codificação CP1252. +@param [nendian], numeric, Indica o endianness do texto de saída, podendo ser: 1 - Big-Endian \(padrão\) e 2 - Little-Endian. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/encodeutf16 +/*/ +binary function encodeutf16(ctext, nendian) +return + + +/*/{Protheus.doc} encodeutf8 +Converte uma string de origem em CP1252 \( Windows 1252 code-page \) para a codificação UTF-8 \( 8-bit Unicode Transformation Format \). + +@type binary function +@sintax EncodeUTF8() => character +@return character, Retorna a string no formato UTF-8. + +@param , character, Indica a string que será convertida para o formato UTF-8. A string usada como parâmetro deve atender à codificação CP1252. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/encodeutf8 +/*/ +binary function encodeutf8(ctext) +return + + +/*/{Protheus.doc} encryptrsa +Realiza a criptografia de uma string utilizando o algoritmo RSA \(Ron Rivest, Adi Shamir e Len Adleman\). + +@type binary function +@sintax EncryptRSA(, , [uParam3]) => character +@return character, Retorna a string <**cInfo**> criptografada com o algoritmo RSA, utilizando a chave pública apontada por <**cKeyFile**>. + +@param , character, Indica o nome do arquivo que contém a chave pública que será usada para criptografar o dado. +@param , character, Indica a string que será criptografada. +@param [uparam3], logical, Compatibility parameter. Pass NIL. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/encryptrsa +/*/ +binary function encryptrsa(ckeyfile, cinfo, uparam3) +return + + +/*/{Protheus.doc} eof +Informa se está no fim do Arquivo/Tabela. + +@type binary function +@sintax Eof() => logical +@return logical, Retorna .T. \(Verdadeiro\) se estiver no fim do arquivo/tabela; Caso contrário, .F. \(Falso\) + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/eof +/*/ +binary function eof() +return + + +/*/{Protheus.doc} errorblock +Recupera e/ou define um bloco de código para ser avaliado quando ocorrer um erro em tempo de execução. + +@type binary function +@sintax ErrorBlock([bErrorHandler]) => codeblock +@return codeblock, Retorna o bloco de código de tratamento de erro corrente. + +@param [berrorhandler], codeblock, Indica o bloco de código que será executado sempre que houver um erro em tempo de execução. Quando o bloco de código é avaliado, esse parâmetro é passado na forma de um objeto erro como argumento pelo sistema. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/errorblock +/*/ +binary function errorblock(berrorhandler) +return + + +/*/{Protheus.doc} eval +Executa um bloco de código + +@type binary function +@sintax Eval(, [xVariavel]) => variant +@return variant, Retorna o valor da última expressão do bloco de código. + +@param , codeblock, Indica o bloco de código que será avaliado. +@param [xvariavel], variant, Indica o argumento que será avaliado no bloco de código. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/eval +/*/ +binary function eval(bbloco, xvariavel) +return + + +/*/{Protheus.doc} evpdigest +Calcula o hash criptrográfico \(ou digest\) de um conteúdo do tipo "C" Caractere informado como parâmetro. + +@type binary function +@sintax EVPDigest(, ) => character +@return character, Retorna o hash calculado a partir de **cContent** como uma string binária em AdvPL -- cada caractere representa um byte de retorno, com os valores de 0 a 255. + +@param , character, Indica o conteúdo que será avaliado para calcular o hash. +@param , numeric, Indica o tipo de algoritmo de hash criptográfico que será utilizado para o cálculo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/evpdigest +/*/ +binary function evpdigest(ccontent, ntype) +return + + +/*/{Protheus.doc} evpprivsign +Assina usando algoritmo digest um determinado conteúdo usando uma chave privada. + +@type binary function +@sintax EVPPrivSign([cPathKey], [cContent], [nType], [cSigned], [cPassword], [cErrStr]) => NIL +@param [cpathkey], character, Indica a string que contém o caminho para a chave privada formato .PEM . +@param [ccontent], character, Indica a string que será assinada. +@param [ntype], numeric, Indica o tipo do algortimo digest que será utilizado. +@param [csigned], character, Indica uma string que contém o valor assinado. +@param [cpassword], character, Indica a senha da chave privada apontada por cPathKey. +@param [cerrstr], character, Indica a variável para retornar as mensagens de erro. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/evpprivsign +/*/ +binary function evpprivsign(cpathkey, ccontent, ntype, csigned, cpassword, cerrstr) +return + + +/*/{Protheus.doc} evpprivvery +Verifica usando algoritmo digest um determinado conteúdo usando uma chave pública. + +@type binary function +@sintax EVPPrivVery([cPathKey], [cContent], [nType], [cSigned], [cPassword], [cErrStr]) => NIL +@param [cpathkey], character, Indica o caminho path da chave pública que deve ser no formato do arquivo .PEM. +@param [ccontent], character, Indica o valor que será verificado, com um conteúdo já assinado. +@param [ntype], numeric, Indica o tipo de algoritmo digest que será utilizado para verificar a assinatura. +@param [csigned], character, Indica uma string que contém o valor assinado. +@param [cpassword], character, Indica a senha da chave pública apontada por cPathKey. +@param [cerrstr], character, Indica a variável para retornar as mensagens de erro. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/evpprivvery +/*/ +binary function evpprivvery(cpathkey, ccontent, ntype, csigned, cpassword, cerrstr) +return + + +/*/{Protheus.doc} execindllclose +Encerra a conexão com uma DLL \(*Dynamic-link library *, ou Biblioteca de vinculo dinâmica\). + +@type binary function +@sintax ExecInDllClose() => NIL +@param , numeric, Indica o handle da DLL obtida através da função ExecInDLLOpen\(\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/execindllclose +/*/ +binary function execindllclose(nhandle) +return + + +/*/{Protheus.doc} execindllopen +Abre uma DLL \(*Dynamic-link library *, ou Biblioteca de vinculo dinâmica\) para executar functions ou procedures. + +@type binary function +@sintax ExecInDllOpen() => numeric +@return numeric, Retorna o handle de abertura da DLL. + +@param , character, Indica o nome e caminho da DLL. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/execindllopen +/*/ +binary function execindllopen(cdllname) +return + + +/*/{Protheus.doc} execindllrun +Executa funções ou procedures de uma DLL \(*Dynamic-link library *, ou Biblioteca de vinculo dinâmica\). + +@type binary function +@sintax ExecInDllRun(, , ) => NIL +@param , character, Indica o handle da DLL obtida através da função ExecInDLLOpen\(\). +@param , numeric, Indica a opção que será executada pela DLL. +@param , character, Indica o buffer, no formato caracter, que será recebido pela DLL. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/execindllrun +/*/ +binary function execindllrun(nhandle, nopc, cbuffer) +return + + +/*/{Protheus.doc} exedllrun2 +Executa funções ou procedures de uma DLL \(*Dynamic-link library *, ou Biblioteca de vinculo dinâmica\). + +@type binary function +@sintax ExeDLLRun2(, , ) => NIL +@param , character, Indica o handle da DLL obtida através da função ExecInDLLOpen\(\). +@param , numeric, Indica a opção que será executada pela DLL. +@param , character, Indica o buffer, no formato caracter, que será recebido pela DLL. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/exedllrun2 +/*/ +binary function exedllrun2(nhandle, nopc, cbuffer) +return + + +/*/{Protheus.doc} exedllrun3 +Executa funções ou procedures de uma DLL \(*Dynamic-link library *, ou Biblioteca de vinculo dinâmica\). + +@type binary function +@sintax ExeDLLRun3(, , ) => NIL +@param , character, Indica o handle da DLL obtida através da função ExecInDLLOpen\(\). +@param , numeric, Indica a opção que será executada pela DLL. +@param , character, Indica o buffer, no formato caracter, que será recebido pela DLL. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/exedllrun3 +/*/ +binary function exedllrun3(nhandle, nopc, cbuffer) +return + + +/*/{Protheus.doc} existdir +Determina se um diretório existe e é válido. + +@type binary function +@sintax ExistDir(, [uParam2], [lChangeCase]) => logical +@return logical, Retorna verdadeiro \(.T.\), se o diretório existir; caso contrário, falso \(.F.\). + +@param , character, Indica o nome do diretório que será verificado. +@param [uparam2], numeric, Compatibility parameter. Pass NIL. +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/existdir +/*/ +binary function existdir(cpath, uparam2, lchangecase) +return + + +/*/{Protheus.doc} exp +Calcula o valor do antilogaritmo de base 'e' \(base do logaritmo natural\) de um valor numérico. + +@type binary function +@sintax Exp() => numeric +@return numeric, Retorna o valor do antilogaritmo de base 'e' do expoente informado. + +@param , numeric, Indica o expoente que será utilizado no cálculo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/exp +/*/ +binary function exp(nexpoente) +return + + +/*/{Protheus.doc} len +Retorna o tamanho de uma variável. + +@type binary function +@sintax Len() => numeric +@return numeric, Retorna o tamanho de **xParam**. + +@param , variant, Variável que será avaliada +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/len +/*/ +binary function len(xparam) +return + + +/*/{Protheus.doc} lower +Converte o texto para letras minúsculas. + +@type binary function +@sintax Lower() => character +@return character, Retorna o texto com letras minúsculas. + +@param , character, Indica o texto que será convertido de letras maiúsculas para minúsculas. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/lower +/*/ +binary function lower(ctext) +return + + +/*/{Protheus.doc} ltrim +Remove os espaços em branco à esquerda de uma string. + +@type binary function +@sintax LTrim() => character +@return character, Retorna uma string com espaços em branco à esquerda removidos. + +@param , character, Indica o texto cujos espaços em branco serão removidos. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ltrim +/*/ +binary function ltrim(ctext) +return + + +/*/{Protheus.doc} round +Arredonda um valor decimal para a quantidade especificada de dígitos. + +@type binary function +@sintax Round(, ) => numeric +@return numeric, Retorna um valor numérico arredondado. + +@param , numeric, Indica o valor que será arredondado. +@param , numeric, Indica o número de casas decimais para arredondamento. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/round +/*/ +binary function round(nvalue, npoint) +return + + +/*/{Protheus.doc} rtrim +Remove os espaços em branco à direita de uma string. + +@type binary function +@sintax RTrim() => character +@return character, Retorna uma string com espaços em branco à direita removidos. + +@param , character, Indica o texto cujos espaços em branco serão removidos. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/rtrim +/*/ +binary function rtrim(ctext) +return + + +/*/{Protheus.doc} strzero +A partir de um numérico esta função retorna uma string formatada, inserindo zeros à esquerda e/ou o símbolo decimal \("."\) em suas casas, de acordo com as informações do parâmetro. + +@type binary function +@sintax StrZero(, , [nDecimal]) => character +@return character, Retorna uma string a partir do valor numérico e do tamanho informado no parâmetro. + +@param , numeric, Indica o valor numérico que será convertido para string. +@param , numeric, Indica o tamanho da string será gerada. +@param [ndecimal], numeric, Indica o número de casas após o símbolo decimal. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/strzero +/*/ +binary function strzero(nvalor, ntamanho, ndecimal) +return + + +/*/{Protheus.doc} substr +Retorna uma parte especifica da string. + +@type binary function +@sintax SubStr(, , [nLen]) => logical +@return logical, Retorna a string após realizar o tratamento. + +@param , character, Indica a string que será tratada. +@param , numeric, Indica o indice inicial da string <**cText**>. +@param [nlen], numeric, Indica o número de caracteres que retornará a partir de <**nIndex**>. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/substr +/*/ +binary function substr(ctext, nindex, nlen) +return + + +/*/{Protheus.doc} upper +Converte o texto para letras maiúsculas. + +@type binary function +@sintax Upper() => character +@return character, Retorna o texto com letras maiúsculas. + +@param , character, Indica o texto que será convertido de letras minúsculas para maiúsculas. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/upper +/*/ +binary function upper(ctext) +return + + +/*/{Protheus.doc} exuserexception +Exibe a janela de registro de erros encontrados \(Error log\) com a mensagem desejada e abortar a aplicação. + +@type binary function +@sintax ExUserException() => NIL +@param , character, Indica o texto que será apresentado na janela de registros de erros encontrados \(Error log\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/exuserexception +/*/ +binary function exuserexception(ctexto) +return + + +/*/{Protheus.doc} f2bin +Converte o número informado como parâmetro em uma string de 4 caracteres, correspondente à representação binária do número em ponto flutuante. + +@type binary function +@sintax F2Bin() => character +@return character, Retorna uma string de quatro bytes que contém a representação binária do número em ponto flutuante. + +@param , numeric, Indica o valor numérico em ponto flutuante que será convertido. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/f2bin +/*/ +binary function f2bin(nfloat) +return + + +/*/{Protheus.doc} fclose +Fecha um arquivo binário aberto + +@type binary function +@sintax FClose([nHandle]) => numeric +@return numeric, Retorna falso \(.F.\), se ocorrer ao fechar o arquivo; caso contrário, verdadeiro \(.T.\). + +@param [nhandle], numeric, Indica handle do arquivo obtido, previamente, através da função FOpen\(\) ou FCreate\(\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/fclose +/*/ +binary function fclose(nhandle) +return + + +/*/{Protheus.doc} fcount +Retorna a quantidade de campos existentes na estrutura da área de trabalho ativa. + +@type binary function +@sintax FCount() => numeric +@return numeric, Retorna a quantidade de campos existentes na estrutura da área de trabalho ativa. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/fcount +/*/ +binary function fcount() +return + + +/*/{Protheus.doc} fcreate +Cria um arquivo vazio no disco, para operação de escrita em modo exclusivo, com o tamanho de 0 \( zero \) bytes. Se o arquivo especificado já existe no disco, o arquivo é aberto em modo exclusivo, e seu conteúdo é eliminado \( truncado em 0 bytes \). Caso a operação não seja completa com sucesso, a função retorna o handler -1, caso contrário é retornado o handler de acesso ao arquivo, para operações de escrita. + +@type binary function +@sintax FCreate(, [nAtributo], [xParam3], [lChangeCase]) => numeric +@return numeric, Retorna o handle do arquivo para ser usado nas demais funções de manutenção de arquivo. O handle será maior ou igual a zero. Caso não seja possível criar o arquivo, a função retornará o handle -1. Para obter mais detalhes da casua da ocorrência, utilize a função FError. + +@param , character, Indica o nome do arquivo que será criado. Pode-se especificar um path absoluto ou relativo para criar arquivos no ambiente local \(SmartClient\) ou no servidor. +@param [natributo], numeric, Compatibilidade. Deve ser informado o valor nulo \( NIL \) ou 0 \(zero\), o arquivo sempre será criado com atributos default. +@param [xparam3], Nil, Compatibilidade. Deve ser informado o valor nulo \( NIL \) +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/fcreate +/*/ +binary function fcreate(carquivo, natributo, xparam3, lchangecase) +return + + +/*/{Protheus.doc} ferase +Exclui um arquivo do disco. + +@type binary function +@sintax FErase(, [xParam], [lChangeCase]) => numeric +@return numeric, Retorna 0 \(zero\), se o arquivo for apagado com sucesso, e -1, caso não seja possível. Se o retorno for -1, é possível utilizar a função FError\(\) para obter mais detalhes da ocorrência. + +@param , character, Indica o nome do arquivo que será apagado. Além disso, pode-se especificar um path absoluto ou relativo para apagar arquivos na estação local ou no servidor. +@param [xparam], variant, Compatibilidade. Deve ser informado o valor nulo \( NIL \) +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ferase +/*/ +binary function ferase(carquivo, xparam, lchangecase) +return + + +/*/{Protheus.doc} ferror +A função FError\(\) é utilizada para recuperar um código de erro após uma falha em operação com arquivos \( File I/O \). Quando utilizadas funções de manipulação de arquivo em baixo nível \( FCreate, FOpen, FSeek ... \), e uma operação desta natureza apresentou falha e/ou não foi realizada com sucesso, utilizamos a função FError\(\) para recuperar um código de ocorrência que aponta a condição de falha da última operação. + +@type binary function +@sintax FError() => numeric +@return numeric, Retorna um código numérico de erro referente a última operação de arquivo realizada. Caso não haja nenhum erro, a função retorna 0 \(zero\). Na área Observações, consulte os códigos de retorno. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ferror +/*/ +binary function ferror() +return + + +/*/{Protheus.doc} field +Retorna o nome de um campo de uma tabela aberta. + +@type binary function +@sintax Field() => character +@return character, Retorna uma string contendo o nome do campo especificado. + +@param , numeric, Indica a posição do campo na estrutura da tabela. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/field +/*/ +binary function field(npos) +return + + +/*/{Protheus.doc} fieldblock +Retorna um bloco de código para um determinado campo da tabela corrente. + +@type binary function +@sintax FieldBlock() => codeblock +@return codeblock, Retorna o bloco de código para o campo especificado no alias atual. + +@param , character, Indica o nome do campo que será retornado o bloco de código. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/fieldblock +/*/ +binary function fieldblock(cfield) +return + + +/*/{Protheus.doc} fieldget +Recupera o conteúdo de um campo do registro atualmente posicionado no alias selecionado, a partir da sua posição ordinal na estrutura da tabela. + +@type binary function +@sintax FieldGet() => variant +@return variant, Retorna o conteúdo do campo informado no registrual atual do alias aberto. + +@param , numeric, Número da posição ordinal do campo na tabela. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/fieldget +/*/ +binary function fieldget(npos) +return + + +/*/{Protheus.doc} fieldname +Retorna o nome de um campo de uma tabela aberta. + +@type binary function +@sintax FieldName() => character +@return character, Retorna uma string contendo o nome do campo especificado. + +@param , numeric, Indica a posição do campo na estrutura da tabela. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/fieldname +/*/ +binary function fieldname(npos) +return + + +/*/{Protheus.doc} fieldpos +Retorna a posição de um determinado campo dentro da área de trabalho corrente. + +@type binary function +@sintax FieldPos() => numeric +@return numeric, Retorno a posição do campo, caso não exista retorna 0. + +@param , character, Nome do campo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/fieldpos +/*/ +binary function fieldpos(cfield) +return + + +/*/{Protheus.doc} fieldput +Permite definir o valor de um campo em uma tabela utilizando a posição ordinal do campo na estrutura da tabela. + +@type binary function +@sintax FieldPut(, ) => variant +@return variant, Retorna o valor atribuido, caso o número do campo seja inválido retorna NIL. + +@param , numeric, Posição do campo do alias/tabela atuais. +@param , variant, Valor atribuito ao campo especificado, esse valor deve ser do mesmo tipo do campo do alias/tabela. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/fieldput +/*/ +binary function fieldput(npos, xvalue) +return + + +/*/{Protheus.doc} fieldwblock +Retorna um bloco de código para um campo de uma área de trabalho aberta. + +@type binary function +@sintax FieldWBlock(, ) => codeblock +@return codeblock, Retorna o bloco de código para o campo da área de trabalho informada. + +@param , character, Indica o nome do campo que será retornado o bloco de código. +@param , numeric, Indica o número da área de trabalho que será retornado o bloco de código. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/fieldwblock +/*/ +binary function fieldwblock(cfield, nwokarea) +return + + +/*/{Protheus.doc} file +Determina se existe arquivo no diretório ou path AdvPL padrão. + +@type binary function +@sintax File(, [nWhere], [lChangeCase]) => logical +@return logical, Retorna verdadeiro \(.T.\), se o arquivo existir; caso contrário, falso \(.F.\). + +@param , character, Indica o nome do arquivo ou diretório+arquivo que será procurado. Além disso, são aceitos os caracteres curingas \(\* e ?\) e diretórios absolutos e relativos. +@param [nwhere], numeric, Indica o local onde será realizada a procura do arquivo. Sendo: 0 = O acesso depende do path \(Quando for um path relativo a procura será no Application Server; caso seja um path absoluto, a procura será no Smart Client\). 1 = A procura será realizada no diretório de instalação do Application Server. 2 = A procura será realizada no diretório de instalação do Smart Client. +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/file +/*/ +binary function file(carquivo, nwhere, lchangecase) +return + + +/*/{Protheus.doc} findclass +Indica se uma classe, informada através de uma string por parâmetro existe no binário e/ou repositório do ambiente atua. + +@type binary function +@sintax FindClass() => logical +@return logical, Retorna verdadeiro \(.T.\), se a classe for encontrada no RPO ou no binário; caso contrário, falso \(.F.\). + +@param , character, Indica o nome da classe a ser verificada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/findclass +/*/ +binary function findclass(cclassname) +return + + +/*/{Protheus.doc} findfunction +Verifica se uma determinada função está disponível no repositório de objetos ou no binário, do Application Server, para ser executada. + +@type binary function +@sintax Findfunction() => logical +@return logical, Retorna verdadeiro \(.T.\), se a função estiver disponível, no repositório de objetos corrente, para ser executada; caso contrário, falso \(.F.\). + +@param , character, Indica o nome da função que será consultada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/findfunction +/*/ +binary function findfunction(cfuncao) +return + + +/*/{Protheus.doc} flistzip +Lista os arquivos que estão dentro do arquivo compactado em formato Zip. + +@type binary function +@sintax FListZip(, [@nRet], [cSenha]) => array +@return array, Retorna uma lista com os nomes e tamanhos dos arquivos compactados. + +@param , character, Indica o nome do arquivo compactado zip. +@param [@nret], numeric, Retorno da função, se 0 retornou corretamente a lista de arquivos, diferente de 0 se aconteceu algum erro. +@param [csenha], character, Senha que foi utilizada na compactação +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/flistzip +/*/ +binary function flistzip(carquivozip, nret, csenha) +return + + +/*/{Protheus.doc} flock +Bloqueia uma tabela ou arquivo. + +@type binary function +@sintax FLock() => logical +@return logical, Retorna verdadeiro \(.T.\), se a tabela for bloqueada com sucesso; caso contrário, falso \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/flock +/*/ +binary function flock() +return + + +/*/{Protheus.doc} fopen +Abre um arquivo binário. +É uma função de tratamento de arquivo de baixo nível que abre um arquivo binário existente para que possa ser lido e escrito, dependendo do argumento no parâmetro . + +@type binary function +@sintax FOpen(, [nModo], [xParam3], [lChangeCase]) => numeric +@return numeric, Retorna o handle de arquivo aberto, na faixa de 0 a 65.535. Caso ocorra um erro, o retorno será -1. + +@param , character, Indica o nome do arquivo que será aberto que inclui o path, caso haja um. +@param [nmodo], numeric, Indica o modo de acesso DOS solicitado que indicará como o arquivo aberto deve ser acessado. O acesso é uma das categorias relacionadas na tabela A e as retrições de compartilhamento estão na tabela B. O modo padrão é 0 \(zero\), aberto para leitura, com compartilhamento por compatibilidade. Ao definirmos o modo de acesso, deve-se somar um elemento da tabela A com a B. +@param [xparam3], variant, Compatibilidade. Deve ser informado o valor nulo \( NIL \) +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/fopen +/*/ +binary function fopen(carq, nmodo, xparam3, lchangecase) +return + + +/*/{Protheus.doc} fpprecise +Função de Ativar ou Desativar comportamento de Float Point Precise. + +@type binary function +@sintax FPPrecise([lPrecise]) => NIL +@param [lprecise], logical, Verdadeiro \(.T.\) ativa e Falso\(.F.\) desativa \( Default = .F. \) +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/fpprecise +/*/ +binary function fpprecise(lprecise) +return + + +/*/{Protheus.doc} fread +Lê caracteres de um arquivo binário para uma variável de buffer. + +@type binary function +@sintax FRead(, , ) => numeric +@return numeric, Retorna a quantidade de bytes lidos na forma de um valor numérico inteiro. Um valor de retorno menor ou 0 \(zero\) indica final de arquivo ou algum erro de leitura. Para obter mais detalhes, utilize a função FError\(\). + +@param , numeric, Indica o handle do arquivo obtido pelas funções FOpen\(\) ou FCreate\(\). +@param , character, Indica o nome de uma variável do tipo caractere. Essa variável é utilizada como buffer de leitura, para que os dados lidos sejam armazenados. O tamanho desta variável deve ser maior ou igual ao tamanho informado no parâmetro . +@param , numeric, Indica a quantidade de bytes que serão lidos do arquivo a partir do posicionamento do ponteiro atual. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/fread +/*/ +binary function fread(nhandle, cbuffervar, nqtdbytes) +return + + +/*/{Protheus.doc} freadstr +Lê caracteres de um arquivo binário. + +@type binary function +@sintax FReadStr(, ) => character +@return character, Retorna uma string contendo os caracteres lidos. + +@param , numeric, Indica o handle do arquivo obtido pelas funções FOpen\(\), FCreate\(\). +@param , numeric, Indica a quantidade de bytes que devem ser lidos do arquivo a partir do posicionamento do ponteiro atual. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/freadstr +/*/ +binary function freadstr(nhandle, nqtdbytes) +return + + +/*/{Protheus.doc} freeobj +Elimina da memória a instância do objeto informado como parâmetro. + +@type binary function +@sintax FreeObj([oObj]) => NIL +@param [oobj], object, Indica o objeto AdvPL a ser eliminado da memória. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/freeobj +/*/ +binary function freeobj(oobj) +return + + +/*/{Protheus.doc} frename +Renomeia um arquivo. + +@type binary function +@sintax FRename(, , [nParam3], [lChangeCase]) => numeric +@return numeric, Retorna 0 \(zero\), se a operação for realizada com sucesso; caso contrário, retornará -1 se falhar. Em caso de falha, utilize a função FError\(\) para obter mais detalhes. + +@param , character, Indica o nome do arquivo que será renomeado, inclusive sua extensão. Também podem ser incluídos como parte do nome uma letra indicativa da unidade de disco e/ou nome do diretório. Caso não seja especificado nenhuma unidade de disco ou diretório, será considerado o diretório atual do servidor. +@param , character, Indica o novo nome do arquivo, incluindo a extensão. Também podem ser incluídos como parte do nome uma letra indicativa da unidade de disco e/ou nome do diretório. +@param [nparam3], Nil, Compatibilidade, informar sempre Nil. +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/frename +/*/ +binary function frename(carquivo, cnovoarq, nparam3, lchangecase) +return + + +/*/{Protheus.doc} frenameex +Renomeia um arquivo no Application Server e/ou Smart Client respeitando o case do nome do arquivo indicado no segundo parametro. \(Por default, primeiro parâmetro continua alterando o case\) + +@type binary function +@sintax FRenameEx(, , [nParam3]) => numeric +@return numeric, Retorna 0 \(zero\), se a operação for realizada com sucesso; caso contrário, retornará -1 se falhar. Em caso de falha, utilize a função FError\(\) para obter mais detalhes. + +@param , character, Indica o nome do arquivo que será renomeado, inclusive sua extensão. Também podem ser incluídos como parte do nome uma letra indicativa da unidade de disco e/ou nome do diretório. Caso não seja especificado nenhuma unidade de disco ou diretório, será considerado o diretório atual do servidor. +@param , character, Indica o novo nome do arquivo, incluindo a extensão. Também podem ser incluídos como parte do nome uma letra indicativa da unidade de disco e/ou nome do diretório. +@param [nparam3], Nil, Compatibilidade, informar sempre Nil. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/frenameex +/*/ +binary function frenameex(carquivo, cnovoarq, nparam3) +return + + +/*/{Protheus.doc} fseek +Posiciona o ponteiro do arquivo para as próximas operações de leitura ou gravação. + +@type binary function +@sintax FSeek(, , [nOrigem]) => numeric +@return numeric, Retorna a nova posição do ponteiro de arquivo, com relação ao início do arquivo \(posição 0\), na forma de um valor numérico inteiro. Este valor não considera a posição original do ponteiro de arquivos antes da execução da função FSeek\(\). + +@param , numeric, Indica o manipulador do arquivo obtido através das funções FCreate\(\) e FOpen. +@param , numeric, Indica o número de bytes que o ponteiro de arquivo será movido a partir da posição definida no parâmetro . Esse número pode ser positivo, negativo ou zero, dependendo da direção na qual se deseja que o ponteiro seja movido. +@param [norigem], numeric, Indica a partir de qual posição será iniciada a contagem do número de bytes a ser movido. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/fseek +/*/ +binary function fseek(nhandle, noffset, norigem) +return + + +/*/{Protheus.doc} ft_feof +Indica se o ponteiro está posicionado no fim do arquivo texto. + +@type binary function +@sintax FT_FEOF() => logical +@return logical, Retorna verdadeiro \(.T.\), se o ponteiro do arquivo texto \(aberto pela função FT_FUse\) estiver posicionado no final; caso contrário, falso \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ft_feof +/*/ +binary function ft_feof() +return + + +/*/{Protheus.doc} ft_fgoto +Move o ponteiro, que indica a leitura do arquivo texto, para a posição absoluta especificada no parâmetro . + +@type binary function +@sintax FT_FGoto() => NIL +@param , numeric, Indica a posição do ponteiro que realizará a leitura dos dados no arquivo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ft_fgoto +/*/ +binary function ft_fgoto(npos) +return + + +/*/{Protheus.doc} ft_fgotop +Posiciona no início \(primeiro caracter da primeira linha\) do arquivo texto aberto pela função FT_FUse\(\). + +@type binary function +@sintax FT_FGotop() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ft_fgotop +/*/ +binary function ft_fgotop() +return + + +/*/{Protheus.doc} ft_flastrec +Lê e retorna o número total de linhas do arquivo texto aberto pela função FT_FUse\(\). + +@type binary function +@sintax FT_FLastRec() => numeric +@return numeric, Retorna a quantidade de linhas existentes no arquivo. Caso o arquivo esteja vazio ou não exista arquivo aberto, a função retornará 0 \(zero\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ft_flastrec +/*/ +binary function ft_flastrec() +return + + +/*/{Protheus.doc} ft_freadln +Lê e retorna uma linha de texto do arquivo aberto pela função FT_FUse\(\). As linhas do texto, são delimitadas pela sequência de caracteres CRLF \(chr\(13\)+chr\(10\)\) ou apenas LF \(chr\(10\)\), e o tamanho máximo de cada linha é 1022 bytes. + +@type binary function +@sintax FT_FReadLn() => character +@return character, Retorna a linha inteira na qual está posicionado o ponteiro para leitura de dados. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ft_freadln +/*/ +binary function ft_freadln() +return + + +/*/{Protheus.doc} ft_frecno +Lê e retorna a posição atual do ponteiro do arquivo texto aberto pela função FT_FUse\(\). + +@type binary function +@sintax FT_FRecno() => character +@return character, Retorna a posição corrente do ponteiro do arquivo texto. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ft_frecno +/*/ +binary function ft_frecno() +return + + +/*/{Protheus.doc} ft_fskip +Move o ponteiro, do arquivo texto aberto pela função FT_FUse\(\), para uma nova posição. + +@type binary function +@sintax FT_FSkip() => NIL +@param , numeric, Indica o número de linhas do arquivo texto \(\*.txt\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ft_fskip +/*/ +binary function ft_fskip(nlinhas) +return + + +/*/{Protheus.doc} ft_fuse +Abre e fecha um arquivo texto para disponibilizar às funções FT_F\*. + +@type binary function +@sintax FT_FUse() => numeric +@return numeric, Retorna o handle de controle do arquivo. Em caso de falha na abertura, a função retornará -1. + +@param , character, Indica o nome do arquivo \*.txt que será aberto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ft_fuse +/*/ +binary function ft_fuse(ctxtfile) +return + + +/*/{Protheus.doc} funzip +Descompacta um arquivo no formato Zip. + +@type binary function +@sintax FUnZip(, , [cSenha]) => numeric +@return numeric, Retorna 0 zero se consegui descompactar ou diferente de 0 zero em caso de erro. + +@param , character, Indica o nome do arquivo que será descompactado zip. +@param , character, Pasta onde o arquivo será descompactado. +@param [csenha], character, Se o arquivo foi compactado com senha, informar essa senha +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/funzip +/*/ +binary function funzip(carquivozip, cpasta, csenha) +return + + +/*/{Protheus.doc} fwrite +Escreve dados de um buffer de string em um arquivo binário. Para isso, pode-se escrever todo ou parte do conteúdo do buffer, limitando a quantidade de bytes. + +@type binary function +@sintax FWrite(, , [nQtdBytes]) => numeric +@return numeric, Retorna a quantidade de bytes escritos na forma de um valor numérico inteiro. Caso o valor seja igual ao parâmetro , a operação foi realizada com sucesso; caso contrário, se o valor for menor ou zero, o disco rígido está cheio ou ocorreu erro. + +@param , numeric, Indica o manipulador de arquivo obtido através das funções FCreate\(\) e FOpen\(\). +@param , character, Indica a string que será escrita no arquivo especificado. O tamanho desta variável deve ser maior ou igual ao tamanho informado no parâmetro \(caso seja informado o tamanho\). +@param [nqtdbytes], numeric, Indica a quantidade de bytes que serão escritos a partir da posição atual do ponteiro de arquivos. Caso não seja informado, todo o conteúdo do parâmetro é escrito. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/fwrite +/*/ +binary function fwrite(nhandle, cbuffer, nqtdbytes) +return + + +/*/{Protheus.doc} fzip +Compacta uma lista de arquivos no formato Zip. + +@type binary function +@sintax FZip(, , [cBaseDir], [cSenha]) => numeric +@return numeric, Retorna 0 zero se conseguir compactar ou diferente de 0 zero em caso de erro + +@param , character, Indica o nome do arquivo final compactado zip. +@param , array, Lista de arquivos que serão compactados. +@param [cbasedir], character, Indica o diretório base para não incluir dentro do arquivo compactado. +@param [csenha], character, Informar uma senha para gerar um arquivo compactado criptografado +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/fzip +/*/ +binary function fzip(carquivozip, aarquivos, cbasedir, csenha) +return + + +/*/{Protheus.doc} gensql +descrição da funcao + +@type binary function +@sintax GenSql([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gensql +/*/ +binary function gensql(tnomevar) +return + + +/*/{Protheus.doc} get_sqlca +descrição da funcao + +@type binary function +@sintax Get_Sqlca([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/get_sqlca +/*/ +binary function get_sqlca(tnomevar) +return + + +/*/{Protheus.doc} getallrpoinfo +Retorna um array contendo TODOS - sem exceção - os dados das funções contidas no RPO - Repositório Portável de Objetos. + +@type binary function +@sintax GetAllRpoInfo() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getallrpoinfo +/*/ +binary function getallrpoinfo() +return + + +/*/{Protheus.doc} getapoinfo +Retorna um array com informações \(nome, linguagem, modo de compilação, data da última modificação e hora/minuto/segundo\) de um determinado arquivo de código-fonte \(\*.PRW\). + +@type binary function +@sintax GetApoInfo() => array +@return array, Retorna um array com os dados do arquivo de código fonte. Para informações do formato do array, consulte a tabela Formato do array de retorno, na área Observações. + +@param , character, Indica o nome do arquivo de código fonte \(.PRW\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getapoinfo +/*/ +binary function getapoinfo(cfonte) +return + + +/*/{Protheus.doc} getapores +Retorna o conteúdo de um resource do repositório. + +@type binary function +@sintax GetApoRes() => character +@return character, Conteúdo do resource + +@param , character, Indica o nome do resource. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getapores +/*/ +binary function getapores(cres) +return + + +/*/{Protheus.doc} getapppath +Recupera caminho no qual o Application Server está sendo executado. + +@type binary function +@sintax getAppPath(<@cPath>) => numeric +@return numeric, Retorna 0 em caso de sucesso na obtenção do caminho ou valor maior que zero em caso de erro. + +@param <@cpath>, character, Variável, por referência, que receberá o caminho onde o application server está sendo executado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getapppath +/*/ +binary function getapppath(cpath) +return + + +/*/{Protheus.doc} getauthargs +Recupera os parametros utilizados para autenticação. + +@type binary function +@sintax GetAuthArgs() => object +@return object, Retorna um THashMap com os parametros de autenticação. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getauthargs +/*/ +binary function getauthargs() +return + + +/*/{Protheus.doc} getbuild +Retorna uma string com informações da build \(ID da compilação\) em uso pelo Application Server. + +@type binary function +@sintax GetBuild([lType]) => character +@return character, Retorna uma string com os dados da build corrente. + +@param [ltype], logical, Indica se deve retornar a versão do SmartClient \(**.T.**\) ou Application Server \(**.F.**\). Se não for informado, será atribuído **.F.**. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getbuild +/*/ +binary function getbuild(ltype) +return + + +/*/{Protheus.doc} getcbsource +Recupera o código-fonte de um bloco de código. + +@type binary function +@sintax GetCBSource() => character +@return character, Retorna o código-fonte do bloco de código especificado. Veja detalhes adicionais no tópico de Observações. + +@param , codeblock, Indica a variável que contém o bloco de código para recuperar o código-fonte. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getcbsource +/*/ +binary function getcbsource(bblocodecodigo) +return + + +/*/{Protheus.doc} getchildct +descrição da funcao + +@type binary function +@sintax GetChildCt([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getchildct +/*/ +binary function getchildct(tnomevar) +return + + +/*/{Protheus.doc} getclassname +Retorna o nome da classe. + +@type binary function +@sintax GetClassName() => character +@return character, Retorna o nome da classe. + +@param , object, Indica o objeto que será utilizado para pesquisar o nome. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getclassname +/*/ +binary function getclassname(oobjeto) +return + + +/*/{Protheus.doc} getclientdir +Retorna o caminho do diretório onde o Smart Client está instalado. + +@type binary function +@sintax GetClientDir() => character +@return character, Retorna o caminho do diretório onde o Smart Client está instalado. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getclientdir +/*/ +binary function getclientdir() +return + + +/*/{Protheus.doc} getclientip +Retorna o número IP - Internet Protocol do servidor que o SmartClient está instalado. + +@type binary function +@sintax GetClientIP() => character +@return character, Retorna o número IP do servidor que o Smart Client está instalado. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getclientip +/*/ +binary function getclientip() +return + + +/*/{Protheus.doc} getcodepage +Retorna o encode definido no .ini do Application Server. + +@type binary function +@sintax GetCodePage() => character +@return character, encode atual. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getcodepage +/*/ +binary function getcodepage() +return + + +/*/{Protheus.doc} getcomputername +Retorna o nome da máquina \(Hostname\) onde o SmartClient está sendo executado. + +@type binary function +@sintax GetComputerName() => character +@return character, Nome da máquina. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getcomputername +/*/ +binary function getcomputername() +return + + +/*/{Protheus.doc} getconnstatus +Informa se a conexão com o TOTVS Application Server foi encerrada. + +@type binary function +@sintax GetConnStatus() => logical +@return logical, Retorna verdadeiro \(.T.\), se a conexão com o Application Server for encerrada com sucesso; caso contrário, falso \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getconnstatus +/*/ +binary function getconnstatus() +return + + +/*/{Protheus.doc} getcredential +Obtém a credencial do usuário, no sistema operacional, no qual está autenticado. + +@type binary function +@sintax GetCredential() => character +@return character, Retorna uma string que corresponde a credencial do usuário. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getcredential +/*/ +binary function getcredential() +return + + +/*/{Protheus.doc} getdbextension +Retorna a extensão dos arquivos de banco de dados. + +@type binary function +@sintax GetDBExtension() => character +@return character, Retorna a extensão dos arquivos de banco de dados. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getdbextension +/*/ +binary function getdbextension() +return + + +/*/{Protheus.doc} getdependency +Retorna os fontes necessários para a\(s\) chamada\(s\) de classes ou funções de um determinado arquivo. + +@type binary function +@sintax GetDependency() => NIL +@param , character, String com o nome do fonte que deseja saber as dependências +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getdependency +/*/ +binary function getdependency(sfonte) +return + + +/*/{Protheus.doc} getdtodate +Converte uma string para o tipo data. + +@type binary function +@sintax GetDtoDate() => date +@return date, Retorna a data convertida + +@param , character, Indica a string que contém uma data a ser convertida. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getdtodate +/*/ +binary function getdtodate(cdata) +return + + +/*/{Protheus.doc} getdtoval +Converte uma string que contém um valor numérico para um número formatado. + +@type binary function +@sintax GetDtoVal() => numeric +@return numeric, Retorna um dado numérico. + +@param , character, Indica a string \(com valor numérico\) que será convertida. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getdtoval +/*/ +binary function getdtoval(cdtoval) +return + + +/*/{Protheus.doc} getenv +Determina o conteúdo de uma variável de ambiente \(environment\) do sistema operacional em uso no Application Server. + +@type binary function +@sintax GetEnv() => character +@return character, Caso a variável de ambiente esteja definida, será retornada uma string correspondente ao conteúdo da variável. Caso a variável não esteja definida, é retornado uma string vazia \(''\) + +@param , character, Indica o nome da variável de ambiente do sistema operacional. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getenv +/*/ +binary function getenv(cvarenv) +return + + +/*/{Protheus.doc} getenvhost +Retorna o host \(nome/endereço\), quando ambiente Web, da página chamada. + +@type binary function +@sintax GetEnvHost() => character +@return character, exemplo: www.totvs.com.br + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getenvhost +/*/ +binary function getenvhost() +return + + +/*/{Protheus.doc} getenvserver +Retorna uma string com o nome do ambiente \(environment\) em execução no Application Server. + +@type binary function +@sintax GetEnvServer() => character +@return character, Retorna uma string com o nome do ambiente \(environment\) em execução no Application Server. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getenvserver +/*/ +binary function getenvserver() +return + + +/*/{Protheus.doc} getfuncarray +Retorna um ou mais arrays contendo os dados das funções contidas no RPO - Repositório Portável de Objetos, a partir de uma máscara. + +@type binary function +@sintax GetFuncArray(, [@aTipo], [@aArquivo], [@aLinha], [@aData], [@aHora]) => array +@return array, Retorna um array que contém os nomes das funções localizadas através da máscara, compiladas no repositório em uso pelo ambiente. + +@param , character, Indica a máscara que será utilizada para realizar a busca. Observação: Podem ser utilizados caracteres do tipo curinga \("?" ou "\*"\). +@param [@atipo], array, Indica o array que será alimentado com o tipo da função encontrada. +@param [@aarquivo], array, Indica o array que será alimentado com o nome do arquivo que contém o código fonte. +@param [@alinha], array, Indica o array que será alimentado com o número da linha correspondente a declaração da função no arquivo do código fonte. +@param [@adata], array, Indica o array que será alimentado com a data da última modificação do arquivo que contém o código fonte. +@param [@ahora], array, Indica o array que será alimentado com a hora da última modificação do arquivo que contém o código fonte. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getfuncarray +/*/ +binary function getfuncarray(cmascara, atipo, aarquivo, alinha, adata, ahora) +return + + +/*/{Protheus.doc} getglbvalue +Retorna a string armazenada em uma variável global. + +@type binary function +@sintax GetGlbValue() => character +@return character, Retorna o valor da variável global especificada no parâmetro cGlbName. Caso a variável não seja encontrada, retorna um caracter vazio. + +@param , character, Indica o nome da variável global. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getglbvalue +/*/ +binary function getglbvalue(cglbname) +return + + +/*/{Protheus.doc} getglbvars +Retorna os valores armazenados em uma variável global. + +@type binary function +@sintax GetGlbVars(, <@xValue1...N>) => logical +@return logical, Retorna verdadeiro \(.T.\) caso o identificador seja encontrado e as variáveis sejam retornadas; caso contrário, retorna falso \(.F.\). + +@param , character, Indica o nome da variável global. +@param <@xvalue1...n>, variant, Indica os nomes de uma ou mais variáveis, passadas por referência, que receberão os valores armazenados na variável global. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getglbvars +/*/ +binary function getglbvars(cglbname, xvalue1n) +return + + +/*/{Protheus.doc} gethardwareid +Retorna o número de série do drive onde está sendo executado o TOTVS \| Application Server. + +@type binary function +@sintax GetHardwareId() => character +@return character, Retorna o ID \(número de série\) do drive onde está sendo executado o TOTVS \| Application Server. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gethardwareid +/*/ +binary function gethardwareid() +return + + +/*/{Protheus.doc} getimpwindows +Retorna um array com os nomes das impressoras disponíveis. + +@type binary function +@sintax GetImpWindows() => array +@return array, Retorna um array, no formato texto, com as impressoras instaladas. Sendo que, a primeira impressora da lista é a padrão. + +@param , logical, Indica se, verdadeiro \(.T.\), retorna as impressoras do Application Server; caso contrário, falso \(.F.\), do Smart Client. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getimpwindows +/*/ +binary function getimpwindows(ldirect) +return + + +/*/{Protheus.doc} getinikeys +Retorna um array com o nome de todas as chaves de uma determinada sessão em um arquivo de configuração APPServer \(APPSERVER.INI\), como por exemplo, a sessão TCP retornaria as suas chaves\(TYPE, PORT\). + +@type binary function +@sintax GetIniKeys(, , [uParam3]) => array +@return array, Retorna um array com o nome de todas as chaves de uma determinada sessão em um arquivo de configuração \(.INI\). Porém, caso a sessão especificada não seja encontrada, o array retornará vazio. + +@param , character, Indica o nome do arquivo de configuração do APPServer \(APPSERVER.INI\) que se deseja obter as seções. +@param , character, Indica o nome da Sessão do arquivo de configuração que se deseja obter as chaves. +@param [uparam3], numeric, Compatibility parameter. Pass NIL. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getinikeys +/*/ +binary function getinikeys(cini, csessao, uparam3) +return + + +/*/{Protheus.doc} getinisessions +Retorna um array com o nome de todas as seções de um determinado arquivo de configuração \(.INI\), como por exemplo, TCP, GENERAL e DRIVERS. + +@type binary function +@sintax GetINISessions(, [uParam2]) => array +@return array, Retorna um array com os nomes de todas as seções do arquivo de configuração \(.INI\). Porém, caso o arquivo especificado não seja encontrado, o array retornará vazio. + +@param , character, Indica o nome do arquivo de configuração \(.INI\) que se deseja obter as seções. +@param [uparam2], numeric, Compatibility parameter. Pass NIL. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getinisessions +/*/ +binary function getinisessions(cini, uparam2) +return + + +/*/{Protheus.doc} getlinesprog +Retorna o numero de linhas executáveis do fonte onde ela foi chamada, ou GetLinesProg\("fonte.extensao"\) para retornar de um outro fonte. + +@type binary function +@sintax GetLinesProg() => numeric +@return numeric, Numero de linhas do fonte + +@param , character, Caso presente, procura o arquivo indicado no RPO atual e ve qual o numero de linhas dele. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getlinesprog +/*/ +binary function getlinesprog(cfile) +return + + +/*/{Protheus.doc} getmailobj +Obtém o objeto de e-mail tMailManager, referente ao valor informado no parâmetro . + +@type binary function +@sintax GetMailObj() => object +@return object, Retorna um objeto tMailManager, caso tenha sido encontrado o identificador ; caso contrário retorna Nil. + +@param , character, Indica um identificador para recuperar o objeto armazenado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getmailobj +/*/ +binary function getmailobj(cid) +return + + +/*/{Protheus.doc} getmainsource +Retorna o nome do fonte onde foi iniciada a entrada no programa, sendo ele o primeiro fonte da pilha de execução. + +@type binary function +@sintax GetMainSource() => character +@return character, Retorna o nome do fonte principal, onde foi feita a entrada no programa que criou a pilha de execução. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getmainsource +/*/ +binary function getmainsource() +return + + +/*/{Protheus.doc} getobjdetail +descrição da funcao + +@type binary function +@sintax GetObjDetail([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getobjdetail +/*/ +binary function getobjdetail(tnomevar) +return + + +/*/{Protheus.doc} getparenttree +Retorna um array com o nome da classe e das classes herdadas por ordem de herança. + +@type binary function +@sintax GetParentTree() => array +@return array, Um array de caracteres com os nomes das classes herdadas + +@param , object, Indica o objeto o qual deseja saber o nome da classe e sua herança +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getparenttree +/*/ +binary function getparenttree(oobjeto) +return + + +/*/{Protheus.doc} getport +Retorna o número da porta que o servidor de aplicação, license, http ou https está escutando. + +@type binary function +@sintax GetPort() => numeric +@return numeric, Retorna o número da porta em formato númerico, caso a porta não esteja habilitada ou o tipo da porta não esteja no intervalo de 1 a 4, retorna -1. + +@param , numeric, Indica o tipo da porta \(1 - Application, 2 - License, 3 - HTTP, 4 - HTTPS\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getport +/*/ +binary function getport(ntype) +return + + +/*/{Protheus.doc} getportactive +Retorna um array com os nomes das portas disponíveis. + +@type binary function +@sintax GetPortActive() => array +@return array, Retorna um array, no formato texto, com as portas disponíveis. + +@param , logical, Indica se, verdadeiro \(.T.\), retorna as portas do Application Server; caso contrário, falso \(.F.\), do Smart Client. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getportactive +/*/ +binary function getportactive(ldirect) +return + + +/*/{Protheus.doc} getpowersc +Retorna os elementos do plano de energia \(power scheme\) corrente do sistema operacional em um array de arrays. + +@type binary function +@sintax GetPowerSC() => array +@return array, Array de arrays contendo os dados dos elementos do plano de energia corrente do sistema operacional. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getpowersc +/*/ +binary function getpowersc() +return + + +/*/{Protheus.doc} getprgtag +descrição da funcao + +@type binary function +@sintax GetPrgTag([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getprgtag +/*/ +binary function getprgtag(tnomevar) +return + + +/*/{Protheus.doc} getprocinfoarray +Retorna uma lista com informações de todas as threads \(menos as threads de usuário/monitor\) que estão em execução no Application Server. + +@type binary function +@sintax GetProcInfoArray() => array +@return array, Lista com informações das threads \(vide Obs.\) + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getprocinfoarray +/*/ +binary function getprocinfoarray() +return + + +/*/{Protheus.doc} getprofint +Recupera o conteúdo numérico de uma chave do arquivo win.ini \(arquivo utilizado para armazenar configurações básicas de inicialização\) do sistema operacional + +@type binary function +@sintax GetProfInt(, , ) => numeric +@return numeric, Retorna o conteúdo da chave especificada ou o seu valor padrão. + +@param , character, Indica o nome da seção em que um valor será recuperado. +@param , character, Indica o nome da chave em que um valor será recuperado. +@param , numeric, Indica o conteúdo padrão que será recuperado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getprofint +/*/ +binary function getprofint(csecao, cchave, npadrao) +return + + +/*/{Protheus.doc} getprofstring +Recupera o conteúdo caractere de uma chave do arquivo win.ini \(arquivo utilizado para armazenar configurações básicas de inicialização\) do sistema operacional. + +@type binary function +@sintax GetProfString(, , ) => character +@return character, Retorna o conteúdo da chave especificada ou o seu valor padrão. + +@param , character, Indica o nome da seção em que um valor será recuperado. +@param , character, Indica o nome da chave em que um valor será recuperado. +@param , character, Indica o conteúdo padrão que será recuperado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getprofstring +/*/ +binary function getprofstring(csecao, cchave, cpadrao) +return + + +/*/{Protheus.doc} getprograms +Retorna um array contendo o nome dos programas AdvPl carregados em memória. + +@type binary function +@sintax GetPrograms() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getprograms +/*/ +binary function getprograms() +return + + +/*/{Protheus.doc} getpvprofileint +Recupera o conteúdo numérico de uma chave, do arquivo de configuração \(\*.INI\), qualquer. + +@type binary function +@sintax GetPvProfileInt(, , , , [uParam5], [uParam6]) => numeric +@return numeric, Retorna o conteúdo da chave especificada, ou o seu valor padrão + +@param , character, Indica o nome da seção do arquivo a ser considerada. +@param , character, Indica o nome da chave a ser considerada. +@param , numeric, Indica o conteúdo padrão \( default \) a ser retornado , caso a chave não seja encontrada no arquivo de configuração. +@param , character, Indica o nome do arquivo de configuração \(\*.INI\) a ser utilizado. +@param [uparam5], numeric, Compatibilidade +@param [uparam6], numeric, Compatibilidade +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getpvprofileint +/*/ +binary function getpvprofileint(csecao, cchave, npadrao, cnomearqcfg, uparam5, uparam6) +return + + +/*/{Protheus.doc} getpvprofstring +Recupera o conteúdo caractere de uma chave de um arquivo de configuração \(\*.INI\) qualquer. + +@type binary function +@sintax GetPvProfString(, , , , [uParam5], [uParam6]) => character +@return character, Retorna o conteúdo da chave especificada, ou o seu valor padrão + +@param , character, Indica o nome da seção do arquivo a ser considerada. +@param , character, Indica o nome da chave a ser considerada. +@param , character, Indica o conteúdo padrão \( default \) a ser retornado , caso a chave não seja encontrada no arquivo de configuração. +@param , character, Indica o nome do arquivo de configuração \(\*.INI\) a ser utilizado. +@param [uparam5], numeric, Compatibilidade +@param [uparam6], numeric, Compatibilidade +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getpvprofstring +/*/ +binary function getpvprofstring(csecao, cchave, cpadrao, cnomearqcfg, uparam5, uparam6) +return + + +/*/{Protheus.doc} getremoteininame +Retorna o caminho completo do arquivo de configuração \(\*.INI\) do SmartClient. + +@type binary function +@sintax GetRemoteIniName() => character +@return character, Retorna o caminho completo do arquivo de configuração \(\*.INI\) do SmartClient. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getremoteininame +/*/ +binary function getremoteininame() +return + + +/*/{Protheus.doc} getremotetype +Identifica a tipo e versão do Smart Client em execução. + +@type binary function +@sintax GetRemoteType([@cLibVersion]) => numeric +@return numeric, Retorna o número correspondente ao sistema operacional, em uso, que o Smart Client está sendo executado. Sendo: -1 = Job, Web ou Working Thread \(Sem remote\); 1 = Ambiente Microsoft Windows ou 2 = Ambiente Linux/Unix. + +@param [@clibversion], character, Indica a versão da biblioteca gráfica do Smart Client. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getremotetype +/*/ +binary function getremotetype(clibversion) +return + + +/*/{Protheus.doc} getresarray +Retorna um array com os resources do repositório baseado na pesquisa por nome ou máscara. + +@type binary function +@sintax GetResArray(, [nRPO]) => array +@return array, Resources do repositório + +@param , character, Indica o nome do resource ou máscara que será usada na pesquisa. Serão aceitos caracteres curingas '\*' e '?'. +@param [nrpo], numeric, Indica o nome do repositório que será feita a busca. Valores possíveis: 1 - RPO Padrão, 2 - RPO TLPP, 3 - RPO Custom. Caso o parâmetro não seja informado, a busca sera realizada em todos os repositórios citados. Este parâmetro é válido a partir a release 20.3.0.x \(Application Server Harpia\) +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getresarray +/*/ +binary function getresarray(cmask, nrpo) +return + + +/*/{Protheus.doc} getrmtdate +Retorna a data atual do sistema definido na máquina onde o SmartClient está sendo executado. + +@type binary function +@sintax GetRmtDate() => date +@return date, Data atual do sistema + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getrmtdate +/*/ +binary function getrmtdate() +return + + +/*/{Protheus.doc} getrmtinfo +Retorna um array com as definições do computador que o SmartClient está sendo executado. + +@type binary function +@sintax GetRmtInfo() => array +@return array, Retorna um array com as definições do computador que o SmartClient está sendo executado. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getrmtinfo +/*/ +binary function getrmtinfo() +return + + +/*/{Protheus.doc} getrmttime +Retorna a hora atual do sistema definido na máquina onde o SmartClient está sendo executado. + +@type binary function +@sintax GetRmtTime() => character +@return character, Hora atual do sistema + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getrmttime +/*/ +binary function getrmttime() +return + + +/*/{Protheus.doc} getrmtversion +Retorna um string com a versão atual do SmartClient + +@type binary function +@sintax GetRmtVersion() => array +@return array, Retorna um string no formato YEAR.MAJOR.MINOR.VERSION \(exemplo 17.2.0.1\) + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getrmtversion +/*/ +binary function getrmtversion() +return + + +/*/{Protheus.doc} getrpolog +Retorna um array com os dados de todos os patchs aplicados. + +@type binary function +@sintax getRpoLog([nRPO]) => array +@return array, Retorna um array com os dados de todos os patchs aplicados. Para informações do formato do array, consulte a tabela Formato do array de retorno, na área Observações. + +@param [nrpo], numeric, Indica o nome o repositório que será feita a busca. Valores possíveis: 1 - RPO Padrão, 3 - RPO Custom. Caso o parâmetro não seja informado o valor 1 é assumido como padrão. Este parâmetro é válido a partir a release 20.3.0.x \(Application Server Harpia\) +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getrpolog +/*/ +binary function getrpolog(nrpo) +return + + +/*/{Protheus.doc} getscreenres +descrição da funcao + +@type binary function +@sintax GetScreenRes([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getscreenres +/*/ +binary function getscreenres(tnomevar) +return + + +/*/{Protheus.doc} getserverip +Retorna o número IP do servidor onde a aplicação Advpl está sendo executada. + +@type binary function +@sintax GetServerIP([lGetAllAddress]) => array +@return array, Se lGetAllAddress for .T., retorna todos os endereços relacionados ao servidor em um array \(vide OBS para estrutura do array\). + +@param [lgetalladdress], logical, Indica se deve ser retornado todos os endereços relacionados ao servidor. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getserverip +/*/ +binary function getserverip(lgetalladdress) +return + + +/*/{Protheus.doc} getservertype +Retorna um número inteiro que representa o tipo de execução do Application Server. + +@type binary function +@sintax GetServerType() => numeric +@return numeric, Retorna o tipo de execução do Application Server. Sendo: 0=None, 1=Console \(texto\), 2=ISAPI \(Web\) e 3=FAT \(Gráfico\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getservertype +/*/ +binary function getservertype() +return + + +/*/{Protheus.doc} getsrcarray +Retorna um array com o nome dos fontes compilados. + +@type binary function +@sintax GetSrcArray(, [nRPO]) => array +@return array, Retorna um array de strings, contendo o nome dos fontes compilados identificados no repositório. + +@param , character, Indica o nome do código fonte ou máscara. Observação: São aceitos os caracteres curingas \(\* e ?\). +@param [nrpo], numeric, Indica o nome do repositório que será feita a busca. Valores possíveis: 1 - RPO Padrão, 2 - RPO TLPP, 3 - RPO Custom. Caso o parâmetro não seja informado, a busca sera realizada em todos os repositórios citados. Este parâmetro é válido a partir a release 20.3.0.x \(Application Server Harpia\) +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getsrcarray +/*/ +binary function getsrcarray(cnome, nrpo) +return + + +/*/{Protheus.doc} getsrvarch +Retorna a arquitetura do processador que está sendo executado o Application Server. Suporta os sistemas operacionais Windows e Linux. + +@type binary function +@sintax GetSrvArch() => character +@return character, Retorna a arquitetura do processador no formato linux base. Valores possíveis: 32 bits - i686, 64 bits - x86_64, ARM - aarch32, ARM64 - aarch64, Deconhecido - unknown. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getsrvarch +/*/ +binary function getsrvarch() +return + + +/*/{Protheus.doc} getsrvbuildtype +Retorna a informação do tipo de geração do servidor. ex: release, debug ou relwithdebinfo + +@type binary function +@sintax GetSrvBuildType() => character +@return character, Retorna o tipo de geração do servidor \(release, debug ou relwithdebinfo\) + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getsrvbuildtype +/*/ +binary function getsrvbuildtype() +return + + +/*/{Protheus.doc} getsrvglbinfo +Retorna uma string contendo um resumo do status atual do serviço do Application Server, incluindo detalhamento de processos internos, processos de usuário, memória do serviço, pools de memória do kernel do Application Server, memória do processo e acumuladores globais. + +@type binary function +@sintax GetSrvGlbInfo() => character +@return character, Retorna uma string descrevendo o status atual do serviço + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getsrvglbinfo +/*/ +binary function getsrvglbinfo() +return + + +/*/{Protheus.doc} getsrvinfo +Retorna um array com as definições do servidor onde o TOTVS \| Application Server foi instanciado. + +@type binary function +@sintax GetSrvInfo() => array +@return array, Retorna um array com informações do Totvs Application Server. Para o formato do array vide observação. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getsrvinfo +/*/ +binary function getsrvinfo() +return + + +/*/{Protheus.doc} getsrvininame +Retorna o nome do arquivo de configuração \(\*.INI\) do Application Server. + +@type binary function +@sintax GetSrvIniName() => character +@return character, Retorna o nome do arquivo de configuração \(\*.INI\) do Application Server. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getsrvininame +/*/ +binary function getsrvininame() +return + + +/*/{Protheus.doc} getsrvmeminfo +Recupera o status de memória da máquina onde o Application Server está sendo executado. + +@type binary function +@sintax GetSrvMemInfo() => character +@return character, Retorna uma string contendo o resumo das informações de memória da máquina onde o Application Server está sendo executado. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getsrvmeminfo +/*/ +binary function getsrvmeminfo() +return + + +/*/{Protheus.doc} getsrvnickname +Retorna uma string com o apelido do Application Server. + +@type binary function +@sintax GetSrvNickName() => character +@return character, String com o apelido do Application Server. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getsrvnickname +/*/ +binary function getsrvnickname() +return + + +/*/{Protheus.doc} getsrvosinfo +Retorna informações do sistema operacional onde o Application Server está sendo executado. + +@type binary function +@sintax GetSrvOSInfo() => character +@return character, Retorna uma string contendo as informações do Sistema Operacional onde o Application Server está sendo executado. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getsrvosinfo +/*/ +binary function getsrvosinfo() +return + + +/*/{Protheus.doc} getsrvprofstring +Recupera o conteúdo de uma chave de configuração, do ambiente em uso, no arquivo de configuração \(.INI\) do TOTVS Application Server. + +@type binary function +@sintax GetSrvProfString(, ) => character +@return character, Retorna o conteúdo da chave especificada. Caso a chave não seja encontrada na seção de configuração do ambiente atual, a função retornará o conteúdo informado no parâmetro cDefault. + +@param , character, Indica a chave que deve ser lida do arquivo de configuração. +@param , character, Indica o conteúdo da chave a ser retornada, caso a chave não seja encontrada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getsrvprofstring +/*/ +binary function getsrvprofstring(cchave, cdefault) +return + + +/*/{Protheus.doc} getsrvversion +Retorna a versão do build do atual binario Appserver. + +@type binary function +@sintax GetSrvVersion() => character +@return character, Retorna a versão no formato nn.n.n.n. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getsrvversion +/*/ +binary function getsrvversion() +return + + +/*/{Protheus.doc} getstringpixsize +Retorna uma matriz com a altura e a largura total em pixels de uma determinada string, dados uma fonte específica, tamanho e modificadores \(negrito, itálico, sublinhado\). + +@type binary function +@sintax GetStringPixSize(, , , [lBold], [lItalic], [lUnderline]) => array +@return array, Retorna a altura e a lagura total em pixels, dos caracteres fornecidos em cString. + +@param , character, String com o texto a ser contado \(altura e largura\). +@param , character, Indica o nome da fonte instalada no Smart Client. +@param , numeric, Indica o tamanho da fonte. +@param [lbold], logical, Indica se a fonte está em negrito. +@param [litalic], logical, Indica se a fonte está em itálico. +@param [lunderline], logical, Indica se a fonte está sublinhada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getstringpixsize +/*/ +binary function getstringpixsize(cstring, cfontname, ntamanho, lbold, litalic, lunderline) +return + + +/*/{Protheus.doc} gettcpobj +descrição da funcao + +@type binary function +@sintax GetTcpObj([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gettcpobj +/*/ +binary function gettcpobj(tnomevar) +return + + +/*/{Protheus.doc} gettemppath +Retorna o caminho da pasta temporária do sistema atual. + +@type binary function +@sintax GetTempPath([lLocal]) => character +@return character, Retorna o caminho da pasta temporária do sistema atual. + +@param [llocal], logical, Indica se verdadeiro \(.T.\), é procurado o diretório temporário do Smart Client ou, falso \(.F.\), do Application Server. Valor padrão: .T. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gettemppath +/*/ +binary function gettemppath(llocal) +return + + +/*/{Protheus.doc} gettimestamp +Retorna uma string com informações de data e hora, no formato time stamp da a data infromada no parâmetro. + +@type binary function +@sintax GetTimeStamp(, [aDate]) => character +@return character, Retorna uma string no formato timestamp da data informada no parâmetro 1. + +@param , date, Indica a data que será utilizada para obter o timestamp. +@param [adate], array, Retorno do timestamp no array passado por referência, o formato do array será data posição 1 e hora posição 2. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gettimestamp +/*/ +binary function gettimestamp(ddate, adate) +return + + +/*/{Protheus.doc} getuserfromsid +Recupera o nome do domínio e nome do usuário a partir de um código no padrão SID \(Security Identifier\) da Microsoft que os representa. + +@type binary function +@sintax GetUserFromSID(, <@cDomainName>, <@cUserName>) => logical +@return logical, Caso a obtenção dos nomes de domínio e usuário foi realizada com sucesso retorna verdadeiro \(.T.\), caso contrário retorna falso \(.F.\). + +@param , character, Código SID do usuário autenticado na estação. Pode ser obtido com a função GetCredential\(\). +@param <@cdomainname>, character, Será preenchido pela função após ser invocada. Conterá o nome do domínio extraído do código SID. +@param <@cusername>, character, Será preenchido pela função após ser invocada. Conterá o nome do usuário extraído do código SID. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getuserfromsid +/*/ +binary function getuserfromsid(csid, cdomainname, cusername) +return + + +/*/{Protheus.doc} getuserinfoarray +Retorna um array multidimensional com as informações de cada um do processos em execução no Protheus 8 Server e/ou Application Server. + +@type binary function +@sintax GetUserInfoArray([lShowMoreInfo*]) => array +@return array, Retorna um array multidimensional com os números e dados de cada uma das threads. + +@param [lshowmoreinfo*], logical, Se informado verdadeiro \(.T.\), retorna mais informações por thread \(apenas 4GL/Telnet 4GL\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getuserinfoarray +/*/ +binary function getuserinfoarray(lshowmoreinfo*) +return + + +/*/{Protheus.doc} getvarnamelen +Retorna o tamanho de uma variável AdvPL. + +@type binary function +@sintax GetVarNameLen() => numeric +@return numeric, Retorna o tamanho definido atualmente para uma variável. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getvarnamelen +/*/ +binary function getvarnamelen() +return + + +/*/{Protheus.doc} getvarsize +Retorna o tamanho em bytes que a variável ocupa em memória no Application Server. + +@type binary function +@sintax GetVarSize() => numeric +@return numeric, Retorna o tamanho da variável em bytes. + +@param , variant, Variável que será analisada +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getvarsize +/*/ +binary function getvarsize(xvar) +return + + +/*/{Protheus.doc} getvdrobj +descrição da funcao + +@type binary function +@sintax GetVdrObj([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getvdrobj +/*/ +binary function getvdrobj(tnomevar) +return + + +/*/{Protheus.doc} getwebjob +Retorna o nome de usuário da thread em que foi executada. + +@type binary function +@sintax GetWebJob() => character +@return character, Retorna uma string com o nome do usuário da thread em que a chamada à função foi realizada. Como em AdvPL uma função pode ser iniciada de várias formas, esse nome de usuário tem uma semântica diferente dependendo de contexto em que foi iniciado:• Via SmartClient \(Windows, Linux, Mac ou ActiveX\): representa o nome do usuário logado na máquina que executou o SmartClient.• Via requisições WEB .apl: o retorno é a string “HTTP:GENPROC”.• Via requisições WEBEX .apw: o retorno é o nome da seção \(definida em responsejob\) que foi configurada no totvsappserver.ini para atender a requisição.• Via seção ONSTART do totvsappserver.ini: o retorno é o nome do job configurado para atender a requisição.• Via função StartJob dentro de um programa AdvPL: nesse caso o retorno é o usuário da thread que executou StartJob seguido de um _ no final. Ex: username_.• Via chamadas RPC: retorna uma string vazia. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/getwebjob +/*/ +binary function getwebjob() +return + + +/*/{Protheus.doc} glblock +Obtém um flag de bloqueio para serialização de operações, com escopo na instância atual do Protheus Server em execução, com liberação explícita através da função GlbUnlock\(\). Caso não haja uma liberação explícita, haverá uma liberação automática do bloqueio no término do processo \(Thread\) em execução que obteve o bloqueio. + +@type binary function +@sintax GlbLock() => logical +@return logical, Retorna .T. caso o bloqueio tenha sido obtido para o processo atual. Caso a função retorne .F., já existe um outro processo \( Thread \) neste mesmo Protheus Server que possui um bloqueio. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/glblock +/*/ +binary function glblock() +return + + +/*/{Protheus.doc} glbnmlock +Realiza o bloqueio de um identificador nomeado. + +@type binary function +@sintax GlbNmLock() => logical +@return logical, Retorna .T. caso o identificador de bloqueio tenha sido obtido com sucesso para o processo atual. Caso um identificador de bloqueio com este jone, já tenha sido retornado e não liberado para outro processo, a função retorna .F. + +@param , character, Indica o nome do identificador de bloqueio. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/glbnmlock +/*/ +binary function glbnmlock(ctext) +return + + +/*/{Protheus.doc} glbnmunlock +Libera um bloqueio de um identificador nomeado obtido pela função GlbNmLock\(\). + +@type binary function +@sintax GlbNmUnlock() => logical +@return logical, Retorna .T. caso o identificador de bloqueio tenha sido liberado com sucesso para o processo atual. Para isso, o identificador precisa existir na lista de bloqueios, e o processo atual deve ter sido o responsavel por realizar o bloqueio. Caso contrário a função retorna .F. + +@param , character, Indica o nome do identificador de bloqueio. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/glbnmunlock +/*/ +binary function glbnmunlock(ctext) +return + + +/*/{Protheus.doc} glbunlock +Libera explicitamente o flag de bloqueio para serialização de operações obtido pelo processo atual através da função GlbLock\(\) + +@type binary function +@sintax GlbUnlock() => logical +@return logical, Retorna .T. caso o bloqueio tenta sido liberado. Caso não haja um bloqueio global a ser liberado, ou ele não tenha sido obtido pelo meu processo, ou já tenha sido liberado anteriormente, a função retorna .F. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/glbunlock +/*/ +binary function glbunlock() +return + + +/*/{Protheus.doc} gzcompress +Compacta um arquivo do ambiente do servidor, a partir do rootpath, para um arquivo no formato gzip. + +@type binary function +@sintax GzCompress(, [cGzip], [lChangeCase]) => logical +@return logical, Retorna **.T.** se a compactação for realizada com sucesso; caso contrário, retorna **.F.**. + +@param , character, Indica o arquivo no servidor que será compactado. +@param [cgzip], character, Indica o nome do arquivo compactado. +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gzcompress +/*/ +binary function gzcompress(cfile, cgzip, lchangecase) +return + + +/*/{Protheus.doc} gzdecomp +Descompacta o conteúdo de um arquivo no formato gzip \(GNU zip\) do ambiente do servidor, a partir do rootpath, para um diretório no servidor. + +@type binary function +@sintax GzDecomp(, , [lChangeCase]) => logical +@return logical, Retorna **.T.** se a descompactação for realizada com sucesso; caso contrário, retorna **.F.**. + +@param , character, Indica o nome do arquivo, no formato Gzip, cujo conteúdo será descompactado. +@param , character, Indica o diretório onde o arquivo será descompactado. +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gzdecomp +/*/ +binary function gzdecomp(cgzip, coutdir, lchangecase) +return + + +/*/{Protheus.doc} gzstrcomp +Compacta uma string no formato **gzip**. + +@type binary function +@sintax GzStrComp(, <@cTarget>, <@nTargetLen>) => logical +@return logical, Retorna **.T.** se a compactação for realizada com sucesso; caso contrário, retorna **.F.**. + +@param , character, Indica a string que será compactada. +@param <@ctarget>, character, Indica a string compactada. +@param <@ntargetlen>, numeric, Indica o tamanho da string compactada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gzstrcomp +/*/ +binary function gzstrcomp(csource, ctarget, ntargetlen) +return + + +/*/{Protheus.doc} gzstrdecomp +Descompacta uma string no formato **gzip**. + +@type binary function +@sintax GzStrDecomp(, , <@cTarget>) => logical +@return logical, Retorna **.T.** se a descompactação for realizada com sucesso; caso contrário, retorna **.F.**. + +@param , character, Indica a string que está compactada. +@param , numeric, Indica o tamanho da string compactada. +@param <@ctarget>, character, Indica a string descompactada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/gzstrdecomp +/*/ +binary function gzstrdecomp(csource, nsourcelen, ctarget) +return + + +/*/{Protheus.doc} hasvvspeak +descrição da funcao + +@type binary function +@sintax HasVVSpeak([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hasvvspeak +/*/ +binary function hasvvspeak(tnomevar) +return + + +/*/{Protheus.doc} hmac +HMAC \(Hash-based Message Authentication Code\) gera o hash de autenticação de uma mensagem de entrada, em combinação com uma chave secreta. Essa implementação suporta os algoritmos SHA-1,SHA-256,SHA-512 e MD5. + +@type binary function +@sintax HMAC(, , , [nRetType], [nContentType], [nKeyType]) => character +@return character, Retorna o hash \(Message Authentication Code\) do conteúdo de entrada informado, no formato especificado. + +@param , character, Indica a string de entrada que contém os dados para os quais será gerado o hash. +@param , character, Indica a chave que será utilizada para gerar o hash. +@param , numeric, Indica o tipo de algoritmo criptográfico que será utilizado para geração do Hash. Veja tabela nas observações. +@param [nrettype], numeric, Indica o tipo do formato de retorno do hash. Quando não informado valor padrão será **2 \(Hex Hash\)**. Veja tabela nas observações. +@param [ncontenttype], numeric, Indica o tipo do formato do conteúdo da variável cContent. Quando não informado o padrão será **1 \(Texto\)**. Veja tabela nas observações. +@param [nkeytype], numeric, Indica o tipo do formato da chave informada na variável cKey. Quando não informado o padrão será **1 \(Texto\)**. Veja tabela nas observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hmac +/*/ +binary function hmac(ccontent, ckey, ncryptotype, nrettype, ncontenttype, nkeytype) +return + + +/*/{Protheus.doc} hmadd +Adiciona um novo item ao objet tHashMap, indicando qual o campo da chave de procura. + +@type binary function +@sintax HMAdd(, , [nColuna_1], [nTrim_1], [nColuna_N], [nTrim_N]) => logical +@return logical, Verdadeiro \(.T.\) se adicionou com sucesso e Falso \(.F\) se houve erro + +@param , object, Objeto da classe HashMap \(tHashMap\) +@param , array, Array com os valores que serão adicionados ao HashMap +@param [ncoluna_1], numeric, Indica o número da coluna que contem o valor da chave a ser inserida +@param [ntrim_1], numeric, Tipo de Trim para colunas de caractere +@param [ncoluna_n], numeric, Informar mais de uma coluna se necessário \(máximo 8\) +@param [ntrim_n], numeric, Tipo de Trim para as colunas do tipo caractere. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hmadd +/*/ +binary function hmadd(ohash, aval, ncoluna_1, ntrim_1, ncoluna_n, ntrim_n) +return + + +/*/{Protheus.doc} hmclean +Limpa todos os dados alocados em um objeto da classe tHashMap. + +@type binary function +@sintax HMClean() => logical +@return logical, Verdadeiro \(.T.\) se limpou todos os dados ou falso \(.F.\) se houve algum erro + +@param , object, Objeto da classe HashMap \(tHashMap\) +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hmclean +/*/ +binary function hmclean(ohash) +return + + +/*/{Protheus.doc} hmcount +Retorna a quantidade de elementos em um objeto do tipo HashMap + +@type binary function +@sintax HmCount([oHashMap]) => numeric +@return numeric, Quantidade de elementos no objeto informado. + +@param [ohashmap], object, Objeto do tipo Hashmap +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hmcount +/*/ +binary function hmcount(ohashmap) +return + + +/*/{Protheus.doc} hmdel +Remove o valor armazenado correspondente a chave em um objeto da classe tHashMap. + +@type binary function +@sintax HMDel(, ) => logical +@return logical, Verdadeiro \(.T.\) se deletou o valor e Falso \(.F\) se não encontrou + +@param , object, Objeto da classe HashMap \(tHashMap\) +@param , variant, Chave de armazenamento do valor +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hmdel +/*/ +binary function hmdel(ohash, ykey) +return + + +/*/{Protheus.doc} hmget +Obtém o valor armazenado correspondente a chave em um objeto da classe tHashMap. + +@type binary function +@sintax HMGet(, , <@aVal>) => logical +@return logical, Retorna verdadeiro \(.T.\) se achar a chave, ou falso \(.F.\) se não achar. + +@param , object, Objeto da classe HashMap \(tHashMap\) +@param , variant, Chave de armazenamento do valor +@param <@aval>, array, Retorna o valor armazenado na chave +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hmget +/*/ +binary function hmget(ohash, ykey, aval) +return + + +/*/{Protheus.doc} hmgetn +Obtém o valor armazenado correspondente a chave em um objeto da classe tHashMap. + +@type binary function +@sintax HMGetN(, , <@aVal>) => logical +@return logical, Retorna verdadeiro \(.T.\) se achar a chave, ou falso \(.F.\) se não achar. + +@param , object, Objeto da classe HashMap \(tHashMap\) +@param , numeric, Chave de armazenamento do valor +@param <@aval>, numeric, Retorna o valor armazenado na chave +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hmgetn +/*/ +binary function hmgetn(ohash, nkey, aval) +return + + +/*/{Protheus.doc} hmkey +Obtem o valor de chave simples ou composta a partir das colunas eleitas de um array. A chave obtida poderá ser usada nas funções: HMGet, HMSet, HMDel. + +@type binary function +@sintax HMKey(, [nColuna_1], [n_Trim_1], [nColuna_N], [n_Trim_N]) => character +@return character, Palavra contendo a chave de busca referente às colunas + +@param , array, Linha com os elementos que participaram da chave de busca +@param [ncoluna_1], numeric, Indica o número da coluna que contem o valor da chave a ser inserida +@param [n_trim_1], numeric, Tipo de Trim para colunas de caractere +@param [ncoluna_n], numeric, Informar mais de uma coluna se necessário \(máximo 8\) +@param [n_trim_n], numeric, Tipo de Trim para as colunas do tipo caractere. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hmkey +/*/ +binary function hmkey(aarray, ncoluna_1, n_trim_1, ncoluna_n, n_trim_n) +return + + +/*/{Protheus.doc} hmlist +Lista todos os elementos do objeto HashMap em um array. + +@type binary function +@sintax HMList(, <@aElem>) => logical +@return logical, Verdadeiro \(.T.\) se conseguiu listar todos os elementos ou Falso \(.F.\) caso contrário + +@param , object, Objeto da classe HashMap \(tHashMap\) +@param <@aelem>, array, Array para retorno da lista dos elementos do HashMap +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hmlist +/*/ +binary function hmlist(ohash, aelem) +return + + +/*/{Protheus.doc} hmnew +Cria um objeto da classe tHashMap. + +@type binary function +@sintax HMNew() => object +@return object, Objeto da classe HashMap \(tHashMap\) + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hmnew +/*/ +binary function hmnew() +return + + +/*/{Protheus.doc} hmset +Atualiza o valor correspondente a chave em um objeto da classe tHashMap. + +@type binary function +@sintax HMSet(, , ) => logical +@return logical, Verdadeiro \(.T.\) se executou corretamente e Falso \(.F\) se houve erro + +@param , object, Objeto da classe HashMap \(tHashMap\) +@param , variant, Chave de armazenamento do valor +@param , variant, Valor a ser armazenado na chave +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hmset +/*/ +binary function hmset(ohash, ykey, xval) +return + + +/*/{Protheus.doc} hmsetn +Atualiza ou cria valor correspondente a chave em um objeto da classe tHashMap. + +@type binary function +@sintax HMSetN(, , ) => logical +@return logical, Verdadeiro \(.T.\) se executou corretamente e Falso \(.F\) se houve erro + +@param , object, Objeto da classe HashMap \(tHashMap\) +@param , numeric, Chave de armazenamento do valor +@param , numeric, Valor a ser armazenado na chave +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hmsetn +/*/ +binary function hmsetn(ohash, nkey, nval) +return + + +/*/{Protheus.doc} hsmexponent +Retorna o expoente \(exponent\) de uma chave privada no formato big-endian armazenada em um dispositivo HSM. + +@type binary function +@sintax HSMExponent(, [cPass], [lClient]) => character +@return character, Retorna o expoente de uma chave no formato big-endian; retorna **Nil** caso ocorra um erro no processamento. + +@param , character, Indica o caminho, no dispositivo HSM, para a chave privada. +@param [cpass], character, Indica a senha da chave, se existente. +@param [lclient], logical, Indica se o dispositivo HSM está na máquina do SmartClient. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hsmexponent +/*/ +binary function hsmexponent(ckey, cpass, lclient) +return + + +/*/{Protheus.doc} hsmfinalize +Finaliza o uso de dispositivo HSM. + +@type binary function +@sintax HSMFinalize([lClient]) => logical +@return logical, Retorna **1** caso consiga finalizar o HSM com sucesso; caso contrário, retorna **0**. + +@param [lclient], logical, Indica se o dispositivo HSM está na máquina do SmartClient. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hsmfinalize +/*/ +binary function hsmfinalize(lclient) +return + + +/*/{Protheus.doc} hsmgetcertfile +Extrai um certificado armazenado num dispositivo HSM para um arquivo. + +@type binary function +@sintax HSMGetCertFile(, , [cPass], [lClient]) => logical +@return logical, Retorna **.T.** caso consiga extrair o certificado do HSM; caso contrário, retorna **.F.**. + +@param , character, Indica o caminho no dispositivo HSM para o certificado. +@param , character, Indica o caminho de destino do certificado, incluindo o nome do arquivo. +@param [cpass], character, Indica a senha do slot onde está armazenado o certificado apontado por **cHSMPath**. +@param [lclient], logical, Indica se o dispositivo HSM está na máquina do SmartClient. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hsmgetcertfile +/*/ +binary function hsmgetcertfile(chsmpath, cfile, cpass, lclient) +return + + +/*/{Protheus.doc} hsmgetkeyfile +Extrai uma chave pública armazenada num dispositivo HSM para um arquivo. + +@type binary function +@sintax HSMGetKeyFile(, , [cPass], [lChangeCase], [lClient]) => logical +@return logical, Retorna **.T.** caso consiga extrair a chave pública do HSM; caso contrário, retorna **.F.**. + +@param , character, Indica o caminho no dispositivo HSM para o certificado de cliente. +@param , character, Indica o caminho de destino da chave pública, incluindo o nome do arquivo. +@param [cpass], character, Indica a senha do slot onde está armazenado o certificado apontado por **cHSMPath**. +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@param [lclient], logical, Indica se o dispositivo HSM está na máquina do SmartClient. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hsmgetkeyfile +/*/ +binary function hsmgetkeyfile(chsmpath, cfile, cpass, lchangecase, lclient) +return + + +/*/{Protheus.doc} hsminitialize +Inicializa o dispositivo HSM. + +@type binary function +@sintax HSMInitialize([cModule], [lClient]) => numeric +@return numeric, Retorna 1 caso consiga inicializar o dispositivo HSM; caso contrário, retorna 0. + +@param [cmodule], character, Indica o caminho do módulo do dispositivo HSM que será inicializado. +@param [lclient], logical, Indica se o dispositivo HSM está na máquina do SmartClient. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hsminitialize +/*/ +binary function hsminitialize(cmodule, lclient) +return + + +/*/{Protheus.doc} hsmmodulus +Retorna o módulo público \(public modulus\) de uma chave privada no formato big-endian armazenada em um dispositivo HSM. + +@type binary function +@sintax HSMModulus(, [cPass], [lClient]) => character +@return character, Retorna o módulo público de uma chave no formato big-endian; retorna **Nil** caso ocorra um erro no processamento. + +@param , character, Indica o caminho, no dispositivo HSM, para a chave privada. +@param [cpass], character, Indica a senha da chave, se existente. +@param [lclient], logical, Indica se o dispositivo HSM está na máquina do SmartClient. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hsmmodulus +/*/ +binary function hsmmodulus(ckey, cpass, lclient) +return + + +/*/{Protheus.doc} hsmobjlist +Lista os objetos contidos em um slot. + +@type binary function +@sintax HSMObjList(, , [lClient]) => array +@return array, Retorna um vetor com as informações dos objetos de um slot. + +@param , numeric, Indica o número do slot de HSM. +@param , character, Indica a senha de acesso ao HSM. +@param [lclient], logical, Indica se o dispositivo HSM está na máquina do SmartClient. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hsmobjlist +/*/ +binary function hsmobjlist(nslot, cpass, lclient) +return + + +/*/{Protheus.doc} hsmprivsign +Assina usando algoritmo digest um determinado conteúdo usando uma chave privada armazenada em dispositivo HSM. + +@type binary function +@sintax HSMPrivSign(, , , , [@cErrStr], [lClient]) => character +@return character, Retorna o valor do parâmetro **cContent**, assinado de acordo com o tipo **nType** e a chave privada informada **cKey**. + +@param , character, Indica o caminho no dispositivo HSM para a chave privada. +@param , character, Indica o valor que será assinado. +@param , numeric, Indica o tipo do algoritmo digest que será utilizado. +@param , character, Indica a senha do slot onde está armazenado a chave privada apontada por **cKey**. +@param [@cerrstr], character, Indica a variável para retornar as mensagens de erro. +@param [lclient], logical, Indica se o dispositivo HSM está na máquina do SmartClient. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hsmprivsign +/*/ +binary function hsmprivsign(ckey, ccontent, ntype, cpass, cerrstr, lclient) +return + + +/*/{Protheus.doc} hsmprivvery +Verifica a assinatura digital utilizando o certificado/chave pública armazenada em dispositivo HSM. + +@type binary function +@sintax HSMPrivVery(, , , , [@cErrStr], , [lClient]) => NIL +@param , character, Indica a string que contém o caminho para o certificado no HSM. O caminho tem o o formato slot_-label_ +@param , character, Indica a string que será utilizada na verificação da assinatura digital. +@param , numeric, Indica o tipo de algoritmo que será utilizado para realizar a verificação da assinatura digital. +@param , character, Indica a senha do slot onde está armazenado a chave privada apontada por **cKey**. +@param [@cerrstr], character, Indica a variável para retornar as mensagens de erro. +@param , character, Indica uma string que contém o valor assinado. +@param [lclient], logical, Indica uma string que contém o valor assinado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hsmprivvery +/*/ +binary function hsmprivvery(ckey, ccontent, ntype, cpass, cerrstr, cassinado, lclient) +return + + +/*/{Protheus.doc} hsmslotlist +Lista os slots HSM disponíveis. + +@type binary function +@sintax HSMSlotList([lClient]) => array +@return array, Retorna um vetor com as informações dos slots. + +@param [lclient], logical, Indica se o dispositivo HSM está na máquina do SmartClient. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/hsmslotlist +/*/ +binary function hsmslotlist(lclient) +return + + +/*/{Protheus.doc} httpcget +Permite emular um client HTTP - Hypertext Transfer Protocol diretamente da máquina onde o SmartClient está sendo executado, através de uma função da linguagem AdvPL, acessando um determinado documento HTML, publicado em um servidor Web, utilizando o método GET, permitindo a passagem de parâmetros via URL e aguardando por um tempo determinado \(time-out\) pela resposta do servidor solicitado. + +@type binary function +@sintax HttpCGet(, [cGetParms], [nTimeOut], [aHeadStr], [@cHeaderGet]) => character +@return character, Retorna a string que corresponde a requisição solicitada. + +@param , character, Indica o endereço HTTP com a pasta e o documento solicitado. +@param [cgetparms], character, Indica uma string de parâmetros, do tipo GET, que serão enviados ao servidor HTTP através da URI. Caso não seja especificado, este parâmetro será considerado vazio \(""\). +@param [ntimeout], numeric, Indica o tempo, em segundos, máximo de inatividade permitido durante a recepção do documento. Caso não seja especificado, o valor assumido será de 120 segundos. +@param [aheadstr], array, Indica o array que contêm as strings que serão acrescentadas no header da requisição HTTP que será realizada. Utilizar "\|" \(pipes\) para separação entre parâmetro e valor. +@param [@cheaderget], character, Indica a string que conterá o header de resposta HTTP enviado pelo servidor requisitado. Observação: A variável deve ser declarada antes da chamada da função. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/httpcget +/*/ +binary function httpcget(curl, cgetparms, ntimeout, aheadstr, cheaderget) +return + + +/*/{Protheus.doc} httpcpost + + +@type binary function +@sintax HttpCPost(, [cPostParms], [nTimeOut], [aHeadStr], [@cHeaderGet]) => character +@return character, Retorna a string que corresponde a requisição solicitada. + +@param , character, Indica o endereço HTTP com a pasta e o documento solicitado. +@param [cpostparms], character, Indica uma string de parâmetros, do tipo POST, que serão enviados ao servidor HTTP através da URL. Caso não seja especificado, este parâmetro será considerado vazio \(""\). +@param [ntimeout], numeric, Indica o tempo, em segundos, máximo de inatividade permitido durante a recepção do documento. Caso não seja especificado, o valor assumido será de 120 segundos. +@param [aheadstr], array, Indica o array que contêm as strings que serão acrescentadas no header da requisição HTTP que será realizada. Utilizar "\|" \(pipes\) para separação entre parâmetro e valor. +@param [@cheaderget], character, Indica a string que conterá o header de resposta HTTP enviado pelo servidor requisitado. Observação: A variável deve ser declarada antes da chamada da função. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/httpcpost +/*/ +binary function httpcpost(curl, cpostparms, ntimeout, aheadstr, cheaderget) +return + + +/*/{Protheus.doc} httpget +Permite emular um client HTTP - Hypertext Transfer Protocol, através de uma função da linguagem AdvPL, acessando um determinado documento HTML, publicado em um servidor Web, utilizando o método GET, permitindo a passagem de parâmetros via URL e aguardando por um tempo determinado \(time-out\) pela resposta do servidor solicitado. + +@type binary function +@sintax HttpGet(, [cGetParms], [nTimeOut], [aHeadStr], [@cHeaderGet]) => character +@return character, Retorna uma string HTML que corresponde ao documento solicitado. + +@param , character, Indica o endereço HTTP com a pasta e o documento solicitado. +@param [cgetparms], character, Indica a lista de strings de parâmetros que serão enviadas ao servidor HTTP, através da URI. Caso este parâmetro não seja especificado, o mesmo será considerado vazio \(""\). +@param [ntimeout], numeric, Indica o tempo, em segundos, máximo de inatividade permitido durante a recepção do documento. Caso este parâmetro não seja especificado, o valor padrão assumido será de 120 segundos \(2 minutos\). +@param [aheadstr], array, Indica o array que contêm as strings que serão acrescentadas ao header da requisição que será realizada. Utilizar "\|" \(pipes\) para separação entre parâmetro e valor. +@param [@cheaderget], character, Indica o retorno, através de referência, da header de resposta HTTP enviada pelo servidor requisitado. Observação: A variável deve ser declarada antes da chamada da função. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/httpget +/*/ +binary function httpget(curl, cgetparms, ntimeout, aheadstr, cheaderget) +return + + +/*/{Protheus.doc} httpgetstatus +Retorna o status da conexão HTTP - HyperText Transfer Protocol \(Protocolo de Transferência de Hipertexto\) requisitada. + +@type binary function +@sintax HTTPGetStatus(<@cError>, [lClient]) => numeric +@return numeric, Retorna o status da conexão HTTP atual requerida. + +@param <@cerror>, character, Indica a descrição do erro HTTP. +@param [lclient], logical, Indica se irá retornar o status da conexão feita pelo SmartClient \(.T.\) ou pelo AppServer \(.F.\). Valor padrão: **.F.**. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/httpgetstatus +/*/ +binary function httpgetstatus(cerror, lclient) +return + + +/*/{Protheus.doc} httppost +Permite emular um client HTTP - Hypertext Transfer Protocol, através de uma função AdvPL, postando um bloco de informações para uma determinada URL em um servidor Web, utilizando o método POST, permitindo a passagem de parâmetros adicionais via URL e aguardando por um tempo determinado \(time-out\) pela resposta do servidor solicitado. + +@type binary function +@sintax HttpPost(, [cGetParms], [cPostParms], [nTimeOut], [aHeadStr], [@cHeaderGet]) => character +@return character, Retorna a string que corresponde a requisição solicitada. + +@param , character, Indica o endereço HTTP com a pasta e o documento solicitado. +@param [cgetparms], character, Indica uma string de parâmetros, do tipo GET, que serão enviados ao servidor HTTP através da URI. Caso não seja especificado,este parâmetro será considerado vazio \(""\). +@param [cpostparms], character, Indica uma string de parâmetros, do tipo POST, que serão enviados ao servidor HTTP através da URL. Caso não seja especificado, este parâmetro será considerado vazio \(""\). +@param [ntimeout], numeric, Indica o tempo, em segundos, máximo de inatividade permitido durante a recepção do documento. Caso não seja especificado, o valor assumido será de 120 segundos. +@param [aheadstr], array, Indica o array que contêm as strings que serão acrescentadas no header da requisição HTTP que será realizada. +@param [@cheaderget], character, Indica a string que conterá o header de resposta HTTP enviado pelo servidor requisitado. Observação: A variável deve ser declarada antes da chamada da função. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/httppost +/*/ +binary function httppost(curl, cgetparms, cpostparms, ntimeout, aheadstr, cheaderget) +return + + +/*/{Protheus.doc} httpsetpass +Define o usuário e senha para autenticação HTTP. + +@type binary function +@sintax HTTPSetPass(, , [lClient]) => NIL +@param , character, Indica o usuário para autenticação HTTP. +@param , character, Indica a senha para autenticação HTTP. +@param [lclient], logical, Indica se irá definir na conexão feita pelo SmartClient \(.T.\) ou pelo AppServer \(.F.\). Valor padrão: **.F.**. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/httpsetpass +/*/ +binary function httpsetpass(cuser, cpass, lclient) +return + + +/*/{Protheus.doc} httpsget +Permite emular um Client HTTP - Hypertext Transfer Protocol, utilizando protocolo HTTPS através de uma função AdvPL, postando um bloco de informações para um determinado documento publicado em um servidor Web, utilizando o método GET, permitindo a passagem de parâmetros adicionais via URL e aguardando por um tempo determinado \(time-out\) pela resposta do servidor solicitado. + +@type binary function +@sintax HTTPSGet(, , , , [cGETParms], [nTimeOut], [aHeadStr], [@cHeaderRet], [lClient]) => character +@return character, Retorna a string que corresponde à requisição solicitada. + +@param , character, Indica o endereço HTTP com a pasta e o documento solicitado. +@param , character, Indica o path do arquivo, em formato PEM \(modelo Apache\), do arquivo que contém o certificado digital. +@param , character, Indica o path da chave privada, em formato PEM \(modelo Apache\), do arquivo que contém a chave privada, referente ao certificado digital. +@param , character, Indica a senha que será utilizada para a abertura da chave privada. Para uma chave privada que não possua senha deve ser informada uma string vazia. +@param [cgetparms], character, Indica uma string de parâmetros, do tipo GET, que serão enviados ao servidor HTTP através da URI. Caso não seja especificado, este parâmetro é considerado vazio \(""\). +@param [ntimeout], numeric, Indica o tempo, em segundos, máximo de inatividade permitido durante a recepção do documento. Caso não seja especificado, o valor assumido será de 120 segundos. +@param [aheadstr], array, Indica o array que contêm as strings que serão acrescentadas no header da requisição HTTP que será realizada. +@param [@cheaderret], character, Indica a string que conterá o header de resposta HTTP enviado pelo servidor requisitado. Observação: A variável deve ser declarada antes da chamada da função. +@param [lclient], logical, Indica se o GET será feito pelo SmartClient \(.T.\) ou pelo AppServer \(.F.\). Valor padrão: **.F.**. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/httpsget +/*/ +binary function httpsget(curl, ccertificate, cprivkey, cpassword, cgetparms, ntimeout, aheadstr, cheaderret, lclient) +return + + +/*/{Protheus.doc} httpspost +Permite emular um Client HTTP - Hypertext Transfer Protocol, utilizando protocolo HTTPS através de uma função AdvPL, postando um bloco de informações para um determinado documento publicado em um servidor Web, utilizando o método POST, permitindo a passagem de parâmetros adicionais via URL e aguardando por um tempo determinado \(time-out\) pela resposta do servidor solicitado. + +@type binary function +@sintax HTTPSPost(, , , , [cGETParms], [cPOSTParms], [nTimeOut], [aHeadStr], [@cHeaderRet], [lClient]) => character +@return character, Retorna a string que corresponde à requisição solicitada. + +@param , character, Indica o endereço HTTP com a pasta e o documento solicitado. +@param , character, Indica o path do arquivo, em formato PEM \(modelo Apache\), do arquivo que contém o certificado digital. +@param , character, Indica o path da chave privada, em formato PEM \(modelo Apache\), do arquivo que contém a chave privada, referente ao certificado digital. +@param , character, Indica a senha que será utilizada para a abertura da chave privada. Para uma chave privada que não possua senha deve ser informada uma string vazia. +@param [cgetparms], character, Indica uma string de parâmetros, do tipo GET, que serão enviados ao servidor HTTP através da URI. Caso não seja especificado, este parâmetro é considerado vazio \(""\). +@param [cpostparms], character, Indica uma string de parâmetros, do tipo POST, que serão enviados ao servidor HTTP através do pacote HTTP. Caso não seja especificado, este parâmetro é considerado vazio \(""\). +@param [ntimeout], numeric, Indica o tempo, em segundos, máximo de inatividade permitido durante a recepção do documento. Caso não seja especificado, o valor assumido será de 120 segundos. +@param [aheadstr], array, Indica o array que contêm as strings que serão acrescentadas no header da requisição HTTP que será realizada. +@param [@cheaderret], character, Indica a string que conterá o header de resposta HTTP enviado pelo servidor requisitado. Observação: A variável deve ser declarada antes da chamada da função. +@param [lclient], logical, Indica se o POST será feito pelo SmartClient \(.T.\) ou pelo AppServer \(.F.\). Valor padrão: **.F.**. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/httpspost +/*/ +binary function httpspost(curl, ccertificate, cprivkey, cpassword, cgetparms, cpostparms, ntimeout, aheadstr, cheaderret, lclient) +return + + +/*/{Protheus.doc} httpsquote +Permite emular um Client HTTP \(Hypertext Transfer Protocol\) através de uma função AdvPL, utilizando protocolo HTTPS, no qual o método HTTP é informado para a função, postando um bloco de informações para um determinado documento publicado em um servidor Web, permitindo a passagem de parâmetros adicionais via URL e aguardando por um tempo determinado \(time-out\) pela resposta do servidor solicitado. + +@type binary function +@sintax HTTPSQuote(, , , , , [cGETParms], [cPOSTParms], [nTimeOut], [aHeadStr], [@cHeaderRet], [lClient]) => character +@return character, Retorna a string que corresponde à requisição solicitada. + +@param , character, Indica o endereço HTTP com a pasta e o documento solicitado. +@param , character, Indica o path do arquivo, em formato PEM \(modelo Apache\), do arquivo que contém o certificado digital. +@param , character, Indica o path da chave privada, em formato PEM \(modelo Apache\), do arquivo que contém a chave privada, referente ao certificado digital. +@param , character, Indica a senha que será utilizada para a abertura da chave privada. Para uma chave privada que não possua senha deve ser informada uma string vazia. +@param , character, Define o HTTP Method que será utilizado, permitindo outros além de POST/GET. +@param [cgetparms], character, Indica uma string de parâmetros, do tipo GET, que serão enviados ao servidor HTTP através da URI. Caso não seja especificado, este parâmetro é considerado vazio \(""\). +@param [cpostparms], character, Indica uma string de parâmetros, do tipo POST, que serão enviados ao servidor HTTP através do pacote HTTP. Caso não seja especificado, este parâmetro é considerado vazio \(""\). +@param [ntimeout], numeric, Indica o tempo, em segundos, máximo de inatividade permitido durante a recepção do documento. Caso não seja especificado, o valor assumido será de 120 segundos. +@param [aheadstr], array, Indica o array que contêm as strings que serão acrescentadas no header da requisição HTTP que será realizada. +@param [@cheaderret], character, Indica a string que conterá o header de resposta HTTP enviado pelo servidor requisitado. Observação: A variável deve ser declarada antes da chamada da função. +@param [lclient], logical, Indica se a operação será feita pelo SmartClient \(.T.\) ou pelo AppServer \(.F.\). Valor padrão: **.F.**. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/httpsquote +/*/ +binary function httpsquote(curl, ccertificate, cprivkey, cpassword, cmethod, cgetparms, cpostparms, ntimeout, aheadstr, cheaderret, lclient) +return + + +/*/{Protheus.doc} httpsslclient +Define em memória as configurações para conexão SSL. + +@type binary function +@sintax HTTPSSLClient(, , , , , , [nHSM], [lClient], [nVerbose], [nBugs], [nState], [cCACertPath]) => NIL +@param , numeric, Habilita/Desabilita SSL2. +@param , numeric, Habilita/Desabilita SSL3. +@param , numeric, Habilita/Desabilita TLS1. +@param , character, Senha para a chave privada e/ou certificado. +@param , character, Indica o caminho do certificado de cliente. +@param , character, Indica o caminho da chave privada de cliente. +@param [nhsm], numeric, Define se utiliza HSM. +@param [lclient], logical, Indica se a definição será para conexão pelo SmartClient. +@param [nverbose], numeric, Habilita/Desabilita Verbose. +@param [nbugs], numeric, Habilita/Desabilita Bugs. +@param [nstate], numeric, Habilita/Desabilita State. +@param [ccacertpath], character, Indica o caminho do certificado de CA. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/httpsslclient +/*/ +binary function httpsslclient(nssl2, nssl3, ntls1, cpassword, ccertpath, ckeypath, nhsm, lclient, nverbose, nbugs, nstate, ccacertpath) +return + + +/*/{Protheus.doc} i2bin +Converte um número inteiro em uma string formatada como um inteiro de 16 bits. + +@type binary function +@sintax I2Bin() => character +@return character, Retorna uma string de dois bytes que contém um inteiro binário de 16 bits. + +@param , numeric, Indica o valor numérico inteiro que será convertido. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/i2bin +/*/ +binary function i2bin(nint) +return + + +/*/{Protheus.doc} int +Retorna um valor numérico inteiro, a partir de um valor numérico com parte inteira e decimal informado como parâmetro, desconsiderando todos os dígitos à direta do ponto decimal. + +@type binary function +@sintax Int() => numeric +@return numeric, Retorna a parte inteira do número informado como parâmetro. + +@param , numeric, Indica o valor numérico a ser utilizado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/int +/*/ +binary function int(nvalue) +return + + +/*/{Protheus.doc} ipccount +Obtém e retorna todas as threads livres que estão no ar de um determinado ambiente. + +@type binary function +@sintax IPCCount() => numeric +@return numeric, Retorna um número inteiro indicando o total de threads livres. + +@param , character, Indica o local ou semáforo em que as threads foram iniciadas. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ipccount +/*/ +binary function ipccount(csemaforo) +return + + +/*/{Protheus.doc} ipcgo +Envia uma chamada para uma thread, que não precisa ser necessariamente do mesmo ambiente, que está em espera. + +@type binary function +@sintax IPCGo() => Nil +@return Nil, Nulo + +@param , character, Indica o local ou semáforo em que as threads foram iniciadas. Observação: O semáforo especificado não deve conter letras minúsculas. Todas as letras informadas no semáforo devem ser maiúsculas. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ipcgo +/*/ +binary function ipcgo(csemaforo) +return + + +/*/{Protheus.doc} ipcwait +Coloca em modo de espera uma thread que foi carregada e aguarda uma chamada da função IPCGo\(\). + +@type binary function +@sintax IPCWait() => logical +@return logical, Retorna verdadeiro \(.T.\), se receber uma chamada da função IPCGo\(\); caso contrário, falso \(.F.\), se não receber chamada ou sair por time-out. + +@param , numeric, Indica o tempo de time-out em milisegundos para a thread sair do ar. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ipcwait +/*/ +binary function ipcwait(ntimeout) +return + + +/*/{Protheus.doc} ipcwaitex +Coloca em modo de espera a thread em execução, criando um semáforo nomeado, e aguarda por um determinado período pela liberação desse semáforo. A liberação do semáforo pode ocorrer por time-out, ou através da chamada da função IPCGo\(\) por outro processo, utilizando como parâmetro o nome do semáforo nomeado criado pela IPCWaitEx\(\). Além disso, a liberação semáforo pela função IPCGo\(\) pode enviar parâmetros adicionais, recuperados pela função IPCWaitEx\(\). + +@type binary function +@sintax IPCWaitEx(, ) => logical +@return logical, Retorna verdadeiro \(.T.\), se receber uma chamada da função IPCGo\(\); caso contrário, falso \(.F.\), se não receber chamada ou sair por time-out. + +@param , character, Indica o nome do semáforo que estamos trabalhando. Observação: O nome do semáforo não pode conter letras minúsculas. Todas as letras devem ser maiúsculas. +@param , numeric, Indica o tempo de time-out em milisegundos para a thread sair do ar. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ipcwaitex +/*/ +binary function ipcwaitex(csemaforo, ntimeout) +return + + +/*/{Protheus.doc} is8859encode +descrição da funcao + +@type binary function +@sintax Is8859Encode([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/is8859encode +/*/ +binary function is8859encode(tnomevar) +return + + +/*/{Protheus.doc} isalpha +Determina se o caractere à esquerda de uma string é alfabético. + +@type binary function +@sintax IsAlpha() => logical +@return logical, Retorna verdadeiro \(.T.\) se o primeiro caractere da string for uma letra do alfabeto ou retorna falso \(.F.\) se a string começar com um dígito ou qualquer outro caractere. + +@param , character, Indica a string que será analisada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/isalpha +/*/ +binary function isalpha(cstring) +return + + +/*/{Protheus.doc} isbuildtrunk +descrição da funcao + +@type binary function +@sintax IsBuildTrunk([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/isbuildtrunk +/*/ +binary function isbuildtrunk(tnomevar) +return + + +/*/{Protheus.doc} isdigit +Determina se o caractere mais à esquerda de uma string é um dígito. + +@type binary function +@sintax IsDigit() => logical +@return logical, Retorna verdadeiro \(.T.\) se o primeiro caractere da string for um dígito entre 0 e 9 ou retorna falso \(.F.\) caso não seja. + +@param , character, Indica a string que será analisada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/isdigit +/*/ +binary function isdigit(cstring) +return + + +/*/{Protheus.doc} islower +Determina se o caractere mais à esquerda de uma string é uma letra minúscula. + +@type binary function +@sintax IsLower() => logical +@return logical, Retorna verdadeiro \(.T.\) se o primeiro caractere da string for uma letra minúscula ou retorna falso \(.F.\) caso contrário. + +@param , character, Indica a string que será avaliada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/islower +/*/ +binary function islower(cstring) +return + + +/*/{Protheus.doc} isplugin +Retorna se o Smart Client está sendo executado em um plug-in ActiveX. + +@type binary function +@sintax IsPlugin() => logical +@return logical, Retorna verdadeiro \(.T.\), se o Smart Client estiver sendo executado em um plug-in ActiveX; caso contrário, falso \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/isplugin +/*/ +binary function isplugin() +return + + +/*/{Protheus.doc} isprinter2 +Indica o status de uma determinada porta de impressão. + +@type binary function +@sintax IsPrinter2(, [lValue], [lValue]) => logical +@return logical, Retorna verdadeiro \(.T.\), se a porta de impressão estiver OK; caso contrário, falso \(.F.\). + +@param , character, Indica a porta de impressão. +@param [lvalue], logical, Não utilizado. Parâmetro de compatibilidade. +@param [lvalue], numeric, Indica o direcionamento de impressão. Sendo: 1= PRT_CLIENT \(Smart Client\) E 2=PRT_SERVER \(Application Server\). Caso não seja informado, o valor padrão é PRT_CLIENT. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/isprinter2 +/*/ +binary function isprinter2(cstring, lvalue, lvalue) +return + + +/*/{Protheus.doc} isrmt64 +Retorna se o binário TOTVS \| SmartClient rodando na estação é de arquitetura 64-bit ou não. + +@type binary function +@sintax IsRmt64() => logical +@return logical, Retorna verdadeiro \(.T.\) se o binário SmartClient é de arquitetura 64-bit, caso contrário retornará falso \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/isrmt64 +/*/ +binary function isrmt64() +return + + +/*/{Protheus.doc} issecure +Retorna um valor booleano informando se a conexão é ou não segura. + +@type binary function +@sintax IsSecure() => logical +@return logical, Retorna verdadeiro \(.T.\), se a conexão for segura \(SSL - Secure Sockets Layer\); caso contrário, falso \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/issecure +/*/ +binary function issecure() +return + + +/*/{Protheus.doc} issrv64 +Verifica se o Application Server está sendo executado em ambiente 64 bit, + +@type binary function +@sintax isSrv64() => logical +@return logical, Retorna verdadeiro \(.T.\) se o Application Server estiver sendo executado em ambiente 64 bit. Caso contrário, falso \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/issrv64 +/*/ +binary function issrv64() +return + + +/*/{Protheus.doc} issrvbige +Verifica se o tipo de envio de dados do servidor é Big Endian + +@type binary function +@sintax IsSrvBigE() => logical +@return logical, Retorna verdadeiro \(.T.\) caso o tipo de envio de dados do servidor seja Big Endian, do contrário retorna falso \(.F.\) + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/issrvbige +/*/ +binary function issrvbige() +return + + +/*/{Protheus.doc} issrvunix +Informa se o Application Server está sendo executado em ambiente Unix, Linux ou Microsoft Windows. + +@type binary function +@sintax IsSrvUnix() => logical +@return logical, Retorna verdadeiro \(.T.\), se o Application Server estiver sendo executado em Unix ou Linux; caso contrário, retornará falso \(.F.\), se estiver sendo executado em ambiente Microsoft Windows. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/issrvunix +/*/ +binary function issrvunix() +return + + +/*/{Protheus.doc} isupper +Determina se o caractere mais à esquerda de uma string é uma letra maiúscula. + +@type binary function +@sintax IsUpper() => logical +@return logical, Retorna verdadeiro \(.T.\) se o primeiro caractere da string for uma letra maiúscula ou caso contrário, retorna falso \(.F.\). + +@param , character, Indica a string que será avaliada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/isupper +/*/ +binary function isupper(cstring) +return + + +/*/{Protheus.doc} jobinfo +Retorna informações sobre os Jobs atualmente executados. + +@type binary function +@sintax JobInfo() => array +@return array, Array com n \(Quantidade de Jobs\) elementos sendo cada Array um outro array com 7 elementos descrevendo cada Job: JobName \(Caracter\) -> Nome do processo \(job\) Environment \(Caracter\) -> Nome do ambiente que está executando o processo Total \(Numérico\) -> Número total de instâncias \(threads\) que o processo está executando Starting \(Numérico\) -> Número de instâncias em processo de inicialização Started \(Numérico\) -> Número de instâncias iniciadas. Running \(Numérico\) -> Número de instâncias em execução Finishing \(Numérico\) -> Número de instâncias sendo finalizadas. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/jobinfo +/*/ +binary function jobinfo() +return + + +/*/{Protheus.doc} jpgtobmp +descrição da funcao + +@type binary function +@sintax JpgToBmp([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/jpgtobmp +/*/ +binary function jpgtobmp(tnomevar) +return + + +/*/{Protheus.doc} killapp +Caso a função seja chamada sem parâmetros ou com valor falso \(.F.\) retornará se a thread recebeu uma chamada para ser finalizada. Caso seja chamada com valor verdadeiro \(.T.\) irá finalizar a thread onde a função foi chamada. + +@type binary function +@sintax KillApp([lKill]) => logical +@return logical, Retorna verdadeiro \(.T.\), se a thread corrente recebeu uma chamada para ser finalizada, caso contrário retorna falso \(.F.\). + +@param [lkill], logical, Caso verdadeiro finaliza a thread, caso falso apenas retorna se a thread recebeu uma chamada de finalização. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/killapp +/*/ +binary function killapp(lkill) +return + + +/*/{Protheus.doc} killuser +Finaliza a conexão de um usuário do Smart Client. + +@type binary function +@sintax KillUser() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/killuser +/*/ +binary function killuser() +return + + +/*/{Protheus.doc} l2bin +Converte um número inteiro em uma string formatada como um inteiro de 32 bits. + +@type binary function +@sintax L2Bin() => character +@return character, Retorna uma string de quatro bytes que contém um inteiro binário de 32 bits. + +@param , numeric, Indica o valor numérico inteiro que será convertido. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/l2bin +/*/ +binary function l2bin(nint) +return + + +/*/{Protheus.doc} land +Realiza a operação lógica **E** entre 2 ou mais números. + +@type binary function +@sintax LAnd(, , [nNum3], [nNum4], [nNum5], [nNum6], [nNum7], [nNum8], [nNum9], [nNum10], [nNum11], [nNum12], [nNum13], [nNum14]) => numeric +@return numeric, Retorna o valor do E lógico entre todos os parâmetros passados, sendo "**0**" como "**.F.**" e "**1**" como "**.T.**". + +@param , numeric, 1º número a ser utlizado na operação de E lógico. +@param , numeric, 2º número a ser utlizado na operação de E lógico. +@param [nnum3], numeric, 3º número a ser utlizado na operação de E lógico. +@param [nnum4], numeric, 4º número a ser utlizado na operação de E lógico. +@param [nnum5], numeric, 5º número a ser utlizado na operação de E lógico. +@param [nnum6], numeric, 6º número a ser utlizado na operação de E lógico. +@param [nnum7], numeric, 7º número a ser utlizado na operação de E lógico. +@param [nnum8], numeric, 8º número a ser utlizado na operação de E lógico. +@param [nnum9], numeric, 9º número a ser utlizado na operação de E lógico. +@param [nnum10], numeric, 10º número a ser utlizado na operação de E lógico. +@param [nnum11], numeric, 11º número a ser utlizado na operação de E lógico. +@param [nnum12], numeric, 12º número a ser utlizado na operação de E lógico. +@param [nnum13], numeric, 13º número a ser utlizado na operação de E lógico. +@param [nnum14], numeric, 14º número a ser utlizado na operação de E lógico. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/land +/*/ +binary function land(nnum1, nnum2, nnum3, nnum4, nnum5, nnum6, nnum7, nnum8, nnum9, nnum10, nnum11, nnum12, nnum13, nnum14) +return + + +/*/{Protheus.doc} lastrec +Retorna o número do último registro inserido na tabela atual. + +@type binary function +@sintax LastRec() => numeric +@return numeric, Retorna o número do último registro inserido na tabela atual. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/lastrec +/*/ +binary function lastrec() +return + + +/*/{Protheus.doc} listdrives +Retorna as unidades \(drives\), e/ou seus respectivos tipos, da máquina que está executando o TOTVS \| Application Server ou o TOTVS \| SmartClient. + +@type binary function +@sintax ListDrives([@aUnits], [@aTypes], ) => logical +@return logical, Retorna **.T.** se conseguiu listar o que foi solicitado; caso contrário, retorna **.F.**. + +@param [@aunits], array, Retorna todas as unidades da máquina. +@param [@atypes], array, Retorna o tipo das unidades listadas. +@param , numeric, Indica se será listado da máquina do TOTVS \| Application Server ou do TOTVS \| SmartClient. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/listdrives +/*/ +binary function listdrives(aunits, atypes, nwhere) +return + + +/*/{Protheus.doc} localtoutc +Converte a data e hora local para UTC - Coordinated Universal Time. + +@type binary function +@sintax LocalToUTC(, , [nDST]) => array +@return array, Retorna um array contendo a data \(yyyyMMdd\) e a hora \(hh:mm:ss\) no formato UTC. + +@param , date, Indica a data local no formato ano, mês e dia. Exemplo: yyyyMMdd. +@param , date, Indica a hora local no formato hora, minuto e segundo. Exemplo: hh:mm:ss. +@param [ndst], numeric, Indica se a hora informada representa um horário solar \(0\) ou horário de verão \(1\). Caso não especificado, será considerado 0 \(standard time, ou horário solar\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/localtoutc +/*/ +binary function localtoutc(cdate, ctime, ndst) +return + + +/*/{Protheus.doc} log +Calcula o logaritmo natural de um valor numérico. + +@type binary function +@sintax Log() => numeric +@return numeric, Retorna o valor numérico do logaritmo natural. + +@param , numeric, Indica o valor cujo logaritmo é calculado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/log +/*/ +binary function log(nvalue) +return + + +/*/{Protheus.doc} log10 +Calcula o logaritmo de um valor numérico. + +@type binary function +@sintax Log10() => numeric +@return numeric, Retorna o valor numérico do logaritmo de **nValue**. + +@param , numeric, Indica o valor cujo logaritmo é calculado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/log10 +/*/ +binary function log10(nvalue) +return + + +/*/{Protheus.doc} logmsg +Registra uma mensagem de log com as informações do sistema no formato SysLog \(RFC 5424\), e automaticamente insere informações como: data e hora da geração da mensagem, hostname e id da thread. O Log é expedido para o servidor de log \(LogServer\) de forma assíncrona, não gerando contenção no servidor de aplicação, podendo ser usado como “trace” sem grande prejuízo para a execução. + +@type binary function +@sintax LogMsg() => NIL +@param , character, Nome da função/aplicação onde o log está sendo gerado +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/logmsg +/*/ +binary function logmsg(cfunc) +return + + +/*/{Protheus.doc} logusername +Obtém o nome do usuário logado no sistema operacional da estação em que está sendo executado o Smart Client. + +@type binary function +@sintax LogUserName() => character +@return character, Retorna uma string que corresponde ao login de sistema do usuário. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/logusername +/*/ +binary function logusername() +return + + +/*/{Protheus.doc} look4bit +Retorna a quantidade de bits com nível lógico igual a 1 em uma string. + +@type binary function +@sintax Look4Bit(, , , ) => numeric +@return numeric, Retorna a quantidade de bits 1 na string apontada por **cStr**. + +@param , character, Indica a string que será verificada. +@param , numeric, Indica o índice do bit inicial. +@param , numeric, Indica a quantidade de bits que serão verificados. +@param , numeric, Indica o índice do último byte que será testado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/look4bit +/*/ +binary function look4bit(cstr, nstart, ntest, nlength) +return + + +/*/{Protheus.doc} lor +Realiza a operação lógica **OU** entre 2 ou mais números. + +@type binary function +@sintax LOr(, , [nNum3], [nNum4], [nNum5], [nNum6], [nNum7], [nNum8], [nNum9], [nNum10], [nNum11], [nNum12], [nNum13], [nNum14]) => numeric +@return numeric, Retorna o valor do OU lógico entre todos os parâmetros passados, sendo "**0**" como "**.F.**" e "**1**" como "**.T.**". + +@param , numeric, 1º número a ser utlizado na operação de OU lógico. +@param , numeric, 2º número a ser utlizado na operação de OU lógico. +@param [nnum3], numeric, 3º número a ser utlizado na operação de OU lógico. +@param [nnum4], numeric, 4º número a ser utlizado na operação de OU lógico. +@param [nnum5], numeric, 5º número a ser utlizado na operação de OU lógico. +@param [nnum6], numeric, 6º número a ser utlizado na operação de OU lógico. +@param [nnum7], numeric, 7º número a ser utlizado na operação de OU lógico. +@param [nnum8], numeric, 8º número a ser utlizado na operação de OU lógico. +@param [nnum9], numeric, 9º número a ser utlizado na operação de OU lógico. +@param [nnum10], numeric, 10º número a ser utlizado na operação de OU lógico. +@param [nnum11], numeric, 11º número a ser utlizado na operação de OU lógico. +@param [nnum12], numeric, 12º número a ser utlizado na operação de OU lógico. +@param [nnum13], numeric, 13º número a ser utlizado na operação de OU lógico. +@param [nnum14], numeric, 14º número a ser utlizado na operação de OU lógico. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/lor +/*/ +binary function lor(nnum1, nnum2, nnum3, nnum4, nnum5, nnum6, nnum7, nnum8, nnum9, nnum10, nnum11, nnum12, nnum13, nnum14) +return + + +/*/{Protheus.doc} makedir +Cria um diretório. + +@type binary function +@sintax MakeDir(, [uParam2], [lChangeCase]) => numeric +@return numeric, Retorna zero \(0\), se o diretório for criado com sucesso; caso contrário, retorna diferente de zero. + +@param , character, Indica o nome do diretório que será criado. +@param [uparam2], numeric, Compatibility parameter. Pass NIL. +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso seja falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/makedir +/*/ +binary function makedir(cpath, uparam2, lchangecase) +return + + +/*/{Protheus.doc} match +Valida se uma string está formatada conforme um determinado padrão. + +@type binary function +@sintax Match(, ) => logical +@return logical, Retorna **.T.** caso **cValue** seja validado pelo padrão indicado em **cMask**; caso contrário, retornará **.F.**. + +@param , character, Indica o valor que será validado contra um padrão. +@param , character, Indica a máscara com o padrão para validar **cValue**. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/match +/*/ +binary function match(cvalue, cmask) +return + + +/*/{Protheus.doc} mathc +Realiza operações matemáticas \(Soma, Subtração, Divisão, Multiplicação e Exponenciação\) com strings que contém um valor numérico. + +@type binary function +@sintax MathC(, , ) => character +@return character, Retorna uma nova string com o resultado da operação matemática. Observação: O resultado terá até 18 casas de precisão. + +@param , character, Realiza operações matemáticas \(Soma, Subtração, Divisão, Multiplicação e Exponenciação\) com strings que contém um valor numérico. +@param , character, Indica o operador/caracter \(/, +, \*, -, e\) da operação que será realizada. +@param , character, Indica a string que contém um valor numérico, representando o número no qual desejamos realizar uma operação. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/mathc +/*/ +binary function mathc(cnum1, coperacao, cnum2) +return + + +/*/{Protheus.doc} max +Retorna o maior entre dois valores numéricos ou data. + +@type binary function +@sintax Max(, ) => variant +@return variant, Retorna o maior dos dois parâmetros. O valor retornado é do mesmo tipo de dado que os parâmetros. + +@param , variant, Indica o valor que será comparado com o segundo parâmetro. +@param , variant, Indica a segunda expressão que será utilizada para comparação. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/max +/*/ +binary function max(xexp1, xexp2) +return + + +/*/{Protheus.doc} md5 +Aplica a um conteúdo o algoritmo MD5 \(MessageDigest Algorithm 5\). + +@type binary function +@sintax MD5(, [nType]) => character +@return character, Retorna o hash do conteúdo. + +@param , character, Indica o conteúdo no qual será aplicado o algoritmo. +@param [ntype], numeric, Indica se o hash retornado será binário \(1=RAW_DIGEST\) ou hexadecimal \(2=HEX_DIGEST\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/md5 +/*/ +binary function md5(cvalor, ntype) +return + + +/*/{Protheus.doc} md5file +Lê o conteúdo do arquivo especificado e, a partir deste arquivo, gera uma chave hash utilizando MD5 - Message Digest Algorithm 5. + +@type binary function +@sintax MD5File(, [nTipo], [nWhere]) => character +@return character, Retorna o hash MD5 do arquivo informado. Em caso de falha na abertura do arquivo, o retorno será uma string vazia \( '' \). + +@param , character, Indica o nome do arquivo a ser considerado para a geração do hash MD5. +@param [ntipo], numeric, Indica se o hash retornado será binário \(1=RAW_DIGEST\) ou hexadecimal \(2=HEX_DIGEST\). +@param [nwhere], numeric, Indica o local onde será realizada a procura do arquivo. Sendo: 0=O acesso depende do path \(Quando for um path relativo a procura será no TOTVS Application Server; caso seja um path absoluto, a procura será no TOTVS Smart Client\). 1 = A procura será realizada no diretório de instalação do TOTVS Application Server. 2 = A procura será realizada no diretório de instalação do TOTVS Smart Client. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/md5file +/*/ +binary function md5file(cfile, ntipo, nwhere) +return + + +/*/{Protheus.doc} memglbsize +Retorna a quantidade de memória, em bytes, sendo consumida pela lista de variáveis globais na memória. + +@type binary function +@sintax MemGlbSize() => numeric +@return numeric, Retorna o número de bytes consumido por todas as variáveis globais na memória da instância atual do servidor de aplicação. + +@param , character, Identificador da variável global. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/memglbsize +/*/ +binary function memglbsize(cglbname) +return + + +/*/{Protheus.doc} memoline +Retorna o conteúdo de um campo, do tipo memo ou string com múltiplas linhas. + +@type binary function +@sintax MemoLine(, [nLineLength], [nLineNumber], [nTabSize], [lWrapWord]) => character +@return character, Retorna o conteúdo desejado do texto. + +@param , character, Indica o texto com múltiplas linhas para filtro. +@param [nlinelength], numeric, Indica o tamanho máximo que será retornado da linha. +@param [nlinenumber], numeric, Indica o número da linha que será retornada. +@param [ntabsize], numeric, Indica o tamanho da tabulação que será usada +@param [lwrapword], logical, Indica se apenas palavras inteiras devem ser consideradas no tamanho do retorno +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/memoline +/*/ +binary function memoline(ctext, nlinelength, nlinenumber, ntabsize, lwrapword) +return + + +/*/{Protheus.doc} memoread +Retorna o conteúdo de um arquivo do tipo texto. + +@type binary function +@sintax MemoRead(, [lChangeCase]) => logical +@return logical, Retorna o conteúdo do arquivo texto, ou uma string vazia \(""\) em caso de erro. + +@param , character, Indica o caminho do arquivo que será lido do tipo texto. +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/memoread +/*/ +binary function memoread(cfile, lchangecase) +return + + +/*/{Protheus.doc} memotran +descrição da funcao + +@type binary function +@sintax MemoTran([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/memotran +/*/ +binary function memotran(tnomevar) +return + + +/*/{Protheus.doc} memowrite +Permite escrever e salvar um arquivo texto. + +@type binary function +@sintax MemoWrite(, ) => logical +@return logical, Retorna **.T.** se conseguiu criar o arquivo; caso contrário, retorna **.F.**. + +@param , character, Indica o caminho do arquivo que será criado do tipo texto. O tamanho máximo do caminho é de 256 bytes. +@param , character, Indica o texto que será inserido no arquivo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/memowrite +/*/ +binary function memowrite(cfile, ctext) +return + + +/*/{Protheus.doc} nome +descrição da funcao + +@type binary function +@sintax nome([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/nome +/*/ +binary function nome(tnomevar) +return + + +/*/{Protheus.doc} methlsmemberof +Indica se o método informado através de uma string por parâmetro existe na classe + +@type binary function +@sintax MethlsMemberOf(, , [lRecursive]) => logical +@return logical, Retorna verdadeiro \(.T.\), se o método for encontrado; caso contrário, falso \(.F.\). + +@param , object, Indica o objeto que representa a instância da classe a ser pesquisada. +@param , character, Indica o nome do método declarado na classe a ser pesquisado. +@param [lrecursive], logical, \*Informa se a busca pelo método deve ser realizado nas classes pai, no caso de instância de classe com herança. \(Default = .F.\) +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/methlsmemberof +/*/ +binary function methlsmemberof(oobj, cmethname, lrecursive) +return + + +/*/{Protheus.doc} metricsname +Retorna um Objeto no formato Json com os nomes de todas as métricas disponíveis para coleta e a versão da api quando solicitado. + +@type binary function +@sintax MetricsName([WithVersion]) => character +@return character, Retorna um objeto json com os nomes de todas as métricas disponíveis para coleta. + +@param [withversion], logical, Quando informado com valor verdadeiro, insere a versão da api na propriedade version. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/metricsname +/*/ +binary function metricsname(withversion) +return + + +/*/{Protheus.doc} metricsread +Retorna um objeto Json com as métricas coletadas pelo sistema. + +@type binary function +@sintax MetricsRead([Metric_Name]) => character +@return character, Retorna uma string, no formato json, com as métricas coletadas. + +@param [metric_name], array, Quando informado, filtra objeto de saída inserindo apenas as métricas que contem os nomes informados. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/metricsread +/*/ +binary function metricsread(metric_name) +return + + +/*/{Protheus.doc} min +Retorna o menor entre dois valores numéricos ou data. + +@type binary function +@sintax Min(, ) => variant +@return variant, Retorna o menor dos dois parâmetros. O valor retornado é do mesmo tipo de dado que os parâmetros. + +@param , variant, Indica o valor que será comparado com o segundo parâmetro. +@param , variant, Indica a segunda expressão que será utilizada para comparação. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/min +/*/ +binary function min(xexp1, xexp2) +return + + +/*/{Protheus.doc} mlcount +Conta a quantidade de linhas de um campo memo ou string com múltiplas linhas, considerando um numero máximo de letras por linha, tamanho estimado para caracteres de tabulação, e quebras de linhas CRLF \(pulo de linha\) dentro do texto. + +@type binary function +@sintax MLCount(, [nLinLen], [nTabSize], [lQuebra]) => numeric +@return numeric, Retorna o número de linhas da string considerando os parâmetros de formatação informados. + +@param , character, Indica o texto com múltiplas linhas para verificar a quantidade de linhas. +@param [nlinlen], numeric, Especifica o número de caracteres por linha para que ocorra a quebra de linhas. \(Default: 79\) +@param [ntabsize], numeric, Define um tamanho para tabulação. \(Default: 4\) +@param [lquebra], logical, Especifica o comportamento de contagem de linhas quando a ultima palavra não cabe inteira na linha atual. .T. - Coloca a palavra na próxima linha \(Default\) .F. - Quebra a palavra no tamanho da linha e coloca o restante na próxima linha. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/mlcount +/*/ +binary function mlcount(ctext, nlinlen, ntabsize, lquebra) +return + + +/*/{Protheus.doc} mod +Retorna um número que representa o resto da divisão do primeiro parâmetro \(nDividend\) pelo segundo \(nDivisor\). O operador módulo \(%\) do AdvPL têm a mesma funcionalidade da função Mod. + +@type binary function +@sintax Mod(, ) => numeric +@return numeric, Retorna um número que representa o resto de <**nDividend**> dividido por <**nDivisor**>. + +@param , numeric, Indica o dividendo da operação de divisão. +@param , numeric, Indica o divisor da operação de divisão. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/mod +/*/ +binary function mod(ndividend, ndivisor) +return + + +/*/{Protheus.doc} mscompress +Compacta um ou vários arquivos em um único arquivo no formato Microsiga Zip \(extensão .mzp\). + +@type binary function +@sintax MsCompress(, [cDest], [cPass], [lChangeCase]) => character +@return character, Em caso de sucesso, retorna uma string com o nome do arquivo gerado; caso contrário, retornará uma string em branco \(""\). + +@param , variant, Indica o arquivo ou lista de arquivos que serão compactados. Os tipos de dados válidos para este parâmetro são: Caracter, para especificar um único arquivo, ou Array de caracteres, para especificar um ou mais arquivos. +@param [cdest], character, Indica o caminho do arquivo de destino. +@param [cpass], character, Indica a senha que será utilizada para criptografar o arquivo compactado. +@param [lchangecase], logical, Indica se colocará o nome dos arquivos em letra minúscula. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/mscompress +/*/ +binary function mscompress(xfile, cdest, cpass, lchangecase) +return + + +/*/{Protheus.doc} mscrc32 +Calcula um CRC - Cyclic Redundancy Code \(Código de Redundância Cíclica\) de uma string e retorna um número/resultado. + +@type binary function +@sintax MsCRC32() => numeric +@return numeric, Retorna um número inteiro, com até 10 dígitos, que corresponde ao CRC da string informada no parâmetro cString. + +@param , character, Indica a string da qual será calculado um CRC32. Observação: É garantido que, para a mesma string, sempre se obtenha um mesmo número, porém, não é garantido que para strings diferentes, os números sejam sempre diferentes. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/mscrc32 +/*/ +binary function mscrc32(cstring) +return + + +/*/{Protheus.doc} mscrc32str +Calcula um CRC - Calcula um CRC - Cyclic Redundancy Code \(Código de Redundância Cíclica\) de uma string e retorna uma string com o resultado. + +@type binary function +@sintax MsCRC32Str() => character +@return character, Retorna uma string com o CRC da string informada no parâmetro cString. + +@param , character, Indica a string da qual será calculado um CRC32. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/mscrc32str +/*/ +binary function mscrc32str(cstring) +return + + +/*/{Protheus.doc} msdecomp +Descompacta um arquivo compactado, no formato Microsiga Zip \(extensão .mzp\), no diretório informado. + +@type binary function +@sintax MsDecomp(, [cDest], [cPass]) => logical +@return logical, Retorna verdadeiro \(.T.\), se a descompactação for realizada com sucesso; caso contrário, falso \(.F.\). + +@param , variant, Indica o nome do arquivo, no formato MZP \(Microsiga Zip\), que será descompactado. +@param [cdest], character, Indica o endereço de destino onde será gravado o arquivo descompactado. Observação: Pode-se informar o caminho do servidor ou o diretório local. +@param [cpass], character, Indica a senha para descompactar o arquivo, caso tenha sido compactado com senha. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/msdecomp +/*/ +binary function msdecomp(xfile, cdest, cpass) +return + + +/*/{Protheus.doc} msparse +descrição da funcao + +@type binary function +@sintax msparse([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/msparse +/*/ +binary function msparse(tnomevar) +return + + +/*/{Protheus.doc} msparsererror +descrição da funcao + +@type binary function +@sintax MSParserError([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/msparsererror +/*/ +binary function msparsererror(tnomevar) +return + + +/*/{Protheus.doc} msparsefull +descrição da funcao + +@type binary function +@sintax msparsefull([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/msparsefull +/*/ +binary function msparsefull(tnomevar) +return + + +/*/{Protheus.doc} nand +Realiza a operação binária **E** entre 2 ou mais números. + +@type binary function +@sintax NAnd(, , [nNum3], [nNum4], [nNum5], [nNum6], [nNum7], [nNum8], [nNum9], [nNum10], [nNum11], [nNum12], [nNum13], [nNum14]) => numeric +@return numeric, Retorna o valor do E binário entre todos os parâmetros passados. + +@param , numeric, 1º número a ser utilizado na operação de E binário. +@param , numeric, 2º número a ser utilizado na operação de E binário. +@param [nnum3], numeric, 3º número a ser utilizado na operação de E binário. +@param [nnum4], numeric, 4º número a ser utilizado na operação de E binário. +@param [nnum5], numeric, 5º número a ser utilizado na operação de E binário. +@param [nnum6], numeric, 6º número a ser utilizado na operação de E binário. +@param [nnum7], numeric, 7º número a ser utilizado na operação de E binário. +@param [nnum8], numeric, 8º número a ser utilizado na operação de E binário. +@param [nnum9], numeric, 9º número a ser utilizado na operação de E binário. +@param [nnum10], numeric, 10º número a ser utilizado na operação de E binário. +@param [nnum11], numeric, 11º número a ser utilizado na operação de E binário. +@param [nnum12], numeric, 12º número a ser utilizado na operação de E binário. +@param [nnum13], numeric, 13º número a ser utilizado na operação de E binário. +@param [nnum14], numeric, 14º número a ser utilizado na operação de E binário. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/nand +/*/ +binary function nand(nnum1, nnum2, nnum3, nnum4, nnum5, nnum6, nnum7, nnum8, nnum9, nnum10, nnum11, nnum12, nnum13, nnum14) +return + + +/*/{Protheus.doc} newclassintf +descrição da funcao + +@type binary function +@sintax NewClassIntf([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/newclassintf +/*/ +binary function newclassintf(tnomevar) +return + + +/*/{Protheus.doc} newclassmethod +descrição da funcao + +@type binary function +@sintax NewClassMethod([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/newclassmethod +/*/ +binary function newclassmethod(tnomevar) +return + + +/*/{Protheus.doc} nor +Realiza a operação binária **OU** entre 2 ou mais números. + +@type binary function +@sintax NOr(, , [nNum3], [nNum4], [nNum5], [nNum6], [nNum7], [nNum8], [nNum9], [nNum10], [nNum11], [nNum12], [nNum13], [nNum14]) => numeric +@return numeric, Retorna o valor do OU binário entre todos os parâmetros passados. + +@param , numeric, 1º número a ser utilizado na operação de OU binário. +@param , numeric, 2º número a ser utilizado na operação de OU binário. +@param [nnum3], numeric, 3º número a ser utilizado na operação de OU binário. +@param [nnum4], numeric, 4º número a ser utilizado na operação de OU binário. +@param [nnum5], numeric, 5º número a ser utilizado na operação de OU binário. +@param [nnum6], numeric, 6º número a ser utilizado na operação de OU binário. +@param [nnum7], numeric, 7º número a ser utilizado na operação de OU binário. +@param [nnum8], numeric, 8º número a ser utilizado na operação de OU binário. +@param [nnum9], numeric, 9º número a ser utilizado na operação de OU binário. +@param [nnum10], numeric, 10º número a ser utilizado na operação de OU binário. +@param [nnum11], numeric, 11º número a ser utilizado na operação de OU binário. +@param [nnum12], numeric, 12º número a ser utilizado na operação de OU binário. +@param [nnum13], numeric, 13º número a ser utilizado na operação de OU binário. +@param [nnum14], numeric, 14º número a ser utilizado na operação de OU binário. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/nor +/*/ +binary function nor(nnum1, nnum2, nnum3, nnum4, nnum5, nnum6, nnum7, nnum8, nnum9, nnum10, nnum11, nnum12, nnum13, nnum14) +return + + +/*/{Protheus.doc} notbit +Inverte os bits dos caracteres de uma string. + +@type binary function +@sintax NotBit(<@cStr>, ) => NIL +@param <@cstr>, character, Indica a string que será modificada. +@param , numeric, Indica a quantidade de caracteres que terão seus bits invertidos. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/notbit +/*/ +binary function notbit(cstr, nlength) +return + + +/*/{Protheus.doc} ntol +Converte um valor numérico em lógico. + +@type binary function +@sintax NToL() => numeric +@return numeric, Retorna o valor lógico correspondente ao valor numérico passado por parâmetro. + +@param , numeric, Indica o valor numérico que será convertido para lógico. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ntol +/*/ +binary function ntol(nvalue) +return + + +/*/{Protheus.doc} nxor +Esta função pode ser usada no lugar da função obsoleta B_XOR\(\). + +@type binary function +@sintax NXor(, , [nNum3], [nNum4], [nNum5], [nNum6], [nNum7], [nNum8], [nNum9], [nNum10], [nNum11], [nNum12], [nNum13], [nNum14]) => numeric +@return numeric, Retorna o valor do XOR binário entre todos os parâmetros passados. + +@param , numeric, 1º número a ser utilizado na operação de XOR binário. +@param , numeric, 2º número a ser utilizado na operação de XOR binário. +@param [nnum3], numeric, 3º número a ser utilizado na operação de XOR binário. +@param [nnum4], numeric, 4º número a ser utilizado na operação de XOR binário. +@param [nnum5], numeric, 5º número a ser utilizado na operação de XOR binário. +@param [nnum6], numeric, 6º número a ser utilizado na operação de XOR binário. +@param [nnum7], numeric, 7º número a ser utilizado na operação de XOR binário. +@param [nnum8], numeric, 8º número a ser utilizado na operação de XOR binário. +@param [nnum9], numeric, 9º número a ser utilizado na operação de XOR binário. +@param [nnum10], numeric, 10º número a ser utilizado na operação de XOR binário. +@param [nnum11], numeric, 11º número a ser utilizado na operação de XOR binário. +@param [nnum12], numeric, 12º número a ser utilizado na operação de XOR binário. +@param [nnum13], numeric, 13º número a ser utilizado na operação de XOR binário. +@param [nnum14], numeric, 14º número a ser utilizado na operação de XOR binário. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/nxor +/*/ +binary function nxor(nnum1, nnum2, nnum3, nnum4, nnum5, nnum6, nnum7, nnum8, nnum9, nnum10, nnum11, nnum12, nnum13, nnum14) +return + + +/*/{Protheus.doc} objecthandle +descrição da funcao + +@type binary function +@sintax objecthandle([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/objecthandle +/*/ +binary function objecthandle(tnomevar) +return + + +/*/{Protheus.doc} oemtoansi +Converte uma string do formato OEM/MS-DOS Text para ANSI Text \(formato do Microsoft Windows\). + +@type binary function +@sintax OEMToANSI() => character +@return character, Retorna a string convertida \(formato ANSI\) para ser exibida no Microsoft Windows + +@param , character, Indica a string \(formato OEM/MS-DOS\) que será convertida. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/oemtoansi +/*/ +binary function oemtoansi(cstringoem) +return + + +/*/{Protheus.doc} pad +Adiciona caracteres de preenchimento à direita do conteúdo de uma variável. + +@type binary function +@sintax Pad(, , [cFill]) => character +@return character, Retorna uma string com o tamanho indicado em **nLen** contendo o valor indicado em **xExp** preenchido à direita com o caractere indicado em **cFill**. + +@param , variant, Indica um valor no qual serão inseridos caracteres de preenchimento. +@param , numeric, Indica o tamanho da string que será retornada. +@param [cfill], character, Indica o caractere que será inserido no parâmetro. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/pad +/*/ +binary function pad(xexp, nlen, cfill) +return + + +/*/{Protheus.doc} padc +Centraliza o conteúdo de uma variável adicionando caracteres de preenchimento à direita e à esquerda. + +@type binary function +@sintax PadC(, , [cFill]) => character +@return character, Retorna uma string com o tamanho indicado em **nLen** contendo o valor indicado em **xExp** centralizado, preenchido com o caractere indicado em **cFill**. + +@param , variant, Indica um valor no qual serão inseridos caracteres de preenchimento. +@param , numeric, Indica o tamanho da string que será retornada. +@param [cfill], character, Indica o caractere que será inserido no parâmetro. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/padc +/*/ +binary function padc(xexp, nlen, cfill) +return + + +/*/{Protheus.doc} padl +Adiciona caracteres de preenchimento à esquerda do conteúdo de uma variável. + +@type binary function +@sintax PadL(, , [cFill]) => character +@return character, Retorna uma string com o tamanho indicado em **nLen** contendo o valor indicado em **xExp** preenchido à esquerda com o caractere indicado em **cFill**. + +@param , variant, Indica um valor no qual serão inseridos caracteres de preenchimento. +@param , numeric, Indica o tamanho da string que será retornada. +@param [cfill], character, Indica o caractere que será inserido no parâmetro. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/padl +/*/ +binary function padl(xexp, nlen, cfill) +return + + +/*/{Protheus.doc} padr +Adiciona caracteres de preenchimento à direita do conteúdo de uma variável. + +@type binary function +@sintax PadR(, , [cFill]) => character +@return character, Retorna uma string com o tamanho indicado em **nLen** contendo o valor indicado em **xExp** preenchido à direita com o caractere indicado em **cFill**. + +@param , variant, Indica um valor no qual serão inseridos caracteres de preenchimento. +@param , numeric, Indica o tamanho da string que será retornada. +@param [cfill], character, Indica o caractere que será inserido no parâmetro. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/padr +/*/ +binary function padr(xexp, nlen, cfill) +return + + +/*/{Protheus.doc} pcount +Retorna o número de parâmetros passados para uma função AdvPL. + +@type binary function +@sintax PCount() => numeric +@return numeric, Retorna o número de parâmetros passados para uma função AdvPL. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/pcount +/*/ +binary function pcount() +return + + +/*/{Protheus.doc} pemcertpub +Retorna o conteúdo público do certificado digital no formato PEM \(Privacy Enhanced Mail\). + +@type binary function +@sintax PemCertPub(, [cPassword]) => character +@return character, Conteúdo do certificado no formato PEM. + +@param , variant, Dados do certificado. Pode ser caractere, json ou hashmap. Mais informações no campo Observações. +@param [cpassword], character, Senha do certificado, caso haja e a variável cCertData seja passada em caractere. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/pemcertpub +/*/ +binary function pemcertpub(ccertdata, cpassword) +return + + +/*/{Protheus.doc} peminfo +Extrai as informações referentes a um arquivo de certificados no formato .PEM \(Privacy Enhanced Mail\). + +@type binary function +@sintax PEMInfo(, [cPassword], [nHashAlgorithm]) => array +@return array, Retorna um vetor com as informações referente aos certificados existentes no arquivo PEM. + +@param , character, Indica o caminho do arquivo .PEM, a partir do diretório raiz \(RootPath\) do TOTVS Application Server. +@param [cpassword], character, Indica a senha para extrair os dados do arquivo PEM. +@param [nhashalgorithm], numeric, Indica o algoritmo de hash que deverá ser usado para o cálculo do Fingerprint/Thumbprint do certificado. Default: 3 \(SHA1\) +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/peminfo +/*/ +binary function peminfo(cfile, cpassword, nhashalgorithm) +return + + +/*/{Protheus.doc} pfx2pem +Extrai o certificado de cliente e o certificado de autorização \(Certificate Authorith\) de um arquivo com extensão .PFX \(formato padrão do IIS - Internet Information Services\), e gera como saída um arquivo no formato .PEM \(Privacy Enhanced Mail\). + +@type binary function +@sintax PFX2PEM(, , <@cError>, [cPassword]) => logical +@return logical, Retorna **.T.** quando o PEM é gerado com sucesso; caso contrário, **.F.**. + +@param , character, Indica o caminho do arquivo .PFX, a partir da raiz do diretório \(RootPath\) do TOTVS Application Server. +@param , character, Indica o caminho do arquivo .PEM, a partir da raiz do diretório \(RootPath\) do TOTVS Application Server, com as informações de certificado de cliente. +@param <@cerror>, character, Indica a saída da mensagem de erro, em caso de falha. +@param [cpassword], character, Indica a senha para extrair os dados do arquivo PFX. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/pfx2pem +/*/ +binary function pfx2pem(cpfxfile, cpemfile, cerror, cpassword) +return + + +/*/{Protheus.doc} pfxca2pem +Extrai o certificado de autorização \(Certificate Authorith\) de um arquivo com extensão .PFX \(formato padrão do IIS - Internet Information Services\), e gera como saída um arquivo no formato .PEM \(Privacy Enhanced Mail\). + +@type binary function +@sintax PFXCA2PEM(, , <@cError>, [cPassword]) => logical +@return logical, Retorna **.T.** se conseguiu extrair os certificados de autorização do arquivo .PFX; caso contrário, **.F.**. + +@param , character, Indica o caminho do arquivo .PFX, a partir da raiz do diretório \(RootPath\) do TOTVS \| Application Server. +@param , character, Indica o caminho do arquivo .PEM, a partir da raiz do diretório \(RootPath\) do TOTVS \| Application Server, com as informações dos certificados de autorização. +@param <@cerror>, character, Indica a saída da mensagem de erro, em caso de falha. +@param [cpassword], character, Indica a senha para exportar os dados do certificado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/pfxca2pem +/*/ +binary function pfxca2pem(cpfxfile, cpemfile, cerror, cpassword) +return + + +/*/{Protheus.doc} pfxcert2pem +Extrai o certificado de cliente de um arquivo com extensão .PFX \(formato padrão do IIS - Internet Information Services\), e gera como saída um arquivo no formato .PEM \(Privacy Enhanced Mail\). + +@type binary function +@sintax PFXCert2PEM(, , <@cError>, [cPassword]) => logical +@return logical, Retorna **.T.** quando o PEM é gerado com sucesso; caso contrário, **.F.**. + +@param , character, Indica o caminho do arquivo .PFX, a partir da raiz do diretório \(RootPath\) do TOTVS Application Server. +@param , character, Indica o caminho do arquivo .PEM, a partir da raiz do diretório \(RootPath\) do TOTVS Application Server, com as informações de certificado de cliente. +@param <@cerror>, character, Indica a saída da mensagem de erro, em caso de falha. +@param [cpassword], character, Indica a senha para extrair os dados do arquivo PFX. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/pfxcert2pem +/*/ +binary function pfxcert2pem(cpfxfile, cpemfile, cerror, cpassword) +return + + +/*/{Protheus.doc} pfxinfo +Extrai de um arquivo com extensão .PFX \(formato padrão do IIS - Internet Information Services\) as informações referentes a certificado de cliente e certificados de CA \(Certificate Authority\). + +@type binary function +@sintax PFXInfo(, [cPassword]) => array +@return array, Retorna um vetor com as informações referentes a certificado de cliente e certificados de CA. + +@param , character, Indica o caminho do arquivo .PFX, a partir do diretório raiz \(RootPath\) do TOTVS \| Application Server. +@param [cpassword], character, Indica a senha para extrair os dados do arquivo PFX. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/pfxinfo +/*/ +binary function pfxinfo(cfile, cpassword) +return + + +/*/{Protheus.doc} pfxkey2pem +Extrai a chave privada de um arquivo com extensão .PFX \(formato padrão do IIS - Internet Information Services\), e gera como saída um arquivo no formato .PEM \(Privacy Enhanced Mail\). + +@type binary function +@sintax PFXKey2PEM(, , <@cError>, [cPassword]) => logical +@return logical, Retorna **.T.** se conseguiu extrair a chave privada do arquivo .PFX; caso contrário, **.F.**. + +@param , character, Indica o caminho do arquivo .PFX, a partir da raiz do diretório \(RootPath\) do TOTVS Application Server. +@param , character, Indica o caminho do arquivo .PEM, a partir da raiz do diretório \(RootPath\) do TOTVS Application Server, com as informações de chave privada. +@param <@cerror>, character, Indica a saída da mensagem de erro, em caso de falha. +@param [cpassword], character, Indica a senha para extrair os dados do arquivo PFX. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/pfxkey2pem +/*/ +binary function pfxkey2pem(cpfxfile, cpemfile, cerror, cpassword) +return + + +/*/{Protheus.doc} ping +A função Ping\(\) retorna a latência entre o AppServer e SmartClient, resultado será a média do tempo das requisições. + +@type binary function +@sintax Ping() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ping +/*/ +binary function ping() +return + + +/*/{Protheus.doc} pk7key2pem +Extrai todos os certificado de um arquivo PKCS#7 em formato DER \(Distinguished Encoding Rules\) para o formato PEM \(Privacy Enhanced Mail\). + +@type binary function +@sintax PK7Key2PEM(, , <@cError>) => logical +@return logical, Retorna **.T.** se conseguiu converter o arquivo .PK7; caso contrário, **.F.**. + +@param , character, Indica o caminho do arquivo .PK7, a partir do RootPath do TOTVS Application Server. +@param , character, Indica o caminho do arquivo .PEM, a partir do RootPath do TOTVS Application Server. +@param <@cerror>, character, Indica a saída da mensagem de erro, em caso de falha. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/pk7key2pem +/*/ +binary function pk7key2pem(cpk7file, cpemfile, cerror) +return + + +/*/{Protheus.doc} pk8key2pem +Converte uma chave privada PKCS#8 em formato DER \(Distinguished Encoding Rules\) para o formato PEM \(Privacy Enhanced Mail\). + +@type binary function +@sintax PK8Key2PEM(, , <@cError>, [cPassword]) => logical +@return logical, Retorna **.T.** se conseguiu converter o arquivo .PK8; caso contrário, **.F.**. + +@param , character, Indica o caminho do arquivo .PK8, a partir da raiz do diretório \(RootPath\) do TOTVS Application Server. +@param , character, Indica o caminho do arquivo .PEM, a partir da raiz do diretório \(RootPath\) do TOTVS Application Server, com as informações de chave privada. +@param <@cerror>, character, Indica a saída da mensagem de erro, em caso de falha. +@param [cpassword], character, Indica a senha que será usada no arquivo .PEM. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/pk8key2pem +/*/ +binary function pk8key2pem(cpk8file, cpemfile, cerror, cpassword) +return + + +/*/{Protheus.doc} privsignrsa +Assina um determinado conteúdo usando chave privada. + +@type binary function +@sintax PrivSignRSA(, , , , [@cErrStr], [nPad]) => character +@return character, Retorna o valor do parâmetro cContent, assinado, de acordo com o tipo nTipo e a chave privada informada cPathKey. + +@param , character, Indica a string que contém o caminho para a chave privada \(formato .PEM\) ou o conteúdo do arquivo. +@param , character, Indica a string que será assinada. +@param , numeric, Indica o tipo de algoritmo que será utilizado para realizar a assinatura da chave. +@param , character, Indica uma string que contém o valor da senha usada na geração da chave privada criptografada. +@param [@cerrstr], character, Indica a variável para retornar as mensagens de erro. +@param [npad], numeric, Indica o tipo de schema de criptografia que será utilizado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/privsignrsa +/*/ +binary function privsignrsa(ckeyorpathkey, ccontent, ntipo, csenha, cerrstr, npad) +return + + +/*/{Protheus.doc} privveryrsa +Verifica um determinado conteúdo assinado, usando a chave pública. + +@type binary function +@sintax PrivVeryRSA(, , , , [@cErrStr], [nPad]) => codeblock +@return codeblock, Retorna verdadeiro \(.T.\) se o valor informado no parâmetro cContent está de acordo com o valor enviado que foi assinado pelo tipo nTipo e a chave informada cPathKey. Caso contrário, falso \(.F.\). + +@param , character, Indica a string que contém o caminho para a chave privada \(formato .PEM\) ou o conteúdo do arquivo. +@param , character, Indica o valor que será verificado, com um conteúdo já assinado. +@param , numeric, Indica o tipo de algoritmo que será utilizado para verificar a assinatura. +@param , character, Indica uma string que contém o valor da assinatura gerada mediante a aplicação da chave privada criptografada. +@param [@cerrstr], character, Indica a variável para retornar as mensagens de erro. +@param [npad], numeric, Indica o tipo de schema de criptografia que será utilizado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/privveryrsa +/*/ +binary function privveryrsa(ckeyorpathkey, ccontent, ntipo, cassinatura, cerrstr, npad) +return + + +/*/{Protheus.doc} procsource +descrição da funcao + +@type binary function +@sintax procSource([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/procsource +/*/ +binary function procsource(tnomevar) +return + + +/*/{Protheus.doc} propref +descrição da funcao + +@type binary function +@sintax PropRef([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/propref +/*/ +binary function propref(tnomevar) +return + + +/*/{Protheus.doc} propsetget +descrição da funcao + +@type binary function +@sintax PropSetGet([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/propsetget +/*/ +binary function propsetget(tnomevar) +return + + +/*/{Protheus.doc} putglbvalue +Cria uma variável global para armazenar um único valor do tipo string e armazena a string de conteúdo fornecida. + +@type binary function +@sintax PutGlbValue(, ) => NIL +@param , character, Indica o nome da variável global a ser criada. +@param , character, Indica a string de conteúdo a ser armazenado na variável global. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/putglbvalue +/*/ +binary function putglbvalue(cglbname, cvalue) +return + + +/*/{Protheus.doc} putglbvars +Cria uma variável global para armazenar múltiplos valores de tipos diversos e armazena os valores fornecidos. + +@type binary function +@sintax PutGlbVars(, ) => NIL +@param , character, Indica o nome da variável global a ser criada. +@param , variant, Indica um ou mais valores a serem armazenados na variável global. Ver Observações para os tipos suportados. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/putglbvars +/*/ +binary function putglbvars(cglbname, xvalue1n) +return + + +/*/{Protheus.doc} qout +Apresenta uma mensagem no consolte do Application Server. + +@type binary function +@sintax QOut() => NIL +@param , character, Indica o texto que será apresentado no console do Application Server. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/qout +/*/ +binary function qout(ctext) +return + + +/*/{Protheus.doc} qqout +Apresenta uma mensagem no consolte do Application Server. + +@type binary function +@sintax QQOut() => NIL +@param , character, Indica o texto que será apresentado no console do Application Server. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/qqout +/*/ +binary function qqout(ctext) +return + + +/*/{Protheus.doc} randomize +Gera um número inteiro aleatório entre a faixa, inferior e superior, recebida através dos parâmetros \(nMinimo e nMaximo\). + +@type binary function +@sintax Randomize(, ) => numeric +@return numeric, Retorna um número randômico, no intervalo entre os parâmetros nMinimo e nMaximo. O número gerado pode ser maior ou igual a nMinimo e menor ou igual a nMaximo -1. + +@param , numeric, Indica o menor número que será gerado. +@param , numeric, Indica o maior número \(menos um\) que será gerado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/randomize +/*/ +binary function randomize(nminimo, nmaximo) +return + + +/*/{Protheus.doc} rat +Retorna a posição da última ocorrência de uma substring em uma string. Para isso, a função pesquisa a string destino a partir da direita. + +@type binary function +@sintax RAt(, ) => numeric +@return numeric, Retorna o índice em que <**cSearch**> foi encontrada. + +@param , character, Indica a string que será localizada. +@param , character, Indica a string onde <**cSearch**> será procurada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/rat +/*/ +binary function rat(csearch, csource) +return + + +/*/{Protheus.doc} rc4crypt +Encripta e decripta uma determinada cadeia de caracteres usando o algoritmo RC4. + +@type binary function +@sintax RC4Crypt(, , [lIsReturnASCII], [lIsInputASCII]) => character +@return character, Retorna uma cadeia de caracteres criptografada. + +@param , character, Indica a sequência de caracteres que serão criptografados. +@param , character, Indica a sequência de caracteres a serem utilizados como chave para o algoritmo de criptografia. +@param [lisreturnascii], logical, Formato do retorno. Se **.T.**, indica que o retorno será em código ASCII hexadecimal, onde cada código corresponde a dois caracteres, sem "0x" inicial; caso contrário, se **.F.**, o retorno será em texto plano. Por padrão é assumido **.T.**. +@param [lisinputascii], logical, Formato da entrada. Se **.T.**, indica que a entrada está em código ASCII hexadecimal, onde cada código corresponde a dois caracteres, sem "0x" inicial; caso contrário, se **.F.**, a entrada está em texto plano. Por padrão é assumido **.F.**. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/rc4crypt +/*/ +binary function rc4crypt(cinput, ckey, lisreturnascii, lisinputascii) +return + + +/*/{Protheus.doc} rddname +Retorna o nome da RDD utilizada. + +@type binary function +@sintax RDDName() => character +@return character, Retorna o nome da RDD utilizada. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/rddname +/*/ +binary function rddname() +return + + +/*/{Protheus.doc} rddsetdefault +Retorna a RDD padrão que é utilizada, podendo alterá-la. + +@type binary function +@sintax RDDSetDefault([cRDD]) => character +@return character, Retorna o nome da RDD padrão. + +@param [crdd], character, Indica a nova RDD padrão. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/rddsetdefault +/*/ +binary function rddsetdefault(crdd) +return + + +/*/{Protheus.doc} recno +Retorna o número do registro atualmente posicionado na área de trabalho ativa. + +@type binary function +@sintax Recno() => numeric +@return numeric, Retorna o identificador numérico do registro atualmente posicionado na área de trabalho ativa. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/recno +/*/ +binary function recno() +return + + +/*/{Protheus.doc} recsize +Retorna o tamanho de um registro da tabela aberta. + +@type binary function +@sintax RecSize() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/recsize +/*/ +binary function recsize() +return + + +/*/{Protheus.doc} releaseprogs +Encerra imediatamente o contexto dos programas do processo AdvPL atual, sem finalizar o processo. Entende-se por encerramento de contexto a limpeza dos conteúdos das variáveis estáticas alocadas após a primeira execução da função na conexão e a limpeza da interface de classes dinâmicas alocadas pelo processo atual. + +@type binary function +@sintax ReleaseProgs() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/releaseprogs +/*/ +binary function releaseprogs() +return + + +/*/{Protheus.doc} remotexclsid +descrição da funcao + +@type binary function +@sintax RemoteXCLSID([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/remotexclsid +/*/ +binary function remotexclsid(tnomevar) +return + + +/*/{Protheus.doc} remotexversion +Retorna a build do Smart Client ActiveX. + +@type binary function +@sintax RemoteXVersion() => character +@return character, Retorna a build do Smart Client ActiveX. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/remotexversion +/*/ +binary function remotexversion() +return + + +/*/{Protheus.doc} replicate +Gera uma string repetida a partir de outra. + +@type binary function +@sintax Replicate(, ) => character +@return character, Retorna a string <**cString**> repetida <**nCount**> vezes. + +@param , character, Indica a string que será repetida. +@param , numeric, Indica a quantidade de vezes que a string será repetida. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/replicate +/*/ +binary function replicate(cstring, ncount) +return + + +/*/{Protheus.doc} resource2file +Salva o conteúdo de um recurso do repositório em um arquivo. + +@type binary function +@sintax Resource2File([cResource], [cFile]) => logical +@return logical, Se o recurso foi copiado no disco com sucesso retorna verdadeiro \(.T.\), caso contrário retorna falso \(.F.\). + +@param [cresource], character, Indica o nome e extensão do recurso no repositório a ser salvo em disco. +@param [cfile], character, Indica o diretório e nome do arquivo onde o recurso será salvo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/resource2file +/*/ +binary function resource2file(cresource, cfile) +return + + +/*/{Protheus.doc} retimgtype +Retorna o tipo de imagem \( BMP ou JPG \) a partir de um path informado por parâmetro. + +@type binary function +@sintax RetImgType() => numeric +@return numeric, Tipo da imagem, onde: 1 = Bitmap e 2 = JPG + +@param , character, Indica o path completo da imagem. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/retimgtype +/*/ +binary function retimgtype(cpath) +return + + +/*/{Protheus.doc} right +Retorna um determinado número da caracteres à direita de uma string. + +@type binary function +@sintax Right(, ) => character +@return character, Retorna uma cópia da string, iniciando a partir do caractere final da string \(último caractere da direita\), considerando o número de caracteres especificado no segundo parâmetro. + +@param , character, Indica o texto que será tratado. +@param , numeric, Indica o número de caracteres à direita a serem retornados. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/right +/*/ +binary function right(ctext, ncount) +return + + +/*/{Protheus.doc} rlock +Bloqueia somente o registro atual. + +@type binary function +@sintax RLock() => logical +@return logical, Retorna verdadeiro \(.T.\), se o registro for bloqueado com sucesso; caso contrário, falso \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/rlock +/*/ +binary function rlock() +return + + +/*/{Protheus.doc} rsaexponent +Retorna o expoente \(exponent\) de uma chave no formato big-endian. + +@type binary function +@sintax RSAExponent(, , [cPassword]) => character +@return character, Retorna o expoente de uma chave no formato big-endian ou **Nil** \(caso ocorra um erro no processamento\). + +@param , character, Indica o caminho relativo \(ao RootPath\) para a chave. +@param , logical, Indica se está sendo utilizada uma chave pública. +@param [cpassword], character, Indica a senha da chave RSA. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/rsaexponent +/*/ +binary function rsaexponent(ckey, lpublic, cpassword) +return + + +/*/{Protheus.doc} rsamodulus +Retorna o módulo público \(public modulus\) de uma chave no formato PEM. + +@type binary function +@sintax RSAModulus(, , [cPassword]) => character +@return character, Retorna o módulo público da chave em uma string binária em AdvPL - com bytes de 0 a 255 - ou **Nil** \(caso ocorra um erro no processamento\). + +@param , character, Indica o caminho relativo \(ao RootPath\) para a chave. +@param , logical, Indica se está sendo utilizada uma chave pública. +@param [cpassword], character, Indica a senha da chave \(se existente\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/rsamodulus +/*/ +binary function rsamodulus(ckey, lpublic, cpassword) +return + + +/*/{Protheus.doc} runcommand +Executa um comando no sistema operacional e retorna o resultado apresentado no stdout \(console\). + +@type binary function +@sintax RunCommand() => character +@return character, Retorna o resultado do comando exibido no console. + +@param , character, Texto com o comando a ser executado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/runcommand +/*/ +binary function runcommand(nexp) +return + + +/*/{Protheus.doc} seconds +Retorna a hora do sistema em segundos. + +@type binary function +@sintax Seconds() => numeric +@return numeric, Retorna um valor que representa o número de segundos, decorridos desde a meia-noite, conforme a hora atual do sistema. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/seconds +/*/ +binary function seconds() +return + + +/*/{Protheus.doc} select +Retorna o número da área de trabalho de um alias especificado. + +@type binary function +@sintax Select([cAlias]) => numeric +@return numeric, Retorna o número da área de trabalho do alias especificado. + +@param [calias], character, Indica o alias que será pesquisado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/select +/*/ +binary function select(calias) +return + + +/*/{Protheus.doc} serialnumber +Retorna o número de série de um drive Windows da máquina onde está sendo executado o TOTVS \| Application Server. + +@type binary function +@sintax SerialNumber([cDrive]) => character +@return character, Retorna o número de série do drive especificado. + +@param [cdrive], character, Indica a letra do drive que será consultado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/serialnumber +/*/ +binary function serialnumber(cdrive) +return + + +/*/{Protheus.doc} set +Realiza a definição de alguns parâmetros do sistema, permite também retornar o valor previamente definido. + +@type binary function +@sintax Set(, [xValue]) => variant +@return variant, Retorna o valor previamente definido para o parâmetro. + +@param , numeric, Parâmetro a ser definido ou consultado +@param [xvalue], variant, Valor a ser definido para o parâmetro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/set +/*/ +binary function set(nparam, xvalue) +return + + +/*/{Protheus.doc} set4gllineclr +descrição da funcao + +@type binary function +@sintax set4gllineclr([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/set4gllineclr +/*/ +binary function set4gllineclr(tnomevar) +return + + +/*/{Protheus.doc} setcss +Define um CSS \(Cascading Style Sheet\) padrão que será utilizado na criação de componentes visuais. + +@type binary function +@sintax SetCSS() => codeblock +@return codeblock, Nulo + +@param , character, Indica o CSS que será aplicado nos componentes visuais. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setcss +/*/ +binary function setcss(ccss) +return + + +/*/{Protheus.doc} setkeyblock +Define um bloco de código que será executado sempre que a função SetKey\(\) for chamada. + +@type binary function +@sintax SetKeyBlock() => NIL +@param , codeblock, Bloco de código que será executado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setkeyblock +/*/ +binary function setkeyblock(bbloco) +return + + +/*/{Protheus.doc} setksyslog +Adiciona um identificador no formato \[chave valor\] a todas mensagens enviadas ao syslog, através das funções Conout e LogMsg. + +@type binary function +@sintax SetKSysLog(, ) => NIL +@param , character, chave de identificação +@param , character, valor, da chave de identificação +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setksyslog +/*/ +binary function setksyslog(ckey, cvalor) +return + + +/*/{Protheus.doc} setmailobj +Armazena ou apaga um objeto TMailManager na lista de objetos do servidor. + +@type binary function +@sintax SetMailObj(, ) => NIL +@param , character, Indica um identificador, usado para recuperar o objeto armazenado posteriormente. +@param , variant, Indica um objeto do tipo TMailManager ou nulo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setmailobj +/*/ +binary function setmailobj(cid, omailobj) +return + + +/*/{Protheus.doc} setnoproxyfor +Configura uma lista de domínios ou IPs que não devem utilizar proxy. + +@type binary function +@sintax SetNoProxyFor(, [lClient]) => NIL +@param , character, Indica a lista de domínios ou IP que não irão usar proxy. +@param [lclient], logical, Indica se irá definir na conexão feita pelo SmartClient \(.T.\) ou pelo AppServer \(.F.\). Valor padrão: **.F.**. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setnoproxyfor +/*/ +binary function setnoproxyfor(cdomainlist, lclient) +return + + +/*/{Protheus.doc} setproxy +Define as configurações para utilizar proxy HTTP. + +@type binary function +@sintax SetProxy(, , [cUser], [cPass], [lClient]) => NIL +@param , character, Indica o endereço do servidor de proxy HTTP. +@param , numeric, Indica a porta do servidor de proxy HTTP. +@param [cuser], character, Indica o usuário para proxy HTTP. +@param [cpass], character, Indica a senha para proxy HTTP. +@param [lclient], logical, Indica se irá definir na conexão feita pelo SmartClient \(.T.\) ou pelo AppServer \(.F.\). Valor padrão: **.F.**. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setproxy +/*/ +binary function setproxy(cserver, nport, cuser, cpass, lclient) +return + + +/*/{Protheus.doc} setrmtdate +Define e data corrente do Smart Client. + +@type binary function +@sintax SetRmtDate() => NIL +@param , date, Indica a data que será definida para o Smart Client. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setrmtdate +/*/ +binary function setrmtdate(ddata) +return + + +/*/{Protheus.doc} settransparentcolor +descrição da funcao + +@type binary function +@sintax SetTransparentColor([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/settransparentcolor +/*/ +binary function settransparentcolor(tnomevar) +return + + +/*/{Protheus.doc} setvarnamelen +Define o tamanho de uma variável AdvPL. + +@type binary function +@sintax SetVarNameLen([nValue]) => numeric +@return numeric, Retorna o tamanho definido anteriormente para uma variável. + +@param [nvalue], numeric, Indica o tamanho da variável. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setvarnamelen +/*/ +binary function setvarnamelen(nvalue) +return + + +/*/{Protheus.doc} setvdrobj +descrição da funcao + +@type binary function +@sintax SetVdrObj([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/setvdrobj +/*/ +binary function setvdrobj(tnomevar) +return + + +/*/{Protheus.doc} sha1 +SHA1 \(Secure Hash Algorithm\) gera o hash \(ou digest\) de um conteúdo, com base no algoritmo definido em FIPS PUB 180-1 published April 17, 1995. + +@type binary function +@sintax SHA1(, [nRetType]) => character +@return character, Retorna o hash \(ou digest\) do conteúdo informado. + +@param , character, Indica a string que contém os dados no qual será gerado o hash. +@param [nrettype], numeric, Indica o tipo de retorno do digest. Quando informado 1 \(um\) retorna uma string no formato RAW_DIGEST \(sequência de 20 bytes ASCII\); quando informado 2 \(dois\) retorna uma string no formato HEX_DIGEST \(sequência hexadecimal de 40 caracteres em hexadecimal\). Caso não informado, o valor padrão é 2 \(dois\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/sha1 +/*/ +binary function sha1(ccontent, nrettype) +return + + +/*/{Protheus.doc} sha256 +SHA256 gera o hash \(message digest\) de uma mensagem de entrada, com base no algoritmo SHA-256 da família SHA-2, definido em FIPS PUB 180-4 e publicado em 2001 pelo NIST. + +@type binary function +@sintax SHA256(, [nRetType]) => character +@return character, Retorna o hash \(message digest\) do conteúdo de entrada informado, no formato especificado. + +@param , character, Indica a string de entrada que contém os dados para os quais será gerado o hash. +@param [nrettype], numeric, Indica o tipo do formato de retorno do hash. Quando informado **1 \(um\)** retorna uma string no formato **RAW_DIGEST** \(sequência de 32 bytes ASCII\); quando informado **2 \(dois\)** ou **qualquer outro valor inteiro diferente de 1 \(um\)** retorna uma string no formato **HEX_DIGEST** \(sequência hexadecimal de 64 bytes\). Caso não informado, o valor padrão é **2 \(dois\)**. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/sha256 +/*/ +binary function sha256(ccontent, nrettype) +return + + +/*/{Protheus.doc} sha384 +SHA384 gera o hash \(message digest\) de uma mensagem de entrada, com base no algoritmo SHA-384 da família SHA-2, definido em FIPS PUB 180-4 e publicado em 2001 pelo NIST. + +@type binary function +@sintax SHA384(, [nRetType]) => character +@return character, Retorna o hash \(Message Authentication Code\) do conteúdo de entrada informado, no formato especificado. + +@param , character, Indica a string de entrada que contém os dados para os quais será gerado o hash. +@param [nrettype], numeric, Indica o tipo do formato de retorno do hash. Quando não informado valor padrão será **2 \(Hex Hash\)**. Veja tabela nas observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/sha384 +/*/ +binary function sha384(ccontent, nrettype) +return + + +/*/{Protheus.doc} sha512 +SHA512 gera o hash \(message digest\) de uma mensagem de entrada, com base no algoritmo SHA-512 da família SHA-2, definido em FIPS PUB 180-4 e publicado em 2001 pelo NIST. + +@type binary function +@sintax SHA512(, [nRetType]) => character +@return character, Retorna o hash \(message digest\) do conteúdo de entrada informado, no formato especificado. + +@param , character, Indica a string de entrada que contém os dados para os quais será gerado o hash. +@param [nrettype], numeric, Indica o tipo do formato de retorno do hash. Quando informado **1 \(um\)** retorna uma string no formato **RAW_DIGEST** \(sequência de 64 bytes ASCII\); quando informado **2 \(dois\)** ou **qualquer outro valor inteiro diferente de 1 \(um\)** retorna uma string no formato **HEX_DIGEST** \(sequência hexadecimal de 128 bytes\). Caso não informado, o valor padrão é **2 \(dois\)**. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/sha512 +/*/ +binary function sha512(ccontent, nrettype) +return + + +/*/{Protheus.doc} shellexecute +Executa uma função, um arquivo ou qualquer execução em linha de comando no S.O. na estação onde o Smartclient está em execução. Esta função encontra-se disponível para Windows e Linux. + +@type binary function +@sintax ShellExecute(, , , , [nOpc]) => character +@return character, Retorna 0 \(zero\) em caso de sucesso da execução do processo e diferente de zero para erros. + +@param , character, Indica o nome da ação que será executada. +@param , character, Indica o caminho e diretório do arquivo que será executado. +@param , character, Indica o parâmetro de linha que será repassado para o executável. +@param , character, Indica o diretório de trabalho onde o arquivo será executa. +@param [nopc], numeric, Indica o modo de interface a ser criado para a execução do programa. Para mais informações consulte observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/shellexecute +/*/ +binary function shellexecute(cacao, carquivo, cparam, cdirtrabalho, nopc) +return + + +/*/{Protheus.doc} showinfmem +descrição da funcao + +@type binary function +@sintax ShowInfMem([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/showinfmem +/*/ +binary function showinfmem(tnomevar) +return + + +/*/{Protheus.doc} sin +Calcula o valor do seno de um ângulo \(em radianos\). + +@type binary function +@sintax Sin() => numeric +@return numeric, Retorna o valor do seno de acordo com o ângulo informado. + +@param , numeric, Indica o valor do ângulo em radianos. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/sin +/*/ +binary function sin(nangle) +return + + +/*/{Protheus.doc} sleep +Tem o objetivo de fazer com que a thread corrente deixe de ser executada de acordo com o valor informado como parâmetro. + +@type binary function +@sintax Sleep() => NIL +@param , numeric, Representa um total de tempo no qual a thread irá ficar sem executar. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/sleep +/*/ +binary function sleep(nsleep) +return + + +/*/{Protheus.doc} smartjob +descrição da funcao + +@type binary function +@sintax SmartJob([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/smartjob +/*/ +binary function smartjob(tnomevar) +return + + +/*/{Protheus.doc} smimesign +descrição da funcao + +@type binary function +@sintax SMIMESign([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/smimesign +/*/ +binary function smimesign(tnomevar) +return + + +/*/{Protheus.doc} socketconn +Cria um conexão TCP com uma aplicação de destino, através do uso de um Socket do sistema operacional. + +@type binary function +@sintax SocketConn(, , , [nTimeOut]) => character +@return character, String de bytes retornados pelo serviço chamado. Cada serviço pode retornar um buffer composto de uma string de bytes / caracteres, a ordem e interpretação deste retorno deve ser conhecida pela aplicação que o utiliza. + +@param , character, Indica a string com o endereço IP ou nome da máquina de destino desejado. +@param , numeric, Indica o número da porta de comunicação que será utilizada para realizar a conexão. +@param , character, String a ser enviada para a conexão de destino, caso ela seja estabelecida com sucesso. +@param [ntimeout], numeric, Informa o tempo, em segundos, de espera por um retorno \( time-out \). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/socketconn +/*/ +binary function socketconn(cip, nport, creq, ntimeout) +return + + +/*/{Protheus.doc} splitpath +Divide um caminho de disco completo em todas as suas subpartes \(drive, diretório, nome e extensão\). + +@type binary function +@sintax SplitPath(, , , , ) => NIL +@param , character, Indica o nome do arquivo que será quebrado. Além disso, opcionalmente, pode-se incluir o diretório e unidade do disco. +@param , character, Indica o nome da unidade do disco \(exemplo: C:\\\). Caso o arquivo informando não possua a unidade de disco ou o diretório refira-se ao servidor, a função retornará uma string em branco. +@param , character, Indica o nome do diretório. Caso o arquivo informado não possua diretório, a função retornará uma string em branco. +@param , character, Indica o nome do arquivo sem extensão. Caso o parâmetro cArquivo não seja informado, a função retornará uma string em branco. +@param , character, Indica a extensão do arquivo informado, no parâmetro cArquivo, pré-fixada com um ponto ".". Caso a extensão, no parâmetro cArquivo, não seja especificada, a função retornará uma string em branco. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/splitpath +/*/ +binary function splitpath(carquivo, cdrive, cdiretorio, cnome, cextensao) +return + + +/*/{Protheus.doc} sqrt +Calcula o valor da raiz quadrada de um número positivo. + +@type binary function +@sintax Sqrt() => numeric +@return numeric, Retorna a raiz quadrada. + +@param , numeric, Indica o valor do radicando. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/sqrt +/*/ +binary function sqrt(nradicand) +return + + +/*/{Protheus.doc} svrdisplay +Função para verificar se o Application Server esta sendo executado em uma sessão com interface gráfica. + +@type binary function +@sintax SvrDisplay() => logical +@return logical, Retorna verdadeiro \(.T.\), se o TOTVS \| Application Server está sendo executado em uma sessão com interface gráfica, caso contrário, retorna falso \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/svrdisplay +/*/ +binary function svrdisplay() +return + + +/*/{Protheus.doc} startjob +Executa uma rotina em uma segunda thread sem interface. + +@type binary function +@sintax StartJob(, , , [parm1,parm2,...parm25]) => NIL +@param , character, Indica o nome do Job que será executado. +@param , character, Indica o nome do ambiente em que o Job será executado. +@param , logical, Indica se, verdadeiro \(.T.\), o processo será finalizado; caso contrário, falso \(.F.\). +@param [parm1,parm2,...parm25], variant, Os parâmetros \(máximo 25 parâmetros\) informados a partir deste ponto serão repassados para a função especificada no parâmetro cName. Caso informados parâmetros do tipo B \(Code-Block\) ou O \(Object\), no processo de destino receberá NIL. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/startjob +/*/ +binary function startjob(cname, cenv, lwait, parm1,parm2,parm25) +return + + +/*/{Protheus.doc} str +A partir de um numérico esta função retorna uma string formatada, inserindo espaços \(" "\) à esquerda e/ou o símbolo decimal \("."\) em suas casas, de acordo com a informação do parâmetro. + +@type binary function +@sintax Str(, [nTamanho], [nDecimais]) => character +@return character, Retorna uma string a partir do valor numérico e do tamanho informado no parâmetro. + +@param , numeric, Indica o valor numérico que será convertido para string. +@param [ntamanho], numeric, Indica o tamanho da string será gerada. +@param [ndecimais], numeric, Indica o número de casas após o símbolo decimal. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/str +/*/ +binary function str(nnumero, ntamanho, ndecimais) +return + + +/*/{Protheus.doc} striconv +Converte uma string de um codepage para outro. + +@type binary function +@sintax StrIConv(, , ) => character +@return character, Retorna a string convertida + +@param , character, Indica o texto que será convertido +@param , character, Indica o codepage de origem +@param , character, Indica o codepage de destino +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/striconv +/*/ +binary function striconv(ctext, cfromcodepage, ctocodepage) +return + + +/*/{Protheus.doc} strtokarr +Fatia a string cValue de acordo com o separador cToken informado e retorna um vetor com todas as partes. + +@type binary function +@sintax StrTokArr(, ) => array +@return array, Retorna um array de caracteres contendo a string separada. + +@param , character, Indica a string que será fatiada. +@param , character, Indica um ou mais caracteres \(*Token*\) que serão utilizados como separadores. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/strtokarr +/*/ +binary function strtokarr(cvalue, ctoken) +return + + +/*/{Protheus.doc} strtokarr2 +Fatia a string cValue de acordo com o separador cToken e retorna um vetor com todas as partes. + +@type binary function +@sintax StrTokArr2(, , [lEmptyStr]) => array +@return array, Retorna um array de caracteres contendo a string separada. + +@param , character, Indica a string que será fatiada. +@param , character, Indica um ou mais caracteres \(*Token*\) que serão utilizados como separadores. +@param [lemptystr], logical, Indica se elementos vazios também devem ser retornados. Valor default = **.F.** +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/strtokarr2 +/*/ +binary function strtokarr2(cvalue, ctoken, lemptystr) +return + + +/*/{Protheus.doc} strtran +Pesquisa e substitui um conjunto de caracteres de uma string. + +@type binary function +@sintax StrTran(, , [cReplace], [nStart], [nCount]) => character +@return character, Retorna uma nova string com as ocorrências de **cSearch** substituídas por **cReplace**. + +@param , character, Indica a sequência de caracteres ou campo memo onde será realizado a pesquisa. +@param , character, Indica a sequência de caracteres que será pesquisada. +@param [creplace], character, Indica a sequência de caracteres que deve substituir a expressão localizada. +@param [nstart], numeric, Indica a primeira ocorrência a ser substituída. +@param [ncount], numeric, Indica o número de substituições que devem ser realizadas. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/strtran +/*/ +binary function strtran(cstring, csearch, creplace, nstart, ncount) +return + + +/*/{Protheus.doc} stuff +Elimina e insere caracteres em uma string. Para isso, a função elimina caracteres a partir da posição inicial . Depois, insere na string resultante a partir do início , para formar a string que será retornada. + +@type binary function +@sintax Stuff(, , , ) => character +@return character, Retorna uma nova string \(cópia de cString\), sendo que os caracteres especificados foram eliminados e inserida. + +@param , character, Indica a string destino na qual serão eliminados e inseridos caracteres. +@param , numeric, Indica a posição inicial na string destino em que ocorre a inserção/eliminação. +@param , numeric, Indica a quantidade de caracteres que serão eliminados. +@param , character, Indica a string que será inserida. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/stuff +/*/ +binary function stuff(cstring, ninicio, nelimina, cinsere) +return + + +/*/{Protheus.doc} stuffbit +Altera uma sequencia de bits de uma string para 1. + +@type binary function +@sintax StuffBit(<@cStr>, , , ) => NIL +@param <@cstr>, character, Indica a string que será modificada. +@param , numeric, Indica o índice do bit inicial. +@param , numeric, Indica a quantidade de bits que serão colocados em 1. +@param , numeric, Indica o índice do último byte que será modificado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/stuffbit +/*/ +binary function stuffbit(cstr, nstart, ntest, nlength) +return + + +/*/{Protheus.doc} syserrorblock +Define o bloco de código que será executado quando ocorrer um erro irreparável no Smart Client. + +@type binary function +@sintax SysErrorBlock([bError]) => NIL +@param [berror], codeblock, Indica o bloco de código que será executado quando ocorrer um erro no Smart Client. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/syserrorblock +/*/ +binary function syserrorblock(berror) +return + + +/*/{Protheus.doc} sysrefresh +Atualiza todas as mensagens pendentes da conexão. + +@type binary function +@sintax SysRefresh() => logical +@return logical, Retorna verdadeiro \(.T.\), se o processo for realizado com sucesso; caso contrário retorna falso \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/sysrefresh +/*/ +binary function sysrefresh() +return + + +/*/{Protheus.doc} tan +Calcula o valor da tangente de um ângulo \(em radianos\). + +@type binary function +@sintax Tan() => numeric +@return numeric, Retorna o valor da tangente de acordo com o ângulo informado. + +@param , numeric, Indica o valor do ângulo em radianos. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tan +/*/ +binary function tan(nangle) +return + + +/*/{Protheus.doc} tarcompress +Armazena arquivos e diretórios em um único arquivo no formato TAR \(Tape ARchive\). + +@type binary function +@sintax TarCompress(, , [lChangeCase]) => character +@return character, Em caso de sucesso, retorna o nome do arquivo criado, incluindo o rootpath onde o arquivo no formato TAR foi criado; caso dê erro, retorna uma string em branco \(""\). + +@param , array, Indica os arquivos e diretórios que serão armazenados. +@param , character, Indica o nome do arquivo que será gerado com a extensão ".tar". +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tarcompress +/*/ +binary function tarcompress(aitens, cdest, lchangecase) +return + + +/*/{Protheus.doc} tardecomp +Restaura os arquivos e diretórios contidos em um arquivo no formato TAR \(Tape ARchive\) + +@type binary function +@sintax TarDecomp(, , [@nFilesOut], [lChangeCase]) => logical +@return logical, Retorna verdadeiro \(**.T.**\), se a descompactação for realizada com sucesso; caso contrário, retorna falso \(**.F.**\). + +@param , character, Indica o nome do arquivo \( com formato TAR \) cujo conteúdo será restaurado. +@param , character, Indica o diretório onde os arquivos, contidos no arquivo TAR, serão restaurados. +@param [@nfilesout], numeric, Retorna o número de arquivos extraídos na operação. +@param [lchangecase], logical, Se verdadeiro \(.T.\), nomes de arquivos e pastas serão convertidos para letras minúsculas; caso contrário, falso \(.F.\), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão \(.T.\). Veja maiores informações em Observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tardecomp +/*/ +binary function tardecomp(ctarfile, coutdir, nfilesout, lchangecase) +return + + +/*/{Protheus.doc} tcalter +Altera a estrutura de uma tabela. + +@type binary function +@sintax TCAlter(, , , [@nErro]) => logical +@return logical, Retorna **.T.** se a alterção for realizada com sucesso, caso contrário, retorna **.F.** + +@param , character, Indica o nome da tabela que será alterada. +@param , array, Indica o array que contém as informações dos campos atuais da tabela. +@param , array, Indica o array que contém a nova estrutura desejada para a tabela. +@param [@nerro], numeric, Caso ocorra algum erro na alteração da estrutura, o número do erro do DBAccess será retornado através desta variável. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcalter +/*/ +binary function tcalter(ctable, aestruturaatual, aestruturanova, nerro) +return + + +/*/{Protheus.doc} tcapibuild +Retorna a build do biblioteca client do DBAccess, a DBAPI. + +@type binary function +@sintax TCAPIBuild() => character +@return character, Retorna uma string contendo a build e a data de geração da DBAPI. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcapibuild +/*/ +binary function tcapibuild() +return + + +/*/{Protheus.doc} tccanopen +Verifica se uma tabela e/ou índice existe. + +@type binary function +@sintax TCCanOpen(, [cIndex]) => logical +@return logical, Retorna **.T.** se a tabela e/ou índice existir, caso contrário, retorna **.F.** + +@param , character, Nome da tabela. +@param [cindex], character, Nome do índice. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tccanopen +/*/ +binary function tccanopen(ctable, cindex) +return + + +/*/{Protheus.doc} tccommit +Realiza o controle de transação no DBAccess + +@type binary function +@sintax TCCommit(, [xParam]) => Nil +@return Nil, Sempre retorna nulo. + +@param , numeric, Numero relacionado a ação do TCCommit +@param [xparam], variant, Compatibilidade. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tccommit +/*/ +binary function tccommit(noption, xparam) +return + + +/*/{Protheus.doc} tcdelfile +Exclui uma tabela ou view de um banco relacional, através do DBAccess. + +@type binary function +@sintax TCDelFile() => logical +@return logical, Retorna **.T.** se excluiu com sucesso, caso contrário, retorna **.F.** + +@param , character, Nome da Tabela/View a ser excluida. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcdelfile +/*/ +binary function tcdelfile(cname) +return + + +/*/{Protheus.doc} tcdelindex +Exclui um índice de um arquivo do banco de dados relacional, através do DBAccess. + +@type binary function +@sintax TCDelIndex(, ) => logical +@return logical, Retorna verdadeiro \(.T.\), se o índice da tabela for excluída com sucesso; caso contrário, falso \(.F.\). + +@param , character, Indica o nome da tabela a qual o índice pertence. +@param , character, Indica o nome do índice a ser excluído. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcdelindex +/*/ +binary function tcdelindex(ctable, cindex) +return + + +/*/{Protheus.doc} tcfilterex +Define um filtro de visualização do alias corrente. + +@type binary function +@sintax TCFilterEx(, ) => logical +@return logical, Retorna .T. \(Verdadeiro\) no caso de sucesso. No caso de erro retorna .F. \(Falso\). + +@param , character, Condição de filtro expressada em uma string. +@param , numeric, Slot do filtro, deve ser maior que 0 \(Zero\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcfilterex +/*/ +binary function tcfilterex(cquery, nslot) +return + + +/*/{Protheus.doc} tcgenqry +Permite a abertuda de uma query diretamente no banco de dados utilizado na conexão atual, mediante uso da RDD TOPCONN. O retorno desta função deve ser passado como 3º parâmetro da função **DbUseArea**, conforme exemplo abaixo. + +@type binary function +@sintax TCGenQry(, , ) => character +@return character, Retorna sempre uma string vazia. + +@param , Nil, Compatibilidade. +@param , Nil, Compatibilidade. +@param , character, Indica a expressão da query que será aberta. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcgenqry +/*/ +binary function tcgenqry(xpar1, xpar2, cquery) +return + + +/*/{Protheus.doc} tcgetbuild +Retorna a build do DBAccess em que está conectado. + +@type binary function +@sintax TCGetBuild([lDate]) => character +@return character, Retorna uma string contendo a build do DBAccess em que está conectado. + +@param [ldate], logical, Indica se incluirá ou não a data de geração da build no valor que será retornado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcgetbuild +/*/ +binary function tcgetbuild(ldate) +return + + +/*/{Protheus.doc} tcgetconn +Recupera o número da conexão ativa com o DBAccess. + +@type binary function +@sintax TCGetConn() => numeric +@return numeric, Retorna o número da conexão ativa. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcgetconn +/*/ +binary function tcgetconn() +return + + +/*/{Protheus.doc} tcgetdb +Recupera o tipo do banco de dados relacional, em uso, pela conexão atual com o DBAccess. + +@type binary function +@sintax TCGetDB() => character +@return character, Retorna uma string contendo um identificador do banco de dados em uso pela conexão atual. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcgetdb +/*/ +binary function tcgetdb() +return + + +/*/{Protheus.doc} tcgetdbsid +Retorna uma string que identifica a conexão atualmente em uso no SGDB utilizado. + +@type binary function +@sintax TCGetDBSID() => character +@return character, Retorna um identificador string único, que identifica a conexão atual no SGDB. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcgetdbsid +/*/ +binary function tcgetdbsid() +return + + +/*/{Protheus.doc} tcgetinfo +Retorna informações sobre o DBAccess conectado atualmente + +@type binary function +@sintax TCGetInfo([nInfo], [cParam]) => character +@return character, Retorna uma string AdvPL com a informação desejada. + +@param [ninfo], numeric, Indica o número da informação a ser recuperada. +@param [cparam], character, Para alguns tipos de informação, permite informar um parâmetro adicional ou critério de informação de retorno. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcgetinfo +/*/ +binary function tcgetinfo(ninfo, cparam) +return + + +/*/{Protheus.doc} tcgetio +Retorna um array de rotinas e IOs/segundos do DBAccess. + +@type binary function +@sintax TCGetIO() => array +@return array, Retorna um array com a seguinte estrutura: Coluna 1: Rotina - Coluna 2: IOs/Segundo. + +@param , numeric, Indica o limite de IOs/segundos. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcgetio +/*/ +binary function tcgetio(nthreshold) +return + + +/*/{Protheus.doc} tcgetsid +Retorna o número do processo em uso no TOTVS \| DBAccess para a conexão atual. + +@type binary function +@sintax TCGetSID() => numeric +@return numeric, Retorna o número da thread da conexão atual com o DBAccess. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcgetsid +/*/ +binary function tcgetsid() +return + + +/*/{Protheus.doc} tcisconnected +Função para verificar se está conectado no banco de dados. + +@type binary function +@sintax TCIsConnected([nHwnd]) => logical +@return logical, Retorna **.T.** se está conectado, caso contrário, retorna **.F.** + +@param [nhwnd], numeric, Número da conexão. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcisconnected +/*/ +binary function tcisconnected(nhwnd) +return + + +/*/{Protheus.doc} tcisview +Função para verificar por nome se um objeto é uma view. + +@type binary function +@sintax TCIsView() => logical +@return logical, Retorna **.T.** se o nome informado pertece a uma view, caso contrário, retorna **.F.** + +@param , character, Nome da tabela/view a ser verificada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcisview +/*/ +binary function tcisview(cname) +return + + +/*/{Protheus.doc} tcisvlock +Indica se está o DBAccess possui o recurso de Virtual Locks. + +@type binary function +@sintax TCIsVLock() => logical +@return logical, Retorna verdadeiro \(.T.\) se o DBAccess tiver o recurso de Virtual Locks; caso contrário, retorna falso \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcisvlock +/*/ +binary function tcisvlock() +return + + +/*/{Protheus.doc} tclink +Cria uma nova conexão com um banco de dados SGBD através do DBAccess. + +@type binary function +@sintax TCLink([cConn], [cServerAddr], [nPort]) => numeric +@return numeric, Retorna um identificador numérico igual ou maior que zero para a conexão em caso de sucesso. Em caso de falha, será retornado um número negativo, indicando uma ocorrência de falha na conexão. + +@param [cconn], character, Indica a string de conexão do DBAccess, composta por um identificador do tipo da conexão mais o nome do **"alias/environment"** da conexão. \(Padrão = DBDatabase e DBAlias configurado no appserver.ini\) +@param [cserveraddr], character, Indica o nome ou endereço IP do servidor onde está o DBAccess onde a conexão deve ser realizada. \(Padrão = DBServer configurado no appserver.ini\) +@param [nport], numeric, Indica o número da porta TCP que o DBAccess está configurado aguardando por novas conexões. \(Padrão = 7890\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tclink +/*/ +binary function tclink(cconn, cserveraddr, nport) +return + + +/*/{Protheus.doc} tcmaxmap +Altera o valor minimo de campos da tabela para realizar o **TCSrvMap** + +@type binary function +@sintax TCMaxMap() => Nil +@return Nil, Sempre retorna nulo. + +@param , numeric, Numero de colunas. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcmaxmap +/*/ +binary function tcmaxmap(cnum) +return + + +/*/{Protheus.doc} tcobject +Informa se um objeto existe no SGBD conectado. + +@type binary function +@sintax TCObject(, [@cType]) => logical +@return logical, Retorna verdadeiro \(.T.\) se o objeto existir no SGBD em que está conectado; caso contrário, falso \(.F.\). + +@param , character, Indica o nome do objeto que será procurado. +@param [@ctype], character, Indica o tipo do objeto procurado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcobject +/*/ +binary function tcobject(cobject, ctype) +return + + +/*/{Protheus.doc} tcping +Recupera a latência entre o DBAccess e o SGDB + +@type binary function +@sintax TCPing() => numeric +@return numeric, média da latência em segundos com precisão em milissegundos. + +@param , numeric, Quantidade de pacotes enviados, deve ser maior que 0 \(Zero\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcping +/*/ +binary function tcping(ncount) +return + + +/*/{Protheus.doc} tcquit +Finaliza todas as conexões ativas. + +@type binary function +@sintax TCQuit() => logical +@return logical, Retorna .T. quando a função finalizou todas as conexões ativas com sucesso, se não retorna .F. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcquit +/*/ +binary function tcquit() +return + + +/*/{Protheus.doc} tcrefresh +Atualiza as definições globais de uma tabela no cache de definições do DBAccess. + +@type binary function +@sintax TCRefresh() => Nil +@return Nil, Esta função sempre retorna nulo. + +@param , character, Indica o nome da tabela para atualizar o cache de definições do DBAccess. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcrefresh +/*/ +binary function tcrefresh(ctable) +return + + +/*/{Protheus.doc} tcsetconn +Permite alternar entre as conexões ativas com o DBAccess. + +@type binary function +@sintax TCSetConn() => logical +@return logical, Retorna verdadeiro \(.T.\), se a conexão corrente for trocada com sucesso. Se a conexão informada não existir ou já estiver sido fechada, a conexão atual é mantida e a função retorna falso \(.F.\). + +@param , numeric, Indica o número da conexão que deve ser tornar a corrente. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcsetconn +/*/ +binary function tcsetconn(nhandle) +return + + +/*/{Protheus.doc} tcsetfield +Altera o tratamento, do tipo de dado ou precisão, para um campo/coluna retornada através de uma query. + +@type binary function +@sintax TCSetField(, , , [nSize], [nPrecision]) => NIL +@param , character, Indica o alias da query. +@param , character, Indica o nome do campo/coluna de retorno. +@param , character, Indica o tipo de dado a ser retornado através deste campo/coluna, que pode ser: D \(Data\), N \(Numérico\) ou L \(Lógico\). +@param [nsize], numeric, Indica o tamanho do campo. Valor padrão: 0 \(zero\). +@param [nprecision], numeric, Indica a quantidade de decimais do campo. Valor padrão: 0 \(zero\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcsetfield +/*/ +binary function tcsetfield(calias, cfield, ctype, nsize, nprecision) +return + + +/*/{Protheus.doc} tcsetparam +Insere ou atualiza um parâmetro na TOP_PARAM. + +@type binary function +@sintax TCSetParam(, ) => numeric +@return numeric, Retorna 0 \(zero\) se a operação foi completada com sucesso ou diferente em caso de erro. + +@param , character, Indica o nome do parâmetro que será criado ou atualizado. +@param , character, Indica o valor do parâmetro indicado em **cParam**. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcsetparam +/*/ +binary function tcsetparam(cparam, cvalue) +return + + +/*/{Protheus.doc} tcsetvidx +Liga ou desliga o modo de virtualização automática de índices em tempo de execução. + +@type binary function +@sintax TCSetVIdx() => logical +@return logical, Retorna o valor definido para a virtualização automática. + +@param , logical, Indica se a virtualização automática deve ser ativada \(**.T.**\) ou desativada \(**.F.**\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcsetvidx +/*/ +binary function tcsetvidx(lset) +return + + +/*/{Protheus.doc} tcspexec +Função que executa uma stored procedure no banco de dados atual. + +@type binary function +@sintax TCSPExec(, [xParam]) => array +@return array, Retorna um array que contêm os valores de retorno da stored procedure. O retorno será nulo se nenhum valor for retornado pela stored procedure ou ocorrer algum erro na chamada da procedure. + +@param , character, Nome da stored procedure a ser executada. +@param [xparam], character, Indica uma ou mais expressões, separadas por vírgula, indicando os parâmetros necessários para a execução da stored procedure. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcspexec +/*/ +binary function tcspexec(cstoredprocedure, xparam) +return + + +/*/{Protheus.doc} tcspexist +Função verifica a existência de uma stored procedure no banco de dados atual. + +@type binary function +@sintax TCSPExist() => logical +@return logical, Retorna **.T.** se a stored procedure existir, caso contrário, retorna **.F.** + +@param , character, Nome da stored procedure a ser verificada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcspexist +/*/ +binary function tcspexist(cstoredproc) +return + + +/*/{Protheus.doc} tcsqlerror +Recupera uma string contendo a última ocorrência de erro de execução de statement e/ou operação. + +@type binary function +@sintax TCSqlError() => numeric +@return numeric, Retorna uma string contendo a última mensagem e/ou ocorrênca de erro da conexão atual do DBAccess, registrada após o último statement executado. Caso o último statement executado não apresente erro, ou ainda o processo atual não possua nenhuma conexão ativa com o DBAccess, a função retornará uma string vazia \(""\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcsqlerror +/*/ +binary function tcsqlerror() +return + + +/*/{Protheus.doc} tcsqlexec +Executa uma sentença de sintaxe SQL \(Structured Query Language\). + +@type binary function +@sintax TCSqlExec() => numeric +@return numeric, Retorna o status da execução. Se menor que 0 indica que a sentença não foi executada com sucesso. + +@param , character, Indica a string que contém a sentença que será informada à função e executada no banco de dados. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcsqlexec +/*/ +binary function tcsqlexec(cstatement) +return + + +/*/{Protheus.doc} tcsqlreplay +Permite habilitar e desabilitar a coleta de logs de trace de execuções do DBaccess via TOTVS \| Application Server das conexões ativas do processo atual. + +@type binary function +@sintax TCSQLReplay(, <@cMessage>) => logical +@return logical, Retorna **.T.** se a stored procedure existir, caso contrário, retorna **.F.** + +@param , numeric, Opção desejada detalhada nas observações. +@param <@cmessage>, character, Parametro de entrada e/ou Mensagem de retorno +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcsqlreplay +/*/ +binary function tcsqlreplay(noption, cmessage) +return + + +/*/{Protheus.doc} tcsrvmap +Mapeia os campos de seleção no banco de dados. + +@type binary function +@sintax TCSrvMap(, [cMap], [bRefresh]) => logical +@return logical, .T. \(Verdadeiro\) caso de sucesso, caso contrário, .F. \(Falso\). + +@param , character, Alias da área de trabalho. +@param [cmap], character, Campos da tabela separado por virgula. +@param [brefresh], logical, Flag para realizar um refresh após o mapeamento. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcsrvmap +/*/ +binary function tcsrvmap(calias, cmap, brefresh) +return + + +/*/{Protheus.doc} tcsrvtype +Retorna uma string que identifica o tipo da plataforma da conexão ativa/atual do DBAccess. + +@type binary function +@sintax TCSrvType() => character +@return character, Retorna uma string contendo o tipo da plataforma do DBAccess em uso pela conexão atual. Caso não haja conexão ativa, será retornada uma string em branco. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcsrvtype +/*/ +binary function tcsrvtype() +return + + +/*/{Protheus.doc} tcstruct +Retorna um array contendo a estrutura da tabela ou view no SGBD. + +@type binary function +@sintax TCStruct() => array +@return array, Retorna um array contendo a estrutura de **cName** no SGBD. + +@param , character, Indica o nome da tabela ou view no SGBD. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcstruct +/*/ +binary function tcstruct(cname) +return + + +/*/{Protheus.doc} tcunique +Cria uma chave unica para a tabela corrente. + +@type binary function +@sintax TCUnique(, [cColumn]) => numeric +@return numeric, 0 no caso de sucesso. No caso de erro retorna os numeros de erros. + +@param , character, Alias da tabela corrente. +@param [ccolumn], character, Nome das coluna da tabela. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcunique +/*/ +binary function tcunique(calias, ccolumn) +return + + +/*/{Protheus.doc} tcunlink +Encerra a conexão especificada com o DBAccess. + +@type binary function +@sintax TCUnlink([nHandle], [lVerbose]) => logical +@return logical, Retorna verdadeiro \(.T.\), se a conexão for encerrada com sucesso; caso contrário, falso \(.F.\), se houver falha de execução. + +@param [nhandle], numeric, Indica o número da conexão que será finalizada. +@param [lverbose], logical, Caso especificado **.T.**, mostra mensagens de advertência do log de console, como por exemplo fechamento automático de alias da conexão. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcunlink +/*/ +binary function tcunlink(nhandle, lverbose) +return + + +/*/{Protheus.doc} tcview2db +Função para materializar uma view e seus dados em uma tabela física. + +@type binary function +@sintax TCView2DB(, ) => logical +@return logical, Retorna **.T.** se tabela cTable foi criada, caso contrário, retorna **.F.** e o motivo do erro pode ser verificado com a função [TCSQLError](TCSQLError). + +@param , character, Nome da view a ser materializada. +@param , character, Nome da tabela a ser criada no SGBD. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcview2db +/*/ +binary function tcview2db(cview, ctable) +return + + +/*/{Protheus.doc} tcviewmulti +Cria uma view para multiplas tabelas, sendo possível, mapear somente os campos que são relevantes a regra de negócio. + +@type binary function +@sintax TCViewMulti(, , ) => logical +@return logical, Retorna **.T.** se a view foi criada, caso contrário, retorna **.F.** e o motivo do erro pode ser verificado com a função [TCSQLError](TCSQLError). + +@param , character, Nome da view a ser criada. +@param , character, Nome da tabela master da view. +@param , character, Estrutura da view a ser criada, que consiste de uma lista de valores separados por virgula, onde é necessário informar a tabela e o campo da tabela que será mapeada na view, veja o exemplo abaixo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcviewmulti +/*/ +binary function tcviewmulti(cview, ctable, cstruct) +return + + +/*/{Protheus.doc} tcviewone +Cria uma view para uma tabela no modelo 1 para 1, ou seja, todos os campos da tabela serão mapeados na view. + +@type binary function +@sintax TCViewOne(, ) => logical +@return logical, Retorna **.T.** se a view foi criada, caso contrário, retorna **.F.** e o motivo do erro pode ser verificado com a função [TCSQLError](TCSQLError). + +@param , character, Nome da view a ser criada. +@param , character, Nome da tabela master da view. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcviewone +/*/ +binary function tcviewone(cview, ctable) +return + + +/*/{Protheus.doc} tcviewren +Permite renomear uma View do SGBD, criada através das funções TCViewOne\(\) e/ou TCViewMulti\(\). + +@type binary function +@sintax TCViewRen(, ) => logical +@return logical, Retorna .T. em caso de sucesso na operação de renomear a View. Caso contrário retorna .F., e maiores informações sobre a falha na operação podem ser obtidas através da função TCSqlError\(\) + +@param , character, Indica o nome da View existente a ser renomeada. +@param , character, Indica o novo nome da View a ser renomeada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcviewren +/*/ +binary function tcviewren(cviewname, cviewnewname) +return + + +/*/{Protheus.doc} tcviewstruct +Função que recebe o nome da view como parâmetro e retorna o nome da tabela master e a estrutura da view, no formato \(table,field,table,field,...\) + +@type binary function +@sintax TCViewStruct(, <@cTable>, <@cStruct>) => logical +@return logical, Retorna **.T.** em caso de sucesso, caso contrário, retorna **.F.** e o motivo do erro pode ser verificado com a função [TCSQLError](TCSQLError). + +@param , character, Nome da view. +@param <@ctable>, character, Variável que será preenchida com nome da tabela master. +@param <@cstruct>, character, Variável que será preenchida com a estrutura da view informada em cView. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcviewstruct +/*/ +binary function tcviewstruct(cview, ctable, cstruct) +return + + +/*/{Protheus.doc} tcvlock +Faz lock virtual nomeado no DBAccess. + +@type binary function +@sintax TCVLock() => logical +@return logical, Retorna se o lock virtual foi feito com sucesso ou não. + +@param , character, Indica o nome do lock virtual que será feito no DBAccess. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcvlock +/*/ +binary function tcvlock(cname) +return + + +/*/{Protheus.doc} tcvunlock +Realiza unlock de um ou mais locks virtuais no DBAccess. + +@type binary function +@sintax TCVUnlock([cName]) => logical +@return logical, Retorna .T. se o unlock foi feito com sucesso se não retorna .F. + +@param [cname], character, Indica o nome do lock virtual a realizar unlock. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tcvunlock +/*/ +binary function tcvunlock(cname) +return + + +/*/{Protheus.doc} tdsvarinfo +Retorna um texto contendo o nome, tipo e o conteúdo da váriavel informada. + +@type binary function +@sintax TDSVarinfo(, ) => character +@return character, Informações da variável. + +@param , character, Nome da variável que será analisada. +@param , variant, Variável que será analisada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tdsvarinfo +/*/ +binary function tdsvarinfo(cnomevar, var) +return + + +/*/{Protheus.doc} tfiledialog +Apresenta uma janela nativa com a estrutura de arquivos do lado do SmartClient. + +@type binary function +@sintax tFileDialog() => character +@return character, Retorna o nome do item. Caso nenhum item tenha sido selecionado, o retorna será uma string vazia. + +@param , character, Indica a mensagem que será apresentada no console do Application Server. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tfiledialog +/*/ +binary function tfiledialog(cmensagem) +return + + +/*/{Protheus.doc} threadcount +Retorna o número de threads/processos ativos no serviço do Application Server onde a função foi executada. + +@type binary function +@sintax ThreadCount() => numeric +@return numeric, Retorna o número de threads/processos ativos. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/threadcount +/*/ +binary function threadcount() +return + + +/*/{Protheus.doc} threadid +Retorna o ID \(número de identificação\) da thread em que a chamada da função foi realizada. + +@type binary function +@sintax ThreadId() => numeric +@return numeric, Retorna um numérico com o ID da thread. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/threadid +/*/ +binary function threadid() +return + + +/*/{Protheus.doc} threadtimeout +Ligar ou desligar o InactiveTimeout na thread corrente + +@type binary function +@sintax ThreadTimeout([Segundos]) => numeric +@return numeric, O InactiveTimeout corrente da thread + +@param [segundos], numeric, Quantidade de segundos para ativar o timeout da thread +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/threadtimeout +/*/ +binary function threadtimeout(segundos) +return + + +/*/{Protheus.doc} time +Retorna a hora do sistema operacional. Essa função é utilizada para apresentar ou imprimir a hora do sistema operacional em um relatório ou tela. + +@type binary function +@sintax Time() => character +@return character, Retorna a hora do sistema operacional como string na forma **hh:mm:ss**. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/time +/*/ +binary function time() +return + + +/*/{Protheus.doc} timecounter +Recupera o valor do contador de desempenho, pode ser usado para medições de intervalo de tempo. + +@type binary function +@sintax timecounter() => numeric +@return numeric, Retorna um intervalo de tempo. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/timecounter +/*/ +binary function timecounter() +return + + +/*/{Protheus.doc} timefull +Retorna a hora atual completa, contendo hora, minuto, segundo e milésimo de segundo + +@type binary function +@sintax TimeFull() => numeric +@return numeric, Retorna a hora atual + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/timefull +/*/ +binary function timefull() +return + + +/*/{Protheus.doc} timeglbvalue +Retorna a quantidade de segundos decorrida desde o último acesso \( criação, atualização ou leitura \) de uma variável global. + +@type binary function +@sintax TimeGlbValue() => numeric +@return numeric, Retorna tempo \( em segundos \) decorrido desde o último acesso à variável global. Caso não exista na memória identificador global com o nome informado, a função retorna -1 + +@param , character, Indica o nome da variável global. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/timeglbvalue +/*/ +binary function timeglbvalue(cglbname) +return + + +/*/{Protheus.doc} tran +Define uma expressão que resulta num valor do tipo caracter, data, numérico ou lógico e que será convertido para caracter e formatado. + +@type binary function +@sintax TRAN() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/tran +/*/ +binary function tran() +return + + +/*/{Protheus.doc} trans +Define uma expressão que resulta num valor do tipo caracter, data, numérico ou lógico e que será convertido para caracter e formatado. + +@type binary function +@sintax TRANS() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/trans +/*/ +binary function trans() +return + + +/*/{Protheus.doc} transf +Define uma expressão que resulta num valor do tipo caracter, data, numérico ou lógico e que será convertido para caracter e formatado. + +@type binary function +@sintax TRANSF() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/transf +/*/ +binary function transf() +return + + +/*/{Protheus.doc} transfo +Define uma expressão que resulta num valor do tipo caracter, data, numérico ou lógico e que será convertido para caracter e formatado. + +@type binary function +@sintax TRANSFO() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/transfo +/*/ +binary function transfo() +return + + +/*/{Protheus.doc} transfor +Define uma expressão que resulta num valor do tipo caracter, data, numérico ou lógico e que será convertido para caracter e formatado. + +@type binary function +@sintax TRANSFOR() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/transfor +/*/ +binary function transfor() +return + + +/*/{Protheus.doc} transform +Define uma expressão que resulta num valor do tipo caractere, data, numérico ou lógico e que será convertido para caractere e formatado. + +@type binary function +@sintax TRANSFORM() => NIL +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/transform +/*/ +binary function transform() +return + + +/*/{Protheus.doc} left +Retorna um determinado número da caracteres à esquerda de uma string. + +@type binary function +@sintax Left(, ) => character +@return character, Retorna uma cópia da string, iniciando a partir do caractere final da string \(último caractere da esquerda\), considerando o número de caracteres especificado no segundo parâmetro. + +@param , character, Indica o texto que será tratado. +@param , numeric, Indica o número de caracteres à esquerda a serem retornados. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/left +/*/ +binary function left(ctext, ncount) +return + + +/*/{Protheus.doc} space +Retorna uma string com uma quantidade especificada de espaços. + +@type binary function +@sintax Space() => character +@return character, Retorna uma string com espaços. + +@param , numeric, Indica a quantidade de espaços que serão retornados. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/space +/*/ +binary function space(ncount) +return + + +/*/{Protheus.doc} val +Converte uma sequência de caracteres que contêm dígitos em um valor numérico. + +@type binary function +@sintax Val() => numeric +@return numeric, Retorna um valor numérico. + +@param , character, Indica uma string que contém uma sequência de números a serem convertidos. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/val +/*/ +binary function val(cstring) +return + + +/*/{Protheus.doc} ttcloudenv +Retorna um número definido na chave TOTVSCLOUD no arquivo de configuração do Application Server. + +@type binary function +@sintax TTCloudEnv([nEnv]) => numeric +@return numeric, Retorna o número definido no arquivo de configurações ou o passado pelo parâmetro nEnv. + +@param [nenv], numeric, Indica o número correspondente ao ambiente cloud que o Application Server está sendo utilizado. **.F.**. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/ttcloudenv +/*/ +binary function ttcloudenv(nenv) +return + + +/*/{Protheus.doc} type +Retorna o tipo de dado de uma expressão ou variável. + +@type binary function +@sintax Type() => character +@return character, Retorna o tipo de dado da expressão informada. + +@param , character, Indica a expressão e/ou o nome da variável a ser verificada. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/type +/*/ +binary function type(cexpr) +return + + +/*/{Protheus.doc} uncompress +Descompacta um buffer \(gerado pela função **Compress**\) recebido através do algoritmo proprietário. + +@type binary function +@sintax UnCompress(<@cBufferOut>, <@nLenghtOut>, , ) => logical +@return logical, Retorna verdadeiro \(.T.\), se o buffer for descompactado com sucesso; caso contrário, falso \(.F.\). + +@param <@cbufferout>, character, Indica a variável string que receberá o buffer descompactado. +@param <@nlenghtout>, numeric, Indica o tamanho do buffer descompactado. +@param , character, Indica o buffer que será descompactado. +@param , numeric, Indica o tamanho do buffer compactado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/uncompress +/*/ +binary function uncompress(cbufferout, nlenghtout, cbufferin, nlenghtin) +return + + +/*/{Protheus.doc} unstuff +Altera uma sequência de bits de uma string para 0. + +@type binary function +@sintax UnStuff(<@cStr>, , , ) => NIL +@param <@cstr>, character, Indica a string que será modificada. +@param , numeric, Indica o índice do bit inicial. +@param , numeric, Indica a quantidade de bits que serão colocados em 0. +@param , numeric, Indica o índice do último byte que será modificado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/unstuff +/*/ +binary function unstuff(cstr, nstart, ntest, nlength) +return + + +/*/{Protheus.doc} used +Determina se há um arquivo de banco de dados em uso na área de trabalho especificada. + +@type binary function +@sintax Used() => logical +@return logical, Retorna verdadeiro \(.T.\), se existir um arquivo de banco de dados em uso; caso contrário, falso \(.F.\). + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/used +/*/ +binary function used() +return + + +/*/{Protheus.doc} userexception +Força um erro, na linguagem AdvPL, para que possa ser tratado posteriormente. Para isso, esta função recebe uma string com a descrição do erro que será apresentada de acordo com o ambiente que está executando. + +@type binary function +@sintax UserException([cDescricao]) => numeric +@return numeric, \(Nulo\) + +@param [cdescricao], character, Indica a string que contém a descrição do erro forçado através da função. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/userexception +/*/ +binary function userexception(cdescricao) +return + + +/*/{Protheus.doc} utctolocal +Converte data e hora UTC para data e hora local. + +@type binary function +@sintax UTCToLocal(, , [nDST]) => array +@return array, Retorna um array contendo a data \(yyyyMMdd\) e a hora \(hh:mm:ss\). + +@param , character, Indica a data UTC no formato ano, mês e dia. Exemplo: yyyyMMdd. +@param , character, Indica a hora UTC no formato hora, minuto e segundo. Exemplo: hh:mm:ss. +@param [ndst], numeric, Caso seja informado o valor 0 \(Default\), indica que o resultado deve representar o horário solar \(ou standard time\). Caso seja informado o valor 1, a data e horário serão a representação de tempo em horário de verão \(Daylight Savings Time\). +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/utctolocal +/*/ +binary function utctolocal(cdate, ctime, ndst) +return + + +/*/{Protheus.doc} uuidrandom +Cria um identificador UUID \(do inglês Universally Unique IDentifier\) exclusivo + +@type binary function +@sintax UUIDRandom() => character +@return character, Identificador exclusivo. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/uuidrandom +/*/ +binary function uuidrandom() +return + + +/*/{Protheus.doc} uuidrandomseq +Cria um identificador UUID \(do inglês Universally Unique IDentifier\) exclusivo sequencial. + +@type binary function +@sintax UUIDRandomSeq() => character +@return character, Identificador exclusivo. + +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/uuidrandomseq +/*/ +binary function uuidrandomseq() +return + + +/*/{Protheus.doc} valtype +Retorna um caractere que identifica o tipo de dado da variável informada através do parâmetro. + +@type binary function +@sintax ValType() => character +@return character, Retorna um caractere que identifica o tipo de dado informado. + +@param , variant, Indica o dado ou a variável que se deseja identificar. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/valtype +/*/ +binary function valtype(xparam) +return + + +/*/{Protheus.doc} varbegint +Inicia a transação em uma "chave", bloqueando o acesso aos seus valores nas tabelas "Tabela X" e "Tabela A". + +@type binary function +@sintax VarBeginT([cUID], [cKeyWrk]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@param [ckeywrk], character, Identificador da chave. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varbegint +/*/ +binary function varbegint(cuid, ckeywrk) +return + + +/*/{Protheus.doc} varclean +Remove todos os dados das "Tabela X" e "Tabela A" de uma sessão , assim como todas as transações de chaves. + +@type binary function +@sintax VarClean([cUID]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varclean +/*/ +binary function varclean(cuid) +return + + +/*/{Protheus.doc} varcleana +Remove os valores de todas as chaves da "Tabela A" + +@type binary function +@sintax VarCleanA([cUID]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varcleana +/*/ +binary function varcleana(cuid) +return + + +/*/{Protheus.doc} varcleanx +Remove os valores de todas as chaves da "Tabela X" + +@type binary function +@sintax VarCleanX([cUID]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varcleanx +/*/ +binary function varcleanx(cuid) +return + + +/*/{Protheus.doc} vardel +Remove o valor de uma chave na "Tabela X" e na "Tabela A". + +@type binary function +@sintax VarDel([cUID], [cChave]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@param [cchave], character, Identificador da chave. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/vardel +/*/ +binary function vardel(cuid, cchave) +return + + +/*/{Protheus.doc} vardela +Remove o valor de uma chave na "Tabela A" + +@type binary function +@sintax VarDelA([cUID], [cChave]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@param [cchave], character, Identificador da chave. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/vardela +/*/ +binary function vardela(cuid, cchave) +return + + +/*/{Protheus.doc} vardelx +Remove o valor de uma chave na "Tabela X" + +@type binary function +@sintax VarDelX([cUID], [cChave]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@param [cchave], character, Identificador da chave. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/vardelx +/*/ +binary function vardelx(cuid, cchave) +return + + +/*/{Protheus.doc} varendt +Finaliza a transação em uma "chave", liberando novamente o acesso aos valores desta "chave" nas tabelas "Tabela X" e "Tabela A". + +@type binary function +@sintax VarEndT([cUID], [cChave]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@param [cchave], character, Identificador da chave. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varendt +/*/ +binary function varendt(cuid, cchave) +return + + +/*/{Protheus.doc} varget +Recupera o valor de uma "chave" de forma transacionada/síncrona na "Tabela X" e na "Tabela A" de uma determinada sessão, pois faz bloqueio da "chave" . + +@type binary function +@sintax VarGet([cUID], [cChave]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@param [cchave], character, dentificador da chave. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varget +/*/ +binary function varget(cuid, cchave) +return + + +/*/{Protheus.doc} varget_a +Obtém uma lista com todas as chaves e seus respectivos valores das tabelas "Tabela X" e "Tabela A". + +@type binary function +@sintax VarGet_A([cUID]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varget_a +/*/ +binary function varget_a(cuid) +return + + +/*/{Protheus.doc} vargeta +Recupera o valor de uma "chave" na "Tabela A" de uma determinada sessão, e faz bloqueio da "chave" . + +@type binary function +@sintax VarGetA([cUID]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/vargeta +/*/ +binary function vargeta(cuid) +return + + +/*/{Protheus.doc} vargetaa +Obtém uma lista com todas as chaves e seus respectivos valores da "Tabela A". + +@type binary function +@sintax VarGetAA([cUID]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/vargetaa +/*/ +binary function vargetaa(cuid) +return + + +/*/{Protheus.doc} vargetad +Recupera o valor de uma "chave" na "Tabela A" de uma determinada sessão, sem fazer bloqueio da "chave" \(Dirty\). + +@type binary function +@sintax VarGetAD([cUID], [cChave]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@param [cchave], character, Identificador da chave. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/vargetad +/*/ +binary function vargetad(cuid, cchave) +return + + +/*/{Protheus.doc} vargetd +Recupera o valor de uma "chave" tanto da "Tabela X" quanto da "Tabela A" de uma determinada sessão, mas não faz bloqueio da "chave" \(Dirty\). + +@type binary function +@sintax VarGetD([cUID], [cChave]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@param [cchave], character, Identificador da chave. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/vargetd +/*/ +binary function vargetd(cuid, cchave) +return + + +/*/{Protheus.doc} vargetx +Recupera o valor de uma "chave" na "Tabela X" de uma determinada sessão, e faz bloqueio da "chave" . + +@type binary function +@sintax VarGetX([cUID], [cChave]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@param [cchave], character, Identificador da chave. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/vargetx +/*/ +binary function vargetx(cuid, cchave) +return + + +/*/{Protheus.doc} vargetxa +Obtém uma lista com todas as chaves e seus respectivos valores da "Tabela X". + +@type binary function +@sintax VarGetXA([cUID]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/vargetxa +/*/ +binary function vargetxa(cuid) +return + + +/*/{Protheus.doc} vargetxd +Recupera o valor de uma "chave" na "Tabela X" de uma determinada sessão, sem fazer bloqueio da "chave" \(Dirty\). + +@type binary function +@sintax VarGetXD([cUID], [cChave]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@param [cchave], character, Identificador da chave. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/vargetxd +/*/ +binary function vargetxd(cuid, cchave) +return + + +/*/{Protheus.doc} varisuid +Verifica se o identificador da sessão de variáveis globais fornecido está associado a um HashMap global. + +@type binary function +@sintax VarIsUID([cUID]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varisuid +/*/ +binary function varisuid(cuid) +return + + +/*/{Protheus.doc} varprint +descrição da funcao + +@type binary function +@sintax VarPrint([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varprint +/*/ +binary function varprint(tnomevar) +return + + +/*/{Protheus.doc} varprinta +descrição da funcao + +@type binary function +@sintax VarPrintA([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varprinta +/*/ +binary function varprinta(tnomevar) +return + + +/*/{Protheus.doc} varprintx +descrição da funcao + +@type binary function +@sintax VarPrintX([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varprintx +/*/ +binary function varprintx(tnomevar) +return + + +/*/{Protheus.doc} varref +Cria referência entre duas variáveis. + +@type binary function +@sintax VarRef(, ) => logical +@return logical, Retorna, verdadeiro \(.T.\), se a referência foi estabelecida com sucesso; caso contrário, falso \(.F.\). + +@param , character, Indica o nome da variável que será referência. +@param , character, cVarRefenciada Caracter Indica o nome da variável que será referenciada. Desta forma, toda vez que esta variável for alterada, sua referência também será. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varref +/*/ +binary function varref(cvarrefencia, cvarrefencia) +return + + +/*/{Protheus.doc} varsclean +descrição da funcao + +@type binary function +@sintax VarsClean([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varsclean +/*/ +binary function varsclean(tnomevar) +return + + +/*/{Protheus.doc} varset +Insere ou Atualiza o valor de uma "chave" na "Tabela X" de uma determinada sessão, e faz bloqueio da "chave" . + +@type binary function +@sintax VarSet([cUID], [cKeyWrk]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@param [ckeywrk], character, Identificador da chave. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varset +/*/ +binary function varset(cuid, ckeywrk) +return + + +/*/{Protheus.doc} varseta +Insere ou Atualiza o valor de uma "chave" na "Tabela A" de uma determinada sessão, e faz bloqueio da "chave" . + +@type binary function +@sintax VarSetA([cUID]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varseta +/*/ +binary function varseta(cuid) +return + + +/*/{Protheus.doc} varsetad +Insere ou Atualiza o valor de uma "chave" na "Tabela A" de uma determinada sessão, sem fazer bloqueio da "chave" \(Dirty\). + +@type binary function +@sintax VarSetAD([cUID], [cChave]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@param [cchave], character, Identificador da chave. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varsetad +/*/ +binary function varsetad(cuid, cchave) +return + + +/*/{Protheus.doc} varsetd +Insere ou Atualiza o valor de uma "chave" tanto na "Tabela X" quanto na "Tabela A" de uma determinada sessão, mas não faz bloqueio da "chave" \(Dirty\). + +@type binary function +@sintax VarSetD([cUID], [cChave]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@param [cchave], character, Identificador da chave. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varsetd +/*/ +binary function varsetd(cuid, cchave) +return + + +/*/{Protheus.doc} varsetget +Permite associar um bloco de código a uma variável de programa do Advpl, onde o bloco de código será chamado quando a variável for acessada. + +@type binary function +@sintax VarSetGet(, , [lApenasUpdate]) => logical +@return logical, Retorna .T. caso a variável especificada como primeiro parâmetro exista na lista de variávels do programa em execução. + +@param , character, Indica o nome da variável a ser associada com o bloco de código. +@param , codeblock, Indica o bloco de código que será executado quando a variável for acessada. +@param [lapenasupdate], logical, Caso especificado .T., ondica se apenas operação de atribuição \( assign \) deve disparar o bloco de código. Caso informado o valor .F. \( default \), o bloco de código será chamado quando da leitura e/ou atribuição de conteúdo. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varsetget +/*/ +binary function varsetget(cvariavel, bbloco, lapenasupdate) +return + + +/*/{Protheus.doc} varsetx +Insere ou Atualiza o valor de uma "chave" na "Tabela X" de uma determinada sessão, e faz bloqueio da "chave" . + +@type binary function +@sintax VarSetX([cUID], [cChave]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@param [cchave], character, Identificador da chave. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varsetx +/*/ +binary function varsetx(cuid, cchave) +return + + +/*/{Protheus.doc} varsetxd +Insere ou Atualiza o valor de uma "chave" na "Tabela X" de uma determinada sessão, sem fazer bloqueio da "chave" \(Dirty\). + +@type binary function +@sintax VarSetXD([cUID], [cChave]) => NIL +@param [cuid], character, Identificador da sessão de Variáveis Globais. +@param [cchave], character, Identificador da chave. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varsetxd +/*/ +binary function varsetxd(cuid, cchave) +return + + +/*/{Protheus.doc} varsprint +descrição da funcao + +@type binary function +@sintax VarsPrint([@tNomeVar]) => codeblock +@return codeblock, descrição do retorno + +@param [@tnomevar], codeblock, descrição do parametro +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varsprint +/*/ +binary function varsprint(tnomevar) +return + + +/*/{Protheus.doc} varunref +Cancela a referência entre duas variáveis. + +@type binary function +@sintax VarUnref() => logical +@return logical, Retorna, verdadeiro \(.T.\), se a referência foi cancelada com sucesso; caso contrário, falso \(.F.\). + +@param , character, Nome da variável que é referência. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/varunref +/*/ +binary function varunref(cvarrefencia) +return + + +/*/{Protheus.doc} w2bin +Converte um número inteiro em uma string formatada como um inteiro de 16 bits não sinalizado. + +@type binary function +@sintax W2Bin() => character +@return character, Retorna uma string de dois bytes que contém um inteiro binário de 16 bits. + +@param , numeric, Indica o valor numérico inteiro que será convertido. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/w2bin +/*/ +binary function w2bin(nint) +return + + +/*/{Protheus.doc} waitrun +Executa e aguarda pelo término de um programa externo \(arquivo executável\) através do sistema operacional da estação onde o SmartClient está sendo executado. + +@type binary function +@sintax WaitRun(, [nOpc]) => character +@return character, Retorna 0 \(zero\) em caso de sucesso da execução do processo e diferente de zero para erros. + +@param , character, Indica o nome e extensão do arquivo executável. +@param [nopc], numeric, Indica o modo de interface a ser criado para a execução do programa. Para mais informações consulte observações. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/waitrun +/*/ +binary function waitrun(cexename, nopc) +return + + +/*/{Protheus.doc} waitrunsrv +Executa um programa externo \(arquivo executável\) no ambiente onde o servidor esta sendo executado. + +@type binary function +@sintax WaitRunSrv(, [lWait], [nPath]) => character +@return character, Retorna 0 \(zero\) em caso de sucesso da execução do processo e diferente de zero para erros. + +@param , character, Indica o nome e extensão do arquivo executável. +@param [lwait], logical, Verdadeiro para a execução aguardar o termino do programa externo, ou falso para não aguardar o termino e continuar a execução do programa. +@param [npath], character, Indica o path de execução onde o programa irá rodar. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/waitrunsrv +/*/ +binary function waitrunsrv(cexename, lwait, npath) +return + + +/*/{Protheus.doc} webencript +Realiza a criptografia ou decriptografia de um conteúdo + +@type binary function +@sintax WebEncript(, [lDecript], [lUseinjava]) => character +@return character, Retorna uma string com o conteúdo encriptado ou decriptado + +@param , character, Conteudo que será encriptado ou decriptado. +@param [ldecript], logical, Quando informado verdadeiro \(.T.\) irá decriptar ; quando informado falso \(.F.\) irá encriptar . Quando não informado é encriptado . +@param [luseinjava], logical, Usar .T. quando função for usada com validação em Java. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/webencript +/*/ +binary function webencript(ccontent, ldecript, luseinjava) +return + + +/*/{Protheus.doc} winexec +Executa uma aplicação externa na estação onde o SmartClient está em execução. + +@type binary function +@sintax WinExec() => character +@return character, Retorna 0 \(zero\) em caso de sucesso da execução do processo e diferente de zero para erros. + +@param , character, Indica o o caminho e nome do programa que será executado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/winexec +/*/ +binary function winexec(cexec) +return + + +/*/{Protheus.doc} word +Retorna a parte inteira de uma variável numérica AdvPL. + +@type binary function +@sintax Word() => numeric +@return numeric, Retorna a parte inteira do número informado, ignorando qualquer valor decimal. + +@param , numeric, Valor numérico a ser considerado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/word +/*/ +binary function word(nvalue) +return + + +/*/{Protheus.doc} writepprostring +Permite criar e/ou alterar um seção/chave de configuração no arquivo de configuração \(.INI\). No entanto, caso o arquivo não exista ele será criado. Pode-se, opcionalmente, definir um path absoluto, com unidade de disco, de modo que o arquivo de configuração \(.INI\) será atualizado na estação onde o TOTVS Smart Client está sendo executado. + +@type binary function +@sintax WritePProString(, , , ) => logical +@return logical, Retorna verdadeiro \(.T.\) se a chave for incluída e/ou alterada com sucesso ou falso \(.F.\) caso ocorra alguma falha ou impossibilidade de acesso no arquivo de configuração \(.INI\). + +@param , character, Indica o nome da seção, no arquivo de configuração \(.INI\), que será utilizada. Porém, caso a seção não exista, a mesma será criada. +@param , character, ndica o nome da chave da seção, do arquivo de configuração \(.INI\), que terá seu conteúdo alterado. Porém, caso a chave não exista na seção especificada, a mesma será criada. +@param , character, Indica o conteúdo da chave que será atualizado. +@param , character, Indica o nome do arquivo de configuração \(\*.INI\) que será alterado. Porém, é importante observar os seguintes casos: Se o arquivo de configuração \(.INI\) não existir, o mesmo será criado; Se o path do arquivo de configuração \(\*.INI\) não for informado, o mesmo será criado/atualizado no diretório onde está instalado TOTVS Application Server, no servidor; Se especificado um path absoluto, com unidade de disco, o arquivo de configuração \(.INI\) será criado e/ou atualizado na estação remota, no path informado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/writepprostring +/*/ +binary function writepprostring(csecao, cchave, cconteudo, carqini) +return + + +/*/{Protheus.doc} writeprofstring +Cria ou altera o conteúdo de uma chave no arquivo win.ini \(arquivo utilizado para armazenar configurações básicas de inicialização\) do sistema operacional. + +@type binary function +@sintax WriteProfString(, , ) => logical +@return logical, Retorna verdadeiro \(.T.\), se a chave for incluída ou alterada com sucesso, ou falso \(.F.\), caso ocorra alguma falha ou impossibilidade de acesso no arquivo de configuração. + +@param , character, Indica o nome da seção em que um valor será recuperado. +@param , character, Indica o nome da chave em que um valor será recuperado. +@param , character, Indica o conteúdo padrão que será recuperado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/writeprofstring +/*/ +binary function writeprofstring(csecao, cchave, cpadrao) +return + + +/*/{Protheus.doc} writersapk +Converte uma chave privada no formato DER \(Distinguished Encoding Rules\) para o formato PEM \(Privacy Enhanced Mail\) criptografando com o algoritmo RSA. + +@type binary function +@sintax WriteRSAPK(, , <@cError>) => logical +@return logical, Retorna **.T.** se conseguiu converter o arquivo; caso contrário, **.F.**. + +@param , character, Indica o caminho do arquivo origem \(formato DER\), a partir da raiz do diretório \(RootPath\) do TOTVS Application Server. +@param , character, Indica o caminho do arquivo destino \(formato PEM\), a partir da raiz do diretório \(RootPath\) do TOTVS Application Server, com as informações de chave privada. +@param <@cerror>, character, Indica a saída da mensagem de erro, em caso de falha. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/writersapk +/*/ +binary function writersapk(cderfile, crsafile, cerror) +return + + +/*/{Protheus.doc} writesrvprofstring +Cria ou altera um chave, no arquivo de configuração \(\*.INI\), na seção do ambiente em uso. + +@type binary function +@sintax WriteSrvProfString(, ) => logical +@return logical, Retorna verdadeiro \(.T.\) se a chave for incluída ou alterada com sucesso ou falso \(.F.\) caso ocorra alguma falha ou impossibilidade de acesso no arquivo de configuração \(\*.INI\). + +@param , character, Indica o nome da chave, no arquivo de configuração \(\*.INI\), que será criada ou alterada na seção do ambiente em uso. +@param , character, Indica o conteúdo que será definido ou atualizado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/writesrvprofstring +/*/ +binary function writesrvprofstring(cchave, cvalor) +return + + +/*/{Protheus.doc} wsclassnew +Cria uma nova instância de uma estrutura de Web Services. + +@type binary function +@sintax WSClassNew() => object +@return object, Retorna uma referência para a nova instância da estrutura passada como parâmetro. Caso a estrutura não exista, o retorno será nulo. + +@param , character, Indica o nome da estrutura \(Server\), de Web Services, para criar o objeto. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/wsclassnew +/*/ +binary function wsclassnew(csrvstruct) +return + + +/*/{Protheus.doc} wsdescdata +Obtém todas as propriedades de uma classe de Web Services. + +@type binary function +@sintax WSDescData(, [lIncluiDoc]) => array +@return array, Retorna um array com as informações das propriedades contidas na classe. Caso não encontre a classe especificada, o retorno será um array vazio. + +@param , character, Indica o nome da classe \(Server\), de Web Services, para a obtenção das propriedades. +@param [lincluidoc], logical, Indica que, se verdadeiro \(.T.\), o valor inicial da propriedade será incluído no array de retorno; caso contrário, falso \(.F.\), o valor não será incluso. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/wsdescdata +/*/ +binary function wsdescdata(cclassname, lincluidoc) +return + + +/*/{Protheus.doc} wsdescmeth +Obtém todos os métodos \(incluindo os parâmetros de send e receive\) de uma classe de Web Services. + +@type binary function +@sintax WSDescMeth() => array +@return array, Retorna um array com a lista de métodos contidos na classe. Caso não encontre a classe especificada, o array retornará vazio. + +@param , character, Indica o nome da classe \(Server\), de Web Services, para a obtenção das propriedades. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/wsdescmeth +/*/ +binary function wsdescmeth(cclassname) +return + + +/*/{Protheus.doc} wsdl2parser +Realiza o parser de um conteudo importado de um WSDL Passado no primeiro parametro da função, como tipo Caracter + +@type binary function +@sintax WSDL2Parser(, <@aLocalType>, <@aLocalName>, <@aLocalImport>, <@cError>, <@cWarning>) => numeric +@return numeric, \(Nulo\) + +@param , character, String contendo um WSDL para o parser. +@param <@alocaltype>, array, Array com os tipo de dados fornece definições usadas para descrever as mensagens trocadas. +@param <@alocalname>, array, Array com os dados que especifica um endereço para uma ligação, definindo assim uma única comunicação final. +@param <@alocalimport>, array, Array com os Endereços para importar outras definições. +@param <@cerror>, character, Caso ocorra algum erro na execução da função, a variável será preenchida com sua descrição. +@param <@cwarning>, character, Caso ocorra algum alerta \(warning\) durante a execução da função, a variável será preenchida com sua descrição. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/wsdl2parser +/*/ +binary function wsdl2parser(cwsdl, alocaltype, alocalname, alocalimport, cerror, cwarning) +return + + +/*/{Protheus.doc} wsdlparser +Realiza o parser de um conteudo importado de um WSDL. + +@type binary function +@sintax WSDLParser(, <@aLocalType>, <@aLocalMsg>, <@aLocalPort>, <@aLocalBind>, <@aLocalServ>, <@aLocalName>, <@aLocalImport>, <@cError>, <@cWarning>) => numeric +@return numeric, \(Nulo\) + +@param , character, Indica a string que contém um WSDL para realizar o parser. +@param <@alocaltype>, array, Indica um array, por referência, que fornecerá definições que serão utilizadas para descrever as mensagens trocadas. +@param <@alocalmsg>, array, Indica um array que contém os dados que representam uma definição abstrata dos dados que serão transmitidos. Uma mensagem consiste de parte lógica, cada uma das quais está associada a uma definição dentro de algum tipo de sistema. +@param <@alocalport>, array, Indica um array com os dados que são um conjunto de resumo de operações. Cada operação, refere-se a uma mensagem de entrada e saída. +@param <@alocalbind>, array, Indica um array que contém os dados que especifica os dados concretos do protocolo de formato das especificações para operações e mensagens definidas por um determinado portType. +@param <@alocalserv>, array, Indica um array com os dados que contêm os serviços que serão utilizados para agregar um conjunto de portas. +@param <@alocalname>, array, Indica um array com os dados que especifica o endereço que será utilizado para realizar uma ligação. Desta forma, será definida uma única comunicação final. +@param <@alocalimport>, array, Indica um array com os endereços que serão utilizados para importar outras definições. +@param <@cerror>, character, Caso ocorra algum erro na execução da função, a variável será preenchida com sua descrição. +@param <@cwarning>, character, Caso ocorra algum alerta \(warning\) durante a execução da função, a variável será preenchida com sua descrição. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/wsdlparser +/*/ +binary function wsdlparser(cwsdl, alocaltype, alocalmsg, alocalport, alocalbind, alocalserv, alocalname, alocalimport, cerror, cwarning) +return + + +/*/{Protheus.doc} xmlc14n +Esta função permite aplicar o algoritmo canonicalization C14N na string que contém um XML. + +@type binary function +@sintax XmlC14N(, , <@cError>, <@cWarning>) => character +@return character, Retorna o XML recodificado na forma canonical. + +@param , character, Indica o conteúdo XML que assumirá a formato canonical. +@param , character, Reservado para implementação futura. Deve ser informada uma string em branco. +@param <@cerror>, character, Retorna uma descrição de erro, em caso de falha no Parser. +@param <@cwarning>, character, Retorna uma descrição de advertência emitida pelo Parser. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/xmlc14n +/*/ +binary function xmlc14n(cxml, coption, cerror, cwarning) +return + + +/*/{Protheus.doc} xmlc14nfile +Esta função permite aplicar o algoritmo canonicalization C14N em um arquivo que contém um XML. + +@type binary function +@sintax XmlC14NFile(, , <@cError>, <@cWarning>) => character +@return character, Retorna o XML recodificado na forma canonical. + +@param , character, Indica caminho do arquivo XML que assumirá a formato canonical. +@param , character, Reservado para implementação futura. Deve ser informada uma string em branco. +@param <@cerror>, character, Retorna uma descrição de erro, em caso de falha no Parser. +@param <@cwarning>, character, Retorna uma descrição de advertência emitida pelo Parser. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/xmlc14nfile +/*/ +binary function xmlc14nfile(cfile, coption, cerror, cwarning) +return + + +/*/{Protheus.doc} xmlchildcount +Retorna a quantidade de nós existentes, a partir de um elemento\(nó\) pai informado como parâmetro. Sintaxe \[code\] XmlChildCount \( < oParent> \) --> nChild \[code\] + +@type binary function +@sintax XmlChildCount() => numeric +@return numeric, Retorna o número de elementos encontrados. + +@param , object, Indica o elemento XML que realizará a contagem dos elementos filhos. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/xmlchildcount +/*/ +binary function xmlchildcount(oparent) +return + + +/*/{Protheus.doc} xmlchildex +Retorna um ou mais nós da estrutura, de acordo com o nome do elemento procurado. + +@type binary function +@sintax XmlChildEx(, ) => variant +@return variant, Retorna o objeto do nó, se a função encontrar apenas um elemento, ou um array de nós, se possuir mais de um elemento do mesmo nome; caso contrário, o retorno será nulo. + +@param , object, Indica o nó que será utilizado para iniciar a procura do elemento procurado. +@param , character, Indica o nome do elemento que será procurado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/xmlchildex +/*/ +binary function xmlchildex(oparent, cprocura) +return + + +/*/{Protheus.doc} xmlclonenode +Clonar um node do XML. + +@type binary function +@sintax XmlCloneNode(<@oParent>, ) => logical +@return logical, quando for possivel realizar a operação de clonar Retorna Verdadeiro\(.T.\), quando não for possivel retorna Falso\(.F.\) + +@param <@oparent>, object, Indica o nó que recebera o clone +@param , character, Indica o elemento que sera clonado +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/xmlclonenode +/*/ +binary function xmlclonenode(oparent, celement) +return + + +/*/{Protheus.doc} xmldelnode +Exclui um nó de um objeto XML - eXtensible Markup Language \(Linguagem extensível de formatação\). + +@type binary function +@sintax XmlDelNode(<@oParent>, <@oParent>) => logical +@return logical, Retorna verdadeiro \(.T.\), se encontrar um elemento e excluí-lo; caso contrário, falso \(.F.\). + +@param <@oparent>, object, Indica o nó pai do elemento que será excluído. +@param <@oparent>, character, Indica o Nome do elemento que sera excluido. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/xmldelnode +/*/ +binary function xmldelnode(oparent, oparent) +return + + +/*/{Protheus.doc} xmlfvldsch +Realiza a validação de um arquivo XML utilizando um XSD \(XML Schema Definition\). + +@type binary function +@sintax XmlFVldSch(, , <@cError>, <@cWarning>) => logical +@return logical, Retorna verdadeiro \(.T.\) caso o arquivo XML for validado a partir do XSD e, caso contrário, retorna falso \(.F.\) + +@param , character, Indica o arquivo XML que será validado +@param , character, Indica o arquivo XSD utilizado na validação do XML +@param <@cerror>, character, Indica a variável que será preenchida com a descrição do erro observado durante a validação do XML +@param <@cwarning>, character, Indica a variável que será preenchida com a descrição do alerta observado durante a validação do XML +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/xmlfvldsch +/*/ +binary function xmlfvldsch(cxml, cxsd, cerror, cwarning) +return + + +/*/{Protheus.doc} xmlgetchild +Retorna um elemento filho da estrutura. + +@type binary function +@sintax XmlGetChild(, ) => object +@return object, Retorna o objeto que representa o filho da estrutura, de acordo com o índice passado no parâmetro + +@param , object, Indica o nó no qual será utilizado como base para obter um nó filho. +@param , numeric, Indica o índice do nó que desejamos obter. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/xmlgetchild +/*/ +binary function xmlgetchild(oparent, nchild) +return + + +/*/{Protheus.doc} xmlgetparent +Retorna um nó que representa o nó pai do elemento especificado por parâmetro. + +@type binary function +@sintax XmlGetParent([oNode]) => object +@return object, Retorna um objeto posicionado no nó, de acordo com o parâmetro . + +@param [onode], codeblock, Indica o nó no qual será utilizado como referência para o retorno do nó pai. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/xmlgetparent +/*/ +binary function xmlgetparent(onode) +return + + +/*/{Protheus.doc} xmlnewnode +Cria um novo nó a partir de um ponto qualquer no XML - EXtensible Markup Language \(Linguagem extensível de formatação\). Sintaxe \[code\] XmlNewNode \( , , , \) --> Nil \[code\] + +@type binary function +@sintax XmlNewNode(, , , ) => NIL +@param , object, Indica o local onde será inserido o novo nó XML. +@param , character, Indica o nome do elemento \(nó\) no XML. +@param , character, Indica o nome real do nó XML. +@param , character, Indica o tipo de nó XML que será criado. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/xmlnewnode +/*/ +binary function xmlnewnode(oparent, celementname, crealname, ctype) +return + + +/*/{Protheus.doc} xmlnode2arr +Transforma em array um objeto \(nó\) da estrutura do XML - eXtensible Markup Language \(Linguagem extensível de formatação\). Sintaxe \[code\] XmlNode2Arr \( < oRoot>, < cNode> \) --> lRet \[code\] + +@type binary function +@sintax XmlNode2Arr(, ) => NIL +@param , object, Indica o elemento \(nó\) que será utilizado como raiz para iniciar a busca do elemento a ser transformado em array. +@param , character, Indica o elemento procurado que será transformado em array na estrutura. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/xmlnode2arr +/*/ +binary function xmlnode2arr(oroot, cnode) +return + + +/*/{Protheus.doc} xmlparser +Retorna um objeto, que possui uma estrutura XML, passado por parâmetro. Sintaxe \[code\] XmlParser\( \[ cXml \], \[ cReplace \], \[ cError \], \[ cWarning \] \) \[code\] + +@type binary function +@sintax XmlParser(, , , ) => object +@return object, Retorna um objeto com a estrutura de acordo com o XML. + +@param , character, Indica uma string que contém o código XML. +@param , character, Indica o valor que será atribuído como prefixo para a nomenclatura das propriedades do objeto XML em Advpl a partir dos nomes dos nodes do documento XML. Será usando também na substituição de qualquer caractere usado no nome do node XML que não faça parte da nomenclatura de uma variável Adppl, como espaços em branco por exemplo. +@param , character, Caso ocorra algum erro durante execução da função, a variável será preenchida com a descrição do erro ocorrido. +@param , character, Caso ocorra alguma advertência durante execução da função, a variável será preenchida com a descrição da advertência ocorrida. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/xmlparser +/*/ +binary function xmlparser(cxml, creplace, cerror, cwarning) +return + + +/*/{Protheus.doc} xmlparserfile +Esta função permite retornar um objeto, que possui uma estrutura XML, recebido de um arquivo por parâmetro. Sintaxe \[code\] XmlParserFileFile \( , , <@cError>, <@cWarning> \) --> oXML \[code\] + +@type binary function +@sintax XmlParserFile(, , , ) => object +@return object, Um objeto com a estrutura de acordo com o XML. + +@param , character, Representa o dir etório \(a partir do rootpath\) e o nome de um arquivo \*.xml. +@param , character, Representa o valor que será substituído, pelos caracteres de espaço em branco, na especificação do nó XML. +@param , character, Caso ocorra algum erro na execução da função, a variável será preenchida com sua descrição. +@param , character, Caso ocorra algum alerta \(warning\) durante a execução da função, a variável será preenchida com sua descrição. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/xmlparserfile +/*/ +binary function xmlparserfile(cfile, creplace, cerror, cwarning) +return + + +/*/{Protheus.doc} xmlsvldsch +Executa a validação de um XML como string com relação a um arquivo XSD \(Schema\). + +@type binary function +@sintax XmlSVldSch(, , <@cError>, <@cWarning>) => logical +@return logical, Retorna verdadeiro \(.T.\), se o XML for válido, caso contrário, retorna falso \(.F.\). + +@param , character, Indica o valor XML como string que será validado, pode ser passado uma variável string com conteúdo XML. +@param , character, Indica o arquivo XSD com path para validação do arquivo XML. +@param <@cerror>, character, Caso ocorra algum erro durante a validação do arquivo XML, a variável será preenchida com a descrição do erro ocorrido. +@param <@cwarning>, character, Caso ocorra algum alerta 'Warning' durante validação do arquivo XML, a variável será preenchida com a descrição do 'Warning' ocorrido. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/xmlsvldsch +/*/ +binary function xmlsvldsch(cxml, cschemapath, cerror, cwarning) +return + + +/*/{Protheus.doc} year +Retorna o ano correspondente a uma data. + +@type binary function +@sintax year() => numeric +@return numeric, Retorna o ano correspondente a data informada, inclusive os dígitos referente ao século, na forma de um valor numérico de quatro dígitos. + +@param , date, Indica a data que será convertida. +@author [VP Tecnologia](https://tdn.totvs.com/display/tec) - [TOTVS S.A.](https://www.totvs.com/) +@see https://tdn.totvs.com/display/tec/year +/*/ +binary function year(ddate) +return + + diff --git a/compras_digital/.vscode/launch.json b/compras_digital/.vscode/launch.json new file mode 100644 index 0000000..104d190 --- /dev/null +++ b/compras_digital/.vscode/launch.json @@ -0,0 +1,18 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "totvs_language_debug", + "request": "launch", + "name": "TOTVS Language Debug", + "program": "${command:AskForProgramName}", + "cwb": "${workspaceFolder}", + "smartclientBin": "../totvs/bin/smartclient/smartclient.exe", + "isMultiSession": true, + "enableTableSync": true, + "extendFeatures": { + "charDetails": false + } + } + ] +} \ No newline at end of file diff --git a/compras_digital/.vscode/servers.json b/compras_digital/.vscode/servers.json new file mode 100644 index 0000000..90f301a --- /dev/null +++ b/compras_digital/.vscode/servers.json @@ -0,0 +1,18 @@ +{ + "version": "1.0.0", + "configurations": [ + { + "id": "6ki8w4m1dpmor606g3n0y6sgduhc", + "name": "Ginseng Produção", + "host": "comerciode188006.fluig.cloudtotvs.com.br", + "ssl": true, + "port": 443, + "username": "andrey.cunha", + "password": "eyJpdiI6IjUyYTgyOGQ0ZGM1ZWI3ZjNhZWRlNTQ1ZWZiNzAwOWQwIiwic2FsdCI6IjYwYTZjODBjY2RiNDk5OWI3YTc0NmY1ZGY1NTgwOGI5IiwidGV4dCI6IjdmYTA2ZGFhODM1MWI2NzRmNTk1ZTEzMzc1NjMxZjQ1In0=", + "userCode": "andrey.cunha", + "confirmExporting": false, + "hasBrowser": false, + "companyId": 1 + } + ] +} \ No newline at end of file diff --git a/compras_digital/.vscode/settings.json b/compras_digital/.vscode/settings.json new file mode 100644 index 0000000..aa86c45 --- /dev/null +++ b/compras_digital/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "totvsLanguageServer.welcomePage": false, + "totvsLanguageServer.editor.linter.includes": "C:\\25-04-14-P12-SMARTCLIENT_BUILD 20.3.2.12_WINDOWS_X64\\include" +} \ No newline at end of file diff --git a/compras_digital/datasets/ProdutosTI.js b/compras_digital/datasets/ProdutosTI.js deleted file mode 100644 index 4ca375f..0000000 --- a/compras_digital/datasets/ProdutosTI.js +++ /dev/null @@ -1,61 +0,0 @@ -function defineStructure() { - addColumn("codigo"); - addColumn("descricao"); -} - -function onSync(lastSyncDate) {} - -function createDataset(fields, constraints, sortFields) { - var dataset = DatasetBuilder.newDataset(); - var dataSource = "/jdbc/Protheus12"; // Nome da conexão cadastrada no Fluig - var ic = new javax.naming.InitialContext(); - var ds = ic.lookup(dataSource); - var conn = ds.getConnection(); - var stmt = null; - var rs = null; - - try { - log.info("Iniciando execução do dataset..."); - - var sql = "SELECT b1_cod, b1_desc FROM sb1010 WHERE LEFT(b1_cod, 4) IN ('0001','0008', '0002', '0003', '0007', '0006', '0009', '0010', '0011', '0014','0016')"; - log.info("Query SQL: " + sql); - - stmt = conn.prepareStatement(sql); - rs = stmt.executeQuery(); - - dataset.addColumn("codigo"); - dataset.addColumn("descricao"); - - var encontrados = {}; // Usando um objeto para evitar duplicação - - while (rs.next()) { - var codigo = rs.getString("b1_cod"); - var descricao = rs.getString("b1_desc"); - - if (!encontrados[codigo]) { // Verifica se já foi adicionado - encontrados[codigo] = true; // Marca como processado - log.info("Registro encontrado: " + codigo + " - " + descricao); - dataset.addRow([codigo, descricao]); - } - } - - if (Object.keys(encontrados).length === 0) { - log.info("Nenhum registro encontrado para a consulta."); - } - - } catch (e) { - log.error("Erro ao executar dataset: " + e.message); - } finally { - try { - if (rs) rs.close(); - if (stmt) stmt.close(); - if (conn) conn.close(); - } catch (e) { - log.error("Erro ao fechar recursos: " + e.message); - } - } - - return dataset; -} - -function onMobileSync(user) {} diff --git a/compras_digital/datasets/dsComprasProdutos.js b/compras_digital/datasets/dsComprasProdutos.js new file mode 100644 index 0000000..a731753 --- /dev/null +++ b/compras_digital/datasets/dsComprasProdutos.js @@ -0,0 +1,345 @@ +function defineStructure() { + addColumn("B1_COD"); + addColumn("B1_DESC"); + addColumn("B1_UM"); + addColumn("B1_TIPO"); + addColumn("B1_LOCPAD"); + addColumn("B1_LOCALIZ"); + addColumn("B1_CONTRAT"); + addColumn("B1_PICM"); + addColumn("B1_IPI"); + addColumn("B1_RASTRO"); + addColumn("B1_MSBLQL"); + addColumn("TOTAL"); + addColumn("HORA_CONSULTA"); + addColumn("CODIGO_DESCRICAO"); + + setKey(["B1_COD"]); + addIndex(["B1_COD"]); + addIndex(["B1_DESC"]); +} + +function onSync(lastSyncDate) { + var dataset = DatasetBuilder.newDataset(); + addDatasetColumns(dataset); + + var payload = fetchProdutos(); + var produtos = payload.produtos || []; + + log.info("[dsComprasProdutos.onSync] lastSyncDate=" + lastSyncDate + ", totalRecebido=" + produtos.length); + + for (var i = 0; i < produtos.length; i++) { + var row = mapProdutoToRow(produtos[i], payload.total, payload.horaConsulta); + if (typeof dataset.addOrUpdateRow === "function") { + dataset.addOrUpdateRow(row); + } else { + dataset.addRow(row); + } + } + + return dataset; +} + +function createDataset(fields, constraints, sorts) { + var dataset = DatasetBuilder.newDataset(); + addDatasetColumns(dataset); + + var payload = fetchProdutos(); + var produtos = payload.produtos || []; + var filtro = parseConstraints(constraints); + var count = 0; + + log.info("[dsComprasProdutos.createDataset] totalRecebido=" + produtos.length + ", search=[" + filtro.search + "], maxRows=" + filtro.maxRows); + + for (var i = 0; i < produtos.length; i++) { + var item = produtos[i] || {}; + if (!matchProduto(item, filtro)) { + continue; + } + + dataset.addRow(mapProdutoToRow(item, payload.total, payload.horaConsulta)); + count++; + + if (filtro.maxRows > 0 && count >= filtro.maxRows) { + break; + } + } + + log.info("[dsComprasProdutos.createDataset] totalRetornado=" + count); + return dataset; +} + +function onMobileSync(user) { + var sortFields = ["B1_COD"]; + var constraints = []; + var fields = [ + "B1_COD", + "B1_DESC", + "B1_UM", + "B1_TIPO", + "B1_LOCPAD", + "B1_LOCALIZ", + "B1_CONTRAT", + "B1_PICM", + "B1_IPI", + "B1_RASTRO", + "B1_MSBLQL", + "TOTAL", + "HORA_CONSULTA", + "CODIGO_DESCRICAO" + ]; + + return { + fields: fields, + constraints: constraints, + sortFields: sortFields + }; +} + +function addDatasetColumns(dataset) { + dataset.addColumn("B1_COD"); + dataset.addColumn("B1_DESC"); + dataset.addColumn("B1_UM"); + dataset.addColumn("B1_TIPO"); + dataset.addColumn("B1_LOCPAD"); + dataset.addColumn("B1_LOCALIZ"); + dataset.addColumn("B1_CONTRAT"); + dataset.addColumn("B1_PICM"); + dataset.addColumn("B1_IPI"); + dataset.addColumn("B1_RASTRO"); + dataset.addColumn("B1_MSBLQL"); + dataset.addColumn("TOTAL"); + dataset.addColumn("HORA_CONSULTA"); + dataset.addColumn("CODIGO_DESCRICAO"); +} + +function mapProdutoToRow(item, total, horaConsulta) { + var codigo = trim(item["B1_COD"]); + var descricao = trim(item["B1_DESC"]); + + return [ + codigo, + descricao, + trim(item["B1_UM"]), + trim(item["B1_TIPO"]), + trim(item["B1_LOCPAD"]), + trim(item["B1_LOCALIZ"]), + trim(item["B1_CONTRAT"]), + trim(item["B1_PICM"]), + trim(item["B1_IPI"]), + trim(item["B1_RASTRO"]), + trim(item["B1_MSBLQL"]), + trim(total), + trim(horaConsulta), + codigo + " - " + descricao + ]; +} + +function fetchProdutos() { + var response = { + total: "", + horaConsulta: "", + produtos: [] + }; + + try { + var clientService = fluigAPI.getAuthorizeClientService(); + var endpoints = [ + "/rest/uf_mata010/", + "/rest/uf_mata010", + "https://rest.grupoginseng.com.br/rest/uf_mata010/", + "https://rest.grupoginseng.com.br/rest/uf_mata010", + "/", + "" + ]; + + var lastStatus = ""; + var lastRetorno = ""; + + for (var i = 0; i < endpoints.length; i++) { + var endpoint = endpoints[i]; + var apiResp = invokePostprod(clientService, endpoint); + var statusHttp = apiResp.status; + var retorno = apiResp.body; + + lastStatus = statusHttp; + lastRetorno = retorno; + + log.info("[dsComprasProdutos] endpoint=[" + endpoint + "], HTTP status=" + statusHttp); + + if (!retorno) { + continue; + } + + var obj = parseApiResponseObject(retorno); + if (!obj || !(obj.produtos instanceof Array)) { + continue; + } + + response.total = obj.total != null ? String(obj.total) : ""; + response.horaConsulta = obj.hora_consulta != null ? String(obj.hora_consulta) : ""; + response.produtos = obj.produtos; + + log.info("[dsComprasProdutos] endpointOK=[" + endpoint + "], total=" + response.total + ", produtos=" + response.produtos.length + ", hora_consulta=" + response.horaConsulta); + return response; + } + + var preview = trim(lastRetorno); + if (preview.length > 220) { + preview = preview.substring(0, 220) + "..."; + } + log.error("[dsComprasProdutos] Nenhum endpoint retornou JSON válido. UltimoStatus=" + lastStatus + ", ultimoRetornoPreview=[" + preview + "]"); + } catch (e) { + log.error("[dsComprasProdutos] Erro ao consultar API Postprod: " + e); + } + + return response; +} + +function invokePostprod(clientService, endpoint) { + var data = { + companyId: String(getValue("WKCompany") || "1"), + serviceCode: "Postprod", + endpoint: endpoint, + method: "get", + timeoutService: "60000", + params: {} + }; + + try { + var vo = clientService.invoke(JSON.stringify(data)); + return { + status: vo ? String(vo.getHttpStatusResult() || "") : "", + body: vo ? String(vo.getResult() || "") : "" + }; + } catch (e) { + return { + status: "EXCEPTION", + body: String(e) + }; + } +} + +function parseConstraints(constraints) { + var out = { + codigo: "", + descricao: "", + bloqueado: "", + search: "", + maxRows: 0 + }; + + if (!constraints) return out; + + for (var i = 0; i < constraints.length; i++) { + var c = constraints[i]; + if (!c || !c.fieldName) continue; + + var name = String(c.fieldName || "").toUpperCase(); + var value = trim(c.initialValue); + + if (name === "B1_COD" && value) { + out.codigo = cleanSearchValue(value); + continue; + } + if (name === "B1_DESC" && value) { + out.descricao = cleanSearchValue(value); + continue; + } + if (name === "B1_MSBLQL" && value) { + out.bloqueado = cleanSearchValue(value); + continue; + } + if ((name === "SEARCH" || name === "TERMO" || name === "FILTRO") && value) { + out.search = cleanSearchValue(value); + continue; + } + if (name === "SQLLIMIT" || name === "RESULTLIMIT") { + var n = parseInt(value, 10); + if (!isNaN(n) && n > 0) out.maxRows = n; + continue; + } + } + + return out; +} + +function matchProduto(item, filtro) { + var codigo = trim(item["B1_COD"]); + var descricao = trim(item["B1_DESC"]); + var um = trim(item["B1_UM"]); + var bloqueado = trim(item["B1_MSBLQL"]); + + if (filtro.codigo && codigo !== filtro.codigo) { + return false; + } + if (filtro.descricao && normalize(descricao).indexOf(normalize(filtro.descricao)) === -1) { + return false; + } + if (filtro.bloqueado && bloqueado !== filtro.bloqueado) { + return false; + } + + if (filtro.search) { + var blob = normalize([codigo, descricao, um, bloqueado].join(" ")); + if (blob.indexOf(normalize(filtro.search)) === -1) { + return false; + } + } + + return true; +} + +function parseJsonSafe(text) { + try { + return JSON.parse(text); + } catch (e) { + return null; + } +} + +function parseApiResponseObject(rawText) { + var root = parseJsonSafe(rawText); + if (!root) return null; + + if (root.produtos instanceof Array) { + return root; + } + + if (typeof root.content === "string") { + var inner = parseJsonSafe(root.content); + if (inner && inner.produtos instanceof Array) { + return inner; + } + } + + if (root.content && root.content.produtos instanceof Array) { + return root.content; + } + + if (typeof root.result === "string") { + var parsedResult = parseJsonSafe(root.result); + if (parsedResult && parsedResult.produtos instanceof Array) { + return parsedResult; + } + } + + return null; +} + +function cleanSearchValue(v) { + var s = trim(v); + s = s.replace(/[%*_]/g, ""); + if (s === "true" || s === "false" || s === "on" || s === "off" || s === "1") { + return ""; + } + return trim(s); +} + +function normalize(v) { + return trim(v).toLowerCase(); +} + +function trim(v) { + return String(v == null ? "" : v).trim(); +} diff --git a/compras_digital/datasets/dsFiliais.js b/compras_digital/datasets/dsFiliais.js index d713d17..892927c 100644 --- a/compras_digital/datasets/dsFiliais.js +++ b/compras_digital/datasets/dsFiliais.js @@ -1,118 +1,212 @@ -function defineStructure() { - -} -function onSync(lastSyncDate) { - -} function createDataset(fields, constraints, sortFields) { - - var ds = DatasetBuilder.newDataset(); - - ds.addColumn("codigo"); - ds.addColumn("filial"); - ds.addColumn("estabelecimento"); - ds.addColumn("cep"); - ds.addColumn("logradouro"); - ds.addColumn("numero"); - ds.addColumn("bairro"); - ds.addColumn("cidade"); - ds.addColumn("estado"); - ds.addColumn("cnpj"); + var dataset = DatasetBuilder.newDataset(); + dataset.addColumn("PDV"); + dataset.addColumn("LOJA"); + dataset.addColumn("RESPONSAVEL_LOJA"); + dataset.addColumn("REGIONAL"); + dataset.addColumn("UF"); + dataset.addColumn("CIDADE"); + dataset.addColumn("STATUS"); + dataset.addColumn("CANAL"); + dataset.addColumn("ID"); + dataset.addColumn("PROTHEUS"); + dataset.addColumn("LOGIN_LOJA"); + dataset.addColumn("COLLEAGUE_ID"); + dataset.addColumn("USER_CREATE"); - - ds.addRow(new Array("010101","4494", "ESCRITÓRIO MATRIZ","57035-030","RUA DESPORTISTA HUMBERTO GUIMARAES","343","PONTA VERDE","MACEIÓ","AL","08.489.643/0001-52")); - ds.addRow(new Array("010102","3546", "LJ BIG BOMPREÇO GRUTA","57052-000","AVENIDA FERNANDES LIMA","3700","GRUTA DE LOURDES","MACEIÓ","AL","08.489.643/0003-14")); - ds.addRow(new Array("010103","4560", "LJ MACEIÓ SHOPPING TERREO","57031-532","AVENIDA GUSTAVO PAIVA","2900","MANGABEIRAS","MACEIÓ","AL","08.489.643/0004-03")); - ds.addRow(new Array("010104","5699", "LJ MOREIRA LIMA","57020-000","RUA MOREIRA LIMA","93","CENTRO","MACEIÓ","AL","08.489.643/0005-86")); - ds.addRow(new Array("010106","12522", "LJ MACEIÓ SHOPPING EXPANSÃO","57031-530","AVENIDA GUSTAVO PAIVA","2990","MANGABEIRAS","MACEIÓ","AL","08.489.643/0016-39")); - ds.addRow(new Array("010107","12828", "LJ GBARBOSA S.MARIS","57036-550","AV ENG. PAULO BRANDÃO NOGUEIRA","S/N","JATIÚCA","MACEIÓ","AL","08.489.643/0017-10")); - ds.addRow(new Array("010108","12838", "LJ RIO LARGO","57100-000","AV PRES GETULIO VARGAS","148","CENTRO","RIO LARGO","AL","08.489.643/0018-09")); - ds.addRow(new Array("010109","21647", "QUIOSQUE CARAJÁS MANGABEIRAS","57037-901","AV COMENDADOR GUSTAVO PAIVA","S/N","MANGABEIRAS","MACEIÓ","AL","08.489.643/0019-81")); - ds.addRow(new Array("010110","12817", "LJ SHOPPING PÁTIO","57073-470","AV MENINO MARCELO","3800","CIDADE UNIVERSITÁRIA","MACEIÓ","AL","08.489.643/0020-15")); - ds.addRow(new Array("010111","12824", "QUIOSQUE GBARBOSA TABULEIRO","57061-110","AVENIDA MACEIÓ","S/N","TABULEIRO","MACEIÓ","AL","08.489.643/0021-04")); - ds.addRow(new Array("010112","12823", "LJ PONTA VERDE","57035-330","RUA DEPUTADO JOSÉ LAGES","431","PONTA VERDE","MACEIÓ","AL","08.489.643/0022-87")); - ds.addRow(new Array("010113","20858", "QUIOSQUE SUPER GIRO","57010-003","AVENIDA SIQUEIRA CAMPOS","1368","PRADO","MACEIÓ","AL","08.489.643/0023-68")); - ds.addRow(new Array("010114","12820", "LJ ATACADÃO TABULEIRO","57082-160","AV DOUTOR DURVAL DE GOIS MONTEIRO","12650","TABULEIRO","MACEIÓ","AL","08.489.643/0024-49")); - ds.addRow(new Array("010115","12830", "LJ LIVRAMENTO","57020-030","RUA DO LIVRAMENTO","24","CENTRO","MACEIÓ","AL","08.489.643/0025-20")); - ds.addRow(new Array("010117","19103", "LJ UNICOMPRA PONTA VERDE","57035-060","RUA DURVAL GUIMARÃES","S/N","PONTA VERDE","MACEIÓ","AL","08.489.643/0027-91")); - ds.addRow(new Array("010118","12826", "LJ ASSAÍ MANGABEIRAS","57037-532","AV COMENDADOR GUSTAVO PAIVA","3261","MANGABEIRAS","MACEIÓ","AL","08.489.643/0028-72")); - ds.addRow(new Array("010119","12829", "LJ JACINTINHO","57041-000","RUA CLETO CAMPELO","2394","JACINTINHO","MACEIÓ","AL","08.489.643/0029-53")); - ds.addRow(new Array("010120","12818", "LJ GBARBOSA SERRARIA","57046-000","AVENIDA MENINO MARCELO","9730","SERRARIA","MACEIÓ","AL","08.489.643/0030-97")); - ds.addRow(new Array("010121","13427", "LJ SHOPPING CIDADE","57055-000","AVENIDA FERNANDES LIMA","679","FAROL","MACEIÓ","AL","08.489.643/0031-78")); - ds.addRow(new Array("010124","14617", "LJ PARQUE SHOPPING","57038-000","AVENIDA GUSTAVO PAIVA","5945","CRUZ DAS ALMAS",",MACEIÓ","AL","08.489.643/0034-10")); - ds.addRow(new Array("010126","14668", "LJ MIX MATHEUS ANTARES","57038-410","AVENIDA MENINO MARCELO","5300","ANTARES","MACEIÓ","AL","08.489.643/0036-82")); - ds.addRow(new Array("010128","20006", "LJ SÃO SEBASTIÃO","43850-000","PRAÇA DOZE DE OUTUBRO","65","CENTRO","SÃO SEBASTIÃO DO PASSÉ","BA","08.489.643/0038-44")); - ds.addRow(new Array("010130","20009", "LJ CANDEIAS BAIXO","43815-050","AVENIDA ANTONIO PATTERSON","196","TRIÂNGULO","CANDEIAS","BA","08.489.643/0040-69")); - ds.addRow(new Array("010131","20005", "LJ CANDEIAS CIMA","43805-000","RUA 13 DE MAIO","147","CENTRO","CANDEIAS","BA","08.489.643/0041-40")); - ds.addRow(new Array("010132","20056", "LJ SIMÕES FILHO","43700-000","AV LUÍS EDUARDO MAGALHÃES","109","CENTRO","SIMÕES FILHO","BA","08.489.643/0042-20")); - ds.addRow(new Array("010133","20057", "LJ CONCEIÇÃO COITÉ","48730-000","RUA DR AMÂNCIO MOTA","30","CENTRO","CONCEIÃO DO COITÉ","BA","08.489.643/0043-01")); - ds.addRow(new Array("010134","20441", "LJ LAGARTO","49400-000","AVENIDA LEANDRO MACIEL","36","CENTRO","LAGARTO","SE","08.489.643/0044-92")); - ds.addRow(new Array("010135","20968", "HIB ITABAIANINHA","49290-000","PRAÇA OLÍMPIO CAMPOS","154","CENTRO","ITABAIANINHA","SE","08.489.643/0059-79")); - ds.addRow(new Array("010136","20969", "HIB MARECHAL DEODORO","57160-000","RUA DR TAVARES BASTOS","03","CENTRO","MARECHAL DEODORO","AL","08.489.643/0054-64")); - ds.addRow(new Array("010137","20970", "VD SÃO SEBASTIÃO","43850-000","PRAÇA DOZE DE OUTUBRO","116","CENTRO","SÃO SEBASTIÃO DO PASSÉ","BA","08.489.643/0050-30")); - ds.addRow(new Array("010138","20986", "HIB OLINDINA","48470-000","AVENIDA ANTONIO MANGABEIRA","84","CENTRO","OLINDINA","BA","08.489.643/0055-45")); - ds.addRow(new Array("010139","20988", "HIB QUEIMADAS","48860-000","PRAÇA CORONEL FRANCISCO LANTYER","21","CENTRO","QUEIMADAS","BA","08.489.643/0051-11")); - ds.addRow(new Array("010140","20989", "HIB ENTRE RIOS","48180-000","AVENIDA JURACY MAGALHÃES","320","CENTRO","ENTRE RIOS","BA","08.489.643/0056-26")); - ds.addRow(new Array("010141","20991", "HIB CAMPO ALEGRE","57250-000","RUA DO COMÉRCIO","49","CENTRO","CAMPO ALEGRE","AL","08.489.643/0061-93")); - ds.addRow(new Array("010142","20992", "ER CONCEIÇÃO COITÉ","48730-000","RUA DR AMANCIO MOTA","35","CENTRO","CONCEIÇÃO DO COITÉ","BA","08.489.643/0045-73")); - ds.addRow(new Array("010143","20993", "ER CANDEIAS","43815-010","AV ANTONIO PATTERSON","213","TRIANGULO","CANDEIAS","BA","08.489.643/0046-54")); - ds.addRow(new Array("010144","20994", "ER SIMÕES FILHO","43700-000","AV LUÍS EDUARDO MAGALHÃES","109","CENTRO","SIMÕES FILHO","BA","08.489.643/0047-35")); - ds.addRow(new Array("010145","20995", "ER LAGARTO","49400-000","AVENIDA LEANDRO MACIEL","36","CENTRO","LAGARTO","SE","08.489.643/0060-02")); - ds.addRow(new Array("010146","20996", "ER ANTARES","57083-048","AV ANTONIO LISBOA DE AMORIM","220","ANTARES","MACEIÓ","AL","08.489.643/0057-07")); - ds.addRow(new Array("010147","20997", "ER PITANGUINHA","57052-050","AVENIDA FERNANDES LIMA","840","PITANGUINHA","MACEIÓ","AL","08.489.643/0058-98")); - ds.addRow(new Array("010148","20998", "CD TABULEIRO","57073-482","ESTRADA DA CODEAL","770","TABULEIRO","MACEIÓ","AL","08.489.643/0062-74")); - ds.addRow(new Array("010149","20999", "HIB ESPLANADA","48370-000","PRAÇA LADISLAU CAVALCANTE","31","CENTRO","ESPLANADA","BA","08.489.643/0053-83")); - ds.addRow(new Array("010150","21000", "HIB SANTALUZ","48880-000","RUA RIO BRANCO","96","CENTRO","SANTALUZ","BA","08.489.643/0052-00")); - ds.addRow(new Array("010151","21001", "HIB RIO REAL","48330-000","PC SEN ANTONIO CARLOS MAGALHÃES","146","CENTRO","RIO REAL","BA","08.489.643/0049-05")); - ds.addRow(new Array("010152","21007", "TÔ QUE TÔ MACEIÓ CENTRO","57020-220","AVENIDA MOREIRA LIMA","293","CENTRO","MACEIÓ","AL","08.489.643/0048-16")); - ds.addRow(new Array("010153","21068", "LJ ATAKAREJO SIMÕES FILHO","43700-000","AV ENG ELMO SEREJO DE FARIAS","2073","CONJ HAB VIDA NOVA","SIMÕES FILHO","BA","08.489.643/0063-55")); - ds.addRow(new Array("010154","21277", "LJ GBARBOSA SOCORRO","49160-000","AVENIDA 1","13","CONJ JOAO ALVES FILHO","NOSSA SENHORA DO SOCORRO","SE","08.489.643/0065-17")); - ds.addRow(new Array("010155","21278", "ER SOCORRO","49140-000","AVENIDA COLETORA A","597","CONJ MARCOS FREIRE I","NOSSA SENHORA DO SOCORRO","SE","08.489.643/0066-06")); - ds.addRow(new Array("010156","21495", "HIB BARRA DOS COQUEIROS","49140-000","AVENIDA OCEANICA","506","ANTONIO PEDRO","BARRA DOS COQUEIROS","SE","08.489.643/0067-89")); - ds.addRow(new Array("010157","21296", "LJ SHOPPING PRÊMIO SOCORRO","49160-000","AVENIDA COLETORA A","S/N","CONJ MARCOS FREIRE I","NOSSA SENHORA DO SOCRRO","SE","08.489.643/0064-36")); - ds.addRow(new Array("010159","21381", "LJ CAPIM GROSSO","44695-000","AV ACM","121","CENTRO","CAPIM-GROSSO","BA","08.489.643/0069-40")); - ds.addRow(new Array("010160","21383", "ER CAPIM GROSSO","44695-000","AV ACM","121","CENTRO","CAPIM-GROSSO","BA","08.489.643/0070-84")); - ds.addRow(new Array("010161","21375", "HIB IPIRÁ","44600-000","AVENIDA CESÁR CABRAL","15","CENTRO","IPIRÁ","BA","08.489.643/0071-65")); - ds.addRow(new Array("010162","21624", "MIX MATEUS TRAPICHE","57010-000","AVENIDA SIQUEIRA CAMPOS","1295","PRADO","MACEIÓ","AL","08.489.643/0072-46")); - ds.addRow(new Array("010163","22448", "ER CAMPO ALEGRE","57250-000","RUA DO COMÉRCIO","49","CENTRO","CAMPO ALEGRE","AL","08.489.643/0073-27")); - ds.addRow(new Array("010164","23475", "MIX MATEUS TABULEIRO","57082-160","AV DOUTOR DURVAL DE GOIS MONTEIRO","9207","TABULEIRO","MACEIÓ","AL","08.489.643/0074-08")); - ds.addRow(new Array("010165","22541", "ER RIO LARGO","57100-000","RUA JUDITH PAIVA","445","CENTRO","RIO LARGO","AL","08.489.643/0075-99")); - ds.addRow(new Array("010166","AMG", "AMG SERRARIA","57046-000","AVENIDA MENINO MARCELO","S/N","SERRARIA","MACEIÓ","AL","08.489.643/0076-70")); - ds.addRow(new Array("010167","23156", "SHOPPING CENTRO SUL","49400-000","AV CONTORNO BR","3795","SÃO JOSE","LAGARTO","SE","08.489.643/0077-50")); - ds.addRow(new Array("030101","910173", "QDB PARQUE SHOPPING","57038-000","AVENIDA COMENDADOR GUSTAVO PAIVA","5945","CRUZ DAS ALMAS","MACEIÓ","AL","20.318.877/0001-32")); - ds.addRow(new Array("030102","910291", "QDB MACEIO SHOPPING","57037-532","AVENIDA COMENDADOR GUSTAVO PAIVA","2900","MANGABEIRAS","MACEIÓ","AL","20.318.877/0002-13")); - ds.addRow(new Array("070101","23713", "MATRIZ - ZEFERINO CORREIA","45000-520","RUA ZEFERINO CORREIA","17","CENTRO","VITORIA DA CONQUISTA","BA","14.378.160/0001-83")); - ds.addRow(new Array("070102","23711", "HIB LIMA GUERRA","45000-390","AL. LIMA GUERRA","04","CENTRO","VITORIA DA CONQUISTA","BA","14.378.160/0005-07")); - ds.addRow(new Array("070103","23712", "HIB CANDIDO SALES","24157-000","AL. RIO BRANCO","373","CENTRO","CÂNDIDO SALES","BA","14.378.160/0006-98")); - ds.addRow(new Array("070104","23705", "LOJA SHOPPING CONQUISTA SUL","45055-900","AVENIDA JURACY MAGALHAES","3340","FELICIA","VITORIA DA CONQUISTA","BA","14.378.160/0013-17")); - ds.addRow(new Array("070105","23703", " VD BARRA CHOCA","45120-000","AV GETULIO VARGAS","98","CENTRO","CHOCA","BA","14.378.160/0016-60")); - ds.addRow(new Array("070106","23707", "LOJA BRASIL","45051-070","AV ITABUNA","2724","BRASIL","VITORIA DA CONQUISTA","BA","14.378.160/0011-55")); - ds.addRow(new Array("070107","23706", "LOJA ASSAI FELICIA","45055-686","AV ANEL DE CONTORNO","S/N","FELICIA","VITORIA DA CONQUISTA","BA","14.378.160/0012-36")); - ds.addRow(new Array("070108","23709", "LOJA SHOPPING CONQUISTA","45055-900","AV JURACY MAGALHAES","3340","FELICIA","VITORIA DA CONQUISTA","BA","14.378.160/0009-30")); - ds.addRow(new Array("070109","23704", "VD CONDEUBA","46200-000","PC NOSSA SENHORA APARECIDA","08","CENTRO","CONDEÚBA","BA","14.378.160/0015-89")); - ds.addRow(new Array("070110","23703", "LOJA BARRA CHOCA","45120-000","AV GETULIO VARGAS","98","CENTRO","CHOCA","BA","14.378.160/0016-60")); - ds.addRow(new Array("070111","23702", "LOJA PANVICON CENTER","45000-230","AVENIDA LAURO DE FREITAS","142","CENTRO","VITORIA DA CONQUISTA","BA","14.378.160/0017-40")); - ds.addRow(new Array("070112","23701", "LOJA NOVE DE NOVEMBRO","45000-370","PC NOVE DE NOVEMBRO","10","CENTRO","VITORIA DA CONQUISTA","BA","14.378.160/0018-21")); - ds.addRow(new Array("070113","23665", "LOJA UNIVERSIDADE","45031-000","AV OLIVIA FLORES","2500","UNIVERSIDADE","VITORIA DA CONQUISTA","BA","14.378.160/0021-27")); - ds.addRow(new Array("010172","24253", "LOJA IRECÊ CENTRO","44860-051","RUA AUGUSTO NUNES PEREIRA","162","CENTRO","IRECÊ","BA","08.489.643/0095-32")); - ds.addRow(new Array("010171","24254", "LOJA JOÃO DOURADO","44920-000","AVENIDA JOAQUIM AUGUSTO","212D","CENTRO","JOÃO DOURADO","BA","08.489.643/0089-94")); - ds.addRow(new Array("010173","24254", "ER IRECE","44860-169","AVENIDA EDVALDO SANTOS LOPES","438","CENTRO","IRECE","BA","08.489.643/0094-51")); - ds.addRow(new Array("010169","24257", "HIB MIGUEL CALMON","44720-000","PRAÇA LAURO DE FREITAS","180","CENTRO","MIGUEL CALMON","BA","08.489.643/0088-03")); - ds.addRow(new Array("010170","24258", "LOJA ATACADAO IRECE","44868-520","AVENIDA ATACADAO NOVO IRECE","01","NOVO IRECÊ","IRECÊ","BA","08.489.643/0093-70")); - ds.addRow(new Array("010175","24268", "LOJA JACOBINA","44702-342","RUA CORONEL TEIXEIRA","44","CENTRO","JACOBINA","BA","08.489.643/0097-02")); - ds.addRow(new Array("010176","24269", "ER JACOBINA","44702-358","AVENIDA MANOEL NOVAES","178","CENTRO","JACOBINA","BA","08.489.643/0096-13")); - ds.addRow(new Array("010174","24293", "HIB MORRO DO CHAPEU","44850-970","RUA PROJETADA 01","203","CENTRO","MORRO DO CHAPEU","BA","08.489.643/0099-66")); - ds.addRow(new Array("010168","23813", "HIB VALENTE","48890-000","RUA CASTRO ALVES","174","CENTRO","VALENTE","BA","08.489.643/0078-31")); - ds.addRow(new Array("010177","23711", "ER CONQUISTA","45000-390","ALAMEDA LIMA GUERRA","174","CENTRO","VITORIA DA CONQUISTA","BA","08.489.643/0100-34")); + try { + var clientService = fluigAPI.getAuthorizeClientService(); + var data = { + companyId: String(getValue("WKCompany") || "1"), + serviceCode: "GINSENG API", // ajuste para o codigo do servico cadastrado no Fluig + endpoint: "/base_pdvs", + method: "get", + timeoutService: "60000", + params: {} + }; + var vo = clientService.invoke(JSON.stringify(data)); + var statusHttp = vo ? String(vo.getHttpStatusResult() || "") : ""; + var retorno = vo ? String(vo.getResult() || "") : ""; + if (!retorno) { + dataset.addRow(["", "Sem resposta da API (HTTP " + statusHttp + ")", "", "", "", "", "", "", "", "", "", "", ""]); + return dataset; + } + var objData = JSON.parse(retorno); + var success = !!objData.success; + var itens = objData.data || []; - - return ds; + if (!success || !itens.length) { + var msg = trim(objData.message) || trim(objData.error) || "Sem lojas retornadas"; + dataset.addRow(["", msg + " (HTTP " + statusHttp + ")", "", "", "", "", "", "", "", "", "", "", ""]); + return dataset; + } + var filtros = parseConstraints(constraints); + var colleagueCache = {}; + + for (var i = 0; i < itens.length; i++) { + var item = itens[i] || {}; + + var pdv = trim(item["PDV"]); + var loja = trim(item["PDV DESC"]); + var responsavel = trim(item["GESTAO"]) || trim(item["GESTAO"]); + var regional = trim(item["SUPERVISOR"]) || trim(item["SUPERVISOR"]); + var uf = trim(item["UF"]); + var cidade = trim(item["CIDADE"]); + var status = trim(item["STATUS"]); + var canal = trim(item["CANAL"]); + var id = trim(item["id"]); + var protheus = trim(item["PROTHEUS"] || item["protheus"] || item["Protheus"]); + var loginLoja = pdv ? (pdv + ".ginseng") : ""; + var colleagueId = resolveColleagueIdByLogin(loginLoja); + var userCreate = getUserCreateStatus(loginLoja, colleagueCache); + + if (filtros.onlyAtivo && status.toUpperCase() !== "ATIVO") { + continue; + } + if (filtros.pdv && pdv !== filtros.pdv) { + continue; + } + if (filtros.loja && normalize(loja).indexOf(normalize(filtros.loja)) === -1) { + continue; + } + if (filtros.termoLivre) { + var blob = normalize([ + pdv, + loja, + responsavel, + regional, + uf, + cidade + ].join(" ")); + if (blob.indexOf(normalize(filtros.termoLivre)) === -1) { + continue; + } + } + + dataset.addRow([ + pdv, + loja, + responsavel, + regional, + uf, + cidade, + status, + canal, + id, + protheus, + loginLoja, + colleagueId, + userCreate + ]); + } + + if (dataset.rowsCount === 0) { + dataset.addRow(["", "Sem lojas apos filtros (HTTP " + statusHttp + ")", "", "", "", "", "", "", "", "", "", "", ""]); + } + + } catch (e) { + dataset = DatasetBuilder.newDataset(); + dataset.addColumn("ERRO"); + dataset.addRow([String(e)]); + } + + return dataset; } -function onMobileSync(user) { -} \ No newline at end of file +function parseConstraints(constraints) { + var out = { + pdv: "", + loja: "", + onlyAtivo: false, + termoLivre: "" + }; + + if (!constraints) return out; + + for (var i = 0; i < constraints.length; i++) { + var c = constraints[i]; + if (!c || !c.fieldName) continue; + + var name = String(c.fieldName); + var value = trim(c.initialValue); + + if (name === "PDV" && value) out.pdv = value; + if (name === "LOJA" && value) out.loja = value; + if (name === "onlyAtivo" && value.toLowerCase() === "false") out.onlyAtivo = false; + + // Zoom costuma enviar constraints variadas de busca; capturamos termo livre. + if ( + value && + name !== "onlyAtivo" && + name !== "metadata#id" && + name !== "metadata#active" && + name !== "sqlLimit" + ) { + var cleaned = cleanSearchValue(value); + if (cleaned && (!out.termoLivre || cleaned.length > out.termoLivre.length)) { + out.termoLivre = cleaned; + } + } + } + + return out; +} + +function trim(v) { + return String(v == null ? "" : v).trim(); +} + +function normalize(v) { + return trim(v).toLowerCase(); +} + +function cleanSearchValue(v) { + var s = trim(v); + // remove curingas comuns de busca do Zoom/like + s = s.replace(/[%*_]/g, ""); + return trim(s); +} + +function getUserCreateStatus(loginLoja, cache) { + var login = trim(loginLoja); + if (!login) return "NAO"; + if (cache.hasOwnProperty(login)) return cache[login]; + try { + var cLogin = DatasetFactory.createConstraint("login", login, login, ConstraintType.MUST); + var cActive = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST); + var ds = DatasetFactory.getDataset("colleague", null, [cLogin, cActive], null); + var exists = !!(ds && ds.rowsCount > 0); + + // fallback para ambientes onde o identificador esta em colleagueId + if (!exists) { + var cId = DatasetFactory.createConstraint("colleaguePK.colleagueId", login, login, ConstraintType.MUST); + ds = DatasetFactory.getDataset("colleague", null, [cId, cActive], null); + exists = !!(ds && ds.rowsCount > 0); + } + + cache[login] = exists ? "OK" : "NAO"; + return cache[login]; + } catch (e) { + cache[login] = "NAO"; + return "NAO"; + } +} + +function resolveColleagueIdByLogin(loginLoja) { + var login = trim(loginLoja); + if (!login) return ""; + try { + var cLogin = DatasetFactory.createConstraint("login", login, login, ConstraintType.MUST); + var cActive = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST); + var ds = DatasetFactory.getDataset("colleague", null, [cLogin, cActive], null); + if (ds && ds.rowsCount > 0) { + return trim(ds.getValue(0, "colleaguePK.colleagueId")); + } + } catch (e) {} + return ""; +} diff --git a/compras_digital/datasets/dsProd.js b/compras_digital/datasets/dsProd.js index b65024b..0f87fb7 100644 --- a/compras_digital/datasets/dsProd.js +++ b/compras_digital/datasets/dsProd.js @@ -20,7 +20,7 @@ function createDataset(fields, constraints, sortFields) { var data = { companyId: "1", serviceCode: "Postprod", - endpoint: "/rest/uf_mata010/", + endpoint: "/uf_mata010/", method: "get", timeoutService: "60000", params: {} diff --git a/compras_digital/datasets/dsSolicCompraProtheus.js b/compras_digital/datasets/dsSolicCompraProtheus.js index d1fa923..8aa1b80 100644 --- a/compras_digital/datasets/dsSolicCompraProtheus.js +++ b/compras_digital/datasets/dsSolicCompraProtheus.js @@ -18,7 +18,7 @@ function createDataset(fields, constraints, sortFields) { } log.info("Dados recebidos: " + jsonData); - var url = "https://rest.grupoginseng.com.br/rest_teste/uf_mata010"; + var url = "https://rest.grupoginseng.com.br/rest/uf_mata010"; var urlObj = new java.net.URL(url); var httpConn = urlObj.openConnection(); diff --git a/compras_digital/datasets/dsSysCompan.js b/compras_digital/datasets/dsSysCompan.js deleted file mode 100644 index b8c66c3..0000000 --- a/compras_digital/datasets/dsSysCompan.js +++ /dev/null @@ -1,84 +0,0 @@ -function onSync(lastSyncDate) {} - -function createDataset(fields, constraints, sortFields) { - var dataset = DatasetBuilder.newDataset(); - - // Define as colunas do dataset - dataset.addColumn("CODIGO"); - dataset.addColumn("DESCRICAO"); - dataset.addColumn("CNPJ"); - dataset.addColumn("ENDERECO"); - dataset.addColumn("COMPLEMENTO"); - dataset.addColumn("BAIRRO"); - dataset.addColumn("CIDADE"); - dataset.addColumn("ESTADO"); - dataset.addColumn("CEP"); - dataset.addColumn("CODIGO_MUNICIPIO"); - dataset.addColumn("BPCS"); - dataset.addColumn("LOJA"); - - var dataSource = "/jdbc/Tabeladeloja"; // ajuste se necessário - var ic = new javax.naming.InitialContext(); - var ds = ic.lookup(dataSource); - var conn = ds.getConnection(); - var stmt = null; - var rs = null; - - try { - log.info("Iniciando execução do dataset..."); - - var sql = "" - + " SELECT " - + " M0_CODFIL, M0_FILIAL, M0_CGC, M0_ENDENT, M0_COMPENT, " - + " M0_BAIRENT, M0_CIDENT, M0_ESTENT, M0_CEPENT, M0_CODMUN, M0_TEL_PO " - + " FROM SYS_COMPANY " - + " WHERE (M0_CODFIL LIKE '0101%' OR M0_CODFIL LIKE '03%') " - + " AND D_E_L_E_T_ = ' '"; - - log.info("Query SQL: " + sql); - - stmt = conn.prepareStatement(sql); - rs = stmt.executeQuery(); - - var vistos = {}; - - while (rs.next()) { - var codigo = rs.getString("M0_CODFIL"); - var descricao = rs.getString("M0_FILIAL"); - var cnpj = rs.getString("M0_CGC"); - var endereco = rs.getString("M0_ENDENT"); - var complemento = rs.getString("M0_COMPENT"); - var bairro = rs.getString("M0_BAIRENT"); - var cidade = rs.getString("M0_CIDENT"); - var estado = rs.getString("M0_ESTENT"); - var cep = rs.getString("M0_CEPENT"); - var ibge = rs.getString("M0_CODMUN"); - var bpcs = rs.getString("M0_TEL_PO"); - - var loja = (bpcs ? bpcs.trim() : "") + "-" + (descricao ? descricao.trim() : ""); - - if (!vistos[codigo]) { - vistos[codigo] = true; - dataset.addRow([ - codigo, descricao, cnpj, endereco, complemento, bairro, - cidade, estado, cep, ibge, bpcs, loja - ]); - } - } - - if (Object.keys(vistos).length === 0) { - log.info("Nenhum registro encontrado para a consulta."); - } - - } catch (e) { - log.error("Erro ao executar dataset: " + e.message); - } finally { - try { if (rs) rs.close(); } catch (e) { log.error(e.message); } - try { if (stmt) stmt.close(); } catch (e) { log.error(e.message); } - try { if (conn) conn.close(); } catch (e) { log.error(e.message); } - } - - return dataset; -} - -function onMobileSync(user) {} diff --git a/compras_digital/datasets/dsSysCompany.js b/compras_digital/datasets/dsSysCompany.js deleted file mode 100644 index 0aaf2cf..0000000 --- a/compras_digital/datasets/dsSysCompany.js +++ /dev/null @@ -1,98 +0,0 @@ -function defineStructure() { - dataset.addColumn("CODIGO"); - dataset.addColumn("DESCRICAO"); - dataset.addColumn("CNPJ"); - dataset.addColumn("ENDERECO"); - dataset.addColumn("COMPLEMENTO"); - dataset.addColumn("BAIRRO"); - dataset.addColumn("CIDADE"); - dataset.addColumn("ESTADO"); - dataset.addColumn("CEP"); - dataset.addColumn("CODIGO_MUNICIPIO"); - dataset.addColumn("BPCS"); - dataset.addColumn("LOJA"); -} - -function onSync(lastSyncDate) {} - -function createDataset(fields, constraints, sortFields) { - var dataset = DatasetBuilder.newDataset(); - var dataSource = "/jdbc/Tabeladeloja"; - var ic = new javax.naming.InitialContext(); - var ds = ic.lookup(dataSource); - var conn = ds.getConnection(); - var stmt = null; - var rs = null; - - try { - log.info("Iniciando execução do dataset..."); - - var sql = "" - + " SELECT " - + " M0_CODFIL, M0_FILIAL, M0_CGC, M0_ENDENT, M0_COMPENT, " - + " M0_BAIRENT, M0_CIDENT, M0_ESTENT, M0_CEPENT, M0_CODMUN, M0_TEL_PO " - + " FROM SYS_COMPANY " - + " WHERE (M0_CODFIL LIKE '0101%' OR M0_CODFIL LIKE '03%') " - + " AND D_E_L_E_T_ = ' '"; - - log.info("Query SQL: " + sql); - - stmt = conn.prepareStatement(sql); - rs = stmt.executeQuery(); - - // As colunas aqui devem ter exatamente os MESMOS nomes do defineStructure: - dataset.addColumn("CODIGO"); - dataset.addColumn("DESCRICAO"); - dataset.addColumn("CNPJ"); - dataset.addColumn("ENDERECO"); - dataset.addColumn("COMPLEMENTO"); - dataset.addColumn("BAIRRO"); - dataset.addColumn("CIDADE"); - dataset.addColumn("ESTADO"); - dataset.addColumn("CEP"); - dataset.addColumn("CODIGO_MUNICIPIO"); - dataset.addColumn("BPCS"); - dataset.addColumn("LOJA"); - - var vistos = {}; - - while (rs.next()) { - var codigo = rs.getString("M0_CODFIL"); - var descricao = rs.getString("M0_FILIAL"); - var cnpj = rs.getString("M0_CGC"); - var endereco = rs.getString("M0_ENDENT"); - var complemento = rs.getString("M0_COMPENT"); - var bairro = rs.getString("M0_BAIRENT"); - var cidade = rs.getString("M0_CIDENT"); - var estado = rs.getString("M0_ESTENT"); - var cep = rs.getString("M0_CEPENT"); - var ibge = rs.getString("M0_CODMUN"); - var bpcs = rs.getString("M0_TEL_PO"); - - var loja = (bpcs ? bpcs.trim() : "") + "-" + (descricao ? descricao.trim() : ""); - - if (!vistos[codigo]) { - vistos[codigo] = true; - dataset.addRow([ - codigo, descricao, cnpj, endereco, complemento, bairro, - cidade, estado, cep, ibge, bpcs, loja - ]); - } - } - - if (Object.keys(vistos).length === 0) { - log.info("Nenhum registro encontrado para a consulta."); - } - - } catch (e) { - log.error("Erro ao executar dataset: " + e.message); - } finally { - try { if (rs) rs.close(); } catch (e) { log.error(e.message); } - try { if (stmt) stmt.close(); } catch (e) { log.error(e.message); } - try { if (conn) conn.close(); } catch (e) { log.error(e.message); } - } - - return dataset; -} - -function onMobileSync(user) {} diff --git a/compras_digital/datasets/ds_consultaSC.js b/compras_digital/datasets/ds_consultaSC.js index ce4c39d..c89b69c 100644 --- a/compras_digital/datasets/ds_consultaSC.js +++ b/compras_digital/datasets/ds_consultaSC.js @@ -1,7 +1,6 @@ function createDataset(fields, constraints, sortFields) { var dataset = DatasetBuilder.newDataset(); - // Definir colunas que queremos no retorno dataset.addColumn("C1_FILIAL"); dataset.addColumn("C1_NUM"); dataset.addColumn("C1_ITEM"); @@ -15,6 +14,7 @@ function createDataset(fields, constraints, sortFields) { dataset.addColumn("C1_CONTA"); dataset.addColumn("C1_SOLICIT"); dataset.addColumn("C1_EMISSAO"); + dataset.addColumn("C1_APROV"); dataset.addColumn("C1_COTACAO"); dataset.addColumn("C1_PEDIDO"); dataset.addColumn("C1_ITEMPED"); @@ -23,8 +23,11 @@ function createDataset(fields, constraints, sortFields) { dataset.addColumn("hora_consulta"); dataset.addColumn("sucesso"); + function emptyRow() { + return ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "false"]; + } + try { - // 🔎 Captura o número da SC passado como constraint var numeroSC = null; if (constraints != null) { for (var i = 0; i < constraints.length; i++) { @@ -35,17 +38,16 @@ function createDataset(fields, constraints, sortFields) { } if (!numeroSC) { - dataset.addRow(["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Erro: número SC não informado"]); + dataset.addRow(emptyRow()); return dataset; } - // ⚙️ Monta requisição para o Protheus var data = { companyId: "1", - serviceCode: "Postprod", // ajuste conforme seu serviço cadastrado - endpoint: "/rest/uf_mata110/" + numeroSC, + serviceCode: "Postprod", + endpoint: "/UF_MATA110/" + numeroSC, method: "get", - timeoutService: "10000", + timeoutService: "60000", headers: { "Content-Type": "application/json" } @@ -58,9 +60,7 @@ function createDataset(fields, constraints, sortFields) { var result = JSON.parse(response.getResult()); if (result.sucesso && result.solicitacoes && result.solicitacoes.length > 0) { - var sc = result.solicitacoes[0]; // pega a primeira solicitação retornada - - // ⚠️ Trata a cotação: ignora valores default + var sc = result.solicitacoes[0]; var cotacao = sc.C1_COTACAO || ""; if (cotacao == "000000" || cotacao == "000001") { cotacao = ""; @@ -80,6 +80,7 @@ function createDataset(fields, constraints, sortFields) { sc.C1_CONTA || "", sc.C1_SOLICIT || "", sc.C1_EMISSAO || "", + sc.C1_APROV || "", cotacao, sc.C1_PEDIDO || "", sc.C1_ITEMPED || "", @@ -89,13 +90,13 @@ function createDataset(fields, constraints, sortFields) { "true" ]); } else { - dataset.addRow(["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "false"]); + dataset.addRow(emptyRow()); } } else { - dataset.addRow(["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "false"]); + dataset.addRow(emptyRow()); } } catch (e) { - dataset.addRow(["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Erro: " + e.message]); + dataset.addRow(emptyRow()); } return dataset; diff --git a/compras_digital/forms/Compras_digital/Compras_digital.html b/compras_digital/forms/Compras_digital/Compras_digital.html index dc2710c..3e3d360 100644 --- a/compras_digital/forms/Compras_digital/Compras_digital.html +++ b/compras_digital/forms/Compras_digital/Compras_digital.html @@ -58,27 +58,281 @@ margin-bottom: 24px; } .change-weight { font-weight: 400 !important; } + + .sc-status-panel { + margin-top: 15px; + padding: 18px; + border: 1px solid #d8e1e8; + border-radius: 12px; + background: #f7fafc; + box-shadow: 0 2px 10px rgba(12, 50, 74, 0.08); + } + + .sc-primary-grid, + .sc-secondary-grid { + display: grid; + grid-template-columns: repeat(3, minmax(220px, 1fr)); + gap: 12px; + } + + .sc-primary-grid { + margin-bottom: 12px; + } + + .sc-secondary-grid { + gap: 8px 12px; + } + + .sc-info { + background: #fff; + border-radius: 10px; + padding: 12px 14px; + min-height: 72px; + } + + .sc-info--primary { + border-left: 4px solid #04506b; + box-shadow: inset 0 0 0 1px #d9e4ec; + } + + .sc-info--secondary { + box-shadow: inset 0 0 0 1px #e3ebf2; + opacity: .96; + } + + .sc-info--clickable { + cursor: pointer; + transition: box-shadow .2s ease, transform .2s ease; + } + + .sc-info--clickable:hover { + transform: translateY(-1px); + box-shadow: inset 0 0 0 1px #c8d9e7, 0 4px 12px rgba(8, 47, 72, 0.1); + } + + .sc-label { + font-size: 11px; + color: #4d6073; + letter-spacing: .04em; + text-transform: uppercase; + margin-bottom: 4px; + } + + .sc-value { + font-size: 15px; + font-weight: 600; + color: #24313f; + word-break: break-word; + } + + .sc-info--primary .sc-value { + font-size: 30px; + line-height: 1.1; + color: #102a43; + font-weight: 700; + letter-spacing: .01em; + } + + .sc-hint { + display: block; + margin-top: 6px; + font-size: 11px; + color: #5f7386; + letter-spacing: .02em; + } + + .sc-value.badge { + display: inline-flex; + align-items: center; + min-height: 30px; + padding: 6px 12px; + border-radius: 999px; + font-size: 12px; + font-weight: 700; + line-height: 1; + } + + .sc-timeline-wrap { + margin-top: 16px; + padding-top: 0; + border-top: 1px solid transparent; + transition: background-color .25s ease, max-height .25s ease, opacity .25s ease, padding-top .25s ease; + max-height: 0; + opacity: 0; + overflow: hidden; + pointer-events: none; + } + + .sc-timeline-wrap.is-open { + padding-top: 14px; + border-top-color: #d7e2eb; + max-height: 640px; + opacity: 1; + pointer-events: auto; + } + + .sc-timeline-wrap.is-focus { + background: #f2f9ff; + border-radius: 8px; + } + + .sc-timeline-title { + margin: 0 0 10px; + color: #12344d; + font-size: 14px; + font-weight: 700; + letter-spacing: .01em; + } + + .sc-timeline { + list-style: none; + margin: 0; + padding: 0 0 0 18px; + position: relative; + } + + .sc-timeline:before { + content: ""; + position: absolute; + left: 5px; + top: 2px; + bottom: 2px; + width: 2px; + background: #c8d8e6; + } + + .sc-timeline-item { + position: relative; + padding: 0 0 14px 16px; + } + + .sc-timeline-item:last-child { + padding-bottom: 0; + } + + .sc-timeline-item:before { + content: ""; + position: absolute; + left: -18px; + top: 4px; + width: 10px; + height: 10px; + border-radius: 50%; + background: #92a9bf; + box-shadow: 0 0 0 2px #92a9bf; + border: 2px solid #fff; + } + + .sc-timeline-item.done:before { + background: #1ab04a; + box-shadow: 0 0 0 2px #1ab04a; + } + + .sc-timeline-item.pending:before { + background: #e6a229; + box-shadow: 0 0 0 2px #e6a229; + } + + .sc-timeline-title-row { + display: flex; + align-items: baseline; + gap: 8px; + flex-wrap: wrap; + } + + .sc-timeline-event { + color: #18354f; + font-size: 14px; + font-weight: 700; + } + + .sc-timeline-time { + color: #6b7f92; + font-size: 12px; + font-weight: 500; + } + + .sc-timeline-detail { + margin-top: 3px; + color: #3e556b; + font-size: 13px; + } + + #tbCotacao { + table-layout: fixed; + width: 100%; + margin-bottom: 0; + } + + #tbCotacao thead th { + background: #eef3f8; + color: #3b4d5f; + font-weight: 700; + } + + #tbCotacao tbody tr:nth-child(odd) { + background: #f9fbfd; + } + + #tbCotacao tbody td, + #tbCotacao thead th, + #tbCotacao tfoot td { + vertical-align: middle; + } + + #tbCotacao th:nth-child(3), + #tbCotacao th:nth-child(4), + #tbCotacao th:nth-child(5), + #tbCotacao td:nth-child(3), + #tbCotacao td:nth-child(4), + #tbCotacao td:nth-child(5) { + text-align: right; + } + + #tbCotacao td:nth-child(3) input, + #tbCotacao td:nth-child(4) input, + #tbCotacao td:nth-child(5) input { + text-align: right; + } + + #tbCotacao tfoot .sc-total-label { + text-align: right; + font-weight: 700; + background: #edf3f8; + color: #324a60; + } + + #tbCotacao tfoot .sc-total-value { + background: #edf3f8; + color: #12344d; + font-size: 15px; + font-weight: 700; + text-align: right; + } + + @media (max-width: 992px) { + .sc-primary-grid, + .sc-secondary-grid { + grid-template-columns: repeat(2, minmax(180px, 1fr)); + } + } + + @media (max-width: 640px) { + .sc-primary-grid, + .sc-secondary-grid { + grid-template-columns: 1fr; + } + + .sc-info--primary .sc-value { + font-size: 24px; + } + }

Solicitação de compra

-
    -
  • Solicitação
  • -
  • Validando necessidade
  • -
  • Solicitando...
  • -
  • Dados Adicionais
  • -
  • Indicar Cotação
  • -
  • Confirmação Cotação
  • -
  • Aprovação Ccusto
  • -
  • Aprovação GERF
  • -
  • Aprovação CEO
  • -
  • Receber Produto
  • -
  • Problema
  • -
  • Fim
  • -
-
@@ -115,10 +369,6 @@

Dados da solicitação

-
Dados referentes aos responsáveis pela abertura e pela solicitação do atual processo.
@@ -154,11 +404,16 @@
- - + + @@ -364,37 +609,53 @@

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 - - - - + + + + + + - - + + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - + - - - + + + - - - + + + - - - + + + @@ -82,100 +83,100 @@ - + - - + + - - + + - + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - - + + + - - - + + + - + @@ -191,9 +192,9 @@ - - - + + + @@ -202,44 +203,44 @@ - + - - + + - - + + - + - - + + - - - + + + - + - + - - - + + + - - - + + + - + @@ -255,60 +256,60 @@ - - - + + + - - - + + + - - + + - - - + + + - + - + - + - - - + + + - - - + + + - - + + - - - + + + - + - + - - - + + + @@ -317,30 +318,30 @@ - + - - + + - - + + - + - - - + + + - - - + + + - + @@ -357,146 +358,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -516,26 +517,26 @@ - + - + - + - + - + - + @@ -548,10 +549,10 @@ - + - + @@ -565,146 +566,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -718,146 +719,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -871,146 +872,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1024,146 +1025,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1177,146 +1178,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1330,26 +1331,26 @@ - + - + - + - + - + - + @@ -1362,10 +1363,10 @@ - + - + @@ -1379,26 +1380,26 @@ - + - + - + - + - + - + @@ -1411,26 +1412,26 @@ - + - + - + - + - + - + @@ -1443,146 +1444,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1591,7 +1592,7 @@ - + @@ -1610,26 +1611,26 @@ - + - + - + - + - + - + @@ -1643,26 +1644,26 @@ - + - + - + - + - + - + @@ -1676,10 +1677,10 @@ - + - + @@ -1695,146 +1696,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1843,8 +1844,8 @@ - - + + @@ -1858,146 +1859,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2012,26 +2013,26 @@ - + - + - + - + - + - + @@ -2046,146 +2047,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2202,146 +2203,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2356,26 +2357,26 @@ - + - + - + - + - + - + @@ -2389,146 +2390,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2544,26 +2545,26 @@ - + - + - + - + - + - + @@ -2576,146 +2577,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2732,146 +2733,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2886,26 +2887,26 @@ - + - + - + - + - + - + @@ -2918,146 +2919,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3077,146 +3078,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3237,146 +3238,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3398,10 +3399,10 @@ - + - + @@ -3415,26 +3416,26 @@ - + - + - + - + - + - + @@ -3449,10 +3450,10 @@ - + - + @@ -3469,10 +3470,10 @@ - + - + @@ -3488,26 +3489,26 @@ - + - + - + - + - + - + @@ -3522,26 +3523,26 @@ - + - + - + - + - + - + @@ -3556,146 +3557,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3710,26 +3711,26 @@ - + - + - + - + - + - + @@ -3743,146 +3744,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3897,26 +3898,26 @@ - + - + - + - + - + - + @@ -3929,146 +3930,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4085,10 +4086,10 @@ - + - + @@ -4098,339 +4099,339 @@ - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - - + + + - - - - - - - + + + + + + + - - - + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/com.totvs.tds.ecm.dataservers b/com.totvs.tds.ecm.dataservers index 03da63f1ceca781326b50237e5717661b41ad697..aea4a00941c89b4aadb20ef6b071fe3a3335119b 100644 GIT binary patch delta 349 zcmZ3*zKBa`&07Z6avlZ6SLgb^TZA|OHtY=SW!WilXTQdpEtPGFWa#HUjQq*Dn+XGH}7 D%dS?r delta 201 zcmZ3)wTfM6&07Z6avlZfnAXm-;QeO;WBPj!MSwIA1K^=&aDPdp>b`1)14FaoYsKBOy2c(h Date: Wed, 15 Apr 2026 15:09:37 -0300 Subject: [PATCH 16/25] att --- .../events/validateForm.js | 5 ----- .../forms/totvsflow_solicitacao_transferencia/script.js | 10 ---------- 2 files changed, 15 deletions(-) diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js index fdcf849..d4901d0 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/events/validateForm.js @@ -37,11 +37,6 @@ function validateForm(form) { message += getMessage("Anexo da Nota Fiscal", 3, form); hasErros = true; } - var qtdDivergenciasNfe = parseInt(String(form.getValue("qtdDivergenciasNfe") || "0"), 10); - if (!isNaN(qtdDivergenciasNfe) && qtdDivergenciasNfe > 0) { - message += "Existem " + qtdDivergenciasNfe + " divergencia(s) entre a base aprovada e a NFe.
"; - hasErros = true; - } if (form.getValue("usuarioEmissorNfe") == "") { message += getMessage("Usuário emissor da NFe", 1, form); hasErros = true; diff --git a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js index 1adb2af..ab2b82c 100644 --- a/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js +++ b/Transferência Ginseng/forms/totvsflow_solicitacao_transferencia/script.js @@ -1599,16 +1599,6 @@ var beforeSendValidate = function (numState, nextState) { $("#chaveNfe").parent("div").addClass("errorValidate"); throw "Consulte a chave da NFe antes de enviar a etapa."; } - - var qtdDivergencias = parseInt($("#qtdDivergenciasNfe").val() || "0", 10); - if (!isNaN(qtdDivergencias) && qtdDivergencias > 0) { - var produtos = listarProdutosDivergentes(10); - var msg = "A nota tem produtos divergentes da base aprovada para emissão."; - if (produtos) { - msg += " Produtos: " + produtos + "."; - } - throw msg; - } } else if (numState == 31) { if ($("#motoristaColetaNome").val() == "") { throw "'Motorista responsável pela coleta' é obrigatório."; From f31f809ce7cabe052f9210413740e0cf6af6e48f Mon Sep 17 00:00:00 2001 From: "Andrey Cunh@" Date: Wed, 6 May 2026 16:00:50 -0300 Subject: [PATCH 17/25] att --- .../datasets/{dsRestPost.js => dsSolicCompraProtheus.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename compras_digital/datasets/{dsRestPost.js => dsSolicCompraProtheus.js} (100%) diff --git a/compras_digital/datasets/dsRestPost.js b/compras_digital/datasets/dsSolicCompraProtheus.js similarity index 100% rename from compras_digital/datasets/dsRestPost.js rename to compras_digital/datasets/dsSolicCompraProtheus.js From 4a314103516206eff3322b3d3c36da3b4efde864 Mon Sep 17 00:00:00 2001 From: "Andrey Cunh@" Date: Wed, 6 May 2026 16:01:10 -0300 Subject: [PATCH 18/25] att --- Ginseng_chamados/forms/.vscode/servers.json | 18 + .../totvsflow_abertura_chamado.html | 28 +- .../.vscode/.advpl/_binary_class.prw | 10213 ++++++++++++++++ .../.vscode/.advpl/_binary_functions.prw | 9808 +++++++++++++++ compras_digital/.vscode/launch.json | 18 + compras_digital/.vscode/servers.json | 18 + compras_digital/.vscode/settings.json | 4 + compras_digital/datasets/ProdutosTI.js | 61 - compras_digital/datasets/dsComprasProdutos.js | 345 + compras_digital/datasets/dsFiliais.js | 310 +- compras_digital/datasets/dsProd.js | 2 +- .../datasets/dsSolicCompraProtheus.js | 2 +- compras_digital/datasets/dsSysCompan.js | 84 - compras_digital/datasets/dsSysCompany.js | 98 - compras_digital/datasets/ds_consultaSC.js | 27 +- .../Compras_digital/Compras_digital.html | 398 +- .../forms/Compras_digital/compras_digital.js | 381 +- .../Compras_digital/events/displayFields.js | 312 +- .../Compras_digital/events/validateForm.js | 8 +- .../.resources/Ginseng Produção.ws.cache | 1086 +- .../.resources/Ginseng Produção.ws.cache.bkp | 594 +- .../Solicitação de compras V2.ecm30.xml | 274 +- .../.resources/Solicitação de compras V2.png | Bin 59524 -> 62926 bytes ...Solicitação de compras V2.processimage.svg | 2 +- .../Solicitação de compras V2.process | 4 +- ...Solicitação de compras V2.servicetask82.js | 29 +- 26 files changed, 22041 insertions(+), 2083 deletions(-) create mode 100644 Ginseng_chamados/forms/.vscode/servers.json create mode 100644 compras_digital/.vscode/.advpl/_binary_class.prw create mode 100644 compras_digital/.vscode/.advpl/_binary_functions.prw create mode 100644 compras_digital/.vscode/launch.json create mode 100644 compras_digital/.vscode/servers.json create mode 100644 compras_digital/.vscode/settings.json delete mode 100644 compras_digital/datasets/ProdutosTI.js create mode 100644 compras_digital/datasets/dsComprasProdutos.js delete mode 100644 compras_digital/datasets/dsSysCompan.js delete mode 100644 compras_digital/datasets/dsSysCompany.js diff --git a/Ginseng_chamados/forms/.vscode/servers.json b/Ginseng_chamados/forms/.vscode/servers.json new file mode 100644 index 0000000..ed13c40 --- /dev/null +++ b/Ginseng_chamados/forms/.vscode/servers.json @@ -0,0 +1,18 @@ +{ + "version": "1.0.0", + "configurations": [ + { + "id": "achirhwa847morhkc4qxjten2zltol", + "name": "Ginseng Produção", + "host": "comerciode188006.fluig.cloudtotvs.com.br", + "ssl": true, + "port": 443, + "username": "andrey.cunha", + "password": "eyJpdiI6IjRjYjRiMmM5MWJhZmVkNzU0OWQzOTljZWI3ZmQxMzViIiwic2FsdCI6IjRjYTAyMWMxY2YxNzdmZWRiYmYzNjk2MTczYWRiMzI2IiwidGV4dCI6ImNlN2JhYjU5NWNmZjk1NWVjZDJiN2EzNzQwMTA0NmFiIn0=", + "userCode": "andrey.cunha", + "confirmExporting": false, + "hasBrowser": false, + "companyId": 1 + } + ] +} \ No newline at end of file diff --git a/Ginseng_chamados/forms/15 - totvsflow_abertura_chamado/totvsflow_abertura_chamado.html b/Ginseng_chamados/forms/15 - totvsflow_abertura_chamado/totvsflow_abertura_chamado.html index 2385f05..8afd424 100644 --- a/Ginseng_chamados/forms/15 - totvsflow_abertura_chamado/totvsflow_abertura_chamado.html +++ b/Ginseng_chamados/forms/15 - totvsflow_abertura_chamado/totvsflow_abertura_chamado.html @@ -364,20 +364,20 @@ Estabelecimento/Filial * - +

-
-
-
-
-

Número: -

-
-
-

Status: -

-
-
-

Solicitante: -

-
-
-

Emissão: -

-
-
-

Qtd. Itens: -

-
-
-

Data da aprovação: - às -

-
-
-

Status: -

-
-
-

Cotação: -

-
-
-

Pedido: -

-
+
+
+
+
Número SC
+
-
+ Clique para ver a linha do tempo
+
+
Status Cadastro
+ - +
+
+
Andamento
+ - +
+
+ +
+
+
Solicitante
+
-
+
+
+
Emissão
+
-
+
+
+
Qtd. Itens
+
-
+
+
+
Data do Cadastro
+
- às -
+
+
+
Cotação
+
-
+
+
+
Pedido
+
-
+
+
+ +
+

Linha do tempo da SC

+
    @@ -430,6 +691,13 @@ + + + Total selecionado + R$ 0,00 + + +
    diff --git a/compras_digital/forms/Compras_digital/compras_digital.js b/compras_digital/forms/Compras_digital/compras_digital.js index b69663f..179993a 100644 --- a/compras_digital/forms/Compras_digital/compras_digital.js +++ b/compras_digital/forms/Compras_digital/compras_digital.js @@ -46,15 +46,21 @@ function recalcTotal() { function setSelectedZoomItem(selectedItem) { if (selectedItem.inputId === "estabelecimento") { - // joga o código da filial (cnpj, etc.) - $("#filialdest").val(selectedItem.CNPJ); // supondo que o dataset dsSysCompany devolva o campo CNPJ - $("#filialest").val(selectedItem.ESTADO); // supondo que o dataset dsSysCompany devolva o campo ESTADO - $("#filialprotheus").val(selectedItem.CODIGO); // supondo que o dataset dsSysCompany devolva o campo CODIGO - } - if (selectedItem.inputId === "centro_custo") { - // joga o código da filial (cnpj, etc.) - $("#gestor_cc").val(selectedItem.idGestor); // supondo que o dataset Centro_custo devolva o campo GestorCentroCusto - $("#codigocentroCusto").val(selectedItem.codigoCentroCusto); // supondo que o dataset Centro_custo devolva o campo GestorCentroCusto + // dsFiliais: guarda dados da filial e define gestor da próxima atividade + var codigoProtheus = String(selectedItem.PROTHEUS || selectedItem.protheus || "").trim(); + + $("#filialdest").val(selectedItem.LOJA || ""); + $("#filialest").val(selectedItem.UF || ""); + $("#filialprotheus").val(codigoProtheus); + $("#centro_custo").val(selectedItem.RESPONSAVEL_LOJA || selectedItem.LOJA || ""); + $("#codigocentroCusto").val(codigoProtheus); + + var gestorLoja = (selectedItem.COLLEAGUE_ID || selectedItem.LOGIN_LOJA || "").trim(); + $("#gestor_cc").val(gestorLoja); + + if (!codigoProtheus) { + console.warn("Filial selecionada sem campo PROTHEUS no dsFiliais."); + } } @@ -62,14 +68,18 @@ function setSelectedZoomItem(selectedItem) { function removedZoomItem(removedItem) { if (removedItem.inputId === "estabelecimento") { - // Quando remover a empresa, limpa os campos relacionados - $("#filialDesc").val(''); - $("#filialest").val(''); + // Quando remover a filial, limpa os campos relacionados + $("#filialdest").val(""); + $("#filialest").val(""); + $("#filialprotheus").val(""); + $("#centro_custo").val(""); + $("#codigocentroCusto").val(""); + $("#gestor_cc").val(""); } } /* ========= Config ========= */ -const DATASET_PRODUTOS = "dsProd"; // dataset de produtos +const DATASET_PRODUTOS = "dsComprasProdutos"; // dataset de produtos let todosProdutos = []; let paginaAtual = 1; const itensPorPagina = 10; @@ -120,7 +130,10 @@ function carregaListaProdutos(filtro) { // Só chama o dataset se ainda não carregou nada if (todosProdutos.length === 0) { let dataset = DatasetFactory.getDataset(DATASET_PRODUTOS, null, null, null); - todosProdutos = dataset && dataset.values ? dataset.values : []; + const values = dataset && dataset.values ? dataset.values : []; + todosProdutos = values + .map(normalizarProduto) + .filter(p => p.codigo && p.descricao); console.log("Produtos carregados do dataset:", todosProdutos.length); } @@ -171,10 +184,10 @@ function renderizaProdutos(filtro) { `; } else { produtosPagina.forEach(produto => { - const codigo = escapeHTML(produto['codigo']); - const descricao = escapeHTML(produto['descricao']); - const um = escapeHTML(produto['medida'] || ''); - const preco = produto['ultimo_preco'] || '0,00'; + const codigo = escapeHTML(produto.codigo); + const descricao = escapeHTML(produto.descricao); + const um = escapeHTML(produto.medida || ''); + const preco = produto.ultimo_preco || '0,00'; html += ` @@ -200,6 +213,15 @@ function renderizaProdutos(filtro) { renderizaPaginacao(produtosFiltrados.length); } +function normalizarProduto(row) { + return { + codigo: String(row.B1_COD || row.codigo || "").trim(), + descricao: String(row.B1_DESC || row.descricao || "").trim(), + medida: String(row.B1_UM || row.medida || "").trim(), + ultimo_preco: String(row.B1_UPRC || row.ultimo_preco || "0,00").trim() + }; +} + function renderizaPaginacao(totalItens) { @@ -375,29 +397,325 @@ $(function () { }); +function valorCampo(id) { + return String($("#" + id).val() || "").trim(); +} + +function setLabel(id, valor) { + var texto = String(valor || "").trim(); + $("#" + id).text(texto || "-"); +} + +function badgeClassByStatus(status) { + var s = String(status || "").toLowerCase(); + if (!s) return "badge bg-secondary"; + if (s.indexOf("erro") >= 0 || s.indexOf("reprov") >= 0 || s.indexOf("cancel") >= 0) return "badge bg-danger"; + if (s.indexOf("sucesso") >= 0 || s.indexOf("aprov") >= 0 || s.indexOf("gerad") >= 0 || s.indexOf("liberad") >= 0) return "badge bg-success"; + if (s.indexOf("aguard") >= 0 || s.indexOf("pend") >= 0) return "badge bg-warning"; + return "badge bg-info"; +} + +function setBadge(selector, valor) { + var texto = String(valor || "").trim() || "-"; + $(selector) + .text(texto) + .removeClass("bg-secondary bg-success bg-danger bg-warning bg-info") + .addClass(badgeClassByStatus(texto)); +} + +function normalizarStatusCadastro(statusCadastro, numeroSC) { + var numero = String(numeroSC || "").trim(); + var status = String(statusCadastro || "").trim(); + var s = status.toLowerCase(); + + if (!numero) return status; + if (!status) return "SC cadastrada com sucesso"; + if (s.indexOf("sucesso") >= 0 || s.indexOf("cadastr") >= 0) return "SC cadastrada com sucesso"; + return status; +} + +function normalizarAndamento(andamento, cotacao, pedido) { + var atual = String(andamento || "").trim(); + if (pedido) return "Pedido gerado"; + if (cotacao && (!atual || atual.toLowerCase().indexOf("pedido") < 0)) return "Cotacao gerada"; + return atual; +} + +function normalizarDataProtheus(data) { + var d = String(data || "").trim(); + if (/^\d{8}$/.test(d)) { + return d.substring(6, 8) + "/" + d.substring(4, 6) + "/" + d.substring(0, 4); + } + return d; +} + +function limparNumeroDocumento(valor) { + var v = String(valor || "").trim(); + if (!v || /^0+$/.test(v)) return ""; + return v; +} + +function comporDataHora(data, hora) { + var d = String(data || "").trim(); + var h = String(hora || "").trim(); + if (d && h && h !== "-") return d + " as " + h; + return d || h || ""; +} + +function montarEventosTimelineSC(dados) { + var eventos = []; + var momentoSolicitacao = comporDataHora(dados.dataCadastro, dados.horaCadastro); + var momentoSC = dados.emissao || momentoSolicitacao; + + eventos.push({ + classe: (dados.numero || dados.solicitante || momentoSolicitacao) ? "done" : "pending", + titulo: "Solicitacao criada", + momento: momentoSolicitacao, + detalhe: dados.solicitante ? "Solicitante: " + dados.solicitante : "" + }); + + if (dados.numero) { + eventos.push({ + classe: "done", + titulo: "SC " + dados.numero + " cadastrada", + momento: momentoSC, + detalhe: dados.statusCadastro ? "Status: " + dados.statusCadastro : "" + }); + } else { + eventos.push({ + classe: "pending", + titulo: "Aguardando geracao da SC", + momento: "", + detalhe: "A SC sera exibida assim que for criada no Protheus." + }); + } + + if (dados.cotacao) { + eventos.push({ + classe: "done", + titulo: "Cotacao " + dados.cotacao + " gerada", + momento: "", + detalhe: "Cotacao disponivel para analise." + }); + } else { + eventos.push({ + classe: "pending", + titulo: "Aguardando cotacao", + momento: "", + detalhe: "Ainda nao existe cotacao vinculada a SC." + }); + } + + if (dados.pedido) { + eventos.push({ + classe: "done", + titulo: "Pedido " + dados.pedido + " gerado", + momento: "", + detalhe: "Compra convertida em pedido." + }); + } else { + eventos.push({ + classe: "pending", + titulo: "Aguardando pedido", + momento: "", + detalhe: "O pedido sera criado apos a aprovacao final da cotacao." + }); + } + + return eventos; +} + +function renderizarTimelineSC(dados) { + var eventos = montarEventosTimelineSC(dados); + var html = eventos.map(function (evento) { + var titulo = escapeHTML(evento.titulo); + var momento = escapeHTML(evento.momento || ""); + var detalhe = escapeHTML(evento.detalhe || ""); + var classe = evento.classe === "done" ? "done" : "pending"; + + return [ + '
  • ', + '
    ', + ' ' + titulo + '', + momento ? (' ' + momento + '') : "", + "
    ", + detalhe ? ('
    ' + detalhe + "
    ") : "", + "
  • " + ].join(""); + }).join(""); + + $("#scTimeline").html(html); +} + +function focarTimelineSC() { + var secao = $("#scTimelineSection"); + if (!secao.length) return; + + secao.addClass("is-focus"); + setTimeout(function () { + secao.removeClass("is-focus"); + }, 900); + + try { + secao.get(0).scrollIntoView({ behavior: "smooth", block: "nearest" }); + } catch (e) { + // fallback para navegadores sem smooth scroll + secao.get(0).scrollIntoView(); + } +} + +function abrirTimelineSC() { + var secao = $("#scTimelineSection"); + if (!secao.length) return; + secao.addClass("is-open"); + $("#cardNumeroSCHint").text("Clique para ocultar a linha do tempo"); +} + +function fecharTimelineSC() { + var secao = $("#scTimelineSection"); + if (!secao.length) return; + secao.removeClass("is-open is-focus"); + $("#cardNumeroSCHint").text("Clique para ver a linha do tempo"); +} + +function alternarTimelineSC() { + var secao = $("#scTimelineSection"); + if (!secao.length) return; + + if (secao.hasClass("is-open")) { + fecharTimelineSC(); + return; + } + + abrirTimelineSC(); + focarTimelineSC(); +} + +function montarStatusAndamento(scRow, cotacao, pedido) { + if (pedido) return "Pedido gerado"; + if (cotacao) return "Cotacao gerada"; + + var statusApi = String(scRow.STATUS || "").trim(); + if (statusApi) return statusApi; + + var aprov = String(scRow.C1_APROV || "").trim().toUpperCase(); + if (aprov === "B") return "Aguardando cotacao"; + if (aprov === "L") return "Liberada"; + if (aprov === "R") return "Reprovada"; + if (aprov) return "Status Protheus: " + aprov; + + return ""; +} + +function preencherResumoSC() { + var numero = valorCampo("numeroSCProtheus"); + var statusCadastro = valorCampo("statusSCProtheus"); + var solicitante = valorCampo("solicitanteSCProtheus"); + var emissao = normalizarDataProtheus(valorCampo("emissaoSCProtheus")); + var qtdItens = valorCampo("qtdItensSCProtheus"); + var dataCadastro = normalizarDataProtheus(valorCampo("dataCadastroSCProtheus")); + var horaCadastro = valorCampo("horaCadastroSCProtheus"); + var cotacao = limparNumeroDocumento(valorCampo("cotacaoSCProtheus")); + var pedido = limparNumeroDocumento(valorCampo("pedidoSCProtheus")); + var andamento = valorCampo("statusAtendimento"); + var statusCadastroPadrao = normalizarStatusCadastro(statusCadastro, numero); + + if (!andamento && numero) { + if (pedido) andamento = "Pedido gerado"; + else if (cotacao) andamento = "Cotacao gerada"; + else andamento = "Em andamento"; + } + andamento = normalizarAndamento(andamento, cotacao, pedido); + + setLabel("numeroSCProtheus_label", numero); + setLabel("solicitanteSCProtheus_label", solicitante); + setLabel("emissaoSCProtheus_label", emissao); + setLabel("qtdItensSCProtheus_label", qtdItens); + setLabel("dataCadastroSCProtheus_label", dataCadastro); + setLabel("horaCadastroSCProtheus_label", horaCadastro); + setLabel("cotacaoSC_label", cotacao); + setLabel("pedidoSC_label", pedido); + + setBadge("#statusSCProtheus_label", statusCadastroPadrao || (numero ? "SC cadastrada com sucesso" : "")); + setBadge("#statusSC_label", andamento); + + renderizarTimelineSC({ + numero: numero, + statusCadastro: statusCadastroPadrao, + andamento: andamento, + solicitante: solicitante, + emissao: emissao, + dataCadastro: dataCadastro, + horaCadastro: horaCadastro, + cotacao: cotacao, + pedido: pedido + }); +} + +function consultarAndamentoSC() { + var numero = valorCampo("numeroSCProtheus"); + if (!numero || typeof DatasetFactory === "undefined" || typeof ConstraintType === "undefined") { + return; + } + + try { + var cNumero = DatasetFactory.createConstraint("numeroSCProtheus", numero, numero, ConstraintType.MUST); + var ds = DatasetFactory.getDataset("ds_consultaSC", null, [cNumero], null); + var row = (ds && ds.values && ds.values.length > 0) ? ds.values[0] : null; + + if (!row) return; + if (String(row.sucesso || "").toLowerCase() !== "true") return; + + var cotacao = limparNumeroDocumento(row.C1_COTACAO); + var pedido = limparNumeroDocumento(row.C1_PEDIDO); + + if (cotacao) $("#cotacaoSCProtheus").val(cotacao); + if (pedido) $("#pedidoSCProtheus").val(pedido); + + if (row.C1_SOLICIT) $("#solicitanteSCProtheus").val(String(row.C1_SOLICIT).trim()); + if (row.C1_EMISSAO) $("#emissaoSCProtheus").val(normalizarDataProtheus(row.C1_EMISSAO)); + + var andamento = montarStatusAndamento(row, cotacao, pedido); + if (andamento) $("#statusAtendimento").val(andamento); + + preencherResumoSC(); + } catch (e) { + console.warn("Nao foi possivel consultar andamento da SC no ds_consultaSC:", e); + } +} + $(document).ready(function () { - // Quando carregar a página, já pinta o status se tiver valor nos inputs - let status = $("#statusSCProtheus").val() || ""; - let badgeClass = "badge bg-secondary"; + preencherResumoSC(); + consultarAndamentoSC(); - if (status.toLowerCase().includes("sucesso")) badgeClass = "badge bg-success"; - if (status.toLowerCase().includes("erro")) badgeClass = "badge bg-danger"; - - $("#statusSCProtheus_label") - .text(status || "-") - .removeClass() - .addClass(badgeClass); + $(document).on("click", "#cardNumeroSC", function () { + alternarTimelineSC(); + }); }); +function parseNumeroCotacao(valor) { + var texto = String(valor || "").trim(); + if (!texto) return 0; + + if (texto.indexOf(",") >= 0) { + texto = texto.replace(/\./g, "").replace(",", "."); + } + + texto = texto.replace(/[^\d.-]/g, ""); + return parseFloat(texto) || 0; +} + function recalcularTotalCotacao() { var soma = 0; $("input[name^='selecionado___']").each(function() { - var idx = $(this).attr("id").split("___")[1]; + var idCampo = String($(this).attr("id") || ""); + if (idCampo.indexOf("___") < 0) return; + var idx = idCampo.split("___")[1]; // pega qtd e preço da linha - var qtd = parseFloat($("#qtdc___" + idx).val() || "0"); - var preco = parseFloat($("#preco___" + idx).val() || "0"); + var qtd = parseNumeroCotacao($("#qtdc___" + idx).val() || "0"); + var preco = parseNumeroCotacao($("#preco___" + idx).val() || "0"); // calcula total da linha var total = qtd * preco; @@ -413,6 +731,7 @@ function recalcularTotalCotacao() { // Atualiza o hidden e dispara change pro Fluig gravar $("#valorTotalCotacao").val(soma.toFixed(2)).trigger("change"); + $("#valorTotalCotacaoLabel").text(floatToBRL(soma)); } // dispara sempre que marcar/desmarcar $(document).on("change", "input[name^='selecionado___']", function() { diff --git a/compras_digital/forms/Compras_digital/events/displayFields.js b/compras_digital/forms/Compras_digital/events/displayFields.js index a561bf5..ff756ae 100644 --- a/compras_digital/forms/Compras_digital/events/displayFields.js +++ b/compras_digital/forms/Compras_digital/events/displayFields.js @@ -1,283 +1,55 @@ function displayFields(form, customHTML) { - - var activity = getValue('WKNumState'); - var userId = getValue('WKUser'); + var activity = parseInt(getValue("WKNumState"), 10); + var userId = getValue("WKUser"); + var hoje = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date()); form.setShowDisabledFields(true); form.setHidePrintLink(true); - form.setValue("WKNumProces", getValue('WKNumProces')); - form.setValue("activity", activity); + form.setValue("WKNumProces", getValue("WKNumProces")); + form.setValue("activity", String(activity)); form.setValue("formMode", form.getFormMode()); form.setValue("empresa", getValue("WKCompany")); - var c1 = DatasetFactory.createConstraint("colleagueId", userId, userId, ConstraintType.MUST); - var filter = new Array(c1); - var fields = new Array("colleagueName"); - var retorno = DatasetFactory.getDataset("colleague", fields, filter, null); + var nomeUsuario = ""; + var emailUsuario = ""; - //requester - if (activity == 0) { - form.setValue("usuario_abertura", retorno.getValue(0, "colleagueName")); - form.setValue("requesterMail", retorno.getValue(0, "mail")); - form.setValue("requesterId", userId); - } else { - form.setValue("currentUserName", retorno.getValue(0, "colleagueName")); - form.setValue("currentUsermail", retorno.getValue(0, "mail")); - form.setValue("currentUserId", userId); + try { + var c1 = DatasetFactory.createConstraint("colleagueId", userId, userId, ConstraintType.MUST); + var constraints = [c1]; + var fields = ["colleagueName", "mail"]; + var dsColleague = DatasetFactory.getDataset("colleague", fields, constraints, null); + + if (dsColleague && dsColleague.rowsCount > 0) { + nomeUsuario = dsColleague.getValue(0, "colleagueName") || ""; + emailUsuario = dsColleague.getValue(0, "mail") || ""; + } + } catch (e) { + log.error("[displayFields] Erro ao consultar colleague: " + e); } - // ✅ Quando for atividade de aprovação do gestor - if (activity == 121) { - var hoje = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date()); - form.setValue("user_validacao_gestor", retorno.getValue(0, "colleagueName")); + form.setValue("currentUserName", nomeUsuario); + form.setValue("currentUsermail", emailUsuario); + form.setValue("currentUserId", userId); + + if (activity === 0 || activity === 1) { + form.setValue("requesterId", userId); + + if (emailUsuario) { + form.setValue("requesterMail", emailUsuario); + } + if (!form.getValue("usuarioSolicitante") && nomeUsuario) { + form.setValue("usuarioSolicitante", nomeUsuario); + } + if (!form.getValue("emailSolicitante") && emailUsuario) { + form.setValue("emailSolicitante", emailUsuario); + } + } + + if (activity === 121) { + if (nomeUsuario) { + form.setValue("user_validacao_gestor", nomeUsuario); + } form.setValue("data_validacao_gestor", hoje); } - - if (activity == 133) { - var hoje = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date()); - form.setValue("gestor_validacao_aprova", retorno.getValue(0, "colleagueName")); - form.setValue("data_validacao_aprova_gestor", hoje); - } - - if (activity == 137) { - var hoje = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date()); - form.setValue("user_validacao_aprova", retorno.getValue(0, "colleagueName")); - form.setValue("data_validacao_aprova", hoje); - } - - if (activity == 147) { - var hoje = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date()); - form.setValue("gerf_validacao_aprova", retorno.getValue(0, "colleagueName")); - form.setValue("data_validacao_aprova_gerf", hoje); - } - - if (activity == 18) { - var hoje = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date()); - form.setValue("userValidacaoItens", retorno.getValue(0, "colleagueName")); - form.setValue("dataValidacaoItens", hoje); - } - - // ✅ Injetar dados da SC do Protheus (se já tiverem sido preenchidos no servicetask) - var camposSC = [ - "numeroSCProtheus", - "statusSCProtheus", - "solicitanteSCProtheus", - "emissaoSCProtheus", - "qtdItensSCProtheus", - "dataCadastroSCProtheus", - "horaCadastroSCProtheus" - ]; - - camposSC.forEach(function(campo) { - var valor = form.getValue(campo); - if (valor) { - customHTML.append(""); - } - }); - - // cor no status - var status = form.getValue("statusSCProtheus"); - if (status) { - var badgeClass = "badge bg-secondary"; - if (status.toLowerCase().indexOf("sucesso") >= 0) badgeClass = "badge bg-success"; - if (status.toLowerCase().indexOf("erro") >= 0) badgeClass = "badge bg-danger"; - - customHTML.append(""); - } - - // Consultar informações adicionais da SC no Protheus - var numSC = form.getValue("numeroSCProtheus"); - if (numSC) { - try { - var c1 = DatasetFactory.createConstraint("numeroSCProtheus", numSC, numSC, ConstraintType.MUST); - var ds = DatasetFactory.getDataset("ds_consultaSC", null, [c1], null); - - if (ds && ds.rowsCount > 0) { - var status = ds.getValue(0, "STATUS") || ""; - var cotacao = ds.getValue(0, "C1_COTACAO") || ""; - var pedido = ds.getValue(0, "C1_PEDIDO") || ""; - - // grava nos hidden inputs - form.setValue("statusAtendimento", status); - form.setValue("cotacaoSCProtheus", cotacao); - form.setValue("pedidoSCProtheus", pedido); - - // mostra nos cards (HTML) - customHTML.append(""); - customHTML.append(""); - customHTML.append(""); - } - } catch (e) { - log.error("❌ Erro ao consultar dataset ds_consultaSC: " + e); - } - } - - try { - var msgs = []; - - var numeroSC = form.getValue("numeroSCProtheus"); - var cotacaoSC = form.getValue("cotacaoSCProtheus"); - var pedidoSC = form.getValue("pedidoSCProtheus"); - - if (numeroSC) msgs.push("📌 Gerou SC Protheus nº " + numeroSC); - if (cotacaoSC) msgs.push("📌 SC originou Cotação nº " + cotacaoSC); - if (pedidoSC) msgs.push("📌 Cotação finalizou → Pedido nº " + pedidoSC); - - if (msgs.length === 0) { - msgs.push("ℹ️ Nenhum dado de integração Protheus encontrado no formulário"); - } - - // Monta conteúdo HTML do histórico - var htmlHistorico = "
      "; - for (var i = 0; i < msgs.length; i++) { - htmlHistorico += "
    • " + msgs[i] + "
    • "; - } - htmlHistorico += "
    "; - - // Script para abrir modal ao clicar no botão - customHTML.append(""); - - } catch (e) { - log.error("[displayFields] Erro ao montar histórico: " + e); - } - - var numCot = form.getValue("cotacaoSCProtheus"); - var numSC = form.getValue("numeroSCProtheus"); // pega a SC atual - - function formatCurrency(v) { - if (!v || isNaN(v)) return "R$ 0,00"; - var num = parseFloat(v).toFixed(2); - return "R$ " + num.replace(".", ",").replace(/\B(?=(\d{3})+(?!\d))/g, "."); - } - - function formatDate(v) { - if (!v || v.length !== 8) return v || ""; - var y = v.substring(0,4); - var m = v.substring(4,6); - var d = v.substring(6,8); - return d + "/" + m + "/" + y; - } - - function formatPrazo(v) { - if (!v) return ""; - return v + " dias úteis"; - } - - if (!numCot) { - customHTML.append(""); - return; - } - - var c = DatasetFactory.createConstraint("numCotacao", numCot, numCot, ConstraintType.MUST); - var ds = DatasetFactory.getDataset("dsComprasCotacao", null, [c], null); - var precoFormatado = formatCurrency(preco); - var totalFormatado = formatCurrency(total); - - if (ds && ds.rowsCount > 0) { - for (var i = 0; i < ds.rowsCount; i++) { - var item = ds.getValue(i, "C8_ITEM"); - var desc = ds.getValue(i, "B1_DESC"); - var qtd = ds.getValue(i, "C8_QUANT"); - var preco = ds.getValue(i, "C8_PRECO"); - var total = ds.getValue(i, "C8_TOTAL"); - - // adiciona linha na tabela pai-filho - customHTML.append(""); - } - } else { - customHTML.append(""); - } - - try { - var numPedido = form.getValue("pedidoSCProtheus"); // hidden no formulário - if (!numPedido) { - customHTML.append(""); - return; - } - - var c = DatasetFactory.createConstraint("numeroPed", numPedido, numPedido, ConstraintType.MUST); - var ds = DatasetFactory.getDataset("dsComprasGateway", null, [c], null); - - if (!ds || ds.rowsCount === 0) { - customHTML.append(""); - return; - } - - - var html = ""; - for (var i = 0; i < ds.rowsCount; i++) { - var rowNum = ds.getValue(i, "C7_NUM"); - var desc = ds.getValue(i, "B1_DESC"); - var qtd = ds.getValue(i, "C7_QUANT"); - var valor = ds.getValue(i, "C7_TOTAL"); - var un = ds.getValue(i, "B1_UM"); - var pr = ds.getValue(i, "C7_DATPRF"); - - html += "
    " - + "
    Pedido nº " + (rowNum || "-") + "
    " - + "
    " - + "
    Descrição
    " + (desc || "-") + "
    " - + "
    Quantidade
    " + parseInt(qtd || 0) + " " + (un || "") + "
    " - + "
    Valor
    " + formatCurrency(valor) + "
    " - + "
    Data de Entrega
    " + formatDate(pr) + "
    " - + "
    " - + "
    "; - - } - - customHTML.append(""); - - } catch (e) { - var msg = "❌ Erro displayFields Pedido: " + (e && e.message ? e.message : e); - log.error(msg); - - customHTML.append(""); - } - - // Se estou na atividade do Gestor do CC (ex: 133) - if (activity == 133) { - // Copia a justificativa do solicitante para o campo de exibição - form.setValue("observacoesdosolicitante", form.getValue("observacoes")); - } - - // Se estou na atividade do GERF (ex: 147) - if (activity == 147) { - form.setValue("justi_decisao__soli", form.getValue("observacoes")); // solicitante - form.setValue("justi_decisao_gc", form.getValue("justi_decisao_aprova_gestor")); // gestor - } - - // Se estou na atividade do CEO (ex: 158) - if (activity == 158) { - form.setValue("justi_decisao_solic", form.getValue("observacoes")); // solicitante - form.setValue("justi_decisaogc", form.getValue("justi_decisao_aprova_gestor")); // gestor - form.setValue("justi_decisao_gerf", form.getValue("justi_decisao_aprova_gerente")); // gerente financeiro - } -} \ No newline at end of file +} diff --git a/compras_digital/forms/Compras_digital/events/validateForm.js b/compras_digital/forms/Compras_digital/events/validateForm.js index d18a7db..c181948 100644 --- a/compras_digital/forms/Compras_digital/events/validateForm.js +++ b/compras_digital/forms/Compras_digital/events/validateForm.js @@ -2,6 +2,12 @@ function validateForm(form){ var msg = ""; var activity = getValue("WKNumState"); + if (activity == 0 || activity == 1) { + if (form.getValue("gestor_cc") == "") { + msg += "Não foi possível identificar o gestor da loja selecionada. Selecione a filial novamente.\n"; + } + } + // Só valida "Justificativa do Gestor" quando estiver na atividade do gestor (ex.: 5) if (activity == 121) { if (form.getValue("justi_decisao_gestor") == "") { @@ -12,4 +18,4 @@ function validateForm(form){ if (msg != "") { throw msg; } -} \ No newline at end of file +} diff --git a/compras_digital/workflow/.resources/Ginseng Produção.ws.cache b/compras_digital/workflow/.resources/Ginseng Produção.ws.cache index 1c5cbe1..cb3a526 100644 --- a/compras_digital/workflow/.resources/Ginseng Produção.ws.cache +++ b/compras_digital/workflow/.resources/Ginseng Produção.ws.cache @@ -1,5 +1,5 @@ - + volume @@ -15,10 +15,10 @@ - Aprovadores Compras Nvl 3 + Tecnologia e Comunicação - AprovadoresComprasNvl3 + TIC @@ -45,20 +45,20 @@ - Motoristas + Aprovadores Compras Nvl 3 - Motoristas + AprovadoresComprasNvl3 - Recrutamento + Motoristas - Recrutamento + Motoristas @@ -75,10 +75,430 @@ - Tecnologia e Comunicação + Recrutamento - TIC + Recrutamento + + + + + + + TODOS-TODOS-DIADMISSAO + + + TODOS-TODOS-DIADMISSAO + + + + + + + ResponsavelDesligamento + + + ResponsavelDesligamento + + + + + + + GENTE & CULTURA + + + GENTE_CULTURA + + + + + + + LOJA AL + + + LOJA_AL + + + + + + + CD + + + CD + + + + + + + ESPAÇO DO REVENDEDOR AL + + + ESPACO_DO_REVENDEDOR_AL + + + + + + + FINANCEIRO + + + FINANCEIRO + + + + + + + OPERAÇÕES + + + OPERACOES + + + + + + + AMG AL + + + AMG_AL + + + + + + + REGIONAL ALAGOAS + + + REGIONAL_ALAGOAS + + + + + + + PREVENÇÃO DE PERDA + + + PREVENCAO_DE_PERDA + + + + + + + MARKETING, TREINAMENTO + + + MARKETING_TREINAMENTO + + + + + + + SECRETARIA EXECUTIVA + + + SECRETARIA_EXECUTIVA + + + + + + + DIRETORIA EXECUTIVA + + + DIRETORIA_EXECUTIVA + + + + + + + INFRAESTRUTURA + + + INFRAESTRUTURA + + + + + + + ESPAÇO DO REVENDEDOR BA + + + ESPACO_DO_REVENDEDOR_BA + + + + + + + BUSINESS INTELLIGENCE + + + BUSINESS_INTELLIGENCE + + + + + + + DEPARTAMENTO PESSOAL + + + DEPARTAMENTO_PESSOAL + + + + + + + LOJA BA + + + LOJA_BA + + + + + + + TREINAMENTO + + + TREINAMENTO + + + + + + + AMG BA + + + AMG_BA + + + + + + + MARKETING + + + MARKETING + + + + + + + COMPRAS + + + COMPRAS + + + + + + + AMG SE + + + AMG_SE + + + + + + + LOJA SE + + + LOJA_SE + + + + + + + ESPAÇO DO REVENDEDOR SE + + + ESPACO_DO_REVENDEDOR_SE + + + + + + + VENDAS IN COMPANY + + + VENDAS_IN_COMPANY + + + + + + + REGIONAL BAHIA + + + REGIONAL_BAHIA + + + + + + + CANAL LOJA 01 + + + CANAL_LOJA_01 + + + + + + + AUDITORIA + + + AUDITORIA + + + + + + + CANAL LOJA 02 + + + CANAL_LOJA_02 + + + + + + + PLANEJAMENTO DE DEMANDAS + + + PLANEJAMENTO_DE_DEMANDAS + + + + + + + PROJETOS + + + PROJETOS + + + + + + + COMPLIANCE + + + COMPLIANCE + + + + + + + ESCRITÓRIO - MATRIZ + + + ESCRITORIO_MATRIZ + + + + + + + ESCRITÓRIO - CONQUISTA + + + ESCRITORIO_CONQUISTA + + + + + + + REGIONAL SERGIPE + + + REGIONAL_SERGIPE + + + + + + + Transferencia + + + Transferencia + + + + + + + Fiscal + + + Fiscal + + + + + + + motoristaAL + + + motoristaAL + + + + + + + motoristaBA + + + motoristaBA + + + + + + + motoristaSE + + + motoristaSE @@ -101,144 +521,9 @@ - - processosServidor - - - - - 1 - - - Abertura de Chamado - - - Abertura de chamado Manutenção - - - - - - - 1 - - - Abertura de Chamado - - - FlowEssentials_AberturaDeChamado - - - - - - - 1 - - - Solicitação de compra - Totvs - - - FlowEssentials_SolicitacaoDeCompras - - - - - - - 1 - - - Flowservico_terceirizado - - - Flowservico_terceirizado - - - - - - - 1 - - - Listar Tarefas - - - FLUIGADHOC - - - - - - - 1 - - - Recrutamento e seleção - - - Recrutamento e Seleção - - - - - - - 1 - - - Solicitação de compra - Ginseng - - - Solicitação de compras - - - - - - - 1 - - - Solicitação de compra - Ginseng - - - Solicitação de compras - Integração teste - - - - - - - 1 - - - Solicitação de compra - Ginseng - - - Solicitação de compras v2 - - - - - - - 1 - - - Transferência Ginseng - - - Transferência Ginseng - - - - - mecanismo - + @@ -260,6 +545,26 @@ + + + dpf_di_emp_filial_filtro + + + dpf_di_emp_filial_filtro + + + + + + + dpf_di_inicio_diadmissao + + + dpf_di_inicio_diadmissao + + + + Atribuição por Executor de Atividade @@ -269,7 +574,7 @@ - + Atribuição por Grupo @@ -279,7 +584,7 @@ - + Atribuição por Grupos do Colaborador @@ -289,7 +594,7 @@ - + mecCustomAprov @@ -299,7 +604,7 @@ - + Atribuição por Papel @@ -309,7 +614,7 @@ - + Atribuição para um Grupo @@ -319,7 +624,7 @@ - + Atribuição para um Papel @@ -329,7 +634,7 @@ - + Atribuição por Usuário @@ -341,482 +646,5 @@ - - camposFormulario, documentoId = 9305 - - - activity - - - centro_custo - - - ceo_validacao_aprova - - - codigocentroCusto - - - Codproduto - - - cotacaoSCProtheus - - - currentUserId - - - currentUsermail - - - currentUserName - - - dataCadastroSCProtheus - - - dataNec - - - dataValidacaoItens - - - data_validacao_aprova - - - data_validacao_aprova_ceo - - - data_validacao_aprova_gerf - - - data_validacao_aprova_gestor - - - data_validacao_gestor - - - descProduto - - - emailSolicitante - - - emissaoSCProtheus - - - empresa - - - estabelecimento - - - fdComprovante - - - filialdest - - - filialest - - - filialprotheus - - - fnComprovante - - - formMode - - - gerf_validacao_aprova - - - gestor_cc - - - gestor_validacao_aprova - - - horaCadastroSCProtheus - - - item - - - justificativaDecisaoItens - - - justificativaValidaProblema - - - justi_decisao_aprova - - - justi_decisao_aprova_ceo - - - justi_decisao_aprova_gerente - - - justi_decisao_aprova_gestor - - - justi_decisao_gestor - - - moreInfo - - - numeroSCProtheus - - - observacoes - - - pedidoSCProtheus - - - preco - - - produto - - - produtoCod - - - produtoDesc - - - produtoLink - - - qtd - - - qtdc - - - qtdItensSCProtheus - - - quantidade - - - requesterId - - - requesterMail - - - selecionado - - - solicitanteSCProtheus - - - statusAtendimento - - - statusSCProtheus - - - tipoSolicitacao - - - total - - - urgencia - - - userValidacaoItens - - - user_validacao_aprova - - - user_validacao_gestor - - - usuarioSolicitante - - - validacaoItens - - - valorTotalCotacao - - - WKNumProces - - - - - forms - - - - - FLUIGADHOC - - - FLUIGADHOC - - - 3 - - - - - - - FLUIGADHOCPROCESS - - - FLUIGADHOCPROCESS - - - 4 - - - - - - - totvsflow_dataset_tipo_ocorrencia - - - totvsflow_dataset_tipo_ocorrencia - - - 14 - - - - - - - totvsflow_abertura_chamado - - - totvsflow_abertura_chamado - - - 15 - - - - - - - DSFormulariodeAberturadechamado - - - Formulário de Abertura de chamado - - - 20 - - - - - - - Abertura_de_chamados - - - Solicitação de abertura de chamados - - - 21 - - - - - - - DSvistoriadeServico - - - vistoriadeServico - - - 24 - - - - - - - DSFormulariodeReservadesala - - - Formulário de Reserva de sala - - - 34 - - - - - - - totvsflow_dataset_centrocusto - - - totvsflow_dataset_centrocusto - - - 103 - - - - - - - totvsflow_dataset_cadastro_item - - - totvsflow_dataset_cadastro_item - - - 104 - - - - - - - totvsflow_dataset_estabelecimento - - - totvsflow_dataset_estabelecimento - - - 105 - - - - - - - totvsflow_solicitacao_compras - - - totvsflow_solicitacao_compras - - - 165 - - - - - - - aberturadechamado_manutencao - - - aberturadechamado_manutencao - - - 400 - - - - - - - Solicitacao_transferencia - - - Solicitacao_transferencia - - - 590 - - - - - - - recrutamento - - - recrutamento - - - 823 - - - - - - - kit_aniversariantes - - - Aniversariantes - - - 7690 - - - - - - - kit_cardapio - - - Cardápio do Dia - - - 7695 - - - - - - - kit_convenios - - - Convênios - - - 7703 - - - - - - - kit_news - - - Notícias - - - 7709 - - - - - - - compras_digital - - - compras_digital - - - 9305 - - - - - diff --git a/compras_digital/workflow/.resources/Ginseng Produção.ws.cache.bkp b/compras_digital/workflow/.resources/Ginseng Produção.ws.cache.bkp index 03bf0c1..36e5557 100644 --- a/compras_digital/workflow/.resources/Ginseng Produção.ws.cache.bkp +++ b/compras_digital/workflow/.resources/Ginseng Produção.ws.cache.bkp @@ -1,10 +1,6 @@ - + - - camposFormulario, documentoId = 2297 - - volume @@ -13,81 +9,6 @@ - - mecanismoGrupo - - - - - Aprovadores Compras Nvl 3 - - - AprovadoresComprasNvl3 - - - - - - - Compras Indiretos - - - ComprasIndiretos - - - - - - - Obras e manutenção - - - Manutencao - - - - - - - Motoristas - - - Motoristas - - - - - - - Recrutamento - - - Recrutamento - - - - - - - Requisitantes de Vaga - - - Requisitantesdevaga - - - - - - - Tecnologia e Comunicação - - - TIC - - - - - expediente @@ -107,7 +28,7 @@ mecanismo - + @@ -129,6 +50,26 @@ + + + dpf_di_emp_filial_filtro + + + dpf_di_emp_filial_filtro + + + + + + + dpf_di_inicio_diadmissao + + + dpf_di_inicio_diadmissao + + + + Atribuição por Executor de Atividade @@ -138,7 +79,7 @@ - + Atribuição por Grupo @@ -148,7 +89,7 @@ - + Atribuição por Grupos do Colaborador @@ -158,7 +99,7 @@ - + mecCustomAprov @@ -168,7 +109,7 @@ - + Atribuição por Papel @@ -178,7 +119,7 @@ - + Atribuição para um Grupo @@ -188,7 +129,7 @@ - + Atribuição para um Papel @@ -198,7 +139,7 @@ - + Atribuição por Usuário @@ -210,482 +151,5 @@ - - forms - - - - - FLUIGADHOC - - - FLUIGADHOC - - - 3 - - - - - - - FLUIGADHOCPROCESS - - - FLUIGADHOCPROCESS - - - 4 - - - - - - - totvsflow_dataset_tipo_ocorrencia - - - totvsflow_dataset_tipo_ocorrencia - - - 14 - - - - - - - totvsflow_abertura_chamado - - - totvsflow_abertura_chamado - - - 15 - - - - - - - DSFormulariodeAberturadechamado - - - Formulário de Abertura de chamado - - - 20 - - - - - - - Abertura_de_chamados - - - Solicitação de abertura de chamados - - - 21 - - - - - - - DSvistoriadeServico - - - vistoriadeServico - - - 24 - - - - - - - DSFormulariodeReservadesala - - - Formulário de Reserva de sala - - - 34 - - - - - - - totvsflow_dataset_centrocusto - - - totvsflow_dataset_centrocusto - - - 103 - - - - - - - totvsflow_dataset_cadastro_item - - - totvsflow_dataset_cadastro_item - - - 104 - - - - - - - totvsflow_dataset_estabelecimento - - - totvsflow_dataset_estabelecimento - - - 105 - - - - - - - totvsflow_solicitacao_compras - - - totvsflow_solicitacao_compras - - - 165 - - - - - - - aberturadechamado_manutencao - - - aberturadechamado_manutencao - - - 400 - - - - - - - Solicitacao_transferencia - - - Solicitacao_transferencia - - - 590 - - - - - - - recrutamento - - - recrutamento - - - 823 - - - - - - - kit_aniversariantes - - - Aniversariantes - - - 7690 - - - - - - - kit_cardapio - - - Cardápio do Dia - - - 7695 - - - - - - - kit_convenios - - - Convênios - - - 7703 - - - - - - - kit_news - - - Notícias - - - 7709 - - - - - - - compras_digital - - - compras_digital - - - 9305 - - - - - - - camposFormulario, documentoId = 9305 - - - activity - - - centro_custo - - - ceo_validacao_aprova - - - codigocentroCusto - - - Codproduto - - - cotacaoSCProtheus - - - currentUserId - - - currentUsermail - - - currentUserName - - - dataCadastroSCProtheus - - - dataNec - - - dataValidacaoItens - - - data_validacao_aprova - - - data_validacao_aprova_ceo - - - data_validacao_aprova_gerf - - - data_validacao_aprova_gestor - - - data_validacao_gestor - - - descProduto - - - emailSolicitante - - - emissaoSCProtheus - - - empresa - - - estabelecimento - - - fdComprovante - - - filialdest - - - filialest - - - filialprotheus - - - fnComprovante - - - formMode - - - gerf_validacao_aprova - - - gestor_cc - - - gestor_validacao_aprova - - - horaCadastroSCProtheus - - - item - - - justificativaDecisaoItens - - - justificativaValidaProblema - - - justi_decisao_aprova - - - justi_decisao_aprova_ceo - - - justi_decisao_aprova_gerente - - - justi_decisao_aprova_gestor - - - justi_decisao_gestor - - - moreInfo - - - numeroSCProtheus - - - observacoes - - - pedidoSCProtheus - - - preco - - - produto - - - produtoCod - - - produtoDesc - - - produtoLink - - - qtd - - - qtdc - - - qtdItensSCProtheus - - - quantidade - - - requesterId - - - requesterMail - - - selecionado - - - solicitanteSCProtheus - - - statusAtendimento - - - statusSCProtheus - - - tipoSolicitacao - - - total - - - urgencia - - - userValidacaoItens - - - user_validacao_aprova - - - user_validacao_gestor - - - usuarioSolicitante - - - validacaoItens - - - valorTotalCotacao - - - WKNumProces - - - diff --git a/compras_digital/workflow/.resources/Solicitação de compras V2.ecm30.xml b/compras_digital/workflow/.resources/Solicitação de compras V2.ecm30.xml index 9bdde5a..6d793a7 100644 --- a/compras_digital/workflow/.resources/Solicitação de compras V2.ecm30.xml +++ b/compras_digital/workflow/.resources/Solicitação de compras V2.ecm30.xml @@ -29,7 +29,7 @@ 1 Solicitação de compra - Ginseng - 8 + 86 9305 @@ -1009,7 +1009,7 @@ 1 Solicitação de compras 1 - 8 + 86 46 hAPI.getCardValue("validacaoItens") == "entregue" @@ -1021,7 +1021,7 @@ 1 Solicitação de compras 2 - 8 + 86 46 true @@ -1033,7 +1033,7 @@ 1 Solicitação de compras 1 - 8 + 86 128 parseFloat(hAPI.getCardValue("valorTotalCotacao")) <= 100000.00 @@ -1047,7 +1047,7 @@ 1 Solicitação de compras 1 - 8 + 86 150 parseFloat(hAPI.getCardValue("valorTotalCotacao")) >= 5001.00 && @@ -1063,7 +1063,7 @@ parseFloat(hAPI.getCardValue("valorTotalCotacao")) <= 50000.00 1 Solicitação de compras 2 - 8 + 86 150 true @@ -1077,7 +1077,7 @@ parseFloat(hAPI.getCardValue("valorTotalCotacao")) <= 50000.00 1 Solicitação de compras 1 - 8 + 86 154 parseFloat(hAPI.getCardValue("valorTotalCotacao")) > 50000.00 @@ -1091,7 +1091,7 @@ parseFloat(hAPI.getCardValue("valorTotalCotacao")) <= 50000.00 1 Solicitação de compras 2 - 8 + 86 154 parseFloat(hAPI.getCardValue("valorTotalCotacao")) < 50000.00 @@ -1536,102 +1536,110 @@ parseFloat(hAPI.getCardValue("valorTotalCotacao")) <= 50000.00 Solicitação de compras 1 - function toProtheusDate(d) { - if (!d) return ""; - if (d.indexOf("/") > -1) { - var parts = d.split("/"); - return parts[2] + parts[1] + parts[0]; // dd/MM/yyyy -> yyyyMMdd - } - if (d.indexOf("-") > -1) { - return d.replace(/-/g, ""); // yyyy-MM-dd -> yyyyMMdd - } - return d; // já está no formato certo -} - -function hojeProtheus() { - var d = new Date(); - var yyyy = d.getFullYear(); - var mm = d.getMonth() + 1; - var dd = d.getDate(); - if (mm < 10) mm = "0" + mm; - if (dd < 10) dd = "0" + dd; - return "" + yyyy + mm + dd; // yyyyMMdd -} - -function servicetask82(attempt, message) { - log.info("🚀 Iniciando servicetask82"); - - var qtdItens = hAPI.getChildrenIndexes("tbItens"); - log.info("📦 Total de itens na tabela: " + qtdItens.length); - - var itens = []; - for (var i = 0; i < qtdItens.length; i++) { - var index = qtdItens[i]; - var item = { - "C1_PRODUTO": String(hAPI.getCardValue("Codproduto___" + index)), - "C1_QUANT": Number(hAPI.getCardValue("qtd___" + index)), - "C1_DATPRF": toProtheusDate(String(hAPI.getCardValue("dataNec___" + index))) - }; - itens.push(item); - log.info("📌 Item adicionado: " + JSON.stringify(item)); - } - - var payload = { - "C1_SOLICIT": String(hAPI.getCardValue("usuarioSolicitante")), - "C1_EMISSAO": hojeProtheus(), - "C1_FILENT": String(hAPI.getCardValue("filialProtheus")).trim(), - "C1_OBS": String(hAPI.getCardValue("observacoes")), - "itens": itens - }; - - log.info("📦 Payload montado:"); - log.info(JSON.stringify(payload)); - - var data1 = { - companyId: '1', - serviceCode: 'Postprod', - endpoint: '/rest/UF_MATA110', - method: 'post', - timeoutService: '100', - params: payload, // objeto puro - headers: { - 'Content-Type': 'application/json' - } - }; - - try { - var clientService = fluigAPI.getAuthorizeClientService(); - var response = clientService.invoke(JSON.stringify(data1)); // SEMPRE stringify aqui - - log.info("📬 Resposta da API Protheus:"); - log.dir(response); - - if (response && response.getResult()) { - var result = JSON.parse(response.getResult()); - if (result.sucesso) { - hAPI.setCardValue("numeroSCProtheus", result.C1_NUM || ""); - hAPI.setCardValue("statusSCProtheus", "SC cadastrada com sucesso"); - hAPI.setCardValue("solicitanteSCProtheus", result.C1_SOLICIT || ""); - hAPI.setCardValue("emissaoSCProtheus", result.C1_EMISSAO || ""); - hAPI.setCardValue("qtdItensSCProtheus", String(result.quantidade_itens || "")); - hAPI.setCardValue("dataCadastroSCProtheus", result.data_cadastro || ""); - hAPI.setCardValue("horaCadastroSCProtheus", result.hora_cadastro || ""); - } else { - hAPI.setCardValue("statusSCProtheus", "Erro: " + result.erro); - throw "Erro Protheus: " + result.message; - } - } else { - throw "Sem resposta da API Protheus"; - } - } catch (e) { - log.error("❌ Erro ao enviar SC para o Protheus: " + e); - throw e; - } - - - - log.info("🏁 Finalização da servicetask82"); -} + function toProtheusDate(d) { + if (!d) return ""; + if (d.indexOf("/") > -1) { + var parts = d.split("/"); + return parts[2] + parts[1] + parts[0]; // dd/MM/yyyy -> yyyyMMdd + } + if (d.indexOf("-") > -1) { + return d.replace(/-/g, ""); // yyyy-MM-dd -> yyyyMMdd + } + return d; // já está no formato certo +} + +function hojeProtheus() { + var d = new Date(); + var yyyy = d.getFullYear(); + var mm = d.getMonth() + 1; + var dd = d.getDate(); + if (mm < 10) mm = "0" + mm; + if (dd < 10) dd = "0" + dd; + return "" + yyyy + mm + dd; // yyyyMMdd +} + +function servicetask82(attempt, message) { + log.info("🚀 Iniciando servicetask82"); + + var qtdItens = hAPI.getChildrenIndexes("tbItens"); + log.info("📦 Total de itens na tabela: " + qtdItens.length); + + var itens = []; + for (var i = 0; i < qtdItens.length; i++) { + var index = qtdItens[i]; + var item = { + "C1_PRODUTO": String(hAPI.getCardValue("Codproduto___" + index)), + "C1_QUANT": Number(hAPI.getCardValue("qtd___" + index)), + "C1_DATPRF": toProtheusDate(String(hAPI.getCardValue("dataNec___" + index))) + }; + itens.push(item); + log.info("📌 Item adicionado: " + JSON.stringify(item)); + } + + var filial = String(hAPI.getCardValue("filialprotheus") || hAPI.getCardValue("filialProtheus") || "").trim(); + if (!filial) { + throw "Campo de filial não preenchido no formulário (filialprotheus)."; + } + + var payload = { + "C1_SOLICIT": String(hAPI.getCardValue("usuarioSolicitante")), + "C1_EMISSAO": hojeProtheus(), + "C1_FILENT": filial, + "C1_OBS": String(hAPI.getCardValue("observacoes")), + "itens": itens + }; + + log.info("📦 Payload montado:"); + log.info(JSON.stringify(payload)); + + var data1 = { + companyId: '1', + serviceCode: 'Postprod', + endpoint: '/UF_MATA110', + method: 'post', + timeoutService: '60000', + params: payload, // objeto puro + headers: { + 'Content-Type': 'application/json' + } + }; + + try { + var clientService = fluigAPI.getAuthorizeClientService(); + var response = clientService.invoke(JSON.stringify(data1)); // SEMPRE stringify aqui + + log.info("📬 Resposta da API Protheus:"); + if (response) { + log.info("HTTP status: " + response.getHttpStatusResult()); + log.info("Body: " + response.getResult()); + } + + if (response && response.getResult()) { + var result = JSON.parse(response.getResult()); + if (result.sucesso) { + hAPI.setCardValue("numeroSCProtheus", result.C1_NUM || ""); + hAPI.setCardValue("statusSCProtheus", "SC cadastrada com sucesso"); + hAPI.setCardValue("solicitanteSCProtheus", result.C1_SOLICIT || ""); + hAPI.setCardValue("emissaoSCProtheus", result.C1_EMISSAO || ""); + hAPI.setCardValue("qtdItensSCProtheus", String(result.quantidade_itens || "")); + hAPI.setCardValue("dataCadastroSCProtheus", result.data_cadastro || ""); + hAPI.setCardValue("horaCadastroSCProtheus", result.hora_cadastro || ""); + } else { + hAPI.setCardValue("statusSCProtheus", "Erro: " + result.erro); + throw "Erro Protheus: " + result.message; + } + } else { + throw "Sem resposta da API Protheus"; + } + } catch (e) { + log.error("❌ Erro ao enviar SC para o Protheus: " + e); + throw e; + } + + + + log.info("🏁 Finalização da servicetask82"); +} @@ -1641,25 +1649,25 @@ function servicetask82(attempt, message) { Solicitação de compras 1 - function servicetask114(attempt, message) { - log.info("🚀 ST92 — Verifica se já existe código de cotação no formulário"); - - var numSC = hAPI.getCardValue("numeroSCProtheus"); - var numCot = hAPI.getCardValue("cotacaoSCProtheus"); - - log.info("📌 SC: " + numSC + " | Cotação: " + numCot); - - if (!numSC) { - throw "❌ Número da SC não informado no formulário."; - } - - // se não tiver cotação ainda, força o loop da atividade - if (!numCot || numCot === "000000" || numCot === "000001") { - throw "⏳ Cotação ainda não disponível para a SC " + numSC; - } - - // se já tiver código, só registra log e deixa o processo seguir - log.info("✅ Cotação " + numCot + " encontrada no formulário. Processo segue."); + function servicetask114(attempt, message) { + log.info("🚀 ST92 — Verifica se já existe código de cotação no formulário"); + + var numSC = hAPI.getCardValue("numeroSCProtheus"); + var numCot = hAPI.getCardValue("cotacaoSCProtheus"); + + log.info("📌 SC: " + numSC + " | Cotação: " + numCot); + + if (!numSC) { + throw "❌ Número da SC não informado no formulário."; + } + + // se não tiver cotação ainda, força o loop da atividade + if (!numCot || numCot === "000000" || numCot === "000001") { + throw "⏳ Cotação ainda não disponível para a SC " + numSC; + } + + // se já tiver código, só registra log e deixa o processo seguir + log.info("✅ Cotação " + numCot + " encontrada no formulário. Processo segue."); } @@ -1801,7 +1809,7 @@ function servicetask82(attempt, message) { 1 Solicitação de compras - 8 + 86 26 1 @@ -1812,7 +1820,7 @@ function servicetask82(attempt, message) { 1 Solicitação de compras - 8 + 86 125 1 @@ -1823,7 +1831,7 @@ function servicetask82(attempt, message) { 1 Solicitação de compras - 8 + 86 126 1 @@ -1834,7 +1842,7 @@ function servicetask82(attempt, message) { 1 Solicitação de compras - 8 + 86 127 1 @@ -1845,7 +1853,7 @@ function servicetask82(attempt, message) { 1 Solicitação de compras - 8 + 86 129 1 @@ -1856,7 +1864,7 @@ function servicetask82(attempt, message) { 1 Solicitação de compras - 8 + 86 142 1 @@ -1867,7 +1875,7 @@ function servicetask82(attempt, message) { 1 Solicitação de compras - 8 + 86 144 1 @@ -1878,7 +1886,7 @@ function servicetask82(attempt, message) { 1 Solicitação de compras - 8 + 86 152 1 @@ -1889,7 +1897,7 @@ function servicetask82(attempt, message) { 1 Solicitação de compras - 8 + 86 152 2 @@ -1900,7 +1908,7 @@ function servicetask82(attempt, message) { 1 Solicitação de compras - 8 + 86 161 1 diff --git a/compras_digital/workflow/.resources/Solicitação de compras V2.png b/compras_digital/workflow/.resources/Solicitação de compras V2.png index 62c53633809446388ad5377848918cde1ca2618e..76028255df3d0c4d99833819d20141e0bf7e3795 100644 GIT binary patch literal 62926 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 literal 59524 zcmZ^Lby!s0`u12DNU4B`v`DwqP%5P$Ez+rkbPP45#n4DMNJ}?J%%Bb--3*O%_t5pN z@qN!Z?>X1+^B=s1*?T>Ettam1e(sIGvZ5@(je9pB5D3BZXHu#V2p$Roxj1<3BKRaF z0Tu&+EXqHZdh*gWadjNu-)T3TC_u`1feZ?vOsY{ZpER z4%_^zOJh3*A*SXMon2sK`tv|i^U(17QZ}rWUwsGdU zz?fh4-Iez(nQPz2;5G~VyH|%@@BR4kqp)qg=S)FIqh;UdYZs^2kJBXo`u$L7A|=#W zC^t8+!TUK8gDmXYU!RXgIH29{i⪼YqU04_M)$mQ2lks?-P+@#TmIrLGfSd#DXsO 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 Drz!Yy diff --git a/compras_digital/workflow/.resources/Solicitação de compras V2.processimage.svg b/compras_digital/workflow/.resources/Solicitação de compras V2.processimage.svg index a0c695b..55ae151 100644 --- a/compras_digital/workflow/.resources/Solicitação de compras V2.processimage.svg +++ b/compras_digital/workflow/.resources/Solicitação de compras V2.processimage.svg @@ -1,2 +1,2 @@ -CEOGERFComprasTIGestor CCComprasSolicitanteSolicitação de comprasReceber oproduto/serviçoVerificarproblemaValidarcompraTratar erroEnviar SCSelecionarcotaçãoIntegradorCotaçãoCotação forado prazoAnalisarnecessidadede compraAlçadaAprovaçãoCentro decustoAprovaçãoComprasAprovaçãoGERFValorN1ValorN2AprovaçãoCEOReprovar +CEOGERFComprasTIGestor CCComprasSolicitanteSolicitação de comprasReceber oproduto/serviçoVerificarproblemaValidarcompraTratar erroEnviar SCSelecionarcotaçãoIntegradorCotaçãoCotação forado prazoAnalisarnecessidadede compraAlçadaAprovaçãoCentro decustoAprovaçãoComprasAprovaçãoGERFValorN1ValorN2AprovaçãoCEOReprovar diff --git a/compras_digital/workflow/diagrams/Solicitação de compras V2.process b/compras_digital/workflow/diagrams/Solicitação de compras V2.process index abb5a37..e74f379 100644 --- a/compras_digital/workflow/diagrams/Solicitação de compras V2.process +++ b/compras_digital/workflow/diagrams/Solicitação de compras V2.process @@ -9089,7 +9089,7 @@ - + @@ -9134,5 +9134,5 @@ - + \ No newline at end of file diff --git a/compras_digital/workflow/scripts/Solicitação de compras V2.servicetask82.js b/compras_digital/workflow/scripts/Solicitação de compras V2.servicetask82.js index fc81e1b..d0321c1 100644 --- a/compras_digital/workflow/scripts/Solicitação de compras V2.servicetask82.js +++ b/compras_digital/workflow/scripts/Solicitação de compras V2.servicetask82.js @@ -38,10 +38,21 @@ function servicetask82(attempt, message) { log.info("📌 Item adicionado: " + JSON.stringify(item)); } + var filial = String( + hAPI.getCardValue("filialprotheus") || + hAPI.getCardValue("filialProtheus") || + hAPI.getCardValue("codigocentroCusto") || + "" + ).trim(); + if (!filial) { + throw "Campo PROTHEUS da filial não preenchido no formulário (filialprotheus)."; + } + log.info("🏬 Filial PROTHEUS enviada no C1_FILENT: " + filial); + var payload = { "C1_SOLICIT": String(hAPI.getCardValue("usuarioSolicitante")), "C1_EMISSAO": hojeProtheus(), - "C1_FILENT": String(hAPI.getCardValue("filialProtheus")).trim(), + "C1_FILENT": filial, "C1_OBS": String(hAPI.getCardValue("observacoes")), "itens": itens }; @@ -52,9 +63,9 @@ function servicetask82(attempt, message) { var data1 = { companyId: '1', serviceCode: 'Postprod', - endpoint: '/rest/UF_MATA110', + endpoint: '/UF_MATA110', method: 'post', - timeoutService: '100', + timeoutService: '60000', params: payload, // objeto puro headers: { 'Content-Type': 'application/json' @@ -66,21 +77,27 @@ function servicetask82(attempt, message) { var response = clientService.invoke(JSON.stringify(data1)); // SEMPRE stringify aqui log.info("📬 Resposta da API Protheus:"); - log.dir(response); + if (response) { + log.info("HTTP status: " + response.getHttpStatusResult()); + log.info("Body: " + response.getResult()); + } if (response && response.getResult()) { var result = JSON.parse(response.getResult()); if (result.sucesso) { hAPI.setCardValue("numeroSCProtheus", result.C1_NUM || ""); hAPI.setCardValue("statusSCProtheus", "SC cadastrada com sucesso"); + hAPI.setCardValue("statusAtendimento", "Em andamento"); hAPI.setCardValue("solicitanteSCProtheus", result.C1_SOLICIT || ""); hAPI.setCardValue("emissaoSCProtheus", result.C1_EMISSAO || ""); hAPI.setCardValue("qtdItensSCProtheus", String(result.quantidade_itens || "")); hAPI.setCardValue("dataCadastroSCProtheus", result.data_cadastro || ""); hAPI.setCardValue("horaCadastroSCProtheus", result.hora_cadastro || ""); } else { - hAPI.setCardValue("statusSCProtheus", "Erro: " + result.erro); - throw "Erro Protheus: " + result.message; + var erroMsg = result.erro || result.message || JSON.stringify(result); + hAPI.setCardValue("statusSCProtheus", "Erro: " + erroMsg); + hAPI.setCardValue("statusAtendimento", "Erro no envio"); + throw "Erro Protheus: " + erroMsg; } } else { throw "Sem resposta da API Protheus"; From 91483b43c2f117bc16c9e0b5b551eab4eb0bf47c Mon Sep 17 00:00:00 2001 From: Andrey Cunha Date: Wed, 6 May 2026 20:26:40 -0300 Subject: [PATCH 19/25] att --- .gitignore | 1 + .../org.eclipse.e4.workbench/workbench.xmi | 4621 +++++++++-------- .../0.log | 6 + 3 files changed, 2424 insertions(+), 2204 deletions(-) diff --git a/.gitignore b/.gitignore index e10e727..0027a91 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /.metadata/ +Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log diff --git a/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi b/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi index f628a68..8801c23 100644 --- a/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi +++ b/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi @@ -1,9 +1,9 @@ - - + + activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration ModelMigrationProcessor.001 - + @@ -12,9 +12,9 @@ topLevel shellMaximized - - - + + + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -74,85 +74,85 @@ persp.showIn:org.eclipse.eclemma.ui.CoverageView persp.newWizSC:org.eclipse.jpt.jpa.ui.wizard.newJpaProject persp.perspSC:org.eclipse.jpt.ui.jpaPerspective - - - + + + View categoryTag:General - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java Browsing - - - - - + + + + + View categoryTag:General - + View categoryTag:Mylyn - + View categoryTag:General - - + + View categoryTag:General - + View categoryTag:General - + View categoryTag:Server - + View categoryTag:Data Management - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General @@ -160,7 +160,7 @@ - + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -192,54 +192,53 @@ persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateLayoutWizardID persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateWidgetWizardID persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView - - - - + + + + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Fluig - - + + View categoryTag:General - - - - noFocus - + + + + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig @@ -247,3022 +246,3236 @@ + + + persp.actionSet:org.eclipse.mylyn.doc.actionSet + persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation + persp.actionSet:org.eclipse.ui.cheatsheets.actionSet + persp.actionSet:org.eclipse.rse.core.search.searchActionSet + persp.actionSet:org.eclipse.search.searchActionSet + persp.actionSet:org.eclipse.text.quicksearch.actionSet + persp.actionSet:org.eclipse.ui.edit.text.actionSet.annotationNavigation + persp.actionSet:org.eclipse.ui.edit.text.actionSet.navigation + persp.actionSet:org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo + persp.actionSet:org.eclipse.ui.externaltools.ExternalToolsSet + persp.actionSet:org.eclipse.ui.actionSet.keyBindings + persp.actionSet:org.eclipse.ui.actionSet.openFiles + persp.actionSet:org.eclipse.wst.jsdt.chromium.debug.ui.actionSets + persp.newWizSC:org.eclipse.ui.wizards.new.folder + persp.newWizSC:org.eclipse.ui.wizards.new.file + persp.viewSC:org.eclipse.ui.navigator.ProjectExplorer + persp.viewSC:org.eclipse.ui.views.BookmarkView + persp.viewSC:org.eclipse.ui.views.ContentOutline + persp.viewSC:org.eclipse.ui.views.PropertySheet + persp.viewSC:org.eclipse.ui.views.ProblemView + persp.viewSC:org.eclipse.ui.views.ProgressView + persp.viewSC:org.eclipse.ui.views.TaskList + persp.actionSet:org.eclipse.ui.NavigateActionSet + persp.viewSC:org.eclipse.pde.runtime.LogView + persp.newWizSC:org.eclipse.ui.editors.wizards.UntitledTextFileWizard + persp.showIn:org.eclipse.ui.navigator.ProjectExplorer + persp.perspSC:org.eclipse.team.ui.TeamSynchronizingPerspective + persp.showIn:org.eclipse.team.ui.GenericHistoryView + persp.perspSC:org.eclipse.wst.xml.ui.perspective + persp.viewSC:org.eclipse.mylyn.tasks.ui.views.tasks + persp.newWizSC:org.eclipse.mylyn.tasks.ui.wizards.new.repository.task + persp.perspSC:org.eclipse.jdt.ui.JavaPerspective + persp.perspSC:org.eclipse.jdt.ui.JavaBrowsingPerspective + persp.showIn:org.eclipse.egit.ui.RepositoriesView + persp.viewSC:org.eclipse.tm.terminal.view.ui.TerminalsView + persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView + persp.viewSC:org.eclipse.ant.ui.views.AntView + + + + org.eclipse.e4.primaryNavigationStack + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:General + + + + org.eclipse.e4.secondaryNavigationStack + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:Mylyn + + + View + categoryTag:Ant + + + + + + + + View + categoryTag:General + + + + + + org.eclipse.e4.secondaryDataStack + + View + categoryTag:General + + + View + categoryTag:Terminal + + + + + - - + + View categoryTag:Help - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:Help - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Help - - + + org.eclipse.e4.primaryDataStack EditorStack active - - + noFocus + + Editor removeOnHide com.totvs.tds.ecm.designer.bpmneditor active - activeOnClose - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java Browsing - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Server - + View categoryTag:Data Management - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General + + ViewMenu + menuContribution:menu + + - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Mylyn - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:Java - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - - + + + + View + categoryTag:General + + + + + View + categoryTag:Terminal + + + + + View + categoryTag:Ant + + + toolbarSeparator - + - + Draggable - + - + toolbarSeparator - + - + Draggable - + toolbarSeparator - + - + Draggable - + Draggable - + Draggable - + Draggable - + Draggable - + Draggable - + toolbarSeparator - + - + Draggable - + - - toolbarSeparator - - - - toolbarSeparator - - - + Draggable - + + toolbarSeparator + + + + toolbarSeparator + + + + Draggable + + stretch SHOW_RESTORE_MENU - + Draggable HIDEABLE SHOW_RESTORE_MENU - - + + stretch - + Draggable - + Draggable - + Draggable - - + + TrimStack Draggable - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - - - + + + + - - - + + + - - - - - + + + + + - - + + - - + + - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + platform:win32 - - - - - - - - - + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - + + + + - - + + - - - - + + + + - - - - - - - - + + + + + + + + - - + + - - - - - - + + + + + + - - - + + + - - - + + + - - - - - - + + + + + + - - - - - - - - - + + + + + + + + + - - + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + - - + + - - + + platform:win32 - - + + - - + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Editor removeOnHide - + View categoryTag:Ant - + View categoryTag:Gradle - + View categoryTag:Gradle - + View categoryTag:Data Management - + View categoryTag:Data Management - + View categoryTag:Data Management - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Java - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git NoRestore - + View categoryTag:Git - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:Debug - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Web Services - + View categoryTag:Maven - + View categoryTag:Maven - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Oomph - + View categoryTag:API Tools - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Team - + View categoryTag:Team - + View categoryTag:Help - + View categoryTag:Terminal - + View categoryTag:Other - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Debug - + View categoryTag:JavaScript - + View categoryTag:JavaScript - + View categoryTag:JavaScript categoryTag:Other - + View categoryTag:JavaScript categoryTag:Other - + View categoryTag:JavaScript categoryTag:Other - + View categoryTag:Server - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:General - - + + glue move_after:PerspectiveSpacer SHOW_RESTORE_MENU - + move_after:Spacer Glue HIDEABLE SHOW_RESTORE_MENU - + glue move_after:SearchField SHOW_RESTORE_MENU - - - - - + + + persp.actionSet:org.eclipse.mylyn.doc.actionSet + persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation + persp.actionSet:org.eclipse.ui.cheatsheets.actionSet + persp.actionSet:org.eclipse.rse.core.search.searchActionSet + persp.actionSet:org.eclipse.search.searchActionSet + persp.actionSet:org.eclipse.text.quicksearch.actionSet + persp.actionSet:org.eclipse.ui.edit.text.actionSet.annotationNavigation + persp.actionSet:org.eclipse.ui.edit.text.actionSet.navigation + persp.actionSet:org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo + persp.actionSet:org.eclipse.ui.externaltools.ExternalToolsSet + persp.actionSet:org.eclipse.ui.actionSet.keyBindings + persp.actionSet:org.eclipse.ui.actionSet.openFiles + persp.actionSet:org.eclipse.wst.jsdt.chromium.debug.ui.actionSets + persp.newWizSC:org.eclipse.ui.wizards.new.folder + persp.newWizSC:org.eclipse.ui.wizards.new.file + persp.viewSC:org.eclipse.ui.views.BookmarkView + persp.viewSC:org.eclipse.ui.views.PropertySheet + persp.viewSC:org.eclipse.ui.views.ProblemView + persp.viewSC:org.eclipse.ui.views.ProgressView + persp.actionSet:org.eclipse.ui.NavigateActionSet + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateBpmnProjectWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateBpmnDiagramWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateScriptGeneralWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateFormWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateReportWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateDatasetWizardID + persp.newWizSC:com.totvs.tds.ecm.designer.eclipse.ui.CreateEventWizardID + persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateLayoutWizardID + persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateWidgetWizardID + persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView + + + + + View + categoryTag:Java + + + View + categoryTag:General + + + View + categoryTag:Fluig + + + + + View + categoryTag:General + + + + + + + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:Fluig + + + View + categoryTag:Fluig + + + View + categoryTag:Fluig + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log b/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log index 1a10505..a8024c3 100644 --- a/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log +++ b/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log @@ -4,3 +4,9 @@ 2026-03-21 11:10:18,833 [Worker-64: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. 2026-03-21 11:37:49,557 [Worker-1: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. 2026-03-21 13:24:29,481 [Worker-0: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. +2026-04-15 19:52:35,333 [Worker-6: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is out-of-date. Trying to update. +2026-04-15 21:38:09,917 [Worker-5: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. +2026-04-15 22:15:11,855 [Worker-6: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. +2026-05-06 20:14:30,145 [Worker-0: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is out-of-date. Trying to update. +2026-05-06 20:20:13,505 [Worker-4: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. +2026-05-06 20:21:56,730 [Worker-6: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. From 2bbc71eee2c963ef0b834a6cc3847eb954a385a8 Mon Sep 17 00:00:00 2001 From: Andrey Cunha Date: Wed, 6 May 2026 23:19:49 -0300 Subject: [PATCH 20/25] att --- .../org.eclipse.e4.workbench/workbench.xmi | 4486 ++++++++--------- compras_digital/.vscode/servers.json | 4 +- compras_digital/datasets/Ds_ocorrencias.js | 62 - compras_digital/datasets/dsComprasCotacao.js | 183 +- compras_digital/datasets/ds_consultaSC.js | 70 +- compras_digital/datasets/ds_fornecedor.js | 60 - compras_digital/datasets/ds_manutencao.js | 62 - .../Compras_digital/Compras_digital.html | 62 + .../forms/Compras_digital/compras_digital.js | 300 +- .../.resources/Ginseng Produção.ws.cache | 765 ++- .../.resources/Solicitação de compras V2.png | Bin 62926 -> 61957 bytes .../Solicitação de compras V2.process | 4485 ++++++++-------- 12 files changed, 5822 insertions(+), 4717 deletions(-) delete mode 100644 compras_digital/datasets/Ds_ocorrencias.js delete mode 100644 compras_digital/datasets/ds_fornecedor.js delete mode 100644 compras_digital/datasets/ds_manutencao.js diff --git a/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi b/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi index 8801c23..25cbadd 100644 --- a/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi +++ b/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi @@ -1,9 +1,9 @@ - + activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration ModelMigrationProcessor.001 - + @@ -12,9 +12,9 @@ topLevel shellMaximized - - - + + + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -74,85 +74,85 @@ persp.showIn:org.eclipse.eclemma.ui.CoverageView persp.newWizSC:org.eclipse.jpt.jpa.ui.wizard.newJpaProject persp.perspSC:org.eclipse.jpt.ui.jpaPerspective - - - + + + View categoryTag:General - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java Browsing - - - - - + + + + + View categoryTag:General - + View categoryTag:Mylyn - + View categoryTag:General - - + + View categoryTag:General - + View categoryTag:General - + View categoryTag:Server - + View categoryTag:Data Management - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General @@ -160,7 +160,7 @@ - + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -192,53 +192,55 @@ persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateLayoutWizardID persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateWidgetWizardID persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView - - - - + + + + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Fluig - - + + View categoryTag:General - - - - + + + + active + noFocus + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig @@ -246,7 +248,7 @@ - + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -285,60 +287,60 @@ persp.viewSC:org.eclipse.tm.terminal.view.ui.TerminalsView persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView persp.viewSC:org.eclipse.ant.ui.views.AntView - - - + + + org.eclipse.e4.primaryNavigationStack - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + org.eclipse.e4.secondaryNavigationStack - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Mylyn - + View categoryTag:Ant - - - - + + + + View categoryTag:General - + - + org.eclipse.e4.secondaryDataStack - + View categoryTag:General - + View categoryTag:Terminal @@ -347,1681 +349,1679 @@ - - + + View categoryTag:Help - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:Help - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Help - - + + org.eclipse.e4.primaryDataStack EditorStack - active - noFocus - + Editor removeOnHide com.totvs.tds.ecm.designer.bpmneditor - active - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java Browsing - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + active + ViewMenu menuContribution:menu - + - + View categoryTag:Server - + View categoryTag:Data Management - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Mylyn - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:Java - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:Terminal - + View categoryTag:Ant - - + + toolbarSeparator - + - + Draggable - + - + toolbarSeparator - + - + Draggable - + toolbarSeparator - + - + Draggable - + Draggable - + Draggable - + Draggable - + Draggable - + Draggable - + toolbarSeparator - + - + Draggable - + - + Draggable - + toolbarSeparator - + - + toolbarSeparator - + - + Draggable - + stretch SHOW_RESTORE_MENU - + Draggable HIDEABLE SHOW_RESTORE_MENU - - + + stretch - + Draggable - + Draggable - + Draggable - - + + TrimStack Draggable - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - - - + + + + - - - + + + - - - - - + + + + + - - + + - - + + - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + platform:win32 - - - - - - - - - + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - + + + + - - + + - - - - + + + + - - - - - - - - + + + + + + + + - - + + - - - - - - + + + + + + - - - + + + - - - + + + - - - - - - + + + + + + - - - - - - - - - + + + + + + + + + - - + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + - - + + - - + + platform:win32 - - + + - - + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Editor removeOnHide - + View categoryTag:Ant - + View categoryTag:Gradle - + View categoryTag:Gradle - + View categoryTag:Data Management - + View categoryTag:Data Management - + View categoryTag:Data Management - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Java - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git NoRestore - + View categoryTag:Git - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:Debug - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Web Services - + View categoryTag:Maven - + View categoryTag:Maven - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Oomph - + View categoryTag:API Tools - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Team - + View categoryTag:Team - + View categoryTag:Help - + View categoryTag:Terminal - + View categoryTag:Other - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Debug - + View categoryTag:JavaScript - + View categoryTag:JavaScript - + View categoryTag:JavaScript categoryTag:Other - + View categoryTag:JavaScript categoryTag:Other - + View categoryTag:JavaScript categoryTag:Other - + View categoryTag:Server - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:General - - + + glue move_after:PerspectiveSpacer SHOW_RESTORE_MENU - + move_after:Spacer Glue HIDEABLE SHOW_RESTORE_MENU - + glue move_after:SearchField SHOW_RESTORE_MENU - + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -2053,53 +2053,53 @@ persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateLayoutWizardID persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateWidgetWizardID persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView - - - - + + + + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Fluig - - + + View categoryTag:General - - - - + + + + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig @@ -2107,1375 +2107,1375 @@ - - - - - + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/compras_digital/.vscode/servers.json b/compras_digital/.vscode/servers.json index 90f301a..5ae09ec 100644 --- a/compras_digital/.vscode/servers.json +++ b/compras_digital/.vscode/servers.json @@ -2,13 +2,13 @@ "version": "1.0.0", "configurations": [ { - "id": "6ki8w4m1dpmor606g3n0y6sgduhc", + "id": "uyzzp0mq8qomoutcaz19tssb58lcc7", "name": "Ginseng Produção", "host": "comerciode188006.fluig.cloudtotvs.com.br", "ssl": true, "port": 443, "username": "andrey.cunha", - "password": "eyJpdiI6IjUyYTgyOGQ0ZGM1ZWI3ZjNhZWRlNTQ1ZWZiNzAwOWQwIiwic2FsdCI6IjYwYTZjODBjY2RiNDk5OWI3YTc0NmY1ZGY1NTgwOGI5IiwidGV4dCI6IjdmYTA2ZGFhODM1MWI2NzRmNTk1ZTEzMzc1NjMxZjQ1In0=", + "password": "eyJpdiI6IjAyMjdkMjdmZDI1NTczYzFkZmUwMGU4ZWExMWRjZTBmIiwic2FsdCI6ImExMjJlYjdiZDA0MmM3ZGUzYjU3Y2I4YWU4NTUwYzE5IiwidGV4dCI6ImQ2Y2Q4ZjFhNjk0MmQ0MGFhMjQ0NzhjMzExODhiZGQ2In0=", "userCode": "andrey.cunha", "confirmExporting": false, "hasBrowser": false, diff --git a/compras_digital/datasets/Ds_ocorrencias.js b/compras_digital/datasets/Ds_ocorrencias.js deleted file mode 100644 index 7885f7f..0000000 --- a/compras_digital/datasets/Ds_ocorrencias.js +++ /dev/null @@ -1,62 +0,0 @@ -function defineStructure() { - -} -function onSync(lastSyncDate) { - -} -function createDataset(fields, constraints, sortFields) { - - var dataset = DatasetBuilder.newDataset(); - - dataset.addColumn("nomeOcorrencia"); - - // Adicione dados para o dataset, exemplo: - dataset.addRow(["Rádio Parada"]); - dataset.addRow(["Câmera Parada"]); - dataset.addRow(["Organização do Rack"]); - dataset.addRow(["PDV Não Liga"]); - dataset.addRow(["PDV Vencido"]); - dataset.addRow(["PDV Lento"]); - dataset.addRow(["Adquirir PDV"]); - dataset.addRow(["Ativar PDV"]); - dataset.addRow(["Computador de ER parado"]); - dataset.addRow(["Nobreak Apitando"]); - dataset.addRow(["Nobreak Não liga"]); - dataset.addRow(["Manutenção Periódica do Nobreak"]); - dataset.addRow(["Impressora 4200"]); - dataset.addRow(["Impressora 5100"]); - dataset.addRow(["Impressora Brother HL-L5102DW"]); - dataset.addRow(["Impressora sem imprimir"]); - dataset.addRow(["Mobshop Parado"]); - dataset.addRow(["Mobpin Parado"]); - dataset.addRow(["Ativar Mobshop"]); - dataset.addRow(["Trocar Mobshop"]); - dataset.addRow(["Solicitar Equipamentos"]); - dataset.addRow(["Entregar Equipamentos"]); - dataset.addRow(["Solicitar chip"]); - dataset.addRow(["Email sem acesso"]); - dataset.addRow(["Internet sem funcionar"]); - dataset.addRow(["Resgatar Imagens"]); - dataset.addRow(["Internet"]); - dataset.addRow(["Outros"]); - dataset.addRow(["Criar Email de colaborador"]); - dataset.addRow(["Acesso a VPN"]); - dataset.addRow(["Acesso as Pastas da Rede"]); - dataset.addRow(["Protheus"]); - dataset.addRow(["Instalação de Desktop"]); - dataset.addRow(["Instalação de Equipamentos"]); - dataset.addRow(["Instalação Câmera"]); - dataset.addRow(["Instalação de Impressora"]); - dataset.addRow(["Configuração de RB"]); - dataset.addRow(["Redes"]); - - - - - - return dataset; - } - -function onMobileSync(user) { - -} \ No newline at end of file diff --git a/compras_digital/datasets/dsComprasCotacao.js b/compras_digital/datasets/dsComprasCotacao.js index 01ac9d5..50674df 100644 --- a/compras_digital/datasets/dsComprasCotacao.js +++ b/compras_digital/datasets/dsComprasCotacao.js @@ -3,71 +3,172 @@ function createDataset(fields, constraints, sortFields) { dataset.addColumn("C8_FILIAL"); dataset.addColumn("C8_NUM"); + dataset.addColumn("C8_NUMPRO"); dataset.addColumn("C8_ITEM"); dataset.addColumn("C8_PRODUTO"); dataset.addColumn("C8_QUANT"); dataset.addColumn("C8_PRECO"); dataset.addColumn("C8_TOTAL"); - dataset.addColumn("C8_DATPRF"); - dataset.addColumn("C8_EMISSAO"); + dataset.addColumn("C8_FORNECE"); + dataset.addColumn("C8_LOJA"); + dataset.addColumn("C8_COND"); dataset.addColumn("C8_NUMSC"); + dataset.addColumn("C8_ITEMSC"); + dataset.addColumn("C8_NUMPED"); + dataset.addColumn("C8_ITEMPED"); + dataset.addColumn("C8_DATPRF"); + dataset.addColumn("A2_NOME"); + dataset.addColumn("A2_NREDUZ"); dataset.addColumn("B1_DESC"); dataset.addColumn("B1_UM"); - dataset.addColumn("B1_TIPO"); + dataset.addColumn("C8_DESCRI"); + dataset.addColumn("STATUS"); + dataset.addColumn("data_consulta"); + dataset.addColumn("hora_consulta"); + dataset.addColumn("sucesso"); + dataset.addColumn("erro"); + + function emptyRow(sucesso, erro) { + return [ + "", "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", "", + "", "", sucesso ? "true" : "false", erro || "" + ]; + } + + function normalizeDoc(value) { + var v = String(value || "").trim(); + return v.replace(/^0+/, ""); + } + + function consultarCotacao(clientService, numeroCot) { + var endpoints = [ + "/UF_MATA130/" + numeroCot, + "/rest/UF_MATA130/" + numeroCot, + "/rest/uf_mata130/" + numeroCot + ]; + + var ultimoErro = ""; + + for (var e = 0; e < endpoints.length; e++) { + try { + var data = { + companyId: "1", + serviceCode: "Postprod", + endpoint: endpoints[e], + method: "get", + timeoutService: "60000", + headers: { + "Content-Type": "application/json" + } + }; + + var response = clientService.invoke(JSON.stringify(data)); + if (!response || !response.getResult()) { + ultimoErro = "Sem resposta da API"; + continue; + } + + var result = JSON.parse(response.getResult()); + if (result && result.sucesso && result.cotacoes && result.cotacoes.length) { + return { + sucesso: true, + endpoint: endpoints[e], + result: result + }; + } + + if (result && !result.sucesso && result.message) { + ultimoErro = String(result.message); + } else { + ultimoErro = "Cotacao sem itens retornados"; + } + } catch (errEndpoint) { + ultimoErro = String(errEndpoint); + } + } + + return { + sucesso: false, + erro: ultimoErro || "Falha ao consultar cotacao" + }; + } try { - var numeroCot = null; + var numeroCot = ""; if (constraints) { for (var i = 0; i < constraints.length; i++) { if (constraints[i].fieldName == "numCotacao") { - numeroCot = constraints[i].initialValue; + numeroCot = String(constraints[i].initialValue || "").trim(); } } } + if (!numeroCot) { + dataset.addRow(emptyRow(false, "Numero da cotacao nao informado")); + return dataset; + } + var clientService = fluigAPI.getAuthorizeClientService(); - var data = { - companyId: "1", - serviceCode: "Postprod", - endpoint: "/rest/uf_mata131", // sem número -> ele retorna todos - method: "get", - timeoutService: "60000" - }; + var retorno = consultarCotacao(clientService, numeroCot); + if (!retorno.sucesso) { + dataset.addRow(emptyRow(false, retorno.erro)); + return dataset; + } - var vo = clientService.invoke(JSON.stringify(data)); - if (vo && vo.getResult()) { - var objData = JSON.parse(vo.getResult()); - var itens = objData["solicitacoes"]; + var result = retorno.result; + var cotacoes = result.cotacoes || []; + if (!cotacoes.length) { + dataset.addRow(emptyRow(false, "Cotacao sem itens retornados")); + return dataset; + } - if (itens && itens.length > 0) { - for (var i = 0; i < itens.length; i++) { - var item = itens[i]; + var filtro = normalizeDoc(numeroCot); + var adicionados = 0; + for (var j = 0; j < cotacoes.length; j++) { + var item = cotacoes[j] || {}; - // 🔎 se veio constraint, filtra pelo C8_NUM - if (numeroCot && item["C8_NUM"] != numeroCot) { - continue; - } - - dataset.addRow([ - item["C8_FILIAL"] || "", - item["C8_NUM"] || "", - item["C8_ITEM"] || "", - item["C8_PRODUTO"] || "", - item["C8_QUANT"] || "", - item["C8_PRECO"] || "", - item["C8_TOTAL"] || "", - item["C8_DATPRF"] || "", - item["C8_EMISSAO"] || "", - item["C8_NUMSC"] || "", - item["B1_DESC"] || "", - item["B1_UM"] || "", - item["B1_TIPO"] || "" - ]); - } + var numeroItem = String(item.C8_NUM || "").trim(); + if (filtro && normalizeDoc(numeroItem) !== filtro) { + continue; } + + dataset.addRow([ + item.C8_FILIAL || "", + numeroItem, + item.C8_NUMPRO || "", + item.C8_ITEM || "", + item.C8_PRODUTO || "", + item.C8_QUANT || "", + item.C8_PRECO || "", + item.C8_TOTAL || "", + item.C8_FORNECE || "", + item.C8_LOJA || "", + item.C8_COND || "", + item.C8_NUMSC || "", + item.C8_ITEMSC || "", + item.C8_NUMPED || "", + item.C8_ITEMPED || "", + item.C8_DATPRF || "", + item.A2_NOME || "", + item.A2_NREDUZ || "", + item.B1_DESC || "", + item.B1_UM || "", + item.C8_DESCRI || "", + item.STATUS || "", + result.data_consulta || "", + result.hora_consulta || "", + "true", + "" + ]); + adicionados++; + } + + if (adicionados === 0) { + dataset.addRow(emptyRow(false, "Numero da cotacao nao localizado no retorno")); } } catch (e) { - dataset.addRow(["Erro: " + e.message]); + dataset.addRow(emptyRow(false, "Erro ao consultar cotacao: " + e)); } return dataset; diff --git a/compras_digital/datasets/ds_consultaSC.js b/compras_digital/datasets/ds_consultaSC.js index c89b69c..6e9a04b 100644 --- a/compras_digital/datasets/ds_consultaSC.js +++ b/compras_digital/datasets/ds_consultaSC.js @@ -22,9 +22,62 @@ function createDataset(fields, constraints, sortFields) { dataset.addColumn("data_consulta"); dataset.addColumn("hora_consulta"); dataset.addColumn("sucesso"); + dataset.addColumn("COTACOES_JSON"); + dataset.addColumn("COTACAO_ERRO"); function emptyRow() { - return ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "false"]; + return ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "false", "", ""]; + } + + function consultarCotacao(clientService, cotacao) { + var endpoints = [ + "/UF_MATA130/" + cotacao, + "/rest/UF_MATA130/" + cotacao, + "/rest/uf_mata130/" + cotacao + ]; + + var ultimoErro = ""; + for (var i = 0; i < endpoints.length; i++) { + try { + var dataCot = { + companyId: "1", + serviceCode: "Postprod", + endpoint: endpoints[i], + method: "get", + timeoutService: "60000", + headers: { + "Content-Type": "application/json" + } + }; + + var responseCot = clientService.invoke(JSON.stringify(dataCot)); + if (!responseCot || !responseCot.getResult()) { + ultimoErro = "Sem resposta ao consultar cotacao"; + continue; + } + + var resultCot = JSON.parse(responseCot.getResult()); + if (resultCot && resultCot.sucesso && resultCot.cotacoes && resultCot.cotacoes.length > 0) { + return { + sucesso: true, + cotacoes: resultCot.cotacoes + }; + } + + if (resultCot && resultCot.message) { + ultimoErro = String(resultCot.message); + } else { + ultimoErro = "Cotacao sem itens retornados"; + } + } catch (eCot) { + ultimoErro = String(eCot); + } + } + + return { + sucesso: false, + erro: ultimoErro || "Falha ao consultar cotacao" + }; } try { @@ -66,6 +119,17 @@ function createDataset(fields, constraints, sortFields) { cotacao = ""; } + var cotacoesJson = ""; + var cotacaoErro = ""; + if (cotacao) { + var consultaCot = consultarCotacao(clientService, cotacao); + if (consultaCot.sucesso) { + cotacoesJson = JSON.stringify(consultaCot.cotacoes || []); + } else { + cotacaoErro = consultaCot.erro || ""; + } + } + dataset.addRow([ sc.C1_FILIAL || "", sc.C1_NUM || "", @@ -87,7 +151,9 @@ function createDataset(fields, constraints, sortFields) { sc.STATUS || "", result.data_consulta || "", result.hora_consulta || "", - "true" + "true", + cotacoesJson, + cotacaoErro ]); } else { dataset.addRow(emptyRow()); diff --git a/compras_digital/datasets/ds_fornecedor.js b/compras_digital/datasets/ds_fornecedor.js deleted file mode 100644 index f126680..0000000 --- a/compras_digital/datasets/ds_fornecedor.js +++ /dev/null @@ -1,60 +0,0 @@ -function defineStructure() { - addColumn("codigo"); - addColumn("nome"); - -} -function onSync(lastSyncDate) { - -} -function createDataset(fields, constraints, sortFields) { - - var dataset = DatasetBuilder.newDataset(); - var dataSource = "/jdbc/ProtheusDSs"; // Nome da conexão cadastrada no Fluig - var ic = new javax.naming.InitialContext(); - var ds = ic.lookup(dataSource); - var conn = ds.getConnection(); - var stmt = null; - var rs = null; - - try { - log.info("Iniciando execução do dataset..."); - - var sql = "SELECT a2_cod, a2_nome FROM SA2010 where D_E_L_E_T_ = '';" - log.info("Query SQL: " + sql); - - stmt = conn.prepareStatement(sql); - rs = stmt.executeQuery(); - - dataset.addColumn("codigo"); - dataset.addColumn("nome"); - - var encontrouResultados = false; - while (rs.next()) { - encontrouResultados = true; - log.info("Registro encontrado: " + rs.getString("a2_cod") + " - " + rs.getString("a2_nome")); - dataset.addRow([rs.getString("a2_cod"), rs.getString("a2_nome")]); - } - - if (!encontrouResultados) { - log.info("Nenhum registro encontrado para a consulta."); - } - - } catch (e) { - log.error("Erro ao executar dataset: " + e.message); - } finally { - try { - if (rs) rs.close(); - if (stmt) stmt.close(); - if (conn) conn.close(); - } catch (e) { - log.error("Erro ao fechar recursos: " + e.message); - } - } - - return dataset; - -} - -function onMobileSync(user) { - -} \ No newline at end of file diff --git a/compras_digital/datasets/ds_manutencao.js b/compras_digital/datasets/ds_manutencao.js deleted file mode 100644 index 39586d5..0000000 --- a/compras_digital/datasets/ds_manutencao.js +++ /dev/null @@ -1,62 +0,0 @@ -function defineStructure() { - -} -function onSync(lastSyncDate) { - -} -function createDataset(fields, constraints, sortFields) { - - var dataset = DatasetBuilder.newDataset(); - - dataset.addColumn("nomeOcorrenciaManutencao"); - - // Adicione dados para o dataset, exemplo: - dataset.addRow(["Substituição de lâmpada AR 111"]); - dataset.addRow(["Reparo em fita de led ( Serviço de solda )"]); - dataset.addRow(["Fonte de 5ap para fita de led dos móveis"]); - dataset.addRow(["Letreiro sem funcionar"]); - dataset.addRow(["Disjuntor desarmando"]); - dataset.addRow(["Tomadas do caixa sem funcionar"]); - dataset.addRow(["Troca de lâmpadas tubular branco frio - 6500k 9w ER salão de vendas"]); - dataset.addRow(["Substituição lâmpada bulbo 15w estoque"]); - dataset.addRow(["Substituição de Painel de led 62,5x62,5 40w 6500k branco frio (ER,CD )"]); - dataset.addRow(["Interruptor sem funcionar"]); - dataset.addRow(["Painel de led 30x30 24W 6500k ( wc, copa )"]); - dataset.addRow(["Ponto elétrico ( Copa, estoque, pdv , vendas)"]); - dataset.addRow(["Visita emergencial ( Disjuntor geral desarmando )"]); - dataset.addRow(["Fonte de 10ap para letreiro"]); - dataset.addRow(["Central Nobreak 2 Contr. Motor Dc Porta Aço Enrolar Aut. 24v"]); - dataset.addRow(["Central 2 Contr. Motor AC Porta Aço Enrolar Aut. 24v"]); - dataset.addRow(["Motor De Porta De Enrolar De Aço Ac de 100 á 500 Kg 220v"]); - dataset.addRow(["Motor P/porta De Aço De Enrolar Dc 100 á 800 kg 220v C/ com central Nobreak"]); - dataset.addRow(["Manutenção preventiva em porta de enrolar automática"]); - dataset.addRow(["Serviço emergencial porta de enrolar não quer abrir ou descer"]); - dataset.addRow(["Controle para porta de enrolar automática + configuração"]); - dataset.addRow(["Ar-condicionado"]); - dataset.addRow(["Vazamento no estoque"]); - dataset.addRow(["Torneira gotejando ( copa,wc )"]); - dataset.addRow(["Vaso sanitário entupido"]); - dataset.addRow(["Pintura da fachada"]); - dataset.addRow(["Pintura do estoque"]); - dataset.addRow(["Pintura geral da loja"]); - dataset.addRow(["Caixa de gordura entupida"]); - dataset.addRow(["Telhado com vazamento"]); - dataset.addRow(["Instalação de porta copo, papel toalha etc..."]); - dataset.addRow(["Reparo de gesso"]); - dataset.addRow(["Fechadura para porta de vidro"]); - dataset.addRow(["Puxador da porta caindo ( vidro, retaguarda, copa etc..."]); - dataset.addRow(["Porta de vidro arrastando"]); - dataset.addRow(["Cadeira de make com defeito"]); - dataset.addRow(["Porta dos móveis caindo"]); - dataset.addRow(["Confecção de móvel ( Copa, retaguarda etc...)"]); - dataset.addRow(["Outros"]); - dataset.addRow(["Demarcações"]); - - return dataset; -} - - - -function onMobileSync(user) { - -} \ No newline at end of file diff --git a/compras_digital/forms/Compras_digital/Compras_digital.html b/compras_digital/forms/Compras_digital/Compras_digital.html index 3e3d360..7c4501e 100644 --- a/compras_digital/forms/Compras_digital/Compras_digital.html +++ b/compras_digital/forms/Compras_digital/Compras_digital.html @@ -258,6 +258,56 @@ font-size: 13px; } + .sc-cotacao-track { + margin-top: 14px; + padding: 12px; + border-radius: 10px; + background: #fff; + box-shadow: inset 0 0 0 1px #dfe8f0; + } + + .sc-cotacao-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; + margin-bottom: 8px; + } + + .sc-cotacao-list { + margin: 0; + padding: 0; + list-style: none; + } + + .sc-cotacao-item { + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; + padding: 8px 0; + border-top: 1px solid #edf2f7; + } + + .sc-cotacao-item:first-child { + border-top: 0; + padding-top: 0; + } + + .sc-cotacao-item:last-child { + padding-bottom: 0; + } + + .sc-cotacao-item-info { + color: #324a5f; + font-size: 13px; + } + + .sc-cotacao-item-info strong { + color: #20384d; + font-weight: 700; + } + #tbCotacao { table-layout: fixed; width: 100%; @@ -656,6 +706,18 @@

    Linha do tempo da SC

      + +
      +
      +

      Acompanhamento da cotação

      + Sem cotação +
      +
        +
      • + Aguardando vínculo da cotação na SC. +
      • +
      +
      diff --git a/compras_digital/forms/Compras_digital/compras_digital.js b/compras_digital/forms/Compras_digital/compras_digital.js index 179993a..27fe6f4 100644 --- a/compras_digital/forms/Compras_digital/compras_digital.js +++ b/compras_digital/forms/Compras_digital/compras_digital.js @@ -455,6 +455,66 @@ function limparNumeroDocumento(valor) { return v; } +function normalizarCodigoComparacao(valor) { + var v = String(valor || "").trim(); + if (!v) return ""; + return v.replace(/^0+/, ""); +} + +function documentoEhPlaceholder(valor) { + var v = String(valor || "").trim().toUpperCase(); + if (!v) return true; + if (v === "XXXX" || v === "XXXXXX") return true; + return /^X+$/.test(v); +} + +function linhaCotacaoVencedora(row) { + var pedido = String(row.C8_NUMPED || "").trim(); + var itemPedido = String(row.C8_ITEMPED || "").trim(); + var fornece = String(row.C8_FORNECE || "").trim(); + var loja = String(row.C8_LOJA || "").trim(); + + if (documentoEhPlaceholder(pedido)) return false; + if (documentoEhPlaceholder(itemPedido)) return false; + if (!fornece || !loja) return false; + + return true; +} + +function possuiFornecedorCotacao(row) { + var fornece = String(row.C8_FORNECE || "").trim(); + var loja = String(row.C8_LOJA || "").trim(); + return !!(fornece && loja); +} + +function classificarLinhaCotacao(row) { + var status = String(row.STATUS || "").trim().toUpperCase(); + + if (linhaCotacaoVencedora(row)) { + return { tipo: "PEDIDO_GERADO", label: "VENCEDOR", badge: "badge bg-success", tipoFornecedor: "Fornecedor homologado" }; + } + + if (possuiFornecedorCotacao(row)) { + return { tipo: "FORNECEDOR_HOMOLOGADO", label: "Homologado", badge: "badge bg-info", tipoFornecedor: "Fornecedor homologado" }; + } + + if (status.indexOf("PEDIDO_GERADO") >= 0) { + return { tipo: "PERDEDOR", label: "PERDEDOR", badge: "badge bg-warning", tipoFornecedor: "-" }; + } + + if (!possuiFornecedorCotacao(row)) { + return { tipo: "NOVO_FORNECEDOR", label: "Novo", badge: "badge bg-primary", tipoFornecedor: "Novo fornecedor" }; + } + + return { tipo: "EM_COTACAO", label: "EM COTACAO", badge: "badge bg-secondary", tipoFornecedor: "-" }; +} + +function formatarValorCotacao(valor) { + var txt = String(valor || "").trim(); + if (!txt) return "-"; + return floatToBRL(parseNumeroCotacao(txt)); +} + function comporDataHora(data, hora) { var d = String(data || "").trim(); var h = String(hora || "").trim(); @@ -547,6 +607,220 @@ function renderizarTimelineSC(dados) { $("#scTimeline").html(html); } +function renderizarResultadoCotacao(resumo) { + var badge = $("#cotacaoResultado_label"); + var lista = $("#cotacaoResultadoLista"); + if (!badge.length || !lista.length) return; + + if (!resumo || !resumo.detalhes || !resumo.detalhes.length) { + setBadge("#cotacaoResultado_label", "Sem cotacao"); + lista.html('
    • Aguardando vinculo da cotacao na SC.
    • '); + return; + } + + var statusResumo = "Sem fornecedor definido"; + if ((resumo.qtdPedidoGerado || 0) > 0) { + statusResumo = "Pedido gerado em " + resumo.qtdPedidoGerado + " item(ns)"; + } else if ((resumo.qtdFornecedorHomologado || 0) > 0) { + statusResumo = "Fornecedor homologado em " + resumo.qtdFornecedorHomologado + " item(ns)"; + } else if ((resumo.qtdNovoFornecedor || 0) > 0) { + statusResumo = "Novo fornecedor em " + resumo.qtdNovoFornecedor + " item(ns)"; + } + + setBadge("#cotacaoResultado_label", statusResumo); + + var html = resumo.detalhes.map(function (linha) { + var numeroTxt = escapeHTML(linha.numero || "-"); + var itemTxt = escapeHTML(linha.item || "-"); + var produtoTxt = escapeHTML(linha.produto || "-"); + var fornecedorTxt = escapeHTML(linha.fornecedor || "-"); + var tipoFornecedorTxt = escapeHTML(linha.tipoFornecedor || "-"); + var precoTxt = escapeHTML(formatarValorCotacao(linha.preco)); + var totalTxt = escapeHTML(formatarValorCotacao(linha.total)); + var pedidoTxt = escapeHTML(linha.pedido || "-"); + var statusApiTxt = escapeHTML(linha.statusApi || "-"); + var statusTxt = escapeHTML(linha.label || "EM COTACAO"); + var badgeStatus = linha.badge || "badge bg-secondary"; + + return [ + '
    • ', + ' Cotacao ' + numeroTxt + ' | Item ' + itemTxt + " | Produto: " + produtoTxt + " | Fornecedor: " + fornecedorTxt + " | Tipo: " + tipoFornecedorTxt + " | Preco: " + precoTxt + " | Total: " + totalTxt + " | Pedido: " + pedidoTxt + " | Status: " + statusApiTxt + "", + ' ' + statusTxt + "", + "
    • " + ].join(""); + }).join(""); + + lista.html(html); +} + +function renderizarErroCotacao(mensagem) { + var lista = $("#cotacaoResultadoLista"); + if (!lista.length) return; + + setBadge("#cotacaoResultado_label", "Erro consulta cotacao"); + lista.html( + '
    • ' + + escapeHTML(mensagem || "Nao foi possivel carregar a cotacao no momento.") + + "
    • " + ); +} + +function montarResumoCotacaoPorLinhas(rows, cotacao) { + if (!rows || !rows.length) return null; + + var filtroCotacao = normalizarCodigoComparacao(cotacao); + var filtradas = rows.filter(function (row) { + var erro = String(row.erro || row.ERRO || "").trim(); + if (erro) return false; + + var sucesso = String(row.sucesso || row.SUCESSO || "").trim().toLowerCase(); + if (sucesso === "false") return false; + + var numeroLinha = normalizarCodigoComparacao(row.C8_NUM || ""); + if (filtroCotacao && numeroLinha && numeroLinha !== filtroCotacao) return false; + + var item = String(row.C8_ITEM || row.C8_ITEMSC || "").trim(); + var fornecedor = String(row.C8_FORNECE || "").trim(); + var pedido = String(row.C8_NUMPED || "").trim(); + return !!(item || fornecedor || pedido); + }); + + if (!filtradas.length) return null; + + var porItem = {}; + var detalhes = []; + filtradas.forEach(function (row) { + var item = String(row.C8_ITEM || row.C8_ITEMSC || "").trim(); + if (!item) return; + if (!porItem[item]) porItem[item] = []; + porItem[item].push(row); + + var classif = classificarLinhaCotacao(row); + detalhes.push({ + numero: String(row.C8_NUM || "").trim(), + item: item, + produto: String(row.C8_PRODUTO || "").trim(), + fornecedor: possuiFornecedorCotacao(row) + ? (String(row.C8_FORNECE || "").trim() + "/" + String(row.C8_LOJA || "").trim()) + : "", + preco: row.C8_PRECO, + total: row.C8_TOTAL, + pedido: String(row.C8_NUMPED || "").trim(), + statusApi: String(row.STATUS || "").trim(), + tipo: classif.tipo, + label: classif.label, + badge: classif.badge, + tipoFornecedor: classif.tipoFornecedor + }); + }); + + var itens = []; + var qtdPedidoGerado = 0; + var qtdFornecedorHomologado = 0; + var qtdNovoFornecedor = 0; + + Object.keys(porItem).sort().forEach(function (item) { + var linhas = porItem[item]; + var vencedorPedido = null; + var fornecedorHomologado = null; + var fornecedorNovo = null; + + for (var i = 0; i < linhas.length; i++) { + if (linhaCotacaoVencedora(linhas[i])) { + vencedorPedido = linhas[i]; + break; + } + var fornece = String(linhas[i].C8_FORNECE || "").trim(); + var loja = String(linhas[i].C8_LOJA || "").trim(); + if (!fornecedorHomologado && fornece && loja) { + fornecedorHomologado = linhas[i]; + } + if (!fornecedorNovo && !fornece && !loja) { + fornecedorNovo = linhas[i]; + } + } + + if (vencedorPedido) { + qtdPedidoGerado++; + itens.push({ + item: item, + fornecedor: String(vencedorPedido.C8_FORNECE || "").trim() + "/" + String(vencedorPedido.C8_LOJA || "").trim(), + pedido: String(vencedorPedido.C8_NUMPED || "").trim(), + tipo: "PEDIDO_GERADO" + }); + return; + } + + if (fornecedorHomologado) { + qtdFornecedorHomologado++; + itens.push({ + item: item, + fornecedor: String(fornecedorHomologado.C8_FORNECE || "").trim() + "/" + String(fornecedorHomologado.C8_LOJA || "").trim(), + pedido: String(fornecedorHomologado.C8_NUMPED || "").trim(), + tipo: "FORNECEDOR_HOMOLOGADO" + }); + return; + } + + if (fornecedorNovo) { + qtdNovoFornecedor++; + itens.push({ + item: item, + fornecedor: String(fornecedorNovo.A2_NOME || fornecedorNovo.A2_NREDUZ || "").trim(), + pedido: String(fornecedorNovo.C8_NUMPED || "").trim(), + tipo: "NOVO_FORNECEDOR" + }); + return; + } + + itens.push({ + item: item, + fornecedor: "", + pedido: "", + tipo: "EM_COTACAO" + }); + }); + + return { + itens: itens, + detalhes: detalhes, + qtdPedidoGerado: qtdPedidoGerado, + qtdFornecedorHomologado: qtdFornecedorHomologado, + qtdNovoFornecedor: qtdNovoFornecedor + }; +} + +function consultarResultadoCotacao(cotacao) { + if (!cotacao || typeof DatasetFactory === "undefined" || typeof ConstraintType === "undefined") { + renderizarResultadoCotacao(null); + return; + } + + try { + var cCotacao = DatasetFactory.createConstraint("numCotacao", cotacao, cotacao, ConstraintType.MUST); + var ds = DatasetFactory.getDataset("dsComprasCotacao", null, [cCotacao], null); + var rows = (ds && ds.values) ? ds.values : []; + + if (!rows.length) { + renderizarResultadoCotacao(null); + return; + } + + var erroLinha = rows.find(function (row) { + return String(row.erro || row.ERRO || "").trim(); + }); + if (erroLinha) { + renderizarErroCotacao(String(erroLinha.erro || erroLinha.ERRO || "").trim()); + return; + } + + renderizarResultadoCotacao(montarResumoCotacaoPorLinhas(rows, cotacao)); + } catch (e) { + console.warn("Nao foi possivel consultar resultado da cotacao no dsComprasCotacao:", e); + renderizarResultadoCotacao(null); + } +} + function focarTimelineSC() { var secao = $("#scTimelineSection"); if (!secao.length) return; @@ -607,7 +881,7 @@ function montarStatusAndamento(scRow, cotacao, pedido) { return ""; } -function preencherResumoSC() { +function preencherResumoSC(resumoCotacao, erroCotacao) { var numero = valorCampo("numeroSCProtheus"); var statusCadastro = valorCampo("statusSCProtheus"); var solicitante = valorCampo("solicitanteSCProtheus"); @@ -650,6 +924,16 @@ function preencherResumoSC() { cotacao: cotacao, pedido: pedido }); + + if (erroCotacao) { + renderizarErroCotacao(erroCotacao); + } else if (resumoCotacao && resumoCotacao.itens && resumoCotacao.itens.length) { + renderizarResultadoCotacao(resumoCotacao); + } else if (cotacao) { + consultarResultadoCotacao(cotacao); + } else { + renderizarResultadoCotacao(null); + } } function consultarAndamentoSC() { @@ -678,7 +962,19 @@ function consultarAndamentoSC() { var andamento = montarStatusAndamento(row, cotacao, pedido); if (andamento) $("#statusAtendimento").val(andamento); - preencherResumoSC(); + var resumoCotacao = null; + var erroCotacao = String(row.COTACAO_ERRO || "").trim(); + var jsonCotacoes = String(row.COTACOES_JSON || "").trim(); + if (jsonCotacoes) { + try { + var cotacoes = JSON.parse(jsonCotacoes); + resumoCotacao = montarResumoCotacaoPorLinhas(cotacoes, cotacao); + } catch (eCot) { + if (!erroCotacao) erroCotacao = "Falha ao ler cotacoes retornadas pelo ds_consultaSC"; + } + } + + preencherResumoSC(resumoCotacao, erroCotacao); } catch (e) { console.warn("Nao foi possivel consultar andamento da SC no ds_consultaSC:", e); } diff --git a/compras_digital/workflow/.resources/Ginseng Produção.ws.cache b/compras_digital/workflow/.resources/Ginseng Produção.ws.cache index cb3a526..98d9236 100644 --- a/compras_digital/workflow/.resources/Ginseng Produção.ws.cache +++ b/compras_digital/workflow/.resources/Ginseng Produção.ws.cache @@ -1,5 +1,5 @@ - + volume @@ -646,5 +646,768 @@ + + camposFormulario, documentoId = 9305 + + + activity + + + centro_custo + + + ceo_validacao_aprova + + + codigocentroCusto + + + Codproduto + + + cotacaoSCProtheus + + + currentUserId + + + currentUsermail + + + currentUserName + + + dataCadastroSCProtheus + + + dataNec + + + dataValidacaoItens + + + data_validacao_aprova + + + data_validacao_aprova_ceo + + + data_validacao_aprova_gerf + + + data_validacao_aprova_gestor + + + data_validacao_gestor + + + descProduto + + + emailSolicitante + + + emissaoSCProtheus + + + empresa + + + estabelecimento + + + fdComprovante + + + filialdest + + + filialest + + + filialprotheus + + + fnComprovante + + + formMode + + + gerf_validacao_aprova + + + gestor_cc + + + gestor_validacao_aprova + + + horaCadastroSCProtheus + + + justificativaDecisaoItens + + + justificativaValidaProblema + + + justi_decisaogc + + + justi_decisao_aprova + + + justi_decisao_aprova_ceo + + + justi_decisao_aprova_gerente + + + justi_decisao_aprova_gestor + + + justi_decisao_gc + + + justi_decisao_gerf + + + justi_decisao_gestor + + + justi_decisao_solic + + + justi_decisao__soli + + + moreInfo + + + numeroSCProtheus + + + observacoes + + + observacoesdosolicitante + + + pedidoSCProtheus + + + produtoCod + + + produtoDesc + + + produtoLink + + + qtd + + + qtdItensSCProtheus + + + quantidade + + + requesterId + + + requesterMail + + + solicitanteSCProtheus + + + statusAtendimento + + + statusSCProtheus + + + tipoSolicitacao + + + urgencia + + + userValidacaoItens + + + user_validacao_aprova + + + user_validacao_gestor + + + usuarioSolicitante + + + validacaoItens + + + valorTotalCotacao + + + WKNumProces + + + + + forms + + + + + FLUIGADHOC + + + FLUIGADHOC + + + 3 + + + + + + + FLUIGADHOCPROCESS + + + FLUIGADHOCPROCESS + + + 4 + + + + + + + totvsflow_dataset_tipo_ocorrencia + + + totvsflow_dataset_tipo_ocorrencia + + + 14 + + + + + + + totvsflow_abertura_chamado + + + totvsflow_abertura_chamado + + + 15 + + + + + + + DSFormulariodeAberturadechamado + + + Formulário de Abertura de chamado + + + 20 + + + + + + + Abertura_de_chamados + + + Solicitação de abertura de chamados + + + 21 + + + + + + + DSvistoriadeServico + + + vistoriadeServico + + + 24 + + + + + + + DSFormulariodeReservadesala + + + Formulário de Reserva de sala + + + 34 + + + + + + + totvsflow_dataset_centrocusto + + + totvsflow_dataset_centrocusto + + + 103 + + + + + + + totvsflow_dataset_cadastro_item + + + totvsflow_dataset_cadastro_item + + + 104 + + + + + + + totvsflow_dataset_estabelecimento + + + totvsflow_dataset_estabelecimento + + + 105 + + + + + + + totvsflow_solicitacao_compras + + + totvsflow_solicitacao_compras + + + 165 + + + + + + + aberturadechamado_manutencao + + + aberturadechamado_manutencao + + + 400 + + + + + + + Solicitacao_transferencia + + + Solicitacao_transferencia + + + 590 + + + + + + + recrutamento + + + recrutamento + + + 823 + + + + + + + kit_aniversariantes + + + Aniversariantes + + + 7690 + + + + + + + kit_cardapio + + + Cardápio do Dia + + + 7695 + + + + + + + kit_convenios + + + Convênios + + + 7703 + + + + + + + kit_news + + + Notícias + + + 7709 + + + + + + + compras_digital + + + compras_digital + + + 9305 + + + + + + + dpf_di_formulario_processo_admissao + + + Digte_Public_Form_Di_Formulario_Processo_Admissao_Protheus + + + 9626 + + + + + + + dpf_cadastro_status + + + Digte_Public_Form_Status + + + 9627 + + + + + + + dpf_configuracoes + + + Digte_Public_Form_Configuracoes + + + 9628 + + + + + + + dpf_cadastro_jornada + + + Digte_Public_Form_Jornada + + + 9629 + + + + + + + dpf_tipo_documento + + + Digte_Public_Form_Tipo_Documento + + + 9630 + + + + + + + dpf_dataset + + + Digte_Public_Form_Dataset + + + 9631 + + + + + + + dpf_di_configuracao + + + Digte_Public_Form_Di_Configuracoes + + + 9632 + + + + + + + dpf_di_beneficio + + + Digte_Public_Form_Di_Beneficios + + + 9633 + + + + + + + dpf_di_compl_contrato + + + Digte_Public_Form_Di_Comp_Contrato + + + 9634 + + + + + + + dpf_di_funcao_jornada + + + Digte_Public_Form_Di_Funcao_Jornada + + + 9635 + + + + + + + dpf_dataset_estrutura + + + Digte_Public_Form_Di_Dataset_Estrutura + + + 9636 + + + + + + + dpf_grupo_tipo_contrato + + + Digte_Public_Form_Grupo_Tipo_Contrato + + + 9637 + + + + + + + dpf_tipo_contrato + + + Digte_Public_Form_Tipo_Contrato + + + 9638 + + + + + + + dpf_di_traducao_campo_valor + + + Digte_Public_Form_Di_Traducao_Campo_Valor + + + 9639 + + + + + + + dpf_di_restricoes_cpf + + + Digte_Public_Form_Di_Formulario_Restricao_CPF + + + 9640 + + + + + + + dpf_di_compl_vt + + + Digte_Public_Form_Di_Compl_VT + + + 9641 + + + + + + + dpf_di_traducao_campo + + + Digte_Public_Form_Di_Traducao_Campo + + + 9995 + + + + + + + desligamento + + + desligamento + + + 12959 + + + + + + + checklist + + + checklist + + + 40213 + + + + + + + totvsflow_lancamento_documento + + + totvsflow_lancamento_documento + + + 41254 + + + + + + + transferenciav2 + + + transferência + + + 43582 + + + + + + + desligamentov2 + + + desligamentov2 + + + 46963 + + + + + diff --git a/compras_digital/workflow/.resources/Solicitação de compras V2.png b/compras_digital/workflow/.resources/Solicitação de compras V2.png index 76028255df3d0c4d99833819d20141e0bf7e3795..f973cdad006759a29fc74ece9de928ef1cd10784 100644 GIT binary patch literal 61957 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 QN$SfNH7{hH`|IKV0nRWDZ2$lO literal 62926 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 diff --git a/compras_digital/workflow/diagrams/Solicitação de compras V2.process b/compras_digital/workflow/diagrams/Solicitação de compras V2.process index e74f379..2b634bb 100644 --- a/compras_digital/workflow/diagrams/Solicitação de compras V2.process +++ b/compras_digital/workflow/diagrams/Solicitação de compras V2.process @@ -1,151 +1,152 @@ - - - - - + + + + + + - - + + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - + - - - + + + - - - + + + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - - + + + - - - + + + - + @@ -161,9 +162,9 @@ - - - + + + @@ -172,85 +173,85 @@ - + - - + + - - + + - + - - - + + + - - - + + + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - + - - + + - - - + + + - + - + - - - + + + - - - + + + - + @@ -260,54 +261,54 @@ - - + + - - - + + + - + - + - + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - - + + + @@ -316,64 +317,64 @@ - + - - + + - - + + - + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - - + + + @@ -382,22 +383,22 @@ - + - - + + - - + + - + - - - + + + @@ -406,30 +407,30 @@ - + - - + + - - + + - + - - - + + + - - - + + + - + @@ -439,18 +440,18 @@ - - + + - - - + + + - + - + @@ -460,146 +461,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -619,26 +620,26 @@ - + - + - + - + - + - + @@ -651,10 +652,10 @@ - + - + @@ -668,146 +669,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -821,146 +822,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -974,146 +975,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1127,146 +1128,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1280,146 +1281,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1433,26 +1434,26 @@ - + - + - + - + - + - + @@ -1465,10 +1466,10 @@ - + - + @@ -1482,26 +1483,26 @@ - + - + - + - + - + - + @@ -1514,26 +1515,26 @@ - + - + - + - + - + - + @@ -1546,146 +1547,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1694,7 +1695,7 @@ - + @@ -1713,26 +1714,26 @@ - + - + - + - + - + - + @@ -1746,26 +1747,26 @@ - + - + - + - + - + - + @@ -1779,10 +1780,10 @@ - + - + @@ -1798,146 +1799,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1946,8 +1947,8 @@ - - + + @@ -1961,146 +1962,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2115,26 +2116,26 @@ - + - + - + - + - + - + @@ -2149,146 +2150,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2305,146 +2306,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2459,26 +2460,26 @@ - + - + - + - + - + - + @@ -2492,146 +2493,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2647,26 +2648,26 @@ - + - + - + - + - + - + @@ -2679,146 +2680,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2835,146 +2836,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2989,26 +2990,26 @@ - + - + - + - + - + - + @@ -3021,146 +3022,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3180,146 +3181,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3342,146 +3343,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3496,146 +3497,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3650,146 +3651,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3804,26 +3805,26 @@ - + - + - + - + - + - + @@ -3837,26 +3838,26 @@ - + - + - + - + - + - + @@ -3873,146 +3874,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4027,10 +4028,10 @@ - + - + @@ -4045,146 +4046,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4200,146 +4201,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4357,146 +4358,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4513,26 +4514,26 @@ - + - + - + - + - + - + @@ -4547,10 +4548,10 @@ - + - + @@ -4569,146 +4570,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4723,146 +4724,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4879,146 +4880,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5034,146 +5035,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5188,146 +5189,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5343,146 +5344,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5497,26 +5498,26 @@ - + - + - + - + - + - + @@ -5529,146 +5530,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5686,146 +5687,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5846,10 +5847,10 @@ - + - + @@ -5866,10 +5867,10 @@ - + - + @@ -5882,10 +5883,10 @@ - + - + @@ -5898,10 +5899,10 @@ - + - + @@ -5915,10 +5916,10 @@ - + - + @@ -5931,10 +5932,10 @@ - + - + @@ -5947,10 +5948,10 @@ - + - + @@ -5964,146 +5965,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6119,146 +6120,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6273,26 +6274,26 @@ - + - + - + - + - + - + @@ -6307,146 +6308,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6462,146 +6463,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6616,10 +6617,10 @@ - + - + @@ -6636,146 +6637,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6792,146 +6793,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6947,146 +6948,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7104,146 +7105,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7258,146 +7259,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7413,146 +7414,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7572,146 +7573,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7726,146 +7727,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7880,146 +7881,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -8035,146 +8036,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -8189,146 +8190,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -8343,146 +8344,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -8497,10 +8498,10 @@ - + - + @@ -8517,10 +8518,10 @@ - + - + @@ -8538,146 +8539,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -8688,451 +8689,451 @@ - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - \ No newline at end of file + + + + + From 20ae0d1f2faf1cc6a2838a4a50056d98ffee8ecc Mon Sep 17 00:00:00 2001 From: "Andrey Cunh@" Date: Fri, 8 May 2026 15:30:25 -0300 Subject: [PATCH 21/25] att --- .../Solicitação de transferência.png | Bin 0 -> 51955 bytes .../workflow/.resources/producao.ws.cache | 706 +++ .../workflow/.resources/producao.ws.cache.bkp | 729 +++ compras_digital/.vscode/servers.json | 4 +- compras_digital/datasets/dsComprasCotacao.js | 4 +- compras_digital/datasets/ds_consultaSC.js | 80 +- .../Compras_digital/Compras_digital.html | 644 ++- .../forms/Compras_digital/compras_digital.js | 376 +- .../Compras_digital/events/displayFields.js | 8 + .../Solicitação de compras V2.ecm30.xml | 915 +--- .../.resources/Solicitação de compras V2.png | Bin 61957 -> 42013 bytes ...Solicitação de compras V2.processimage.svg | 2 +- .../Solicitação de compras V2.process | 4476 ++++++++--------- ...olicitação de compras V2.servicetask114.js | 159 +- 14 files changed, 4600 insertions(+), 3503 deletions(-) create mode 100644 Transferência Ginseng/workflow/diagrams/workflow/.resources/Solicitação de transferência.png create mode 100644 Transferência Ginseng/workflow/diagrams/workflow/.resources/producao.ws.cache create mode 100644 Transferência Ginseng/workflow/diagrams/workflow/.resources/producao.ws.cache.bkp diff --git a/Transferência Ginseng/workflow/diagrams/workflow/.resources/Solicitação de transferência.png b/Transferência Ginseng/workflow/diagrams/workflow/.resources/Solicitação de transferência.png new file mode 100644 index 0000000000000000000000000000000000000000..c1329be0cf9bcb21992f0c0f8cb9460cc4fa8093 GIT binary patch literal 51955 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 literal 0 HcmV?d00001 diff --git a/Transferência Ginseng/workflow/diagrams/workflow/.resources/producao.ws.cache b/Transferência Ginseng/workflow/diagrams/workflow/.resources/producao.ws.cache new file mode 100644 index 0000000..8f35f24 --- /dev/null +++ b/Transferência Ginseng/workflow/diagrams/workflow/.resources/producao.ws.cache @@ -0,0 +1,706 @@ + + + + + volume + + + Default + + + + + expediente + + + Default + + + Expediente BackOffice, Logística e Motorista + + + Expediente Escritório Matriz + + + Expediente Lojas + + + + + mecanismo + + + + + Atribuição por Associação + + + Associado + + + + + + + Atribuição por Campo de Formulário + + + Campo Formulário + + + + + + + dpf_di_emp_filial_filtro + + + dpf_di_emp_filial_filtro + + + + + + + dpf_di_inicio_diadmissao + + + dpf_di_inicio_diadmissao + + + + + + + Atribuição por Executor de Atividade + + + Executor Atividade + + + + + + + Atribuição por Grupo + + + Grupo + + + + + + + Atribuição por Grupos do Colaborador + + + Grupos Colaborador + + + + + + + mecCustomAprov + + + mecCustomAprov + + + + + + + Atribuição por Papel + + + Papel + + + + + + + Atribuição para um Grupo + + + Pool Grupo + + + + + + + Atribuição para um Papel + + + Pool Papel + + + + + + + Atribuição por Usuário + + + Usuário + + + + + + + forms + + + + + FLUIGADHOC + + + FLUIGADHOC + + + 3 + + + + + + + FLUIGADHOCPROCESS + + + FLUIGADHOCPROCESS + + + 4 + + + + + + + totvsflow_dataset_tipo_ocorrencia + + + totvsflow_dataset_tipo_ocorrencia + + + 14 + + + + + + + totvsflow_abertura_chamado + + + totvsflow_abertura_chamado + + + 15 + + + + + + + DSFormulariodeAberturadechamado + + + Formulário de Abertura de chamado + + + 20 + + + + + + + Abertura_de_chamados + + + Solicitação de abertura de chamados + + + 21 + + + + + + + DSvistoriadeServico + + + vistoriadeServico + + + 24 + + + + + + + DSFormulariodeReservadesala + + + Formulário de Reserva de sala + + + 34 + + + + + + + totvsflow_dataset_centrocusto + + + totvsflow_dataset_centrocusto + + + 103 + + + + + + + totvsflow_dataset_cadastro_item + + + totvsflow_dataset_cadastro_item + + + 104 + + + + + + + totvsflow_dataset_estabelecimento + + + totvsflow_dataset_estabelecimento + + + 105 + + + + + + + totvsflow_solicitacao_compras + + + totvsflow_solicitacao_compras + + + 165 + + + + + + + aberturadechamado_manutencao + + + aberturadechamado_manutencao + + + 400 + + + + + + + Solicitacao_transferencia + + + Solicitacao_transferencia + + + 590 + + + + + + + recrutamento + + + recrutamento + + + 823 + + + + + + + kit_aniversariantes + + + Aniversariantes + + + 7690 + + + + + + + kit_cardapio + + + Cardápio do Dia + + + 7695 + + + + + + + kit_convenios + + + Convênios + + + 7703 + + + + + + + kit_news + + + Notícias + + + 7709 + + + + + + + compras_digital + + + compras_digital + + + 9305 + + + + + + + dpf_di_formulario_processo_admissao + + + Digte_Public_Form_Di_Formulario_Processo_Admissao_Protheus + + + 9626 + + + + + + + dpf_cadastro_status + + + Digte_Public_Form_Status + + + 9627 + + + + + + + dpf_configuracoes + + + Digte_Public_Form_Configuracoes + + + 9628 + + + + + + + dpf_cadastro_jornada + + + Digte_Public_Form_Jornada + + + 9629 + + + + + + + dpf_tipo_documento + + + Digte_Public_Form_Tipo_Documento + + + 9630 + + + + + + + dpf_dataset + + + Digte_Public_Form_Dataset + + + 9631 + + + + + + + dpf_di_configuracao + + + Digte_Public_Form_Di_Configuracoes + + + 9632 + + + + + + + dpf_di_beneficio + + + Digte_Public_Form_Di_Beneficios + + + 9633 + + + + + + + dpf_di_compl_contrato + + + Digte_Public_Form_Di_Comp_Contrato + + + 9634 + + + + + + + dpf_di_funcao_jornada + + + Digte_Public_Form_Di_Funcao_Jornada + + + 9635 + + + + + + + dpf_dataset_estrutura + + + Digte_Public_Form_Di_Dataset_Estrutura + + + 9636 + + + + + + + dpf_grupo_tipo_contrato + + + Digte_Public_Form_Grupo_Tipo_Contrato + + + 9637 + + + + + + + dpf_tipo_contrato + + + Digte_Public_Form_Tipo_Contrato + + + 9638 + + + + + + + dpf_di_traducao_campo_valor + + + Digte_Public_Form_Di_Traducao_Campo_Valor + + + 9639 + + + + + + + dpf_di_restricoes_cpf + + + Digte_Public_Form_Di_Formulario_Restricao_CPF + + + 9640 + + + + + + + dpf_di_compl_vt + + + Digte_Public_Form_Di_Compl_VT + + + 9641 + + + + + + + dpf_di_traducao_campo + + + Digte_Public_Form_Di_Traducao_Campo + + + 9995 + + + + + + + desligamento + + + desligamento + + + 12959 + + + + + + + checklist + + + checklist + + + 40213 + + + + + + + totvsflow_lancamento_documento + + + totvsflow_lancamento_documento + + + 41254 + + + + + + + transferenciav2 + + + transferência + + + 43582 + + + + + + + desligamentov2 + + + desligamentov2 + + + 46963 + + + + + + + diff --git a/Transferência Ginseng/workflow/diagrams/workflow/.resources/producao.ws.cache.bkp b/Transferência Ginseng/workflow/diagrams/workflow/.resources/producao.ws.cache.bkp new file mode 100644 index 0000000..de68bfa --- /dev/null +++ b/Transferência Ginseng/workflow/diagrams/workflow/.resources/producao.ws.cache.bkp @@ -0,0 +1,729 @@ + + + + + mecanismoGrupo + + + + + Tecnologia e Comunicação + + + TIC + + + + + + + Compras Indiretos + + + ComprasIndiretos + + + + + + + Obras e manutenção + + + Manutencao + + + + + + + Aprovadores Compras Nvl 3 + + + AprovadoresComprasNvl3 + + + + + + + Motoristas + + + Motoristas + + + + + + + Requisitantes de Vaga + + + Requisitantesdevaga + + + + + + + Recrutamento + + + Recrutamento + + + + + + + TODOS-TODOS-DIADMISSAO + + + TODOS-TODOS-DIADMISSAO + + + + + + + ResponsavelDesligamento + + + ResponsavelDesligamento + + + + + + + GENTE & CULTURA + + + GENTE_CULTURA + + + + + + + LOJA AL + + + LOJA_AL + + + + + + + CD + + + CD + + + + + + + ESPAÇO DO REVENDEDOR AL + + + ESPACO_DO_REVENDEDOR_AL + + + + + + + FINANCEIRO + + + FINANCEIRO + + + + + + + OPERAÇÕES + + + OPERACOES + + + + + + + AMG AL + + + AMG_AL + + + + + + + REGIONAL ALAGOAS + + + REGIONAL_ALAGOAS + + + + + + + PREVENÇÃO DE PERDA + + + PREVENCAO_DE_PERDA + + + + + + + MARKETING, TREINAMENTO + + + MARKETING_TREINAMENTO + + + + + + + SECRETARIA EXECUTIVA + + + SECRETARIA_EXECUTIVA + + + + + + + DIRETORIA EXECUTIVA + + + DIRETORIA_EXECUTIVA + + + + + + + INFRAESTRUTURA + + + INFRAESTRUTURA + + + + + + + ESPAÇO DO REVENDEDOR BA + + + ESPACO_DO_REVENDEDOR_BA + + + + + + + BUSINESS INTELLIGENCE + + + BUSINESS_INTELLIGENCE + + + + + + + DEPARTAMENTO PESSOAL + + + DEPARTAMENTO_PESSOAL + + + + + + + LOJA BA + + + LOJA_BA + + + + + + + TREINAMENTO + + + TREINAMENTO + + + + + + + AMG BA + + + AMG_BA + + + + + + + MARKETING + + + MARKETING + + + + + + + COMPRAS + + + COMPRAS + + + + + + + AMG SE + + + AMG_SE + + + + + + + LOJA SE + + + LOJA_SE + + + + + + + ESPAÇO DO REVENDEDOR SE + + + ESPACO_DO_REVENDEDOR_SE + + + + + + + VENDAS IN COMPANY + + + VENDAS_IN_COMPANY + + + + + + + REGIONAL BAHIA + + + REGIONAL_BAHIA + + + + + + + CANAL LOJA 01 + + + CANAL_LOJA_01 + + + + + + + AUDITORIA + + + AUDITORIA + + + + + + + CANAL LOJA 02 + + + CANAL_LOJA_02 + + + + + + + PLANEJAMENTO DE DEMANDAS + + + PLANEJAMENTO_DE_DEMANDAS + + + + + + + PROJETOS + + + PROJETOS + + + + + + + COMPLIANCE + + + COMPLIANCE + + + + + + + ESCRITÓRIO - MATRIZ + + + ESCRITORIO_MATRIZ + + + + + + + ESCRITÓRIO - CONQUISTA + + + ESCRITORIO_CONQUISTA + + + + + + + REGIONAL SERGIPE + + + REGIONAL_SERGIPE + + + + + + + Transferencia + + + Transferencia + + + + + + + Fiscal + + + Fiscal + + + + + + + motoristaAL + + + motoristaAL + + + + + + + motoristaBA + + + motoristaBA + + + + + + + motoristaSE + + + motoristaSE + + + + + + + expediente + + + Default + + + Expediente BackOffice, Logística e Motorista + + + Expediente Escritório Matriz + + + Expediente Lojas + + + + + camposFormulario, documentoId = 43582 + + + activity + + + analistasup + + + categoriaItem + + + centroCusto + + + chaveNfe + + + codigoItem + + + codigoProdutoItem + + + currentUserId + + + currentUsermail + + + currentUserName + + + dataAbertura + + + dataColeta + + + dataEmissaoApiNfe + + + dataEmissaoNfe + + + dataEntradaNfeConsulta + + + dataEntrega + + + dataValidacaoGestor + + + descAnexo_PlanilhaItens + + + descricao + + + emailSolicitante + + + estabelecimento + + + excelUpload + + + fdAnexo_Coleta + + + fdAnexo_Entrega + + + fdAnexo_recebimento + + + fnAnexo_Nfe + + + fnAnexo_PlanilhaItens + + + formMode + + + fornecedorNfeConsulta + + + gestorEmail + + + gestorEmailE + + + gestorNome + + + gestorNomeE + + + gestor_cc + + + gestor_cce + + + invoiceIdNfeConsulta + + + itensNfeConsulta + + + itensNfeJson + + + justificativa + + + justificativaDecisaoGestor + + + justificativaDecisaoItens + + + lojaNfeConsulta + + + motoristaColetaLogin + + + motoristaColetaNome + + + motoristaEntregaLogin + + + motoristaEntregaNome + + + motoristaEntregaSelecionado + + + nomerecebedor + + + numeroNfeConsulta + + + operacaoNfeConsulta + + + productIdItem + + + qtdDivergenciasGestor + + + qtdDivergenciasNfe + + + quantidadeAprovadaGestor + + + quantidadeItem + + + requesterId + + + requesterMail + + + requesterName + + + serieNfeConsulta + + + situacaoNfeConsulta + + + storeIdNfeConsulta + + + tipoMotoristaEntrega + + + ufDestino + + + ufOrigem + + + userValidacaoGestor + + + usuarioEmissorNfe + + + validacaoItens + + + valorNfeConsulta + + + WKNumProces + + + + + diff --git a/compras_digital/.vscode/servers.json b/compras_digital/.vscode/servers.json index 5ae09ec..934d36f 100644 --- a/compras_digital/.vscode/servers.json +++ b/compras_digital/.vscode/servers.json @@ -2,13 +2,13 @@ "version": "1.0.0", "configurations": [ { - "id": "uyzzp0mq8qomoutcaz19tssb58lcc7", + "id": "o9cixezp329movgapv2risawf8wvym", "name": "Ginseng Produção", "host": "comerciode188006.fluig.cloudtotvs.com.br", "ssl": true, "port": 443, "username": "andrey.cunha", - "password": "eyJpdiI6IjAyMjdkMjdmZDI1NTczYzFkZmUwMGU4ZWExMWRjZTBmIiwic2FsdCI6ImExMjJlYjdiZDA0MmM3ZGUzYjU3Y2I4YWU4NTUwYzE5IiwidGV4dCI6ImQ2Y2Q4ZjFhNjk0MmQ0MGFhMjQ0NzhjMzExODhiZGQ2In0=", + "password": "eyJpdiI6IjM5MGNhMzMwMWIyNWI2ZDMyYmVmM2FiNDg5NzQ3NzZhIiwic2FsdCI6ImU1ZWE3MDZhOWE0NGMyMjExNmE3NjIyYmRmZTdmMjNhIiwidGV4dCI6ImZkMTY4MTAwNjM0ZmQ3NmI5M2MwZjQ1YmE4NDJmMjRhIn0=", "userCode": "andrey.cunha", "confirmExporting": false, "hasBrowser": false, diff --git a/compras_digital/datasets/dsComprasCotacao.js b/compras_digital/datasets/dsComprasCotacao.js index 50674df..77eb365 100644 --- a/compras_digital/datasets/dsComprasCotacao.js +++ b/compras_digital/datasets/dsComprasCotacao.js @@ -11,6 +11,7 @@ function createDataset(fields, constraints, sortFields) { dataset.addColumn("C8_TOTAL"); dataset.addColumn("C8_FORNECE"); dataset.addColumn("C8_LOJA"); + dataset.addColumn("C8_FORNOME"); dataset.addColumn("C8_COND"); dataset.addColumn("C8_NUMSC"); dataset.addColumn("C8_ITEMSC"); @@ -32,7 +33,7 @@ function createDataset(fields, constraints, sortFields) { return [ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", - "", "", sucesso ? "true" : "false", erro || "" + "", "", "", sucesso ? "true" : "false", erro || "" ]; } @@ -144,6 +145,7 @@ function createDataset(fields, constraints, sortFields) { item.C8_TOTAL || "", item.C8_FORNECE || "", item.C8_LOJA || "", + item.C8_FORNOME || "", item.C8_COND || "", item.C8_NUMSC || "", item.C8_ITEMSC || "", diff --git a/compras_digital/datasets/ds_consultaSC.js b/compras_digital/datasets/ds_consultaSC.js index 6e9a04b..8a088f7 100644 --- a/compras_digital/datasets/ds_consultaSC.js +++ b/compras_digital/datasets/ds_consultaSC.js @@ -24,9 +24,20 @@ function createDataset(fields, constraints, sortFields) { dataset.addColumn("sucesso"); dataset.addColumn("COTACOES_JSON"); dataset.addColumn("COTACAO_ERRO"); + dataset.addColumn("PEDIDO_JSON"); + dataset.addColumn("PEDIDO_ERRO"); function emptyRow() { - return ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "false", "", ""]; + return ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "false", "", "", "", ""]; + } + + function documentoValido(valor) { + var v = String(valor || "").trim().toUpperCase(); + if (!v) return false; + if (/^0+$/.test(v)) return false; + if (/^X+$/.test(v)) return false; + if (v == "XXXX" || v == "XXXXXX") return false; + return true; } function consultarCotacao(clientService, cotacao) { @@ -80,6 +91,57 @@ function createDataset(fields, constraints, sortFields) { }; } + function consultarPedido(clientService, pedido) { + var endpoints = [ + "/UF_MATA120/" + pedido, + "/rest/UF_MATA120/" + pedido, + "/rest/uf_mata120/" + pedido + ]; + + var ultimoErro = ""; + for (var i = 0; i < endpoints.length; i++) { + try { + var dataPed = { + companyId: "1", + serviceCode: "Postprod", + endpoint: endpoints[i], + method: "get", + timeoutService: "60000", + headers: { + "Content-Type": "application/json" + } + }; + + var responsePed = clientService.invoke(JSON.stringify(dataPed)); + if (!responsePed || !responsePed.getResult()) { + ultimoErro = "Sem resposta ao consultar pedido"; + continue; + } + + var resultPed = JSON.parse(responsePed.getResult()); + if (resultPed && resultPed.sucesso && resultPed.pedidos && resultPed.pedidos.length > 0) { + return { + sucesso: true, + pedidos: resultPed.pedidos + }; + } + + if (resultPed && resultPed.message) { + ultimoErro = String(resultPed.message); + } else { + ultimoErro = "Pedido sem itens retornados"; + } + } catch (ePed) { + ultimoErro = String(ePed); + } + } + + return { + sucesso: false, + erro: ultimoErro || "Falha ao consultar pedido" + }; + } + try { var numeroSC = null; if (constraints != null) { @@ -130,6 +192,18 @@ function createDataset(fields, constraints, sortFields) { } } + var pedido = String(sc.C1_PEDIDO || "").trim(); + var pedidoJson = ""; + var pedidoErro = ""; + if (documentoValido(pedido)) { + var consultaPed = consultarPedido(clientService, pedido); + if (consultaPed.sucesso) { + pedidoJson = JSON.stringify(consultaPed.pedidos || []); + } else { + pedidoErro = consultaPed.erro || ""; + } + } + dataset.addRow([ sc.C1_FILIAL || "", sc.C1_NUM || "", @@ -153,7 +227,9 @@ function createDataset(fields, constraints, sortFields) { result.hora_consulta || "", "true", cotacoesJson, - cotacaoErro + cotacaoErro, + pedidoJson, + pedidoErro ]); } else { dataset.addRow(emptyRow()); diff --git a/compras_digital/forms/Compras_digital/Compras_digital.html b/compras_digital/forms/Compras_digital/Compras_digital.html index 7c4501e..f60c659 100644 --- a/compras_digital/forms/Compras_digital/Compras_digital.html +++ b/compras_digital/forms/Compras_digital/Compras_digital.html @@ -61,7 +61,7 @@ .sc-status-panel { margin-top: 15px; - padding: 18px; + padding: 10px; border: 1px solid #d8e1e8; border-radius: 12px; background: #f7fafc; @@ -71,27 +71,27 @@ .sc-primary-grid, .sc-secondary-grid { display: grid; - grid-template-columns: repeat(3, minmax(220px, 1fr)); - gap: 12px; + grid-template-columns: repeat(3, minmax(150px, 1fr)); + gap: 8px; } .sc-primary-grid { - margin-bottom: 12px; + margin-bottom: 8px; } .sc-secondary-grid { - gap: 8px 12px; + gap: 8px; } .sc-info { background: #fff; - border-radius: 10px; - padding: 12px 14px; - min-height: 72px; + border-radius: 8px; + padding: 8px 10px; + min-height: 52px; } .sc-info--primary { - border-left: 4px solid #04506b; + border-left: 3px solid #04506b; box-shadow: inset 0 0 0 1px #d9e4ec; } @@ -111,32 +111,39 @@ } .sc-label { - font-size: 11px; + font-size: 10px; color: #4d6073; letter-spacing: .04em; text-transform: uppercase; - margin-bottom: 4px; + margin-bottom: 3px; } .sc-value { - font-size: 15px; + font-size: 13px; font-weight: 600; color: #24313f; word-break: break-word; } .sc-info--primary .sc-value { - font-size: 30px; - line-height: 1.1; + font-size: 13px; + line-height: 1.25; color: #102a43; font-weight: 700; letter-spacing: .01em; } + .sc-info--secondary .sc-value { + font-size: 13px; + line-height: 1.25; + color: #173750; + font-weight: 700; + } + .sc-hint { display: block; - margin-top: 6px; - font-size: 11px; + margin-top: 4px; + font-size: 10px; color: #5f7386; letter-spacing: .02em; } @@ -144,14 +151,29 @@ .sc-value.badge { display: inline-flex; align-items: center; - min-height: 30px; - padding: 6px 12px; + min-height: 24px; + padding: 4px 10px; border-radius: 999px; - font-size: 12px; + font-size: 11px; font-weight: 700; line-height: 1; } + /* Exibe apenas texto (sem fundo) nos status resumidos */ + #statusSCProtheus_label, + #statusSC_label, + #cotacaoResultado_label { + background: transparent !important; + border-radius: 0 !important; + min-height: 0 !important; + padding: 0 !important; + display: inline !important; + font-size: 13px !important; + font-weight: 700 !important; + line-height: 1.25 !important; + color: #1f3f56 !important; + } + .sc-timeline-wrap { margin-top: 16px; padding-top: 0; @@ -166,11 +188,25 @@ .sc-timeline-wrap.is-open { padding-top: 14px; border-top-color: #d7e2eb; - max-height: 640px; + max-height: 3400px; opacity: 1; pointer-events: auto; } + .sc-timeline-layout { + display: grid; + grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr); + gap: 12px; + align-items: start; + } + + .sc-timeline-panel { + padding: 12px; + border-radius: 10px; + background: #fff; + box-shadow: inset 0 0 0 1px #dfe8f0; + } + .sc-timeline-wrap.is-focus { background: #f2f9ff; border-radius: 8px; @@ -179,7 +215,7 @@ .sc-timeline-title { margin: 0 0 10px; color: #12344d; - font-size: 14px; + font-size: 13px; font-weight: 700; letter-spacing: .01em; } @@ -242,7 +278,7 @@ .sc-timeline-event { color: #18354f; - font-size: 14px; + font-size: 13px; font-weight: 700; } @@ -280,84 +316,218 @@ list-style: none; } - .sc-cotacao-item { - display: flex; - align-items: center; - justify-content: space-between; - gap: 10px; - padding: 8px 0; - border-top: 1px solid #edf2f7; + .sc-cotacao-kpis { + display: grid; + grid-template-columns: repeat(3, minmax(120px, 1fr)); + gap: 8px; + margin-bottom: 10px; } - .sc-cotacao-item:first-child { - border-top: 0; - padding-top: 0; + .sc-cotacao-kpi { + background: #f6f9fc; + border: 1px solid #e2eaf2; + border-radius: 8px; + padding: 8px 10px; } - .sc-cotacao-item:last-child { - padding-bottom: 0; + .sc-cotacao-kpi-label { + display: block; + font-size: 10px; + color: #65798c; + letter-spacing: .04em; + text-transform: uppercase; + margin-bottom: 3px; } - .sc-cotacao-item-info { - color: #324a5f; + .sc-cotacao-kpi-value { font-size: 13px; + font-weight: 700; + color: #102a43; } - .sc-cotacao-item-info strong { + .sc-cotacao-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); + gap: 10px; + } + + .sc-cotacao-card { + border: 1px solid #dfe8f0; + border-left: 4px solid #8ea5b8; + border-radius: 10px; + padding: 10px 12px; + background: #fff; + } + + .sc-cotacao-card--winner { + border-left-color: #18aa46; + box-shadow: 0 0 0 1px rgba(24, 170, 70, .15); + } + + .sc-cotacao-card--homologado { + border-left-color: #20a7d8; + } + + .sc-cotacao-card--novo { + border-left-color: #2e86ff; + } + + .sc-cotacao-card--perdedor { + border-left-color: #e3a225; + } + + .sc-cotacao-top { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 8px; + } + + .sc-cotacao-top > div { + min-width: 0; + flex: 1 1 auto; + padding-right: 4px; + } + + .sc-cotacao-supplier { color: #20384d; + font-size: 13px; font-weight: 700; + line-height: 1.25; + overflow-wrap: anywhere; + word-break: break-word; } - #tbCotacao { - table-layout: fixed; - width: 100%; - margin-bottom: 0; + .sc-cotacao-code { + color: #62768a; + font-size: 12px; + margin-top: 2px; + overflow-wrap: anywhere; + word-break: break-word; } - #tbCotacao thead th { - background: #eef3f8; - color: #3b4d5f; + .sc-cotacao-top .badge { + align-self: start; + flex: 0 0 auto; + white-space: nowrap; + margin: 0 0 0 6px; + } + + .sc-cotacao-meta { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 8px; + margin-top: 8px; + } + + .sc-cotacao-meta-box { + background: #f8fbfd; + border: 1px solid #e6edf3; + border-radius: 8px; + padding: 7px 8px; + } + + .sc-cotacao-meta-label { + display: block; + font-size: 10px; + color: #6b7f92; + text-transform: uppercase; + letter-spacing: .04em; + margin-bottom: 2px; + } + + .sc-cotacao-meta-value { + font-size: 14px; font-weight: 700; + color: #1f384d; } - #tbCotacao tbody tr:nth-child(odd) { + .sc-cotacao-footer { + margin-top: 8px; + display: flex; + flex-wrap: wrap; + gap: 10px; + color: #4d6479; + font-size: 12px; + } + + .sc-cotacao-empty { + border: 1px dashed #c6d5e2; + border-radius: 8px; + padding: 10px; + font-size: 13px; + color: #4f657a; background: #f9fbfd; } - #tbCotacao tbody td, - #tbCotacao thead th, - #tbCotacao tfoot td { - vertical-align: middle; + .sc-pedido-track { + margin-top: 12px; + padding: 12px; + border-radius: 10px; + background: #fff; + box-shadow: inset 0 0 0 1px #dfe8f0; } - #tbCotacao th:nth-child(3), - #tbCotacao th:nth-child(4), - #tbCotacao th:nth-child(5), - #tbCotacao td:nth-child(3), - #tbCotacao td:nth-child(4), - #tbCotacao td:nth-child(5) { - text-align: right; + .sc-timeline-layout .sc-pedido-track { + margin-top: 0; } - #tbCotacao td:nth-child(3) input, - #tbCotacao td:nth-child(4) input, - #tbCotacao td:nth-child(5) input { - text-align: right; + .sc-pedido-resumo { + margin-top: 8px; + margin-bottom: 8px; + color: #26455d; + font-size: 13px; + line-height: 1.45; } - #tbCotacao tfoot .sc-total-label { - text-align: right; + .sc-pedido-assinaturas { + display: grid; + grid-template-columns: 1fr; + gap: 8px; + } + + .sc-pedido-ass-card { + border: 1px solid #e3ebf2; + border-left: 4px solid #90a8bd; + border-radius: 8px; + padding: 8px 10px; + background: #fbfdff; + } + + .sc-pedido-ass-card.aprovado { + border-left-color: #1aad4f; + } + + .sc-pedido-ass-card.pendente { + border-left-color: #e2a223; + } + + .sc-pedido-ass-card.bloqueado { + border-left-color: #d64f4f; + } + + .sc-pedido-ass-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + flex-wrap: wrap; + gap: 8px; + margin-bottom: 4px; + } + + .sc-pedido-ass-title { + color: #1f3f56; + font-size: 13px; font-weight: 700; - background: #edf3f8; - color: #324a60; } - #tbCotacao tfoot .sc-total-value { - background: #edf3f8; - color: #12344d; - font-size: 15px; - font-weight: 700; - text-align: right; + .sc-pedido-ass-meta { + display: flex; + flex-wrap: wrap; + gap: 10px; + color: #4b6176; + font-size: 12px; + line-height: 1.35; } @media (max-width: 992px) { @@ -365,6 +535,10 @@ .sc-secondary-grid { grid-template-columns: repeat(2, minmax(180px, 1fr)); } + + .sc-timeline-layout { + grid-template-columns: 1fr; + } } @media (max-width: 640px) { @@ -374,7 +548,19 @@ } .sc-info--primary .sc-value { - font-size: 24px; + font-size: 13px; + } + + .sc-info--secondary .sc-value { + font-size: 13px; + } + + .sc-cotacao-top { + flex-wrap: wrap; + } + + .sc-cotacao-top .badge { + margin-left: 0; } } @@ -410,6 +596,7 @@ + @@ -667,285 +854,76 @@ Clique para ver a linha do tempo
      -
      Status Cadastro
      - - -
      -
      -
      Andamento
      - - -
      - - -
      -
      -
      Solicitante
      -
      -
      -
      -
      -
      Emissão
      -
      -
      -
      -
      -
      Qtd. Itens
      -
      -
      -
      -
      -
      Data do Cadastro
      -
      - às -
      -
      -
      Cotação
      -
      -
      +
      Pedido
      -
      +
      +
      +
      Status Cadastro
      + - +
      +
      +
      Andamento
      + - +
      +
      +
      Emissão
      +
      -
      +
      +
      +
      -

      Linha do tempo da SC

      -
        +
        +
        +

        Linha do tempo da SC

        +
          +
          + +
          +
          +

          Aprovação do pedido

          + Sem pedido +
          +
          Sem pedido vinculado.
          +
          +
          Sem assinaturas para exibir.
          +
          +
          +

          Acompanhamento da cotação

          Sem cotação
          -
            -
          • - Aguardando vínculo da cotação na SC. -
          • -
          -
          -
          -
          - - -
          -
          -
          -
          Consulta Cotação
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          ItemProdutoQtdPreçoTotalSelecionar
          Total selecionadoR$ 0,00
          -
          -
          -
          - - -
          @@ -465,103 +501,22 @@
          -
          - - +
          + +
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - -
          Nome do candidatoTelefoneEmail
          - - - - - - - -
          +
          + +
          -
          -
          -
          - Checklist de Início. -
          -
          +
          + +
          -
          -
          -
          -
          +
          -
          -
          - - *
          -
          - -
          -
          - -
          -
          - -
          -
          -
          - - *
          -
          - -
          -
          - -
          -
          -
          -
          -
          @@ -876,4 +831,4 @@
          - \ No newline at end of file + diff --git a/Recrutamento e Seleção/forms/recrutamentoeselecao/script.js b/Recrutamento e Seleção/forms/recrutamentoeselecao/script.js index 1232947..5cf1f27 100644 --- a/Recrutamento e Seleção/forms/recrutamentoeselecao/script.js +++ b/Recrutamento e Seleção/forms/recrutamentoeselecao/script.js @@ -331,8 +331,8 @@ var beforeSendValidate = function (numState, nextState) { }; function setSelectedZoomItem(selectedItem) { - console.log("Campo selecionado:", name_item); var name_item = selectedItem.inputId; + console.log("Campo selecionado:", name_item); var ehItem = name_item.indexOf("___") >= 0; var indice = ""; if (ehItem){ @@ -341,51 +341,60 @@ function setSelectedZoomItem(selectedItem) { indice = valores[1]; } - var dtsCentroCusto = DatasetFactory.getDataset( - "ds_Liderdireto", - null, - null, - null - ).values; - - var nomeGestorComercialBA = dtsCentroCusto[0].gestorCentroCusto; - var emailGestorComercialBA = dtsCentroCusto[0].emailGestor; - var idGestorComercialBA = dtsCentroCusto[0].idGestor; - - var nomeGestorComercialSE = dtsCentroCusto[1].gestorCentroCusto; - var emailGestorComercialSE = dtsCentroCusto[1].emailGestor; - var idGestorComercialSE = dtsCentroCusto[1].idGestor; - - var nomeGestorComercialAL = dtsCentroCusto[2].gestorCentroCusto; - var emailGestorComercialAL = dtsCentroCusto[2].emailGestor; - var idGestorComercialAL = dtsCentroCusto[2].idGestor; + var dtsCentroCusto = []; + try { + var dsCentroCusto = DatasetFactory.getDataset("ds_Liderdireto", null, null, null); + dtsCentroCusto = dsCentroCusto && dsCentroCusto.values ? dsCentroCusto.values : []; + } catch (e) { + console.error("Falha ao carregar ds_Liderdireto:", e); + } + function getGestorByCentroCusto(nomeCentroCusto) { + for (var i = 0; i < dtsCentroCusto.length; i++) { + if (dtsCentroCusto[i].centroCusto === nomeCentroCusto) { + return dtsCentroCusto[i]; + } + } + return null; + } if (name_item == "estabelecimento") { - let estabelecimento = selectedItem["estabelecimento"]; - let estado = selectedItem["estado"]; + var estabelecimento = + selectedItem["estabelecimento"] || + selectedItem["LOJA"] || + selectedItem["filial"] || + ""; + + var estado = selectedItem["estado"] || selectedItem["UF"] || ""; + var estadoNormalizado = (estado + "").toUpperCase(); $("#estado").val(estado); + if (estabelecimento && window["estabelecimento"] && typeof window["estabelecimento"].setValue === "function") { + window["estabelecimento"].setValue(estabelecimento); + } + // Só executa a lógica do centro de custo se não for "Escritório" - if (estabelecimento !== "ESCRITÓRIO MATRIZ") { - // Executa manualmente a lógica do estado aqui - if (estado.includes("AL")) { - window["centroCusto"].setValue("Comercial AL"); - $("#gestorNome").val(nomeGestorComercialAL); - $("#gestorEmail").val(emailGestorComercialAL); - $("#gestor_cc").val(idGestorComercialAL); - } else if (estado.includes("SE")) { - window["centroCusto"].setValue("Comercial SE"); - $("#gestorNome").val(nomeGestorComercialSE); - $("#gestorEmail").val(emailGestorComercialSE); - $("#gestor_cc").val(idGestorComercialSE); - } else if (estado.includes("BA")) { - window["centroCusto"].setValue("Comercial BA"); - $("#gestorNome").val(nomeGestorComercialBA); - $("#gestorEmail").val(emailGestorComercialBA); - $("#gestor_cc").val(idGestorComercialBA); + if (estabelecimento !== "ESCRITÓRIO MATRIZ" && estadoNormalizado) { + var centroAlvo = ""; + if (estadoNormalizado.indexOf("AL") >= 0) { + centroAlvo = "Comercial AL"; + } else if (estadoNormalizado.indexOf("SE") >= 0) { + centroAlvo = "Comercial SE"; + } else if (estadoNormalizado.indexOf("BA") >= 0) { + centroAlvo = "Comercial BA"; } - } + + if (centroAlvo) { + var dadosGestor = getGestorByCentroCusto(centroAlvo); + window["centroCusto"].setValue(centroAlvo); + + if (dadosGestor) { + $("#gestorNome").val(dadosGestor.gestorCentroCusto || ""); + $("#gestorEmail").val(dadosGestor.emailGestor || ""); + $("#gestor_cc").val(dadosGestor.idGestor || ""); + } + } + } } if (name_item == "centroCusto") { $("#gestorNome").val(selectedItem["gestorCentroCusto"]); @@ -442,13 +451,3 @@ function remove_row(element) { } -function gerarTabelaCotacaoComNumeracao(tabelarecrutamento) { - wdkAddChild(tabelarecrutamento); -} - - -function removeLinhaComAnexo(event) { - fnWdkRemoveChild(event); -} - - diff --git a/Recrutamento e Seleção/workflow/.resources/Ginseng Produção.ws.cache b/Recrutamento e Seleção/workflow/.resources/Ginseng Produção.ws.cache index 5d61a5f..26464c0 100644 --- a/Recrutamento e Seleção/workflow/.resources/Ginseng Produção.ws.cache +++ b/Recrutamento e Seleção/workflow/.resources/Ginseng Produção.ws.cache @@ -1,664 +1,14 @@ - + volume - - - - camposFormulario, documentoId = 12959 - + - AcessoSSH - - - acidentaria - - - ActiveDirectory - - - activity - - - analistaComunicado - - - analistaDesligamento - - - Aprovdesligamento - - - cargoColaborador - - - Carregadordonotebook - - - Carregadordotelefone - - - categoriaDesc - - - categoriaProv - - - Chipdecelular - - - colabadmissao - - - colabCpf - - - colabDesliga - - - consideracoes - - - ControladorasFaciais - - - currentUserId - - - currentUsermail - - - currentUserName - - - dataAbertura - - - dataComunicado - - - dataExata - - - dataFim - - - dataInicio - - - dataPrevista - - - dataUserAprov - - - dataUserAprovConf - - - dataUserValidacao - - - departamento - - - DesligamentoAprov - - - detalheSolicitacao - - - Email - - - emailColaborador - - - emailGestorArea - - - Extranet - - - feedbackColaborador - - - Feedz - - - Fluig - - - formMode - - - gestante - - - impeditivosColab - - - infoadicionais - - - InforConf - - - motivoDesligamento - - - Notebook - - - outros - - - pcd - - - preaposentadoria - - - Protheus - - - ratingValue - - - requesterId - - - requesterMail - - - requesterName - - - sindical - - - situacaoResolvida - - - Telefone - - - tipodesligamento - - - trintidiocct - - - trintidioposafastamento - - - trintidioposferias - - - userAprov - - - userAprovConf - - - userValidacao - - - valorDesc - - - valorProv - - - WKNumProces + Default - - mecanismoGrupo - - - - - Tecnologia e Comunicação - - - TIC - - - - - - - Compras Indiretos - - - ComprasIndiretos - - - - - - - Obras e manutenção - - - Manutencao - - - - - - - Aprovadores Compras Nvl 3 - - - AprovadoresComprasNvl3 - - - - - - - Motoristas - - - Motoristas - - - - - - - Requisitantes de Vaga - - - Requisitantesdevaga - - - - - - - Recrutamento - - - Recrutamento - - - - - - - TODOS-TODOS-DIADMISSAO - - - TODOS-TODOS-DIADMISSAO - - - - - - - ResponsavelDesligamento - - - ResponsavelDesligamento - - - - - - - GENTE & CULTURA - - - GENTE_CULTURA - - - - - - - LOJA AL - - - LOJA_AL - - - - - - - CD - - - CD - - - - - - - ESPAÇO DO REVENDEDOR AL - - - ESPACO_DO_REVENDEDOR_AL - - - - - - - FINANCEIRO - - - FINANCEIRO - - - - - - - OPERAÇÕES - - - OPERACOES - - - - - - - AMG AL - - - AMG_AL - - - - - - - REGIONAL ALAGOAS - - - REGIONAL_ALAGOAS - - - - - - - PREVENÇÃO DE PERDA - - - PREVENCAO_DE_PERDA - - - - - - - MARKETING, TREINAMENTO - - - MARKETING_TREINAMENTO - - - - - - - SECRETARIA EXECUTIVA - - - SECRETARIA_EXECUTIVA - - - - - - - DIRETORIA EXECUTIVA - - - DIRETORIA_EXECUTIVA - - - - - - - INFRAESTRUTURA - - - INFRAESTRUTURA - - - - - - - ESPAÇO DO REVENDEDOR BA - - - ESPACO_DO_REVENDEDOR_BA - - - - - - - BUSINESS INTELLIGENCE - - - BUSINESS_INTELLIGENCE - - - - - - - DEPARTAMENTO PESSOAL - - - DEPARTAMENTO_PESSOAL - - - - - - - LOJA BA - - - LOJA_BA - - - - - - - TREINAMENTO - - - TREINAMENTO - - - - - - - AMG BA - - - AMG_BA - - - - - - - MARKETING - - - MARKETING - - - - - - - COMPRAS - - - COMPRAS - - - - - - - AMG SE - - - AMG_SE - - - - - - - LOJA SE - - - LOJA_SE - - - - - - - ESPAÇO DO REVENDEDOR SE - - - ESPACO_DO_REVENDEDOR_SE - - - - - - - VENDAS IN COMPANY - - - VENDAS_IN_COMPANY - - - - - - - REGIONAL BAHIA - - - REGIONAL_BAHIA - - - - - - - CANAL LOJA 01 - - - CANAL_LOJA_01 - - - - - - - AUDITORIA - - - AUDITORIA - - - - - - - CANAL LOJA 02 - - - CANAL_LOJA_02 - - - - - - - PLANEJAMENTO DE DEMANDAS - - - PLANEJAMENTO_DE_DEMANDAS - - - - - - - PROJETOS - - - PROJETOS - - - - - - - COMPLIANCE - - - COMPLIANCE - - - - - - - ESCRITÓRIO - MATRIZ - - - ESCRITORIO_MATRIZ - - - - - - - ESCRITÓRIO - CONQUISTA - - - ESCRITORIO_CONQUISTA - - - - - - - REGIONAL SERGIPE - - - REGIONAL_SERGIPE - - - - - expediente @@ -676,167 +26,6 @@ - - camposFormulario, documentoId = 590 - - - activity - - - centroCusto - - - codigoItem - - - consideracoesCompras - - - consideracoesCotacao - - - currentUserId - - - currentUsermail - - - currentUserName - - - dataAbertura - - - dataAprovCompras - - - dataRealizacaoCompras - - - dataValidacaoCompras - - - dataValidacaoGestor - - - dataValidacaoItens - - - descricao - - - emailSolicitante - - - estabelecimento - - - excelUpload - - - fdAnexo_Coleta - - - fdAnexo_embalar - - - fdAnexo_Entrega - - - fdAnexo_Nfe - - - fdAnexo_recebimento - - - fnAnexo_Coleta - - - fnAnexo_embalar - - - fnAnexo_Entrega - - - fnAnexo_Nfe - - - fnAnexo_recebimento - - - formMode - - - gestorEmail - - - gestorEmailE - - - gestorNome - - - gestorNomeE - - - gestor_cc - - - gestor_cce - - - justificativa - - - justificativaDecisaoCompras - - - justificativaDecisaoGestor - - - justificativaDecisaoItens - - - justificativaValidaProblema - - - quantidadeItem - - - requesterId - - - requesterMail - - - requesterName - - - userCotacaoGestor - - - userRealizacaoCompras - - - userSolicitante - - - userValidacaoCompras - - - userValidacaoGestor - - - userValidacaoItens - - - validacaoItens - - - WKNumProces - - - mecanismo @@ -962,505 +151,6 @@ - - forms - - - - - FLUIGADHOC - - - FLUIGADHOC - - - 3 - - - - - - - FLUIGADHOCPROCESS - - - FLUIGADHOCPROCESS - - - 4 - - - - - - - totvsflow_dataset_tipo_ocorrencia - - - totvsflow_dataset_tipo_ocorrencia - - - 14 - - - - - - - totvsflow_abertura_chamado - - - totvsflow_abertura_chamado - - - 15 - - - - - - - DSFormulariodeAberturadechamado - - - Formulário de Abertura de chamado - - - 20 - - - - - - - Abertura_de_chamados - - - Solicitação de abertura de chamados - - - 21 - - - - - - - DSvistoriadeServico - - - vistoriadeServico - - - 24 - - - - - - - DSFormulariodeReservadesala - - - Formulário de Reserva de sala - - - 34 - - - - - - - totvsflow_dataset_centrocusto - - - totvsflow_dataset_centrocusto - - - 103 - - - - - - - totvsflow_dataset_cadastro_item - - - totvsflow_dataset_cadastro_item - - - 104 - - - - - - - totvsflow_dataset_estabelecimento - - - totvsflow_dataset_estabelecimento - - - 105 - - - - - - - totvsflow_solicitacao_compras - - - totvsflow_solicitacao_compras - - - 165 - - - - - - - aberturadechamado_manutencao - - - aberturadechamado_manutencao - - - 400 - - - - - - - Solicitacao_transferencia - - - Solicitacao_transferencia - - - 590 - - - - - - - recrutamento - - - recrutamento - - - 823 - - - - - - - kit_aniversariantes - - - Aniversariantes - - - 7690 - - - - - - - kit_cardapio - - - Cardápio do Dia - - - 7695 - - - - - - - kit_convenios - - - Convênios - - - 7703 - - - - - - - kit_news - - - Notícias - - - 7709 - - - - - - - compras_digital - - - compras_digital - - - 9305 - - - - - - - dpf_di_formulario_processo_admissao - - - Digte_Public_Form_Di_Formulario_Processo_Admissao_Protheus - - - 9626 - - - - - - - dpf_cadastro_status - - - Digte_Public_Form_Status - - - 9627 - - - - - - - dpf_configuracoes - - - Digte_Public_Form_Configuracoes - - - 9628 - - - - - - - dpf_cadastro_jornada - - - Digte_Public_Form_Jornada - - - 9629 - - - - - - - dpf_tipo_documento - - - Digte_Public_Form_Tipo_Documento - - - 9630 - - - - - - - dpf_dataset - - - Digte_Public_Form_Dataset - - - 9631 - - - - - - - dpf_di_configuracao - - - Digte_Public_Form_Di_Configuracoes - - - 9632 - - - - - - - dpf_di_beneficio - - - Digte_Public_Form_Di_Beneficios - - - 9633 - - - - - - - dpf_di_compl_contrato - - - Digte_Public_Form_Di_Comp_Contrato - - - 9634 - - - - - - - dpf_di_funcao_jornada - - - Digte_Public_Form_Di_Funcao_Jornada - - - 9635 - - - - - - - dpf_dataset_estrutura - - - Digte_Public_Form_Di_Dataset_Estrutura - - - 9636 - - - - - - - dpf_grupo_tipo_contrato - - - Digte_Public_Form_Grupo_Tipo_Contrato - - - 9637 - - - - - - - dpf_tipo_contrato - - - Digte_Public_Form_Tipo_Contrato - - - 9638 - - - - - - - dpf_di_traducao_campo_valor - - - Digte_Public_Form_Di_Traducao_Campo_Valor - - - 9639 - - - - - - - dpf_di_restricoes_cpf - - - Digte_Public_Form_Di_Formulario_Restricao_CPF - - - 9640 - - - - - - - dpf_di_compl_vt - - - Digte_Public_Form_Di_Compl_VT - - - 9641 - - - - - - - dpf_di_traducao_campo - - - Digte_Public_Form_Di_Traducao_Campo - - - 9995 - - - - - - - desligamento - - - desligamento - - - 12959 - - - - - camposFormulario, documentoId = 823 diff --git a/Recrutamento e Seleção/workflow/.resources/Ginseng Produção.ws.cache.bkp b/Recrutamento e Seleção/workflow/.resources/Ginseng Produção.ws.cache.bkp index 0fd8be4..4a0a7fd 100644 --- a/Recrutamento e Seleção/workflow/.resources/Ginseng Produção.ws.cache.bkp +++ b/Recrutamento e Seleção/workflow/.resources/Ginseng Produção.ws.cache.bkp @@ -9,61 +9,6 @@ - - mecanismoGrupo - - - - - Aprovadores Compras Nvl 3 - - - AprovadoresComprasNvl3 - - - - - - - Compras Indiretos - - - ComprasIndiretos - - - - - - - Obras e manutenção - - - Manutencao - - - - - - - Motoristas - - - Motoristas - - - - - - - Tecnologia e Comunicação - - - TIC - - - - - expediente @@ -81,164 +26,9 @@ - - camposFormulario, documentoId = 590 - - - activity - - - centroCusto - - - codigoItem - - - complemento - - - consideracoesCompras - - - consideracoesCotacao - - - currentUserId - - - currentUsermail - - - currentUserName - - - dataAbertura - - - dataAprovCompras - - - dataRealizacaoCompras - - - dataValidacaoCompras - - - dataValidacaoGestor - - - dataValidacaoItens - - - descricao - - - emailSolicitante - - - estabelecimento - - - fdAnexo_Coleta - - - fdAnexo_Entrega - - - fdAnexo_Nfe - - - fdAnexo_recebimento - - - fnAnexo_Coleta - - - fnAnexo_Entrega - - - fnAnexo_Nfe - - - fnAnexo_recebimento - - - formMode - - - gestor_cc - - - gestor_cce - - - gestorEmail - - - gestorEmailE - - - gestorNome - - - gestorNomeE - - - justificativa - - - justificativaDecisaoCompras - - - justificativaDecisaoGestor - - - justificativaDecisaoItens - - - justificativaValidaProblema - - - quantidadeItem - - - requesterId - - - requesterMail - - - requesterName - - - userCotacaoGestor - - - userRealizacaoCompras - - - userSolicitante - - - userValidacaoCompras - - - userValidacaoGestor - - - userValidacaoItens - - - validacaoItens - - - WKNumProces - - - mecanismo - + @@ -260,6 +50,26 @@ + + + dpf_di_emp_filial_filtro + + + dpf_di_emp_filial_filtro + + + + + + + dpf_di_inicio_diadmissao + + + dpf_di_inicio_diadmissao + + + + Atribuição por Executor de Atividade @@ -269,7 +79,7 @@ - + Atribuição por Grupo @@ -279,7 +89,7 @@ - + Atribuição por Grupos do Colaborador @@ -289,7 +99,7 @@ - + mecCustomAprov @@ -299,7 +109,7 @@ - + Atribuição por Papel @@ -309,7 +119,7 @@ - + Atribuição para um Grupo @@ -319,7 +129,7 @@ - + Atribuição para um Papel @@ -329,7 +139,7 @@ - + Atribuição por Usuário @@ -341,6 +151,164 @@ + + camposFormulario, documentoId = 823 + + + activity + + + centroCusto + + + confidencial + + + consideracoes + + + currentUserId + + + currentUsermail + + + currentUserName + + + dataAbertura + + + datainiciotrabalho + + + dataUserValidacao + + + dataValidacaoCompras + + + dataValidacaoCorre + + + dataValidacaofunc + + + dataValidacaoGestor + + + dataValidacaoItens + + + descricaodeperfil + + + email + + + estabelecimento + + + estado + + + fardamentoPronto + + + formMode + + + funcao + + + gestorEmail + + + gestorNome + + + gestor_cc + + + itensinicio + + + justificativa + + + justificativaDecisaoCompras + + + justificativaDecisaoCorre + + + justificativaDecisaoFunc + + + justificativaDecisaoGestor + + + justificativaDecisaoItens + + + nomedocandidato + + + ratingValue + + + requesterId + + + requesterMail + + + requesterName + + + situacaoResolvida + + + telefone + + + urgente + + + userValidacao + + + userValidacaoCompras + + + userValidacaoCorre + + + userValidacaofunc + + + userValidacaoGestor + + + userValidacaoItens + + + validacaoCorre + + + validacaoFunc + + + validacaoItens + + + validarMotivo + + + WKNumProces + + + forms @@ -539,177 +507,358 @@ + + + + kit_aniversariantes + + + Aniversariantes + + + 7690 + + + + + + + kit_cardapio + + + Cardápio do Dia + + + 7695 + + + + + + + kit_convenios + + + Convênios + + + 7703 + + + + + + + kit_news + + + Notícias + + + 7709 + + + + + + + compras_digital + + + compras_digital + + + 9305 + + + + + + + dpf_di_formulario_processo_admissao + + + Digte_Public_Form_Di_Formulario_Processo_Admissao_Protheus + + + 9626 + + + + + + + dpf_cadastro_status + + + Digte_Public_Form_Status + + + 9627 + + + + + + + dpf_configuracoes + + + Digte_Public_Form_Configuracoes + + + 9628 + + + + + + + dpf_cadastro_jornada + + + Digte_Public_Form_Jornada + + + 9629 + + + + + + + dpf_tipo_documento + + + Digte_Public_Form_Tipo_Documento + + + 9630 + + + + + + + dpf_dataset + + + Digte_Public_Form_Dataset + + + 9631 + + + + + + + dpf_di_configuracao + + + Digte_Public_Form_Di_Configuracoes + + + 9632 + + + + + + + dpf_di_beneficio + + + Digte_Public_Form_Di_Beneficios + + + 9633 + + + + + + + dpf_di_compl_contrato + + + Digte_Public_Form_Di_Comp_Contrato + + + 9634 + + + + + + + dpf_di_funcao_jornada + + + Digte_Public_Form_Di_Funcao_Jornada + + + 9635 + + + + + + + dpf_dataset_estrutura + + + Digte_Public_Form_Di_Dataset_Estrutura + + + 9636 + + + + + + + dpf_grupo_tipo_contrato + + + Digte_Public_Form_Grupo_Tipo_Contrato + + + 9637 + + + + + + + dpf_tipo_contrato + + + Digte_Public_Form_Tipo_Contrato + + + 9638 + + + + + + + dpf_di_traducao_campo_valor + + + Digte_Public_Form_Di_Traducao_Campo_Valor + + + 9639 + + + + + + + dpf_di_restricoes_cpf + + + Digte_Public_Form_Di_Formulario_Restricao_CPF + + + 9640 + + + + + + + dpf_di_compl_vt + + + Digte_Public_Form_Di_Compl_VT + + + 9641 + + + + + + + dpf_di_traducao_campo + + + Digte_Public_Form_Di_Traducao_Campo + + + 9995 + + + + + + + desligamento + + + desligamento + + + 12959 + + + + + + + checklist + + + checklist + + + 40213 + + + + + + + totvsflow_lancamento_documento + + + totvsflow_lancamento_documento + + + 41254 + + + + + + + transferenciav2 + + + transferência + + + 43582 + + + + + + + desligamentov2 + + + desligamentov2 + + + 46963 + + + - - camposFormulario, documentoId = 823 - - - activity - - - aprovado - - - centroCusto - - - confidencial - - - consideracoes - - - consideracoesCompras - - - currentUserId - - - currentUsermail - - - currentUserName - - - dataAbertura - - - datainiciotrabalho - - - dataRealizacaoCompras - - - dataUserValidacao - - - dataValidacaoCompras - - - dataValidacaoCorre - - - dataValidacaofunc - - - dataValidacaoGestor - - - dataValidacaoItens - - - descricaodeperfil - - - email - - - estabelecimento - - - estado - - - fardamentoPronto - - - formMode - - - funcao - - - gestorEmail - - - gestorNome - - - gestor_cc - - - itensinicio - - - justificativa - - - justificativaDecisaoCompras - - - justificativaDecisaoCorre - - - justificativaDecisaoFunc - - - justificativaDecisaoGestor - - - justificativaDecisaoItens - - - nomedocandidato - - - ratingValue - - - requesterId - - - requesterMail - - - requesterName - - - situacaoResolvida - - - telefone - - - urgente - - - userRealizacaoCompras - - - userValidacao - - - userValidacaoCompras - - - userValidacaoCorre - - - userValidacaofunc - - - userValidacaoGestor - - - userValidacaoItens - - - validacaoCorre - - - validacaoFunc - - - validacaoItens - - - validarMotivo - - - WKNumProces - - - diff --git a/Recrutamento e Seleção/workflow/.resources/recrutamentoeselecao.png b/Recrutamento e Seleção/workflow/.resources/recrutamentoeselecao.png index 7f7c298b8d06918c929690681d2f78e4ea8d73b3..39a71c4b8526d9f1fbef5c25369713c628c97ed0 100644 GIT binary patch literal 47214 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 S4l;-P_Rn^HTK&oXZ~qN$jHH(U literal 45031 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 From dbb3061cac2a9956d26a936c6636887ed3a9a611 Mon Sep 17 00:00:00 2001 From: Andrey Cunha Date: Mon, 11 May 2026 00:18:03 -0300 Subject: [PATCH 23/25] att --- compras_digital/.vscode/servers.json | 4 +- .../src/main/resources/view.ftl | 58 +- .../resources/css/widget_solicitacoes.css | 463 ++++++++++++- .../resources/js/widget_solicitacoes.js | 655 +++++++++++++++++- 4 files changed, 1117 insertions(+), 63 deletions(-) diff --git a/compras_digital/.vscode/servers.json b/compras_digital/.vscode/servers.json index 934d36f..f9eff71 100644 --- a/compras_digital/.vscode/servers.json +++ b/compras_digital/.vscode/servers.json @@ -2,13 +2,13 @@ "version": "1.0.0", "configurations": [ { - "id": "o9cixezp329movgapv2risawf8wvym", + "id": "qhvjkjcxlzmp0m9vw6iehyg3gadm", "name": "Ginseng Produção", "host": "comerciode188006.fluig.cloudtotvs.com.br", "ssl": true, "port": 443, "username": "andrey.cunha", - "password": "eyJpdiI6IjM5MGNhMzMwMWIyNWI2ZDMyYmVmM2FiNDg5NzQ3NzZhIiwic2FsdCI6ImU1ZWE3MDZhOWE0NGMyMjExNmE3NjIyYmRmZTdmMjNhIiwidGV4dCI6ImZkMTY4MTAwNjM0ZmQ3NmI5M2MwZjQ1YmE4NDJmMjRhIn0=", + "password": "eyJpdiI6IjI2NmJlZWRhYTE1NTk0M2ZkOTM4MWJlMDBlODlhMjFkIiwic2FsdCI6IjJlNzAwM2FiMzM3NTMzODEwMTk4Mzk0ODAxOGM0N2YwIiwidGV4dCI6IjliOWI2OGQ5MWFkNDNjOWU5ZDE4NjdjNWEyYWU5YzRlIn0=", "userCode": "andrey.cunha", "confirmExporting": false, "hasBrowser": false, diff --git a/compras_digital/wcm/widget/widget_solicitacoes/src/main/resources/view.ftl b/compras_digital/wcm/widget/widget_solicitacoes/src/main/resources/view.ftl index cfc1483..b0880d0 100644 --- a/compras_digital/wcm/widget/widget_solicitacoes/src/main/resources/view.ftl +++ b/compras_digital/wcm/widget/widget_solicitacoes/src/main/resources/view.ftl @@ -1,39 +1,51 @@ -
          -
          -
          Consultar Solicitações
          -
          +
          +
          +
          +

          Tracker da Solicitacao de Compra

          +

          Acompanhe SC, cotacao, pedido, aprovacao e entrega em uma unica tela.

          +
          + +
          +
          diff --git a/compras_digital/wcm/widget/widget_solicitacoes/src/main/webapp/resources/css/widget_solicitacoes.css b/compras_digital/wcm/widget/widget_solicitacoes/src/main/webapp/resources/css/widget_solicitacoes.css index a23359a..b9c22f4 100644 --- a/compras_digital/wcm/widget/widget_solicitacoes/src/main/webapp/resources/css/widget_solicitacoes.css +++ b/compras_digital/wcm/widget/widget_solicitacoes/src/main/webapp/resources/css/widget_solicitacoes.css @@ -1 +1,462 @@ -/* Coloque aqui seu codigo CSS */ +.compras-tracker-widget { + color: #172033; +} + +.tracker-shell { + background: #f7f9fc; + border: 1px solid #dfe6ef; + border-radius: 8px; + padding: 18px; +} + +.tracker-header { + align-items: center; + display: flex; + gap: 16px; + justify-content: space-between; + margin-bottom: 16px; +} + +.tracker-header h2 { + color: #101828; + font-size: 22px; + font-weight: 700; + line-height: 1.2; + margin: 0 0 4px; +} + +.tracker-header p { + color: #667085; + font-size: 13px; + margin: 0; +} + +.tracker-search, +.tracker-card, +.tracker-table-wrap { + background: #fff; + border: 1px solid #d9e2ec; + border-radius: 8px; + box-shadow: 0 8px 22px rgba(16, 24, 40, .05); +} + +.tracker-search { + margin-bottom: 14px; + padding: 16px; +} + +.tracker-search label { + color: #344054; + font-size: 12px; + font-weight: 700; +} + +.tracker-search-actions .btn { + margin-top: 0; +} + +.tracker-refresh { + align-items: center; + display: inline-flex; + gap: 6px; + white-space: nowrap; +} + +.tracker-message:empty { + display: none; +} + +.tracker-results { + margin-bottom: 14px; +} + +.tracker-table-wrap { + overflow-x: auto; +} + +.tracker-table { + margin: 0; +} + +.tracker-table > thead > tr > th { + background: #f8fafc; + border-bottom: 1px solid #d9e2ec; + color: #344054; + font-size: 12px; + white-space: nowrap; +} + +.tracker-table > tbody > tr > td { + color: #344054; + font-size: 13px; + vertical-align: middle; +} + +.tracker-detail { + margin-top: 14px; +} + +.tracker-card { + margin-bottom: 14px; + padding: 16px; +} + +.tracker-card-main { + padding: 18px; +} + +.tracker-title-row, +.tracker-section-head { + align-items: center; + display: flex; + gap: 12px; + justify-content: space-between; +} + +.tracker-title-row { + margin-bottom: 16px; +} + +.tracker-title-row h3 { + color: #101828; + font-size: 20px; + font-weight: 700; + margin: 0 0 3px; +} + +.tracker-title-row span { + color: #667085; + font-size: 12px; +} + +.tracker-summary-grid { + display: grid; + gap: 12px; + grid-template-columns: repeat(3, minmax(0, 1fr)); +} + +.tracker-info { + background: #fbfcfe; + border: 1px solid #e6edf5; + border-radius: 6px; + min-height: 68px; + padding: 10px 12px; +} + +.tracker-info span { + color: #667085; + display: block; + font-size: 11px; + font-weight: 700; + margin-bottom: 7px; + text-transform: uppercase; +} + +.tracker-info strong { + color: #172033; + display: block; + font-size: 14px; + line-height: 1.25; + overflow-wrap: anywhere; +} + +.tracker-steps { + align-items: flex-start; + display: grid; + grid-template-columns: repeat(5, minmax(96px, 1fr)); + position: relative; +} + +.tracker-steps:before { + background: #cfd8e3; + content: ""; + height: 2px; + left: 10%; + position: absolute; + right: 10%; + top: 22px; +} + +.tracker-step { + align-items: center; + display: flex; + flex-direction: column; + gap: 4px; + min-width: 0; + position: relative; + text-align: center; + z-index: 1; +} + +.tracker-step-icon { + align-items: center; + background: #d0d5dd; + border-radius: 999px; + color: #475467; + display: flex; + height: 44px; + justify-content: center; + margin-bottom: 4px; + width: 44px; +} + +.tracker-step.is-done .tracker-step-icon { + background: #2563eb; + color: #fff; +} + +.tracker-step strong { + color: #172033; + font-size: 12px; + line-height: 1.2; +} + +.tracker-step span { + color: #667085; + font-size: 11px; + line-height: 1.2; + max-width: 120px; + overflow-wrap: anywhere; +} + +.tracker-grid { + display: grid; + gap: 14px; + grid-template-columns: minmax(0, 1.2fr) minmax(320px, .8fr); +} + +.tracker-section-head { + border-bottom: 1px solid #e6edf5; + margin: -2px -16px 12px; + padding: 0 16px 12px; +} + +.tracker-section-head h4 { + color: #172033; + font-size: 16px; + font-weight: 700; + margin: 0; +} + +.tracker-section-head > span { + align-items: center; + background: #eef2f7; + border-radius: 999px; + color: #344054; + display: inline-flex; + font-size: 12px; + font-weight: 700; + height: 24px; + justify-content: center; + min-width: 24px; + padding: 0 8px; +} + +.tracker-mini-table { + overflow-x: auto; +} + +.tracker-mini-table .table { + margin: 0; +} + +.tracker-mini-table th { + color: #344054; + font-size: 12px; + white-space: nowrap; +} + +.tracker-mini-table td { + color: #344054; + font-size: 12px; + vertical-align: middle; +} + +.tracker-badge { + border-radius: 999px; + display: inline-flex; + font-size: 12px; + font-weight: 700; + line-height: 1; + padding: 7px 10px; + white-space: nowrap; +} + +.tracker-badge.is-success { + background: #dcfce7; + color: #15803d; +} + +.tracker-badge.is-warning { + background: #fef3c7; + color: #b45309; +} + +.tracker-badge.is-danger { + background: #fee2e2; + color: #b42318; +} + +.tracker-badge.is-info { + background: #dbeafe; + color: #1d4ed8; +} + +.tracker-order-line { + align-items: center; + border: 1px solid #e6edf5; + border-radius: 6px; + display: grid; + gap: 10px; + grid-template-columns: 120px minmax(0, 1fr) auto; + padding: 10px 12px; +} + +.tracker-order-line span { + color: #344054; + overflow-wrap: anywhere; +} + +.tracker-order-line em { + color: #172033; + font-style: normal; + font-weight: 700; +} + +.tracker-muted, +.tracker-updated { + color: #667085; + font-size: 12px; + margin-top: 10px; +} + +.tracker-approval-list { + list-style: none; + margin: 0; + padding: 0; +} + +.tracker-approval-list li { + align-items: flex-start; + display: flex; + gap: 10px; + padding: 9px 0; +} + +.tracker-approval-list li + li { + border-top: 1px solid #eef2f7; +} + +.tracker-approval-dot { + align-items: center; + border-radius: 999px; + display: inline-flex; + flex: 0 0 24px; + font-size: 12px; + font-weight: 700; + height: 24px; + justify-content: center; + width: 24px; +} + +.tracker-approval-list .is-approved .tracker-approval-dot { + background: #16a34a; + color: #fff; +} + +.tracker-approval-list .is-waiting .tracker-approval-dot { + background: #fef3c7; + color: #b45309; +} + +.tracker-approval-list strong { + color: #172033; + display: block; + font-size: 13px; +} + +.tracker-approval-list small { + color: #667085; + display: block; + font-size: 12px; + margin-top: 3px; +} + +.tracker-resume { + display: grid; + gap: 10px 16px; + grid-template-columns: 150px minmax(0, 1fr); + margin: 0; +} + +.tracker-resume dt { + color: #667085; + font-weight: 600; +} + +.tracker-resume dd { + color: #172033; + font-weight: 600; + margin: 0; + overflow-wrap: anywhere; +} + +.tracker-state, +.tracker-empty-inline { + align-items: center; + background: #fff; + border: 1px dashed #cfd8e3; + border-radius: 8px; + color: #667085; + display: flex; + gap: 8px; + justify-content: center; + min-height: 80px; + padding: 16px; + text-align: center; +} + +.tracker-empty-inline { + background: #fbfcfe; + min-height: 74px; +} + +@media (max-width: 992px) { + .tracker-summary-grid, + .tracker-grid { + grid-template-columns: 1fr; + } + + .tracker-steps { + gap: 12px; + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .tracker-steps:before { + display: none; + } +} + +@media (max-width: 640px) { + .tracker-shell { + padding: 12px; + } + + .tracker-header { + align-items: flex-start; + flex-direction: column; + } + + .tracker-refresh { + width: 100%; + } + + .tracker-steps { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .tracker-order-line, + .tracker-resume { + grid-template-columns: 1fr; + } +} diff --git a/compras_digital/wcm/widget/widget_solicitacoes/src/main/webapp/resources/js/widget_solicitacoes.js b/compras_digital/wcm/widget/widget_solicitacoes/src/main/webapp/resources/js/widget_solicitacoes.js index 36c640d..2ae7491 100644 --- a/compras_digital/wcm/widget/widget_solicitacoes/src/main/webapp/resources/js/widget_solicitacoes.js +++ b/compras_digital/wcm/widget/widget_solicitacoes/src/main/webapp/resources/js/widget_solicitacoes.js @@ -1,55 +1,636 @@ var MyWidget = SuperWidget.extend({ - - // Variáveis do widget (se precisar salvar estado entre chamadas) instanceId: null, - // Método iniciado quando o widget é carregado init: function() { - this.instanceId = this.instanceId || new Date().getTime(); - console.log("Widget Solicitações carregado, instância:", this.instanceId); + this.clearMessage(); + $("#detalheSolicitacao_" + this.instanceId).hide(); }, - - // BIND de eventos + bindings: { local: { - 'pesquisar': ['click_consultarSolicitacoes'] + "pesquisar": ["click_consultarSolicitacoes"], + "acompanhar": ["click_acompanharSolicitacao"], + "limpar": ["click_limparConsulta"] }, global: {} }, - - // Função chamada ao clicar em "Pesquisar" + consultarSolicitacoes: function(htmlElement, event) { - var numero = $("#filtroNumero_" + this.instanceId).val(); - var solicitante = $("#filtroSolicitante_" + this.instanceId).val(); - var status = $("#filtroStatus_" + this.instanceId).val(); + if (event) event.preventDefault(); - var constraints = []; - if (numero) constraints.push(DatasetFactory.createConstraint("C1_NUM", numero, numero, ConstraintType.MUST)); - if (solicitante) constraints.push(DatasetFactory.createConstraint("C1_SOLICIT", solicitante, solicitante, ConstraintType.MUST)); - if (status) constraints.push(DatasetFactory.createConstraint("STATUS", status, status, ConstraintType.MUST)); + var numero = this.normalizarTexto($("#filtroNumero_" + this.instanceId).val()); + var solicitante = this.normalizarTexto($("#filtroSolicitante_" + this.instanceId).val()); + var status = this.normalizarTexto($("#filtroStatus_" + this.instanceId).val()); - var ds = DatasetFactory.getDataset("dsSolicitacoesCompra", null, constraints, null); + this.clearMessage(); + $("#detalheSolicitacao_" + this.instanceId).hide().empty(); - let html = ` - - - `; - - if (ds && ds.values.length) { - ds.values.forEach(sc => { - html += ` - - - - - - `; - }); - } else { - html += ``; + if (numero) { + this.renderizarConsultaPorNumero(numero); + return; } - html += `
          NúmeroSolicitanteDataStatusPedido
          ${sc.C1_NUM}${sc.C1_SOLICIT}${sc.C1_EMISSAO}${sc.STATUS}${sc.C1_PEDIDO || '-'}
          Nenhuma solicitação encontrada
          `; - $("#listaSolicitacoes_" + this.instanceId).html(html); + this.renderizarListaGenerica(solicitante, status); + }, + + acompanharSolicitacao: function(htmlElement, event) { + if (event) event.preventDefault(); + + var numero = $(htmlElement).attr("data-numero-sc"); + if (!numero) return; + + $("#filtroNumero_" + this.instanceId).val(numero); + this.renderizarTracker(numero); + }, + + limparConsulta: function(htmlElement, event) { + if (event) event.preventDefault(); + + $("#filtroNumero_" + this.instanceId).val(""); + $("#filtroSolicitante_" + this.instanceId).val(""); + $("#filtroStatus_" + this.instanceId).val(""); + $("#listaSolicitacoes_" + this.instanceId).empty(); + $("#detalheSolicitacao_" + this.instanceId).hide().empty(); + this.clearMessage(); + }, + + bindDynamicActions: function() { + var self = this; + $("#listaSolicitacoes_" + this.instanceId) + .find("[data-acompanhar]") + .off("click.tracker") + .on("click.tracker", function(event) { + self.acompanharSolicitacao(this, event); + }); + }, + + renderizarConsultaPorNumero: function(numero) { + var dados = this.consultarSC(numero); + + if (!dados || !dados.rows.length || !this.temSCValida(dados.rows[0])) { + $("#listaSolicitacoes_" + this.instanceId).html(this.emptyState("Nenhuma solicitacao encontrada para a SC informada.")); + return; + } + + $("#listaSolicitacoes_" + this.instanceId).html(this.montarTabelaSolicitacoes(dados.rows)); + this.bindDynamicActions(); + this.renderizarTracker(numero, dados); + }, + + renderizarListaGenerica: function(solicitante, status) { + var ds = null; + var constraints = []; + + try { + if (solicitante) constraints.push(this.criarConstraint("C1_SOLICIT", solicitante, solicitante)); + if (status) constraints.push(this.criarConstraint("STATUS", status, status)); + ds = this.buscarDataset("dsSolicitacoesCompra", null, constraints, null); + } catch (e) { + ds = null; + } + + if (!ds || !ds.values || !ds.values.length) { + this.showMessage("Informe o numero da SC para abrir o tracker. A listagem geral depende de um dataset de consulta de solicitacoes no ambiente Fluig.", "info"); + $("#listaSolicitacoes_" + this.instanceId).html(this.emptyState("Digite uma SC e clique em Pesquisar.")); + return; + } + + $("#listaSolicitacoes_" + this.instanceId).html(this.montarTabelaSolicitacoes(ds.values)); + this.bindDynamicActions(); + }, + + consultarSC: function(numero) { + var constraints = [ + this.criarConstraint("numeroSCProtheus", numero, numero) + ]; + var ds = this.buscarDataset("ds_consultaSC", null, constraints, null); + + return { + dataset: ds, + rows: ds && ds.values ? ds.values : [] + }; + }, + + criarConstraint: function(campo, valorInicial, valorFinal) { + if (typeof DatasetFactory !== "undefined" && typeof ConstraintType !== "undefined") { + return DatasetFactory.createConstraint(campo, valorInicial, valorFinal, ConstraintType.MUST); + } + + return { + _field: campo, + _initialValue: valorInicial, + _finalValue: valorFinal, + _type: 1, + fieldName: campo, + initialValue: valorInicial, + finalValue: valorFinal, + constraintType: 1 + }; + }, + + buscarDataset: function(nome, fields, constraints, sortFields) { + if (typeof DatasetFactory !== "undefined") { + return DatasetFactory.getDataset(nome, fields, constraints, sortFields); + } + + var retorno = { values: [] }; + + $.ajax({ + url: "/api/public/ecm/dataset/datasets", + type: "POST", + async: false, + contentType: "application/json", + dataType: "json", + data: JSON.stringify({ + name: nome, + fields: fields || null, + constraints: constraints || [], + order: sortFields || null + }), + success: function(response) { + var content = response && response.content ? response.content : response; + retorno = { + values: content && content.values ? content.values : [] + }; + }, + error: function(xhr) { + var mensagem = xhr && xhr.responseText ? xhr.responseText : "Falha ao consultar dataset " + nome; + throw new Error(mensagem); + } + }); + + return retorno; + }, + + renderizarTracker: function(numero, dadosConsulta) { + var detalhe = $("#detalheSolicitacao_" + this.instanceId); + detalhe.show().html(this.loadingState("Consultando dados da SC " + this.escapeHTML(numero) + "...")); + + try { + var dados = dadosConsulta || this.consultarSC(numero); + if (!dados || !dados.rows.length || !this.temSCValida(dados.rows[0])) { + detalhe.html(this.emptyState("Nao foi possivel carregar o tracker desta SC.")); + return; + } + + var resumo = this.montarResumoSC(dados.rows); + detalhe.html(this.montarTracker(resumo)); + } catch (e) { + detalhe.html(this.emptyState("Erro ao carregar o tracker: " + this.escapeHTML(String(e)))); + } + }, + + montarTabelaSolicitacoes: function(rows) { + var exibidos = {}; + var html = [ + '
          ', + '', + '', + '', + '', + '', + '', + '', + '', + '' + ]; + + for (var i = 0; i < rows.length; i++) { + var row = rows[i] || {}; + var numero = this.primeiroValor(row.C1_NUM, row.numero, row.NUMERO); + if (!numero) continue; + if (exibidos[numero]) continue; + exibidos[numero] = true; + + html.push( + '', + '', + '', + '', + '', + '', + '', + '' + ); + } + + html.push('
          SolicitacaoSolicitanteDataStatusPedidoAcao
          SC ' + this.escapeHTML(numero) + '' + this.escapeHTML(this.primeiroValor(row.C1_SOLICIT, row.solicitante, "-")) + '' + this.escapeHTML(this.formatarData(this.primeiroValor(row.C1_EMISSAO, row.data, ""))) + '' + this.montarBadge(this.primeiroValor(row.STATUS, row.status, "-")) + '' + this.escapeHTML(this.formatarDocumento(this.primeiroValor(row.C1_PEDIDO, row.pedido, "-"))) + '', + '', + '
          '); + return html.join(""); + }, + + montarResumoSC: function(rows) { + var base = rows[0] || {}; + var cotacoes = this.parseJsonArray(base.COTACOES_JSON); + var pedidos = this.parseJsonArray(base.PEDIDO_JSON); + var totalSC = this.somarCampo(rows, "C1_TOTAL"); + var menorCotacao = this.encontrarMenorCotacao(cotacoes); + var pedido = this.formatarDocumento(this.primeiroValor(base.C1_PEDIDO, menorCotacao ? menorCotacao.C8_NUMPED : "")); + var cotacao = this.formatarDocumento(this.primeiroValor(base.C1_COTACAO, menorCotacao ? menorCotacao.C8_NUM : "")); + var status = this.definirStatus(base, cotacao, pedido); + var assinaturas = this.extrairAssinaturasPedido(pedidos); + + return { + numero: this.primeiroValor(base.C1_NUM, ""), + solicitante: this.primeiroValor(base.C1_SOLICIT, "-"), + data: this.formatarData(base.C1_EMISSAO), + valor: totalSC > 0 ? this.formatarMoeda(totalSC) : this.formatarMoeda(this.numeroBR(base.C1_TOTAL)), + status: status, + cotacao: cotacao, + pedido: pedido, + fornecedor: menorCotacao ? this.primeiroValor(menorCotacao.A2_NOME, menorCotacao.C8_FORNOME, menorCotacao.C8_FORNECE, "-") : "-", + menorValor: menorCotacao ? this.formatarMoeda(this.numeroBR(menorCotacao.C8_TOTAL)) : "-", + itens: rows, + cotacoes: cotacoes, + pedidos: pedidos, + assinaturas: assinaturas, + cotacaoErro: base.COTACAO_ERRO || "", + pedidoErro: base.PEDIDO_ERRO || "", + atualizadoEm: this.montarDataHora(base.data_consulta, base.hora_consulta) + }; + }, + + montarTracker: function(resumo) { + var etapas = this.montarEtapas(resumo); + + return [ + '
          ', + '
          ', + '
          ', + '

          SC ' + this.escapeHTML(resumo.numero || "-") + '

          ', + 'Acompanhamento completo da solicitacao', + '
          ', + this.montarBadge(resumo.status), + '
          ', + '
          ', + this.montarInfo("Solicitante", resumo.solicitante), + this.montarInfo("Data da solicitacao", resumo.data || "-"), + this.montarInfo("Valor estimado", resumo.valor || "-"), + this.montarInfo("Cotacao", resumo.cotacao || "-"), + this.montarInfo("Pedido", resumo.pedido || "-"), + this.montarInfo("Fornecedor sugerido", resumo.fornecedor || "-"), + '
          ', + '
          ', + '
          ', + '
          ' + etapas.join("") + '
          ', + '
          ', + '
          ', + '
          ', + this.montarCotacoes(resumo), + this.montarPedidos(resumo), + this.montarItens(resumo), + '
          ', + '
          ', + this.montarAprovacoes(resumo), + this.montarResumoFinal(resumo), + '
          ', + '
          ' + ].join(""); + }, + + montarEtapas: function(resumo) { + var temCotacao = this.documentoValido(resumo.cotacao); + var temPedido = this.documentoValido(resumo.pedido); + var aprovado = resumo.assinaturas.length > 0 && this.todasAssinaturasAprovadas(resumo.assinaturas); + + return [ + this.montarEtapa("Solicitacao", "Criada", true, "fluigicon-shopping-cart"), + this.montarEtapa("Cotacao", temCotacao ? resumo.cotacao : "Pendente", temCotacao, "fluigicon-link"), + this.montarEtapa("Pedido", temPedido ? resumo.pedido : "Aguardando", temPedido, "fluigicon-file"), + this.montarEtapa("Aprovacao", aprovado ? "Aprovado" : "Pendente", aprovado, "fluigicon-ok-circle"), + this.montarEtapa("Entrega", "Aguardando", false, "fluigicon-truck") + ]; + }, + + montarEtapa: function(titulo, detalhe, concluida, icone) { + return [ + '
          ', + '
          ', + '' + this.escapeHTML(titulo) + '', + '' + this.escapeHTML(detalhe || "-") + '', + '
          ' + ].join(""); + }, + + montarCotacoes: function(resumo) { + var cotacoes = resumo.cotacoes || []; + var html = [ + '
          ', + '

          Cotacoes

          ' + cotacoes.length + '
          ' + ]; + + if (!cotacoes.length) { + html.push(this.emptyInline(resumo.cotacaoErro || "Nenhuma cotacao vinculada ate o momento.")); + } else { + html.push('
          '); + for (var i = 0; i < Math.min(cotacoes.length, 5); i++) { + var c = cotacoes[i] || {}; + html.push( + '', + '', + '', + '', + '', + '' + ); + } + html.push('
          FornecedorItemValorPedido
          ' + this.escapeHTML(this.primeiroValor(c.A2_NOME, c.C8_FORNOME, c.C8_FORNECE, "-")) + '' + this.escapeHTML(this.primeiroValor(c.C8_ITEM, c.C8_ITEMSC, "-")) + '' + this.escapeHTML(this.formatarMoeda(this.numeroBR(c.C8_TOTAL))) + '' + this.escapeHTML(this.formatarDocumento(c.C8_NUMPED || "-")) + '
          '); + } + + html.push('
          '); + return html.join(""); + }, + + montarPedidos: function(resumo) { + var pedidos = resumo.pedidos || []; + var html = [ + '
          ', + '

          Pedidos

          ' + (this.documentoValido(resumo.pedido) ? "1" : "0") + '
          ' + ]; + + if (!this.documentoValido(resumo.pedido)) { + html.push(this.emptyInline(resumo.pedidoErro || "Pedido ainda nao gerado.")); + } else { + html.push('
          PED ' + this.escapeHTML(resumo.pedido) + '' + this.escapeHTML(resumo.fornecedor) + '' + this.escapeHTML(resumo.menorValor) + '
          '); + if (pedidos.length) { + html.push('
          ' + this.escapeHTML(pedidos.length + " registro(s) retornado(s) pela consulta do pedido.") + '
          '); + } + } + + html.push('
          '); + return html.join(""); + }, + + montarAprovacoes: function(resumo) { + var assinaturas = resumo.assinaturas || []; + var html = [ + '
          ', + '

          Aprovacoes

          ' + assinaturas.length + '
          ' + ]; + + if (!assinaturas.length) { + html.push(this.emptyInline("Sem alcadas retornadas para o pedido.")); + } else { + html.push('
            '); + for (var i = 0; i < assinaturas.length; i++) { + var a = assinaturas[i] || {}; + var aprovado = this.statusAprovado(a.status); + html.push( + '
          1. ', + '' + (aprovado ? "✓" : "!") + '', + '
            ' + this.escapeHTML(this.primeiroValor(a.nivel, "Nivel " + (i + 1))) + ' - ' + this.escapeHTML(this.primeiroValor(a.usuario, a.nome, "-")) + '', + '' + this.escapeHTML(this.primeiroValor(a.status, a.descricao, "Pendente")) + '
            ', + '
          2. ' + ); + } + html.push('
          '); + } + + html.push('
          '); + return html.join(""); + }, + + montarItens: function(resumo) { + var itens = resumo.itens || []; + var html = [ + '
          ', + '

          Itens da solicitacao

          ' + itens.length + '
          ', + '
          ' + ]; + + for (var i = 0; i < itens.length; i++) { + var item = itens[i] || {}; + html.push( + '', + '', + '', + '', + '', + '' + ); + } + + html.push('
          ItemDescricaoQtd.Total
          ' + this.escapeHTML(this.primeiroValor(item.C1_ITEM, "-")) + '' + this.escapeHTML(this.primeiroValor(item.C1_DESCRI, item.C1_PRODUTO, "-")) + '' + this.escapeHTML(this.primeiroValor(item.C1_QUANT, "-")) + '' + this.escapeHTML(this.formatarMoeda(this.numeroBR(item.C1_TOTAL))) + '
          '); + return html.join(""); + }, + + montarResumoFinal: function(resumo) { + return [ + '
          ', + '

          Resumo

          ', + '
          ', + '
          Status da SC
          ' + this.montarBadge(resumo.status) + '
          ', + '
          Menor valor encontrado
          ' + this.escapeHTML(resumo.menorValor || "-") + '
          ', + '
          Fornecedor sugerido
          ' + this.escapeHTML(resumo.fornecedor || "-") + '
          ', + '
          Pedido gerado
          ' + this.escapeHTML(resumo.pedido || "-") + '
          ', + '
          Previsao de entrega
          A definir
          ', + '
          ', + resumo.atualizadoEm ? '
          Ultima atualizacao: ' + this.escapeHTML(resumo.atualizadoEm) + '
          ' : '', + '
          ' + ].join(""); + }, + + montarInfo: function(label, valor) { + return '
          ' + this.escapeHTML(label) + '' + this.escapeHTML(valor || "-") + '
          '; + }, + + montarBadge: function(texto) { + var t = this.primeiroValor(texto, "-"); + var c = "tracker-badge"; + var s = String(t).toLowerCase(); + + if (s.indexOf("aprov") >= 0 || s.indexOf("gerad") >= 0 || s.indexOf("liberad") >= 0 || s.indexOf("sucesso") >= 0) c += " is-success"; + else if (s.indexOf("aguard") >= 0 || s.indexOf("pend") >= 0 || s.indexOf("cotacao") >= 0) c += " is-warning"; + else if (s.indexOf("reprov") >= 0 || s.indexOf("erro") >= 0) c += " is-danger"; + else c += " is-info"; + + return '' + this.escapeHTML(t) + ''; + }, + + definirStatus: function(row, cotacao, pedido) { + if (this.documentoValido(pedido)) return "Pedido gerado"; + if (this.documentoValido(cotacao)) return "Cotacao gerada"; + + var aprov = String(row.C1_APROV || "").toUpperCase(); + if (aprov === "L") return "Liberada"; + if (aprov === "R") return "Reprovada"; + if (aprov === "B") return "Aguardando cotacao"; + + return this.primeiroValor(row.STATUS, "Aguardando acompanhamento"); + }, + + encontrarMenorCotacao: function(cotacoes) { + var menor = null; + var menorValor = null; + + for (var i = 0; i < cotacoes.length; i++) { + var atual = cotacoes[i] || {}; + var valor = this.numeroBR(atual.C8_TOTAL); + if (!valor && valor !== 0) continue; + + if (menor === null || valor < menorValor) { + menor = atual; + menorValor = valor; + } + } + + return menor; + }, + + extrairAssinaturasPedido: function(pedidos) { + var assinaturas = []; + + for (var i = 0; i < pedidos.length; i++) { + var p = pedidos[i] || {}; + var candidatos = [p.ALCADAS, p.alcadas, p.aprovacoes, p.APROVACOES, p.assinaturas, p.ASSINATURAS]; + + for (var j = 0; j < candidatos.length; j++) { + var lista = candidatos[j]; + if (typeof lista === "string") lista = this.parseJsonArray(lista); + if (lista && lista.length) { + for (var k = 0; k < lista.length; k++) { + var a = lista[k] || {}; + assinaturas.push({ + nivel: this.primeiroValor(a.NIVEL, a.nivel, a.SEQUENCIA, a.sequencia), + usuario: this.primeiroValor(a.USUARIO, a.usuario, a.NOME, a.nome, a.APROVADOR, a.aprovador), + status: this.primeiroValor(a.STATUS, a.status, a.SITUACAO, a.situacao, a.DESCRICAO, a.descricao) + }); + } + } + } + } + + return assinaturas; + }, + + todasAssinaturasAprovadas: function(assinaturas) { + for (var i = 0; i < assinaturas.length; i++) { + if (!this.statusAprovado(assinaturas[i].status)) return false; + } + return assinaturas.length > 0; + }, + + statusAprovado: function(status) { + var s = String(status || "").toLowerCase(); + return s.indexOf("aprov") >= 0 || s === "03" || s.indexOf("liberad") >= 0; + }, + + temSCValida: function(row) { + return !!(row && this.primeiroValor(row.C1_NUM, row.numero, row.NUMERO)); + }, + + documentoValido: function(valor) { + var v = String(valor || "").replace(/\s/g, ""); + if (!v || v === "-") return false; + if (/^0+$/.test(v)) return false; + if (/^x+$/i.test(v)) return false; + return true; + }, + + parseJsonArray: function(valor) { + if (!valor) return []; + if (Object.prototype.toString.call(valor) === "[object Array]") return valor; + + try { + var parsed = JSON.parse(valor); + if (Object.prototype.toString.call(parsed) === "[object Array]") return parsed; + if (parsed && parsed.pedidos) return parsed.pedidos; + if (parsed && parsed.cotacoes) return parsed.cotacoes; + if (parsed && parsed.values) return parsed.values; + } catch (e) { + return []; + } + + return []; + }, + + somarCampo: function(rows, campo) { + var total = 0; + for (var i = 0; i < rows.length; i++) { + total += this.numeroBR((rows[i] || {})[campo]); + } + return total; + }, + + numeroBR: function(valor) { + if (typeof valor === "number") return valor; + var v = String(valor || "").trim(); + if (!v) return 0; + + v = v.replace(/[R$\s]/g, ""); + if (v.indexOf(",") >= 0) v = v.replace(/\./g, "").replace(",", "."); + var n = parseFloat(v); + return isNaN(n) ? 0 : n; + }, + + formatarMoeda: function(valor) { + var n = typeof valor === "number" ? valor : this.numeroBR(valor); + if (!n && n !== 0) return "-"; + return "R$ " + n.toLocaleString("pt-BR", { minimumFractionDigits: 2, maximumFractionDigits: 2 }); + }, + + formatarData: function(valor) { + var v = String(valor || "").trim(); + if (!v) return "-"; + if (/^\d{8}$/.test(v)) return v.substr(6, 2) + "/" + v.substr(4, 2) + "/" + v.substr(0, 4); + return v; + }, + + formatarDocumento: function(valor) { + var v = String(valor || "").trim(); + if (!this.documentoValido(v)) return "-"; + return v; + }, + + montarDataHora: function(data, hora) { + var d = this.formatarData(data); + var h = String(hora || "").trim(); + if (d === "-" && !h) return ""; + return h ? d + " " + h : d; + }, + + primeiroValor: function() { + for (var i = 0; i < arguments.length; i++) { + var v = arguments[i]; + if (v !== null && v !== undefined && String(v).trim() !== "") return String(v).trim(); + } + return ""; + }, + + normalizarTexto: function(valor) { + return String(valor || "").trim(); + }, + + showMessage: function(texto, tipo) { + var classe = tipo === "danger" ? "alert-danger" : tipo === "success" ? "alert-success" : "alert-info"; + $("#mensagemSolicitacoes_" + this.instanceId).html('
          ' + this.escapeHTML(texto) + '
          '); + }, + + clearMessage: function() { + $("#mensagemSolicitacoes_" + this.instanceId).empty(); + }, + + loadingState: function(texto) { + return '
          ' + this.escapeHTML(texto) + '
          '; + }, + + emptyState: function(texto) { + return '
          ' + this.escapeHTML(texto) + '
          '; + }, + + emptyInline: function(texto) { + return '
          ' + this.escapeHTML(texto) + '
          '; + }, + + escapeHTML: function(valor) { + return String(valor === null || valor === undefined ? "" : valor) + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); } }); From ba5d7dae577267472872a2c1f29b065bf299d2e1 Mon Sep 17 00:00:00 2001 From: Andrey Cunha Date: Mon, 11 May 2026 14:51:33 -0300 Subject: [PATCH 24/25] att --- Ginseng_chamados/.vscode/servers.json | 18 + Ginseng_chamados/datasets/dsFiliais.js | 310 +- .../script.js | 36 +- .../totvsflow_solicitacao_compras.html | 32 +- .../org.eclipse.e4.workbench/workbench.xmi | 4511 +++++++++-------- .../0.log | 1 + .../.resources/Solicitação de compras V2.png | Bin 42013 -> 37889 bytes 7 files changed, 2512 insertions(+), 2396 deletions(-) create mode 100644 Ginseng_chamados/.vscode/servers.json diff --git a/Ginseng_chamados/.vscode/servers.json b/Ginseng_chamados/.vscode/servers.json new file mode 100644 index 0000000..301f7cf --- /dev/null +++ b/Ginseng_chamados/.vscode/servers.json @@ -0,0 +1,18 @@ +{ + "version": "1.0.0", + "configurations": [ + { + "id": "s220blnhijmp1hrc14fyurof1h5bo", + "name": "Ginseng Produção", + "host": "comerciode188006.fluig.cloudtotvs.com.br", + "ssl": true, + "port": 443, + "username": "andrey.cunha", + "password": "eyJpdiI6IjYwM2Y4MjdmODAyMWNiMTE3ZmFiNmNlZTc4Yzk3NTkyIiwic2FsdCI6ImQ0Nzg1N2I1OGYxNWUxZTQxYTg3MGMzYzRlMTdiM2JiIiwidGV4dCI6IjdiOTZkMTVlYmIzYjBmOTk0YjE2YmQ3YWFiZmY1MjFlIn0=", + "userCode": "andrey.cunha", + "confirmExporting": false, + "hasBrowser": false, + "companyId": 1 + } + ] +} \ No newline at end of file diff --git a/Ginseng_chamados/datasets/dsFiliais.js b/Ginseng_chamados/datasets/dsFiliais.js index 48d5834..892927c 100644 --- a/Ginseng_chamados/datasets/dsFiliais.js +++ b/Ginseng_chamados/datasets/dsFiliais.js @@ -1,118 +1,212 @@ -function defineStructure() { - -} -function onSync(lastSyncDate) { - -} function createDataset(fields, constraints, sortFields) { - - var ds = DatasetBuilder.newDataset(); - - ds.addColumn("codigo"); - ds.addColumn("filial"); - ds.addColumn("estabelecimento"); - ds.addColumn("cep"); - ds.addColumn("logradouro"); - ds.addColumn("numero"); - ds.addColumn("bairro"); - ds.addColumn("cidade"); - ds.addColumn("estado"); - ds.addColumn("cnpj"); + var dataset = DatasetBuilder.newDataset(); + dataset.addColumn("PDV"); + dataset.addColumn("LOJA"); + dataset.addColumn("RESPONSAVEL_LOJA"); + dataset.addColumn("REGIONAL"); + dataset.addColumn("UF"); + dataset.addColumn("CIDADE"); + dataset.addColumn("STATUS"); + dataset.addColumn("CANAL"); + dataset.addColumn("ID"); + dataset.addColumn("PROTHEUS"); + dataset.addColumn("LOGIN_LOJA"); + dataset.addColumn("COLLEAGUE_ID"); + dataset.addColumn("USER_CREATE"); - - ds.addRow(new Array("010101","4494", "ESCRITÓRIO MATRIZ","57035-030","RUA DESPORTISTA HUMBERTO GUIMARAES","343","PONTA VERDE","MACEIÓ","AL","08.489.643/0001-52")); - ds.addRow(new Array("010102","3546", "LJ BIG BOMPREÇO GRUTA","57052-000","AVENIDA FERNANDES LIMA","3700","GRUTA DE LOURDES","MACEIÓ","AL","08.489.643/0003-14")); - ds.addRow(new Array("010103","4560", "LJ MACEIÓ SHOPPING TERREO","57031-532","AVENIDA GUSTAVO PAIVA","2900","MANGABEIRAS","MACEIÓ","AL","08.489.643/0004-03")); - ds.addRow(new Array("010104","5699", "LJ MOREIRA LIMA","57020-000","RUA MOREIRA LIMA","93","CENTRO","MACEIÓ","AL","08.489.643/0005-86")); - ds.addRow(new Array("010106","12522", "LJ MACEIÓ SHOPPING EXPANSÃO","57031-530","AVENIDA GUSTAVO PAIVA","2990","MANGABEIRAS","MACEIÓ","AL","08.489.643/0016-39")); - ds.addRow(new Array("010107","12828", "LJ GBARBOSA S.MARIS","57036-550","AV ENG. PAULO BRANDÃO NOGUEIRA","S/N","JATIÚCA","MACEIÓ","AL","08.489.643/0017-10")); - ds.addRow(new Array("010108","12838", "LJ RIO LARGO","57100-000","AV PRES GETULIO VARGAS","148","CENTRO","RIO LARGO","AL","08.489.643/0018-09")); - ds.addRow(new Array("010109","21647", "QUIOSQUE CARAJÁS MANGABEIRAS","57037-901","AV COMENDADOR GUSTAVO PAIVA","S/N","MANGABEIRAS","MACEIÓ","AL","08.489.643/0019-81")); - ds.addRow(new Array("010110","12817", "LJ SHOPPING PÁTIO","57073-470","AV MENINO MARCELO","3800","CIDADE UNIVERSITÁRIA","MACEIÓ","AL","08.489.643/0020-15")); - ds.addRow(new Array("010111","12824", "QUIOSQUE GBARBOSA TABULEIRO","57061-110","AVENIDA MACEIÓ","S/N","TABULEIRO","MACEIÓ","AL","08.489.643/0021-04")); - ds.addRow(new Array("010112","12823", "LJ PONTA VERDE","57035-330","RUA DEPUTADO JOSÉ LAGES","431","PONTA VERDE","MACEIÓ","AL","08.489.643/0022-87")); - ds.addRow(new Array("010113","20858", "QUIOSQUE SUPER GIRO","57010-003","AVENIDA SIQUEIRA CAMPOS","1368","PRADO","MACEIÓ","AL","08.489.643/0023-68")); - ds.addRow(new Array("010114","12820", "LJ ATACADÃO TABULEIRO","57082-160","AV DOUTOR DURVAL DE GOIS MONTEIRO","12650","TABULEIRO","MACEIÓ","AL","08.489.643/0024-49")); - ds.addRow(new Array("010115","12830", "LJ LIVRAMENTO","57020-030","RUA DO LIVRAMENTO","24","CENTRO","MACEIÓ","AL","08.489.643/0025-20")); - ds.addRow(new Array("010117","19103", "LJ UNICOMPRA PONTA VERDE","57035-060","RUA DURVAL GUIMARÃES","S/N","PONTA VERDE","MACEIÓ","AL","08.489.643/0027-91")); - ds.addRow(new Array("010118","12826", "LJ ASSAÍ MANGABEIRAS","57037-532","AV COMENDADOR GUSTAVO PAIVA","3261","MANGABEIRAS","MACEIÓ","AL","08.489.643/0028-72")); - ds.addRow(new Array("010119","12829", "LJ JACINTINHO","57041-000","RUA CLETO CAMPELO","2394","JACINTINHO","MACEIÓ","AL","08.489.643/0029-53")); - ds.addRow(new Array("010120","12818", "LJ GBARBOSA SERRARIA","57046-000","AVENIDA MENINO MARCELO","9730","SERRARIA","MACEIÓ","AL","08.489.643/0030-97")); - ds.addRow(new Array("010121","13427", "LJ SHOPPING CIDADE","57055-000","AVENIDA FERNANDES LIMA","679","FAROL","MACEIÓ","AL","08.489.643/0031-78")); - ds.addRow(new Array("010124","14617", "LJ PARQUE SHOPPING","57038-000","AVENIDA GUSTAVO PAIVA","5945","CRUZ DAS ALMAS",",MACEIÓ","AL","08.489.643/0034-10")); - ds.addRow(new Array("010126","14668", "LJ MIX MATHEUS ANTARES","57038-410","AVENIDA MENINO MARCELO","5300","ANTARES","MACEIÓ","AL","08.489.643/0036-82")); - ds.addRow(new Array("010128","20006", "LJ SÃO SEBASTIÃO","43850-000","PRAÇA DOZE DE OUTUBRO","65","CENTRO","SÃO SEBASTIÃO DO PASSÉ","BA","08.489.643/0038-44")); - ds.addRow(new Array("010130","20009", "LJ CANDEIAS BAIXO","43815-050","AVENIDA ANTONIO PATTERSON","196","TRIÂNGULO","CANDEIAS","BA","08.489.643/0040-69")); - ds.addRow(new Array("010131","20005", "LJ CANDEIAS CIMA","43805-000","RUA 13 DE MAIO","147","CENTRO","CANDEIAS","BA","08.489.643/0041-40")); - ds.addRow(new Array("010132","20056", "LJ SIMÕES FILHO","43700-000","AV LUÍS EDUARDO MAGALHÃES","109","CENTRO","SIMÕES FILHO","BA","08.489.643/0042-20")); - ds.addRow(new Array("010133","20057", "LJ CONCEIÇÃO COITÉ","48730-000","RUA DR AMÂNCIO MOTA","30","CENTRO","CONCEIÃO DO COITÉ","BA","08.489.643/0043-01")); - ds.addRow(new Array("010134","20441", "LJ LAGARTO","49400-000","AVENIDA LEANDRO MACIEL","36","CENTRO","LAGARTO","SE","08.489.643/0044-92")); - ds.addRow(new Array("010135","20968", "HIB ITABAIANINHA","49290-000","PRAÇA OLÍMPIO CAMPOS","154","CENTRO","ITABAIANINHA","SE","08.489.643/0059-79")); - ds.addRow(new Array("010136","20969", "HIB MARECHAL DEODORO","57160-000","RUA DR TAVARES BASTOS","03","CENTRO","MARECHAL DEODORO","AL","08.489.643/0054-64")); - ds.addRow(new Array("010137","20970", "VD SÃO SEBASTIÃO","43850-000","PRAÇA DOZE DE OUTUBRO","116","CENTRO","SÃO SEBASTIÃO DO PASSÉ","BA","08.489.643/0050-30")); - ds.addRow(new Array("010138","20986", "HIB OLINDINA","48470-000","AVENIDA ANTONIO MANGABEIRA","84","CENTRO","OLINDINA","BA","08.489.643/0055-45")); - ds.addRow(new Array("010139","20988", "HIB QUEIMADAS","48860-000","PRAÇA CORONEL FRANCISCO LANTYER","21","CENTRO","QUEIMADAS","BA","08.489.643/0051-11")); - ds.addRow(new Array("010140","20989", "HIB ENTRE RIOS","48180-000","AVENIDA JURACY MAGALHÃES","320","CENTRO","ENTRE RIOS","BA","08.489.643/0056-26")); - ds.addRow(new Array("010141","20991", "HIB CAMPO ALEGRE","57250-000","RUA DO COMÉRCIO","49","CENTRO","CAMPO ALEGRE","AL","08.489.643/0061-93")); - ds.addRow(new Array("010142","20992", "ER CONCEIÇÃO COITÉ","48730-000","RUA DR AMANCIO MOTA","35","CENTRO","CONCEIÇÃO DO COITÉ","BA","08.489.643/0045-73")); - ds.addRow(new Array("010143","20993", "ER CANDEIAS","43815-010","AV ANTONIO PATTERSON","213","TRIANGULO","CANDEIAS","BA","08.489.643/0046-54")); - ds.addRow(new Array("010144","20994", "ER SIMÕES FILHO","43700-000","AV LUÍS EDUARDO MAGALHÃES","109","CENTRO","SIMÕES FILHO","BA","08.489.643/0047-35")); - ds.addRow(new Array("010145","20995", "ER LAGARTO","49400-000","AVENIDA LEANDRO MACIEL","36","CENTRO","LAGARTO","SE","08.489.643/0060-02")); - ds.addRow(new Array("010146","20996", "ER ANTARES","57083-048","AV ANTONIO LISBOA DE AMORIM","220","ANTARES","MACEIÓ","AL","08.489.643/0057-07")); - ds.addRow(new Array("010147","20997", "ER PITANGUINHA","57052-050","AVENIDA FERNANDES LIMA","840","PITANGUINHA","MACEIÓ","AL","08.489.643/0058-98")); - ds.addRow(new Array("010148","20998", "CD TABULEIRO","57073-482","ESTRADA DA CODEAL","770","TABULEIRO","MACEIÓ","AL","08.489.643/0062-74")); - ds.addRow(new Array("010149","20999", "HIB ESPLANADA","48370-000","PRAÇA LADISLAU CAVALCANTE","31","CENTRO","ESPLANADA","BA","08.489.643/0053-83")); - ds.addRow(new Array("010150","21000", "HIB SANTALUZ","48880-000","RUA RIO BRANCO","96","CENTRO","SANTALUZ","BA","08.489.643/0052-00")); - ds.addRow(new Array("010151","21001", "HIB RIO REAL","48330-000","PC SEN ANTONIO CARLOS MAGALHÃES","146","CENTRO","RIO REAL","BA","08.489.643/0049-05")); - ds.addRow(new Array("010152","21007", "TÔ QUE TÔ MACEIÓ CENTRO","57020-220","AVENIDA MOREIRA LIMA","293","CENTRO","MACEIÓ","AL","08.489.643/0048-16")); - ds.addRow(new Array("010153","21068", "LJ ATAKAREJO SIMÕES FILHO","43700-000","AV ENG ELMO SEREJO DE FARIAS","2073","CONJ HAB VIDA NOVA","SIMÕES FILHO","BA","08.489.643/0063-55")); - ds.addRow(new Array("010154","21277", "LJ GBARBOSA SOCORRO","49160-000","AVENIDA 1","13","CONJ JOAO ALVES FILHO","NOSSA SENHORA DO SOCORRO","SE","08.489.643/0065-17")); - ds.addRow(new Array("010155","21278", "ER SOCORRO","49140-000","AVENIDA COLETORA A","597","CONJ MARCOS FREIRE I","NOSSA SENHORA DO SOCORRO","SE","08.489.643/0066-06")); - ds.addRow(new Array("010156","21495", "HIB BARRA DOS COQUEIROS","49140-000","AVENIDA OCEANICA","506","ANTONIO PEDRO","BARRA DOS COQUEIROS","SE","08.489.643/0067-89")); - ds.addRow(new Array("010157","21296", "LJ SHOPPING PRÊMIO SOCORRO","49160-000","AVENIDA COLETORA A","S/N","CONJ MARCOS FREIRE I","NOSSA SENHORA DO SOCRRO","SE","08.489.643/0064-36")); - ds.addRow(new Array("010159","21381", "LJ CAPIM GROSSO","44695-000","AV ACM","121","CENTRO","CAPIM-GROSSO","BA","08.489.643/0069-40")); - ds.addRow(new Array("010160","21383", "ER CAPIM GROSSO","44695-000","AV ACM","121","CENTRO","CAPIM-GROSSO","BA","08.489.643/0070-84")); - ds.addRow(new Array("010161","21375", "HIB IPIRÁ","44600-000","AVENIDA CESÁR CABRAL","15","CENTRO","IPIRÁ","BA","08.489.643/0071-65")); - ds.addRow(new Array("010162","21624", "MIX MATEUS TRAPICHE","57010-000","AVENIDA SIQUEIRA CAMPOS","1295","PRADO","MACEIÓ","AL","08.489.643/0072-46")); - ds.addRow(new Array("010163","22448", "ER CAMPO ALEGRE","57250-000","RUA DO COMÉRCIO","49","CENTRO","CAMPO ALEGRE","AL","08.489.643/0073-27")); - ds.addRow(new Array("010164","23475", "MIX MATEUS TABULEIRO","57082-160","AV DOUTOR DURVAL DE GOIS MONTEIRO","9207","TABULEIRO","MACEIÓ","AL","08.489.643/0074-08")); - ds.addRow(new Array("010165","22541", "ER RIO LARGO","57100-000","RUA JUDITH PAIVA","445","CENTRO","RIO LARGO","AL","08.489.643/0075-99")); - ds.addRow(new Array("010166","AMG", "AMG SERRARIA","57046-000","AVENIDA MENINO MARCELO","S/N","SERRARIA","MACEIÓ","AL","08.489.643/0076-70")); - ds.addRow(new Array("010167","23156", "SHOPPING CENTRO SUL","49400-000","AV CONTORNO BR","3795","SÃO JOSE","LAGARTO","SE","08.489.643/0077-50")); - ds.addRow(new Array("030101","910173", "QDB PARQUE SHOPPING","57038-000","AVENIDA COMENDADOR GUSTAVO PAIVA","5945","CRUZ DAS ALMAS","MACEIÓ","AL","20.318.877/0001-32")); - ds.addRow(new Array("030102","910291", "QDB MACEIO SHOPPING","57037-532","AVENIDA COMENDADOR GUSTAVO PAIVA","2900","MANGABEIRAS","MACEIÓ","AL","20.318.877/0002-13")); - ds.addRow(new Array("070101","23713", "MATRIZ - ZEFERINO CORREIA","45000-520","RUA ZEFERINO CORREIA","17","CENTRO","VITORIA DA CONQUISTA","BA","14.378.160/0001-83")); - ds.addRow(new Array("070102","23711", "HIB LIMA GUERRA","45000-390","AL. LIMA GUERRA","04","CENTRO","VITORIA DA CONQUISTA","BA","14.378.160/0005-07")); - ds.addRow(new Array("070103","23712", "HIB CANDIDO SALES","24157-000","AL. RIO BRANCO","373","CENTRO","CÂNDIDO SALES","BA","14.378.160/0006-98")); - ds.addRow(new Array("070104","23705", "LOJA SHOPPING CONQUISTA SUL","45055-900","AVENIDA JURACY MAGALHAES","3340","FELICIA","VITORIA DA CONQUISTA","BA","14.378.160/0013-17")); - ds.addRow(new Array("070105","23703", " VD BARRA CHOCA","45120-000","AV GETULIO VARGAS","98","CENTRO","CHOCA","BA","14.378.160/0016-60")); - ds.addRow(new Array("070106","23707", "LOJA BRASIL","45051-070","AV ITABUNA","2724","BRASIL","VITORIA DA CONQUISTA","BA","14.378.160/0011-55")); - ds.addRow(new Array("070107","23706", "LOJA ASSAI FELICIA","45055-686","AV ANEL DE CONTORNO","S/N","FELICIA","VITORIA DA CONQUISTA","BA","14.378.160/0012-36")); - ds.addRow(new Array("070108","23709", "LOJA SHOPPING CONQUISTA","45055-900","AV JURACY MAGALHAES","3340","FELICIA","VITORIA DA CONQUISTA","BA","14.378.160/0009-30")); - ds.addRow(new Array("070109","23704", "VD CONDEUBA","46200-000","PC NOSSA SENHORA APARECIDA","08","CENTRO","CONDEÚBA","BA","14.378.160/0015-89")); - ds.addRow(new Array("070110","23703", "LOJA BARRA CHOCA","45120-000","AV GETULIO VARGAS","98","CENTRO","CHOCA","BA","14.378.160/0016-60")); - ds.addRow(new Array("070111","23702", "LOJA PANVICON CENTER","45000-230","AVENIDA LAURO DE FREITAS","142","CENTRO","VITORIA DA CONQUISTA","BA","14.378.160/0017-40")); - ds.addRow(new Array("070112","23701", "LOJA NOVE DE NOVEMBRO","45000-370","PC NOVE DE NOVEMBRO","10","CENTRO","VITORIA DA CONQUISTA","BA","14.378.160/0018-21")); - ds.addRow(new Array("070113","23665", "LOJA BOULEVARD SHOPPING","45031-000","AV OLIVIA FLORES","2500","UNIVERSIDADE","VITORIA DA CONQUISTA","BA","14.378.160/0021-27")); - ds.addRow(new Array("010172","24253", "LOJA IRECÊ CENTRO","44860-051","RUA AUGUSTO NUNES PEREIRA","162","CENTRO","IRECÊ","BA","08.489.643/0095-32")); - ds.addRow(new Array("010171","24254", "LOJA JOÃO DOURADO","44920-000","AVENIDA JOAQUIM AUGUSTO","212D","CENTRO","JOÃO DOURADO","BA","08.489.643/0089-94")); - ds.addRow(new Array("010173","24254", "ER IRECE","44860-169","AVENIDA EDVALDO SANTOS LOPES","438","CENTRO","IRECE","BA","08.489.643/0094-51")); - ds.addRow(new Array("010169","24257", "HIB MIGUEL CALMON","44720-000","PRAÇA LAURO DE FREITAS","180","CENTRO","MIGUEL CALMON","BA","08.489.643/0088-03")); - ds.addRow(new Array("010170","24258", "LOJA ATACADAO IRECE","44868-520","AVENIDA ATACADAO NOVO IRECE","01","NOVO IRECÊ","IRECÊ","BA","08.489.643/0093-70")); - ds.addRow(new Array("010175","24268", "LOJA JACOBINA","44702-342","RUA CORONEL TEIXEIRA","44","CENTRO","JACOBINA","BA","08.489.643/0097-02")); - ds.addRow(new Array("010176","24269", "ER JACOBINA","44702-358","AVENIDA MANOEL NOVAES","178","CENTRO","JACOBINA","BA","08.489.643/0096-13")); - ds.addRow(new Array("010174","24293", "HIB MORRO DO CHAPEU","44850-970","RUA PROJETADA 01","203","CENTRO","MORRO DO CHAPEU","BA","08.489.643/0099-66")); - ds.addRow(new Array("010168","23813", "HIB VALENTE","48890-000","RUA CASTRO ALVES","174","CENTRO","VALENTE","BA","08.489.643/0078-31")); - ds.addRow(new Array("010177","23711", "ER CONQUISTA","45000-390","ALAMEDA LIMA GUERRA","174","CENTRO","VITORIA DA CONQUISTA","BA","08.489.643/0100-34")); + try { + var clientService = fluigAPI.getAuthorizeClientService(); + var data = { + companyId: String(getValue("WKCompany") || "1"), + serviceCode: "GINSENG API", // ajuste para o codigo do servico cadastrado no Fluig + endpoint: "/base_pdvs", + method: "get", + timeoutService: "60000", + params: {} + }; + var vo = clientService.invoke(JSON.stringify(data)); + var statusHttp = vo ? String(vo.getHttpStatusResult() || "") : ""; + var retorno = vo ? String(vo.getResult() || "") : ""; + if (!retorno) { + dataset.addRow(["", "Sem resposta da API (HTTP " + statusHttp + ")", "", "", "", "", "", "", "", "", "", "", ""]); + return dataset; + } + var objData = JSON.parse(retorno); + var success = !!objData.success; + var itens = objData.data || []; - - return ds; + if (!success || !itens.length) { + var msg = trim(objData.message) || trim(objData.error) || "Sem lojas retornadas"; + dataset.addRow(["", msg + " (HTTP " + statusHttp + ")", "", "", "", "", "", "", "", "", "", "", ""]); + return dataset; + } + var filtros = parseConstraints(constraints); + var colleagueCache = {}; + + for (var i = 0; i < itens.length; i++) { + var item = itens[i] || {}; + + var pdv = trim(item["PDV"]); + var loja = trim(item["PDV DESC"]); + var responsavel = trim(item["GESTAO"]) || trim(item["GESTAO"]); + var regional = trim(item["SUPERVISOR"]) || trim(item["SUPERVISOR"]); + var uf = trim(item["UF"]); + var cidade = trim(item["CIDADE"]); + var status = trim(item["STATUS"]); + var canal = trim(item["CANAL"]); + var id = trim(item["id"]); + var protheus = trim(item["PROTHEUS"] || item["protheus"] || item["Protheus"]); + var loginLoja = pdv ? (pdv + ".ginseng") : ""; + var colleagueId = resolveColleagueIdByLogin(loginLoja); + var userCreate = getUserCreateStatus(loginLoja, colleagueCache); + + if (filtros.onlyAtivo && status.toUpperCase() !== "ATIVO") { + continue; + } + if (filtros.pdv && pdv !== filtros.pdv) { + continue; + } + if (filtros.loja && normalize(loja).indexOf(normalize(filtros.loja)) === -1) { + continue; + } + if (filtros.termoLivre) { + var blob = normalize([ + pdv, + loja, + responsavel, + regional, + uf, + cidade + ].join(" ")); + if (blob.indexOf(normalize(filtros.termoLivre)) === -1) { + continue; + } + } + + dataset.addRow([ + pdv, + loja, + responsavel, + regional, + uf, + cidade, + status, + canal, + id, + protheus, + loginLoja, + colleagueId, + userCreate + ]); + } + + if (dataset.rowsCount === 0) { + dataset.addRow(["", "Sem lojas apos filtros (HTTP " + statusHttp + ")", "", "", "", "", "", "", "", "", "", "", ""]); + } + + } catch (e) { + dataset = DatasetBuilder.newDataset(); + dataset.addColumn("ERRO"); + dataset.addRow([String(e)]); + } + + return dataset; } -function onMobileSync(user) { -} \ No newline at end of file +function parseConstraints(constraints) { + var out = { + pdv: "", + loja: "", + onlyAtivo: false, + termoLivre: "" + }; + + if (!constraints) return out; + + for (var i = 0; i < constraints.length; i++) { + var c = constraints[i]; + if (!c || !c.fieldName) continue; + + var name = String(c.fieldName); + var value = trim(c.initialValue); + + if (name === "PDV" && value) out.pdv = value; + if (name === "LOJA" && value) out.loja = value; + if (name === "onlyAtivo" && value.toLowerCase() === "false") out.onlyAtivo = false; + + // Zoom costuma enviar constraints variadas de busca; capturamos termo livre. + if ( + value && + name !== "onlyAtivo" && + name !== "metadata#id" && + name !== "metadata#active" && + name !== "sqlLimit" + ) { + var cleaned = cleanSearchValue(value); + if (cleaned && (!out.termoLivre || cleaned.length > out.termoLivre.length)) { + out.termoLivre = cleaned; + } + } + } + + return out; +} + +function trim(v) { + return String(v == null ? "" : v).trim(); +} + +function normalize(v) { + return trim(v).toLowerCase(); +} + +function cleanSearchValue(v) { + var s = trim(v); + // remove curingas comuns de busca do Zoom/like + s = s.replace(/[%*_]/g, ""); + return trim(s); +} + +function getUserCreateStatus(loginLoja, cache) { + var login = trim(loginLoja); + if (!login) return "NAO"; + if (cache.hasOwnProperty(login)) return cache[login]; + try { + var cLogin = DatasetFactory.createConstraint("login", login, login, ConstraintType.MUST); + var cActive = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST); + var ds = DatasetFactory.getDataset("colleague", null, [cLogin, cActive], null); + var exists = !!(ds && ds.rowsCount > 0); + + // fallback para ambientes onde o identificador esta em colleagueId + if (!exists) { + var cId = DatasetFactory.createConstraint("colleaguePK.colleagueId", login, login, ConstraintType.MUST); + ds = DatasetFactory.getDataset("colleague", null, [cId, cActive], null); + exists = !!(ds && ds.rowsCount > 0); + } + + cache[login] = exists ? "OK" : "NAO"; + return cache[login]; + } catch (e) { + cache[login] = "NAO"; + return "NAO"; + } +} + +function resolveColleagueIdByLogin(loginLoja) { + var login = trim(loginLoja); + if (!login) return ""; + try { + var cLogin = DatasetFactory.createConstraint("login", login, login, ConstraintType.MUST); + var cActive = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST); + var ds = DatasetFactory.getDataset("colleague", null, [cLogin, cActive], null); + if (ds && ds.rowsCount > 0) { + return trim(ds.getValue(0, "colleaguePK.colleagueId")); + } + } catch (e) {} + return ""; +} diff --git a/Ginseng_chamados/forms/165 - totvsflow_solicitacao_compras/script.js b/Ginseng_chamados/forms/165 - totvsflow_solicitacao_compras/script.js index 6d44639..32992a6 100644 --- a/Ginseng_chamados/forms/165 - totvsflow_solicitacao_compras/script.js +++ b/Ginseng_chamados/forms/165 - totvsflow_solicitacao_compras/script.js @@ -193,8 +193,8 @@ function getCurrentDate() { var beforeSendValidate = function (numState, nextState) { $(".errorValidate").removeClass("errorValidate"); if (numState == 0 || numState == 1) { - if ($("#estabelecimento ").val() == "") { - $("#estabelecimento ").parent("div").addClass("errorValidate"); + if ($("#estabelecimento").val() == "") { + $("#estabelecimento").parent("div").addClass("errorValidate"); throw "'Estabelecimento/filial ' é obrigatório."; } else if ($("#enderecoSolicitante").val() == "") { $("#enderecoSolicitante").parent("div").addClass("errorValidate"); @@ -277,35 +277,18 @@ function setSelectedZoomItem(selectedItem) { indice = valores[1]; } - // Carrega o dataset de centro de custo (apenas uma vez) - var dtsCentroCusto = DatasetFactory.getDataset( - "ds_centroCusto", - null, - null, - null - ).values; - - // --- Define variáveis de gestores apenas uma vez --- - var nomeGestorComercial = dtsCentroCusto[0].gestorCentroCusto; - var emailGestorComercial = dtsCentroCusto[0].emailGestor; - var idGestorComercial = dtsCentroCusto[0].idGestor; - - var nomeGestorOperacoes = dtsCentroCusto[2].gestorCentroCusto; - var emailGestorOperacoes = dtsCentroCusto[2].emailGestor; - var idGestorOperacoes = dtsCentroCusto[2].idGestor; - // --- Quando seleciona o ESTABELECIMENTO --- if (name_item == "estabelecimento") { - let estabelecimento = selectedItem["estabelecimento"]; - let cnpj = selectedItem["cnpj"]; - let protheus = selectedItem["codigo"]; + var cnpj = selectedItem["CNPJ"] || selectedItem["cnpj"] || selectedItem["PDV"] || ""; + var protheus = selectedItem["PROTHEUS"] || selectedItem["codigo"] || ""; $("#cnpj").val(cnpj); $("#protheus").val(protheus); - // ❌ Não define centro de custo automaticamente - // Apenas limpa os campos relacionados para evitar dados antigos - window["centroCusto"].clear(); + // Nao define centro de custo automaticamente. + if (window["centroCusto"] && typeof window["centroCusto"].clear == "function") { + window["centroCusto"].clear(); + } $("#gestorNome").val(""); $("#gestorEmail").val(""); $("#gestor_cc").val(""); @@ -346,6 +329,9 @@ function removedZoomItem(removedItem) { $("#gestorNome").val(""); $("#gestorEmail").val(""); $("#gestor_cc").val(""); + } else if (name_item == "estabelecimento") { + $("#cnpj").val(""); + $("#protheus").val(""); } else if (~name_item.indexOf("___")) { var linha = name_item.split("___"); diff --git a/Ginseng_chamados/forms/165 - totvsflow_solicitacao_compras/totvsflow_solicitacao_compras.html b/Ginseng_chamados/forms/165 - totvsflow_solicitacao_compras/totvsflow_solicitacao_compras.html index 3c24e6c..7f0865a 100644 --- a/Ginseng_chamados/forms/165 - totvsflow_solicitacao_compras/totvsflow_solicitacao_compras.html +++ b/Ginseng_chamados/forms/165 - totvsflow_solicitacao_compras/totvsflow_solicitacao_compras.html @@ -169,28 +169,20 @@ * + {'field':'LOJA','label':'Filial','standard':'true','search':'true'}, + {'field':'REGIONAL','label':'REGIONAL','standard':'true'}, + {'field':'UF','label':'UF','standard':'true'}, + {'field':'RESPONSAVEL_LOJA','label':'RESPONSAVEL_LOJA','visible':'false'}, + {'field':'PDV','label':'PDV','visible':'false'}, + {'field':'PROTHEUS','label':'PROTHEUS','visible':'false'}, + {'field':'COLLEAGUE_ID','label':'COLLEAGUE_ID','visible':'false'}, + {'field':'LOGIN_LOJA','label':'LOGIN_LOJA','visible':'false'} + ] + }"/>

          Preenchimento obrigatório.

          @@ -894,4 +886,4 @@
          - \ No newline at end of file + diff --git a/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi b/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi index 25cbadd..322511c 100644 --- a/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi +++ b/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi @@ -1,9 +1,9 @@ - - + + activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration ModelMigrationProcessor.001 - + @@ -12,9 +12,9 @@ topLevel shellMaximized - - - + + + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -74,85 +74,85 @@ persp.showIn:org.eclipse.eclemma.ui.CoverageView persp.newWizSC:org.eclipse.jpt.jpa.ui.wizard.newJpaProject persp.perspSC:org.eclipse.jpt.ui.jpaPerspective - - - + + + View categoryTag:General - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java Browsing - - - - - + + + + + View categoryTag:General - + View categoryTag:Mylyn - + View categoryTag:General - - + + View categoryTag:General - + View categoryTag:General - + View categoryTag:Server - + View categoryTag:Data Management - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General @@ -160,7 +160,7 @@ - + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -192,55 +192,54 @@ persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateLayoutWizardID persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateWidgetWizardID persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView - - - - + + + + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Fluig - - + + View categoryTag:General - - - - active + + + noFocus - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig @@ -248,7 +247,7 @@ - + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -287,60 +286,60 @@ persp.viewSC:org.eclipse.tm.terminal.view.ui.TerminalsView persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView persp.viewSC:org.eclipse.ant.ui.views.AntView - - - + + + org.eclipse.e4.primaryNavigationStack - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + org.eclipse.e4.secondaryNavigationStack - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Mylyn - + View categoryTag:Ant - - - - + + + + View categoryTag:General - + - + org.eclipse.e4.secondaryDataStack - + View categoryTag:General - + View categoryTag:Terminal @@ -349,1679 +348,1705 @@ - - + + View categoryTag:Help - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:Help - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Help - - + + org.eclipse.e4.primaryDataStack EditorStack - + active + noFocus + Editor removeOnHide com.totvs.tds.ecm.designer.bpmneditor + + + Editor + removeOnHide + org.eclipse.ui.genericeditor.GenericEditor + + + + Editor + removeOnHide + org.eclipse.ui.genericeditor.GenericEditor + + + + Editor + removeOnHide + org.eclipse.wst.html.core.htmlsource.source + active + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java Browsing - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - active - + ViewMenu menuContribution:menu - + - + View categoryTag:Server - + View categoryTag:Data Management - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Mylyn - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:Java - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:Terminal - + View categoryTag:Ant - - + + toolbarSeparator - + - + Draggable - + - + toolbarSeparator - + - + Draggable - + toolbarSeparator - + - + Draggable - + Draggable - + Draggable - + Draggable - + Draggable - + Draggable - + toolbarSeparator - + - + Draggable - + - + Draggable - + + Draggable + + + Draggable + + toolbarSeparator - + - + toolbarSeparator - + - + Draggable - + stretch SHOW_RESTORE_MENU - + Draggable HIDEABLE SHOW_RESTORE_MENU - - + + stretch - + Draggable - + Draggable - + Draggable - - + + TrimStack Draggable - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - - - + + + + - - - + + + - - - - - + + + + + - - + + - - + + - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + platform:win32 - - - - - - - - - + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - + + + + - - + + - - - - + + + + - - - - - - - - + + + + + + + + - - + + - - - - - - + + + + + + - - - + + + - - - + + + - - - - - - + + + + + + - - - - - - - - - + + + + + + + + + - - + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + - - + + - - + + platform:win32 - - + + - - + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Editor removeOnHide - + View categoryTag:Ant - + View categoryTag:Gradle - + View categoryTag:Gradle - + View categoryTag:Data Management - + View categoryTag:Data Management - + View categoryTag:Data Management - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Java - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git NoRestore - + View categoryTag:Git - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:Debug - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Web Services - + View categoryTag:Maven - + View categoryTag:Maven - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Oomph - + View categoryTag:API Tools - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Team - + View categoryTag:Team - + View categoryTag:Help - + View categoryTag:Terminal - + View categoryTag:Other - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Debug - + View categoryTag:JavaScript - + View categoryTag:JavaScript - + View categoryTag:JavaScript categoryTag:Other - + View categoryTag:JavaScript categoryTag:Other - + View categoryTag:JavaScript categoryTag:Other - + View categoryTag:Server - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:General - - + + glue move_after:PerspectiveSpacer SHOW_RESTORE_MENU - + move_after:Spacer Glue HIDEABLE SHOW_RESTORE_MENU - + glue move_after:SearchField SHOW_RESTORE_MENU - + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -2053,53 +2078,53 @@ persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateLayoutWizardID persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateWidgetWizardID persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView - - - - + + + + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Fluig - - + + View categoryTag:General - - - - + + + + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig @@ -2107,1375 +2132,1375 @@ - - - - - + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log b/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log index a8024c3..e721c71 100644 --- a/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log +++ b/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log @@ -10,3 +10,4 @@ 2026-05-06 20:14:30,145 [Worker-0: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is out-of-date. Trying to update. 2026-05-06 20:20:13,505 [Worker-4: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. 2026-05-06 20:21:56,730 [Worker-6: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. +2026-05-11 14:40:40,614 [Worker-6: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is out-of-date. Trying to update. diff --git a/compras_digital/workflow/.resources/Solicitação de compras V2.png b/compras_digital/workflow/.resources/Solicitação de compras V2.png index c7cec101b0c87c248871ad7d2b3858b8563b5356..562e4828811793520ec02bf58f66e25bd9cd6d49 100644 GIT binary patch literal 37889 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 Ao&W#< literal 42013 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

          #c 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 KnT$WKKm2b-19wgU From a71f963e371137adea3daa93487e9a5955caa41b Mon Sep 17 00:00:00 2001 From: Andrey Cunha Date: Mon, 11 May 2026 21:54:49 -0300 Subject: [PATCH 25/25] att --- .../org.eclipse.e4.workbench/workbench.xmi | 4504 ++++++++--------- .../0.log | 1 + .../com.totvs.tds.ecm.dataservers | Bin 940 -> 1140 bytes compras_digital/.claude/settings.local.json | 7 + .../datasets/dsPostPedidoCompra.js | 25 +- compras_digital/datasets/dsProd.js | 2 +- .../datasets/dsSolicCompraProtheus.js | 61 +- compras_digital/datasets/ds_centroCusto.js | 71 +- compras_digital/datasets/ds_condPag.js | 15 +- .../Compras_digital/Compras_digital.html | 142 +- .../forms/Compras_digital/compras.js | 441 +- .../forms/Compras_digital/compras_config.js | 29 + .../Compras_digital/compras_design_system.css | 244 + .../forms/Compras_digital/compras_digital.js | 175 +- .../forms/Compras_digital/script.js | 202 +- .../.resources/Ginseng Produção.ws.cache | 1198 +---- .../.resources/Ginseng Produção.ws.cache.bkp | 160 +- 17 files changed, 3091 insertions(+), 4186 deletions(-) create mode 100644 compras_digital/.claude/settings.local.json create mode 100644 compras_digital/forms/Compras_digital/compras_config.js create mode 100644 compras_digital/forms/Compras_digital/compras_design_system.css diff --git a/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi b/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi index 322511c..ba8c7d1 100644 --- a/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi +++ b/Lançamento de documentos/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi @@ -1,9 +1,9 @@ - + activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration ModelMigrationProcessor.001 - + @@ -12,9 +12,9 @@ topLevel shellMaximized - - - + + + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -74,85 +74,85 @@ persp.showIn:org.eclipse.eclemma.ui.CoverageView persp.newWizSC:org.eclipse.jpt.jpa.ui.wizard.newJpaProject persp.perspSC:org.eclipse.jpt.ui.jpaPerspective - - - + + + View categoryTag:General - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java Browsing - - - - - + + + + + View categoryTag:General - + View categoryTag:Mylyn - + View categoryTag:General - - + + View categoryTag:General - + View categoryTag:General - + View categoryTag:Server - + View categoryTag:Data Management - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General @@ -160,7 +160,7 @@ - + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -192,54 +192,53 @@ persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateLayoutWizardID persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateWidgetWizardID persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView - - - - + + + + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Fluig - - + + View categoryTag:General - - - - noFocus - + + + + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig @@ -247,7 +246,7 @@ - + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -286,60 +285,60 @@ persp.viewSC:org.eclipse.tm.terminal.view.ui.TerminalsView persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView persp.viewSC:org.eclipse.ant.ui.views.AntView - - - + + + org.eclipse.e4.primaryNavigationStack - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + org.eclipse.e4.secondaryNavigationStack - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Mylyn - + View categoryTag:Ant - - - - + + + + View categoryTag:General - + - + org.eclipse.e4.secondaryDataStack - + View categoryTag:General - + View categoryTag:Terminal @@ -348,1705 +347,1690 @@ - - + + View categoryTag:Help - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:Help - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Help - - + + org.eclipse.e4.primaryDataStack EditorStack active noFocus - + Editor removeOnHide com.totvs.tds.ecm.designer.bpmneditor + active - - - Editor - removeOnHide - org.eclipse.ui.genericeditor.GenericEditor - - - - Editor - removeOnHide - org.eclipse.ui.genericeditor.GenericEditor - - - + + Editor removeOnHide org.eclipse.wst.html.core.htmlsource.source - active - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java Browsing - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Server - + View categoryTag:Data Management - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Mylyn - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:Java - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + View categoryTag:Terminal - + View categoryTag:Ant - - + + toolbarSeparator - + - + Draggable - + - + toolbarSeparator - + - + Draggable - + toolbarSeparator - + - + Draggable - + Draggable - + Draggable - + Draggable - + Draggable - + Draggable - + toolbarSeparator - + - + Draggable - + - + Draggable - + Draggable - - Draggable - - + toolbarSeparator - + - + toolbarSeparator - + - + Draggable - + stretch SHOW_RESTORE_MENU - + Draggable HIDEABLE SHOW_RESTORE_MENU - - + + stretch - + Draggable - + Draggable - + Draggable - - + + TrimStack Draggable - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - - - + + + + - - - + + + - - - - - + + + + + - - + + - - + + - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + platform:win32 - - - - - - - - - + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - + + + + - - + + - - - - + + + + - - - - - - - - + + + + + + + + - - + + - - - - - - + + + + + + - - - + + + - - - + + + - - - - - - + + + + + + - - - - - - - - - + + + + + + + + + - - + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + - - + + - - + + platform:win32 - - + + - - + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Editor removeOnHide - + View categoryTag:Ant - + View categoryTag:Gradle - + View categoryTag:Gradle - + View categoryTag:Data Management - + View categoryTag:Data Management - + View categoryTag:Data Management - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Debug - + View categoryTag:Java - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git - + View categoryTag:Git NoRestore - + View categoryTag:Git - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:Debug - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java Browsing - + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java - + View categoryTag:Web Services - + View categoryTag:Maven - + View categoryTag:Maven - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Mylyn - + View categoryTag:Oomph - + View categoryTag:API Tools - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Plug-in Development - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:Remote Systems - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Team - + View categoryTag:Team - + View categoryTag:Help - + View categoryTag:Terminal - + View categoryTag:Other - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Debug - + View categoryTag:JavaScript - + View categoryTag:JavaScript - + View categoryTag:JavaScript categoryTag:Other - + View categoryTag:JavaScript categoryTag:Other - + View categoryTag:JavaScript categoryTag:Other - + View categoryTag:Server - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:XML - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:General - - + + glue move_after:PerspectiveSpacer SHOW_RESTORE_MENU - + move_after:Spacer Glue HIDEABLE SHOW_RESTORE_MENU - + glue move_after:SearchField SHOW_RESTORE_MENU - + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -2078,53 +2062,53 @@ persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateLayoutWizardID persp.newWizSC:com.fluig.wcm.eclipse.component.wizard.CreateWidgetWizardID persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView - - - - + + + + View categoryTag:Java - + View categoryTag:General - + View categoryTag:Fluig - - + + View categoryTag:General - - - - + + + + View categoryTag:General - + View categoryTag:General - + View categoryTag:General - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig @@ -2132,1375 +2116,1375 @@ - - - - - + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log b/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log index e721c71..17af8e3 100644 --- a/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log +++ b/Lançamento de documentos/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log @@ -11,3 +11,4 @@ 2026-05-06 20:20:13,505 [Worker-4: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. 2026-05-06 20:21:56,730 [Worker-6: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. 2026-05-11 14:40:40,614 [Worker-6: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is out-of-date. Trying to update. +2026-05-11 21:22:28,359 [Worker-2: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read. diff --git a/Lançamento de documentos/com.totvs.tds.ecm.dataservers b/Lançamento de documentos/com.totvs.tds.ecm.dataservers index c7ca6d837e919a9dc3b9c09a9ea8b881517f1f1b..ae75acdbe3ae8d2afc424e2da572648b104901f3 100644 GIT binary patch delta 255 zcmZ3({)Izm&07Z6avlZD!`m|_1@u28b?^nfz40Q}ltdLS)B0`Bcsw}E@mlSwQ?4a znPBZolMR`r>Qzb@*n(Yy!d!#EQVbOkxpEGu8yG=0iGT>90uZTiuNe(?< delta 155 zcmeyuv4&k}&07Z6avlZrHn diff --git a/compras_digital/.claude/settings.local.json b/compras_digital/.claude/settings.local.json new file mode 100644 index 0000000..249a790 --- /dev/null +++ b/compras_digital/.claude/settings.local.json @@ -0,0 +1,7 @@ +{ + "permissions": { + "allow": [ + "PowerShell(Get-ChildItem -Path \"c:\\\\Python\\\\Fluig Ginseng\\\\fluig\\\\checklist\\\\fluig\\\\compras_digital\" -Recurse -Force | Select-Object FullName, @{Name='Type';Expression={if\\($_.PSIsContainer\\){'DIR'}else{'FILE'}}} | Sort-Object FullName | Format-Table -AutoSize)" + ] + } +} diff --git a/compras_digital/datasets/dsPostPedidoCompra.js b/compras_digital/datasets/dsPostPedidoCompra.js index 75a4c09..0b44d23 100644 --- a/compras_digital/datasets/dsPostPedidoCompra.js +++ b/compras_digital/datasets/dsPostPedidoCompra.js @@ -64,28 +64,23 @@ function createDataset(fields, constraints, sortFields) { return dataset; } -// Criação das colunas function criarEstrutura(dataset) { - dataset.addColumn("STATUS", DatasetFieldType.STRING); - dataset.addColumn("RETORNO", DatasetFieldType.STRING); + dataset.addColumn("STATUS"); + dataset.addColumn("RETORNO"); } -// Função para buscar parâmetro nas constraints function getParametro(constraints, campo) { - var valor = ""; - if (constraints && constraints.length > 0) { - for each (var c in constraints) { - if (c.getFieldName().trim().toUpperCase() === campo.trim().toUpperCase()) { - valor = c.getInitialValue(); - break; - } + if (!constraints) return ""; + var campoUpper = String(campo || "").trim().toUpperCase(); + for (var i = 0; i < constraints.length; i++) { + var c = constraints[i]; + if (String(c.fieldName || "").trim().toUpperCase() === campoUpper) { + return String(c.initialValue || ""); } } - return valor; + return ""; } -// Trim com segurança function trim(valor) { - if (!valor) return ""; - return valor.trim(); + return String(valor == null ? "" : valor).trim(); } diff --git a/compras_digital/datasets/dsProd.js b/compras_digital/datasets/dsProd.js index 0f87fb7..70326da 100644 --- a/compras_digital/datasets/dsProd.js +++ b/compras_digital/datasets/dsProd.js @@ -18,7 +18,7 @@ function createDataset(fields, constraints, sortFields) { try { var clientService = fluigAPI.getAuthorizeClientService(); var data = { - companyId: "1", + companyId: String(getValue("WKCompany") || "1"), serviceCode: "Postprod", endpoint: "/uf_mata010/", method: "get", diff --git a/compras_digital/datasets/dsSolicCompraProtheus.js b/compras_digital/datasets/dsSolicCompraProtheus.js index 8aa1b80..2a047d4 100644 --- a/compras_digital/datasets/dsSolicCompraProtheus.js +++ b/compras_digital/datasets/dsSolicCompraProtheus.js @@ -4,13 +4,13 @@ function createDataset(fields, constraints, sortFields) { dataset.addColumn("mensagem"); dataset.addColumn("erro"); - log.info("### Enviando dados para Protheus com autenticação ###"); + log.info("### Enviando dados para Protheus via fluigAPI ###"); try { var jsonData = "{}"; if (constraints) { for (var i = 0; i < constraints.length; i++) { - if (constraints[i].fieldName == "params" && constraints[i].initialValue) { + if (constraints[i].fieldName === "params" && constraints[i].initialValue) { jsonData = constraints[i].initialValue; break; } @@ -18,54 +18,25 @@ function createDataset(fields, constraints, sortFields) { } log.info("Dados recebidos: " + jsonData); - var url = "https://rest.grupoginseng.com.br/rest/uf_mata010"; - var urlObj = new java.net.URL(url); - var httpConn = urlObj.openConnection(); + var clientService = fluigAPI.getAuthorizeClientService(); + var data = { + companyId: String(getValue("WKCompany") || "1"), + serviceCode: "Postprod", + endpoint: "/rest/uf_mata010", + method: "post", + timeoutService: "60000", + params: JSON.parse(jsonData), + headers: { "Content-Type": "application/json" } + }; - var usuario = "fluig"; - var senha = "Ginseng@"; - var authString = usuario + ":" + senha; - var authBytes = new java.lang.String(authString).getBytes("UTF-8"); - var encodedAuth = java.util.Base64.getEncoder().encodeToString(authBytes); + var vo = clientService.invoke(JSON.stringify(data)); + var response = vo ? String(vo.getResult() || "") : ""; - httpConn.setDoOutput(true); - httpConn.setRequestMethod("POST"); - httpConn.setRequestProperty("Content-Type", "application/json"); - httpConn.setRequestProperty("Accept", "application/json"); - httpConn.setRequestProperty("Authorization", "Basic " + encodedAuth); - httpConn.setConnectTimeout(30000); - httpConn.setReadTimeout(30000); - - var outputStream = httpConn.getOutputStream(); - var writer = new java.io.OutputStreamWriter(outputStream, "UTF-8"); - writer.write(jsonData); - writer.flush(); - writer.close(); - outputStream.close(); - - // Ler resposta ou erro - var response = ""; - try { - var inputStream = httpConn.getInputStream(); - var scanner = new java.util.Scanner(inputStream, "UTF-8"); - response = scanner.useDelimiter("\\A").hasNext() ? scanner.next() : ""; - scanner.close(); - } catch (e) { - var errorStream = httpConn.getErrorStream(); - if (errorStream != null) { - var scanner = new java.util.Scanner(errorStream, "UTF-8"); - response = scanner.useDelimiter("\\A").hasNext() ? scanner.next() : ""; - scanner.close(); - } - } - - log.info("Response bruto: " + response); - - // Adiciona no dataset sempre, sem depender do status HTTP + log.info("Response: " + response); dataset.addRow(["OK", response, ""]); } catch (error) { - log.error("Erro completo: " + error.toString()); + log.error("Erro: " + error.toString()); dataset.addRow(["Erro", "", error.toString()]); } diff --git a/compras_digital/datasets/ds_centroCusto.js b/compras_digital/datasets/ds_centroCusto.js index d6b13b6..883d669 100644 --- a/compras_digital/datasets/ds_centroCusto.js +++ b/compras_digital/datasets/ds_centroCusto.js @@ -5,60 +5,57 @@ function onSync(lastSyncDate) {} function createDataset(fields, constraints, sortFields) { var dataset = DatasetBuilder.newDataset(); - // Definir as colunas dataset.addColumn("codigoCentroCusto"); dataset.addColumn("centroCusto"); dataset.addColumn("gestorCentroCusto"); dataset.addColumn("idGestor"); + dataset.addColumn("emailGestor"); dataset.addColumn("diretorCentroCusto"); dataset.addColumn("idDiretor"); dataset.addColumn("diretorGeral"); dataset.addColumn("idDiretorGeral"); - // Lista dos centros de custo var dados = [ - // Comercial dividido por estado - ["41101", "Comercial Alagoas", "Raquel Tenorio ", "Analanny Magalhães", "João Marcelo"], - ["41101", "Comercial Bahia", "Arianne Sodre", "Analanny Magalhães", "João Marcelo"], - ["41101", "Comercial Sergipe", "Iolanda Bezerra", "Analanny Magalhães", "João Marcelo"], - ["41101", "Marketing e Treinamento", "Andreia Leite", "João Marcelo", "João Marcelo"], - - - // Outros centros de custo (exemplo que você já tinha) - ["51101", "Diretoria e Gestão", "João Marcelo", "Diogo Demetrio", "João Marcelo"], - ["51102", "Operações", "Diogo Demetrio", "Ariklenyo Nascimento", "João Marcelo"], - ["51103", "Controladoria", "Ariklenyo Nascimento", "Marla Palma", "João Marcelo"], - ["51104", "Compliance", "Marla Palma", "Lucila Brandão", "João Marcelo"], - ["51107", "Administrativo", "Lucila Brandão", "Francine Peiter", "João Marcelo"], - ["51110", "Gente e Cultura", "Francine Peiter", "Igor Oliveira", "João Marcelo"], - ["51113", "TI", "Igor Oliveira", "Lucas Rocha", "João Marcelo"], - ["51114", "Projetos e Performance", "Lucas Rocha", "Andrey Cunha", "João Marcelo"], - ["teste", "teste", "Andrey Cunha", "Andrey Cunha", "João Marcelo"] + { cod: "41101", cc: "Comercial Alagoas", gestor: "Raquel Tenorio", diretor: "Analanny Magalhães", dg: "João Marcelo" }, + { cod: "41101", cc: "Comercial Bahia", gestor: "Arianne Sodre", diretor: "Analanny Magalhães", dg: "João Marcelo" }, + { cod: "41101", cc: "Comercial Sergipe", gestor: "Iolanda Bezerra", diretor: "Analanny Magalhães", dg: "João Marcelo" }, + { cod: "41101", cc: "Marketing e Treinamento", gestor: "Andreia Leite", diretor: "João Marcelo", dg: "João Marcelo" }, + { cod: "51101", cc: "Diretoria e Gestão", gestor: "João Marcelo", diretor: "Diogo Demetrio", dg: "João Marcelo" }, + { cod: "51102", cc: "Operações", gestor: "Diogo Demetrio", diretor: "Ariklenyo Nascimento", dg: "João Marcelo" }, + { cod: "51103", cc: "Controladoria", gestor: "Ariklenyo Nascimento", diretor: "Marla Palma", dg: "João Marcelo" }, + { cod: "51104", cc: "Compliance", gestor: "Marla Palma", diretor: "Lucila Brandão", dg: "João Marcelo" }, + { cod: "51107", cc: "Administrativo", gestor: "Lucila Brandão", diretor: "Francine Peiter", dg: "João Marcelo" }, + { cod: "51110", cc: "Gente e Cultura", gestor: "Francine Peiter", diretor: "Igor Oliveira", dg: "João Marcelo" }, + { cod: "51113", cc: "TI", gestor: "Igor Oliveira", diretor: "Lucas Rocha", dg: "João Marcelo" }, + { cod: "51114", cc: "Projetos e Performance", gestor: "Lucas Rocha", diretor: "Andrey Cunha", dg: "João Marcelo" } ]; - // Função para buscar matrícula pelo nome - function getMatricula(nome) { - if (!nome) return ""; - var c1 = DatasetFactory.createConstraint("colleagueName", nome, nome, ConstraintType.MUST); - var dsUser = DatasetFactory.getDataset("colleague", ["colleagueId"], [c1], null); - return dsUser.rowsCount > 0 ? dsUser.getValue(0, "colleagueId") : ""; + function getColleagueById(nome) { + if (!nome) return { id: "", email: "" }; + try { + var c1 = DatasetFactory.createConstraint("colleagueName", nome, nome, ConstraintType.MUST); + var ds = DatasetFactory.getDataset("colleague", ["colleagueId", "mail"], [c1], null); + if (ds && ds.rowsCount > 0) { + return { + id: String(ds.getValue(0, "colleagueId") || ""), + email: String(ds.getValue(0, "mail") || "") + }; + } + } catch (e) {} + return { id: "", email: "" }; } - // Preenche dataset for (var i = 0; i < dados.length; i++) { - var idGestor = getMatricula(dados[i][2]); - var idDiretor = getMatricula(dados[i][3]); - var idDiretorGeral = getMatricula(dados[i][4]); + var d = dados[i]; + var gestor = getColleagueById(d.gestor); + var diretor = getColleagueById(d.diretor); + var dg = getColleagueById(d.dg); dataset.addRow([ - dados[i][0], // codigoCentroCusto - dados[i][1], // centroCusto - dados[i][2], // gestor - idGestor, - dados[i][3], // diretor - idDiretor, - dados[i][4], // diretor geral - idDiretorGeral + d.cod, d.cc, + d.gestor, gestor.id, gestor.email, + d.diretor, diretor.id, + d.dg, dg.id ]); } diff --git a/compras_digital/datasets/ds_condPag.js b/compras_digital/datasets/ds_condPag.js index 60cdbf3..022c64d 100644 --- a/compras_digital/datasets/ds_condPag.js +++ b/compras_digital/datasets/ds_condPag.js @@ -11,26 +11,19 @@ function createDataset(fields, constraints, sortFields) { log.info("### Iniciando criação do dataset de Condições de Pagamento ###"); - var servicecode = 'API_CONDICAO_PAGAMENTO'; // Nome do serviço cadastrado no Fluig - var usuario = "fluig"; - var senha = "Ginseng@"; + // Autenticação gerenciada pelo cadastro do serviço no Fluig (sem credenciais no código) + var servicecode = 'API_CONDICAO_PAGAMENTO'; try { log.info("Iniciando chamada para o clientService..."); var clientService = fluigAPI.getAuthorizeClientService(); var data = { - companyId: "1", + companyId: String(getValue("WKCompany") || "1"), serviceCode: servicecode, endpoint: "https://rest.grupoginseng.com.br/rest/api/fat/v1/paymentcondition?Fields=Code,Plots.Description&Page=1&PageSize=100", method: 'get', timeoutService: '60000', - params: {}, - options: { - encoding: 'UTF-8', - useBasicAuth: true, - username: usuario, - password: senha - } + params: {} }; log.info("Parâmetros da chamada: " + JSON.stringify(data)); diff --git a/compras_digital/forms/Compras_digital/Compras_digital.html b/compras_digital/forms/Compras_digital/Compras_digital.html index f60c659..5a46dd7 100644 --- a/compras_digital/forms/Compras_digital/Compras_digital.html +++ b/compras_digital/forms/Compras_digital/Compras_digital.html @@ -7,6 +7,7 @@ + @@ -16,6 +17,7 @@ + @@ -159,10 +161,61 @@ line-height: 1; } - /* Exibe apenas texto (sem fundo) nos status resumidos */ + /* Oculta todas as seções de atividade por padrão. + O script.js revela apenas a(s) correta(s) via .show(). + Isso evita que todas apareçam antes do $(document).ready executar. */ + /* Atividades futuras são ocultadas via JS — não via CSS global */ + + /* Tabela de itens dentro do card */ + .card-compras .table-compras { margin-bottom: 0; } + .card-compras { overflow-x: auto; } + + /* ── Accordion de histórico de atividades ─────────────────── */ + .activity-header { + display: flex; + align-items: center; + gap: 10px; + padding: 10px 14px; + margin-bottom: 4px; + background: #f0f7fb; + border: 1px solid #cde0ea; + border-radius: 8px; + cursor: pointer; + transition: background .15s; + user-select: none; + } + .activity-header:hover { background: #deeef7; } + .activity-header-check { + width: 20px; height: 20px; + border-radius: 50%; + background: #0e9f6e; + color: #fff; + font-size: 11px; font-weight: 700; + display: flex; align-items: center; justify-content: center; + flex-shrink: 0; + } + .activity-header-titulo { + font-size: 13px; font-weight: 700; + color: #04506b; + } + .activity-header-resumo { + font-size: 12px; color: #6b7280; + flex: 1; overflow: hidden; + white-space: nowrap; text-overflow: ellipsis; + } + .activity-header-caret { + font-size: 10px; color: #9ca3af; + transition: transform .2s; + flex-shrink: 0; + } + .activity.is-collapsed .activity-header-caret { transform: rotate(-90deg); } + .activity.is-collapsed .activity-body { display: none; } + .activity.accordion-pronto { margin-bottom: 6px; } + /* ──────────────────────────────────────────────────────────── */ + + /* Exibe apenas texto (sem fundo) nos cards de resumo do topo — intencional */ #statusSCProtheus_label, - #statusSC_label, - #cotacaoResultado_label { + #statusSC_label { background: transparent !important; border-radius: 0 !important; min-height: 0 !important; @@ -199,6 +252,9 @@ gap: 12px; align-items: start; } + .sc-timeline-layout > div:last-child { + align-self: stretch; + } .sc-timeline-panel { padding: 12px; @@ -723,10 +779,11 @@

          -
          -
          Itens
          -
          - +
          +
          + Itens da Solicitação +
          +
          @@ -760,7 +817,6 @@
          #
          -
          @@ -835,10 +891,10 @@
          -
          +
          -
          +

          Dados da Solicitação

          @@ -866,11 +922,11 @@
          Status Cadastro
          - - + -
          Andamento
          - - + -
          Emissão
          @@ -885,39 +941,41 @@
            -
            -
            -

            Aprovação do pedido

            - Sem pedido +
            +
            +
            +

            Acompanhamento da cotação

            + Sem cotação +
            +
            +
            + Cotações + 0 +
            +
            + Com pedido + 0 +
            +
            + Menor total + - +
            +
            +
            +
            Aguardando vínculo da cotação na SC.
            +
            -
            Sem pedido vinculado.
            -
            -
            Sem assinaturas para exibir.
            -
            -
            -
            -
            -
            -

            Acompanhamento da cotação

            - Sem cotação -
            -
            -
            - Cotações - 0 +
            +
            +

            Aprovação do pedido

            + Sem pedido +
            +
            Sem pedido vinculado.
            +
            +
            Sem assinaturas para exibir.
            +
            -
            - Com pedido - 0 -
            -
            - Menor total - - -
            -
            -
            -
            Aguardando vínculo da cotação na SC.
            diff --git a/compras_digital/forms/Compras_digital/compras.js b/compras_digital/forms/Compras_digital/compras.js index c7f6f06..90b6c34 100644 --- a/compras_digital/forms/Compras_digital/compras.js +++ b/compras_digital/forms/Compras_digital/compras.js @@ -1,424 +1,39 @@ -$(document).ready(function () { - if ($("#formMode").val() == "VIEW") { - showAndBlock(["all"]); - } else { - var activity = $("#activity").val(); - var requestDate = getCurrentDate(); +/** + * compras.js + * + * Funções de controle da tabela de itens (tbItens) e cálculo de totais. + * As demais funções deste arquivo (modal de produtos, zoom handlers, activity manager) + * foram consolidadas em compras_digital.js e script.js. + */ - $(".activity").hide(); - $(".activity-" + activity).show(); - - // Atividade 4: Abertura - if (activity == 4) { - $("#dataNec").val(requestDate[0]); // já coloca a data de hoje - toggleBotaoAddItem(); - - // Atividade 6: Validação do Centro de Custo - } else if (activity == 5) { - showAndBlock([4]); // bloqueia os campos da abertura - $("#userValidacaoGestor").val($("#currentUserName").val()); - $("#dataValidacaoGestor").val(requestDate[0] + " - " + requestDate[1]); - - if ($("#justificativaDecisaoGestor").val() == "") { - $(".justificativa-activity-4").hide(); - } - } - }}); - -$(document).ready(function () { - try { - FLUIGC.calendar('#dataNec'); - } catch (e) { - console.warn("Erro ao iniciar calendário:", e); - } - - toggleBotaoAddItem(); // inicia escondido - - /* ========= Eventos ========= */ - $('#precoRef, #quantidade').on('input', recalcTotal); - - $('#qtdMais').on('click', function () { - let v = parseInt($('#quantidade').val() || '0', 10); - $('#quantidade').val(v + 1); - recalcTotal(); - }); - - $('#qtdMenos').on('click', function () { - let v = parseInt($('#quantidade').val() || '0', 10); - v = Math.max(0, v - 1); - $('#quantidade').val(v); - recalcTotal(); - }); - - $('#btnBuscaProd').on('click', consultarProdutos); - $('#btnLimpaProd').on('click', limparCamposPrincipais); - $('#btnAddItem').on('click', adicionarItem); -}); - -function showAndBlock(activity) { - for (var i = 0; i < activity.length; i++) { - $(".activity-" + activity[i]).show(); - $(".hideButton").hide(); - $(".activity-" + activity[i] + " :input").each(function () { - $(this).attr("readonly", "readonly") - .css("background-color", "#eee") - .children("option:not(:selected)").prop("disabled", true); - - if ($(this).is(":checkbox") || $(this).is(":radio")) { - $(this).attr("disabled", true); - } - }); - } -} - - -function getCurrentDate() { - var newDate = new Date(); - var h = newDate.getHours(); - if (h < 10) { - h = "0" + h; - } - var m = newDate.getMinutes(); - if (m < 10) { - m = "0" + m; - } - var hour = h + ":" + m; // + ":" + s; - var day = newDate.getDate(); - if (day < 10) { - day = "0" + day; - } - var month = newDate.getMonth() + 1; - if (month < 10) { - month = "0" + month; - } - newDate = day + "/" + month + "/" + newDate.getFullYear(); - var currentDate = [newDate, hour]; - return currentDate; -} - - -function toggleBotaoAddItem() { - const temProduto = $('#produtoCod').val() || $('#DescoProduto').val(); - if (temProduto && temProduto.trim() !== "") { - $('#btnAddItem').show(); - } else { - $('#btnAddItem').hide(); - } -} - -function setSelectedZoomItem(selectedItem) { - if (selectedItem.inputId === "estabelecimento") { - // joga o código da filial (cnpj, etc.) - $("#filialDesc").val(selectedItem.CNPJ); // supondo que o dataset dsSysCompany devolva o campo CNPJ - $("#filialest").val(selectedItem.ESTADO); // supondo que o dataset dsSysCompany devolva o campo ESTADO - } - if (selectedItem.inputId === "centroCusto") { - // joga o nome do gestor - $("#gestorCentroCusto").val(selectedItem.gestorCentroCusto); // supondo que o dataset dsCentroCusto devolva o campo GestorCentroCusto - } -} - -function removedZoomItem(removedItem) { - if (removedItem.inputId === "estabelecimento") { - // Quando remover a empresa, limpa os campos relacionados - $("#filialDesc").val(''); - $("#filialest").val(''); - } -} - - -/* ========= Config ========= */ -const DATASET_PRODUTOS = "dsProd"; // dataset de produtos -let todosProdutos = []; -let paginaAtual = 1; -const itensPorPagina = 10; - -/* ========= Utils ========= */ -function escapeHTML(txt) { - return $('
            ').text(txt == null ? '' : String(txt)).html(); -} - -function brMoneyToFloat(v) { - if (!v) return 0; - return parseFloat(String(v).replace(/\./g, '').replace(',', '.')) || 0; -} - -function floatToBRL(n) { - try { - return new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(n || 0); - } catch (_) { - return 'R$ ' + (n || 0).toFixed(2).replace('.', ','); - } -} - -/* ========= Modal Consulta Produtos ========= */ -function consultarProdutos() { - FLUIGC.modal({ - title: 'Consulta de Produtos', - content: - '
            ' + - '' + - '
            ' + - '
            ' + - '
            ', - id: 'modalConsultaProdutos', - size: 'large', - actions: [{ 'label': 'Fechar', 'autoClose': true }] - }, function (err) { - if (!err) carregaListaProdutos(); - }); -} - -function carregaListaProdutos(filtro) { - // Só chama o dataset se ainda não carregou nada - if (todosProdutos.length === 0) { - let dataset = DatasetFactory.getDataset(DATASET_PRODUTOS, null, null, null); - todosProdutos = dataset && dataset.values ? dataset.values : []; - console.log("Produtos carregados do dataset:", todosProdutos.length); - } - - paginaAtual = 1; - renderizaProdutos(filtro); -} - - -function filtrarProdutos() { - paginaAtual = 1; - renderizaProdutos(); -} - -function renderizaProdutos(filtro) { - filtro = (filtro || $('#filtroDescricao').val() || '').toLowerCase(); - - // Agora filtra no cache (sem chamar dataset de novo) - const produtosFiltrados = todosProdutos.filter(p => - (p.descricao || '').toLowerCase().includes(filtro) || - (p.codigo || '').toLowerCase().includes(filtro) || - (p.medida || '').toLowerCase().includes(filtro) - ); - - const inicio = (paginaAtual - 1) * itensPorPagina; - const fim = inicio + itensPorPagina; - const produtosPagina = produtosFiltrados.slice(inicio, fim); - - let html = ` - - - - - - - - - - - - `; - - if (produtosPagina.length === 0) { - html += ` - - - `; - } else { - produtosPagina.forEach(produto => { - const codigo = escapeHTML(produto['codigo']); - const descricao = escapeHTML(produto['descricao']); - const um = escapeHTML(produto['medida'] || ''); - const preco = produto['ultimoPreco'] || '0,00'; - - html += ` - - - - - - - `; - }); - } - - html += `
            CodigoDescricaoUMUltimo PrecoAcao
            - Nenhum produto encontrado -
            ${codigo}${descricao}${um}${preco} - -
            `; - $('#listaProdutos').html(html); - - renderizaPaginacao(produtosFiltrados.length); -} - - - -function renderizaPaginacao(totalItens) { - const totalPaginas = Math.ceil(totalItens / itensPorPagina); - let html = ''; - if (totalPaginas > 1) { - if (paginaAtual > 1) { - html += ' '; - } - html += ' Pagina ' + paginaAtual + ' de ' + totalPaginas + ' '; - if (paginaAtual < totalPaginas) { - html += ''; - } - } - $('#paginacaoProdutos').html(html); -} - -function mudarPagina(n) { - paginaAtual = n; - renderizaProdutos(); -} - -/* ========= Seleção ========= */ -function selecionarProduto(codigo, descricao, preco) { - $('#produtoCod').val(codigo); - $('#DescoProduto').val(codigo + ' - ' + descricao); - $('#ultimoPreco').val(preco); - - FLUIGC.toast({ title: 'Produto', message: 'Selecionado: ' + descricao, type: 'success' }); - $('#modalConsultaProdutos').modal('hide'); - - toggleBotaoAddItem(); // 👈 mostra botão -} - -/* ========= Eventos delegados ========= */ -$(document).on('click', '.selecionar-produto', function () { - const codigo = $(this).data('codigo'); - const descricao = $(this).data('descricao'); - const preco = $(this).data('preco'); - selecionarProduto(codigo, descricao, preco); -}); - -// Digitação em Qtd ou Preço Ref → recalcula automaticamente -$(document).on('input', 'input[name^="qtd___"], input[name^="Refpreco___"]', function () { - recalcLinha(this); -}); - -/* ========= Total / Quantidade ========= */ -function recalcTotal() { - const q = parseFloat($('#quantidade').val() || '0'); - const p = brMoneyToFloat($('#precoRef').val()); - const t = (q * p) || 0; - $('#total').val(floatToBRL(t)); -} - -/* ========= Index das linhas ========= */ -function atualizarIndex() { - $('#tbItens tbody tr.tableRow').each(function (i) { - if (!$(this).is('[detail=true]')) { - $(this).find('.tableIndex').text(i); - } - }); -} - -/* ========= Totais da tabela ========= */ +/* ========= Totais da tabela de itens ========= */ function atualizarTotais() { - let totalItens = 0; - let totalGeral = 0; + // Percorre as linhas da tabela somando qtd * preço de referência + var totalGeral = 0; - // Pega todos os valores da tabela - const dadosTabela = $('#tbItens').find('input').serializeArray(); + $('#tbItens tbody tr.tableRow:not([detail=true])').each(function () { + var qtd = parseFloat($(this).find('input[name^="qtd___"]').val()) || 0; + var preco = brMoneyToFloat($(this).find('input[name^="Refpreco___"]').val()); + var total = qtd * preco; - // Transforma em objeto chave:valor para fácil acesso - const mapValores = {}; - dadosTabela.forEach(item => { - mapValores[item.name] = item.value; - }); + $(this).find('input[name^="totalValor___"]').val(floatToBRL(total)); + totalGeral += total; + }); - // Percorre por linha (cada linha tem um sufixo ___1, ___2...) - let idx = 1; - while (mapValores['qtd___' + idx] !== undefined) { - const qtd = parseFloat(mapValores['qtd___' + idx] || 0); - const preco = brMoneyToFloat(mapValores['Refpreco___' + idx] || "0"); - const total = qtd * preco; - - totalItens += qtd; - totalGeral += total; - - // Atualiza campo total da linha - if ($(`#totalValor___${idx}`).length) { - $(`#totalValor___${idx}`).val(floatToBRL(total)); - } - - idx++; - } - - // Atualiza rodapé - $('#totalItens').val(totalItens); - $('#totalGeral').val(floatToBRL(totalGeral)); + $('#totalGeral').val(floatToBRL(totalGeral)); + $('#totalItens').val($('#tbItens tbody tr.tableRow:not([detail=true])').length); } -/* ========= Recalcula uma linha ========= */ +/* ========= Recalcula o total de uma linha ========= */ function recalcLinha(el) { - const $linha = $(el).closest('tr'); - const qtd = parseFloat($linha.find('input[name^="qtd___"]').val() || '0'); - const preco = brMoneyToFloat($linha.find('input[name^="Refpreco___"]').val() || '0'); - const total = qtd * preco; - - $linha.find('input[name^="totalValor___"]').val(floatToBRL(total)); - atualizarTotais(); -} - -/* ========= Remover linha ========= */ -function fnWdkRemoveChild(el) { - $(el).closest('tr').remove(); - atualizarIndex(); - atualizarTotais(); -} - -/* ========= Adicionar Item ========= */ -function adicionarItem() { - const cod = $('#produtoCod').val(); - const desc = $('#DescoProduto').val(); - const ult = $('#ultimoPreco').val() || '0,00'; - const qtd = $('#quantidade').val(); - const prec = $('#precoRef').val(); - const tot = $('#total').val(); - const dataN = $('#dataNec').val(); - - if (!cod) { - FLUIGC.toast({ title: 'Atenção', message: 'Selecione um produto/serviço', type: 'warning' }); - return; - } - - const idx = wdkAddChild('tbItens'); - - setTimeout(() => { - $('input[name="Codproduto___' + idx + '"]').val(cod); - - const somenteDesc = desc.includes('-') ? desc.split('-').slice(1).join('-').trim() : desc; - $('input[name="produtoDesc___' + idx + '"]').val(somenteDesc); - - $('input[name="ultimoPrecoItem___' + idx + '"]').val(ult); - $('input[name="qtd___' + idx + '"]').val(qtd).on('input', function () { recalcLinha(this); }); - $('input[name="Refpreco___' + idx + '"]').val(prec).on('input', function () { recalcLinha(this); }); - $('input[name="totalValor___' + idx + '"]').val(tot); - $('input[name="dataNecItem___' + idx + '"]').val(dataN); - - atualizarIndex(); + var $linha = $(el).closest('tr'); + var qtd = parseFloat($linha.find('input[name^="qtd___"]').val()) || 0; + var preco = brMoneyToFloat($linha.find('input[name^="Refpreco___"]').val()); + $linha.find('input[name^="totalValor___"]').val(floatToBRL(qtd * preco)); atualizarTotais(); - }, 0); - - FLUIGC.toast({ title: 'Item', message: 'Adicionado à lista', type: 'success' }); - - limparCamposPrincipais(); } -/* ========= Limpar campos principais ========= */ -function limparCamposPrincipais() { - $('#produtoCod, #DescoProduto').val(''); - $('#ultimoPreco').val('0,00'); - $('#quantidade').val('0'); - $('#precoRef').val('0,00'); - $('#total').val('R$ 0,00'); - $('#fnComprovante').val(''); - - - toggleBotaoAddItem(); // 👈 mostra botão -} +/* ========= Delegação de eventos de preço/quantidade ========= */ +$(document).on('input', 'input[name^="qtd___"], input[name^="Refpreco___"]', function () { + recalcLinha(this); +}); diff --git a/compras_digital/forms/Compras_digital/compras_config.js b/compras_digital/forms/Compras_digital/compras_config.js new file mode 100644 index 0000000..ebd31cd --- /dev/null +++ b/compras_digital/forms/Compras_digital/compras_config.js @@ -0,0 +1,29 @@ +/** + * compras_config.js — Configurações centralizadas do formulário Compras Digital + * Carregado pelo Fluig junto com os demais scripts do formulário. + * Compatível com todos os browsers suportados pelo Fluig 1.8.x. + */ + +var ComprasConfig = { + datasets: { + produtos: "dsComprasProdutos", + filiais: "dsFiliais", + centroCusto:"ds_centroCusto", + condPag: "ds_condPag" + }, + ui: { + itensPorPagina: 10 + }, + workflow: { + activities: { + ABERTURA: [0, 1], + VALIDACAO_GESTOR:[4], + VALIDACAO_CC: [6], + COTACAO: [57], + REALIZACAO: [31], + RECEBIMENTO: [18], + PROBLEMA: [24], + VALIDACAO_DIR: [121] + } + } +}; diff --git a/compras_digital/forms/Compras_digital/compras_design_system.css b/compras_digital/forms/Compras_digital/compras_design_system.css new file mode 100644 index 0000000..4e7831f --- /dev/null +++ b/compras_digital/forms/Compras_digital/compras_design_system.css @@ -0,0 +1,244 @@ +/** + * compras_design_system.css + * Design system enterprise para o formulário Compras Digital — Ginseng + * Compatível com Fluig 1.8.x (Bootstrap 3 base) + */ + +/* ═══════════════════════════════════════════ + TOKENS +═══════════════════════════════════════════ */ +:root { + --clr-primary: #04506b; + --clr-primary-dark: #033a50; + --clr-primary-light: #e8f4f8; + --clr-success: #0e9f6e; + --clr-warning: #d97706; + --clr-danger: #e02424; + --clr-info: #0694a2; + --clr-neutral: #6b7280; + --clr-bg: #f9fafb; + --clr-surface: #ffffff; + --clr-border: #e5e7eb; + --clr-text: #111827; + --clr-text-muted: #6b7280; + --radius-sm: 4px; + --radius-md: 8px; + --radius-lg: 12px; + --shadow-sm: 0 1px 3px rgba(0,0,0,.08); + --shadow-md: 0 4px 12px rgba(0,0,0,.12); +} + +/* ═══════════════════════════════════════════ + BADGES DE STATUS +═══════════════════════════════════════════ */ +.badge-status { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 3px 10px; + border-radius: 99px; + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: .4px; + white-space: nowrap; +} +.badge-pending { background: #fef3c7; color: #92400e; } +.badge-approved { background: #d1fae5; color: #065f46; } +.badge-rejected { background: #fee2e2; color: #991b1b; } +.badge-processing { background: #dbeafe; color: #1e40af; } +.badge-blocked { background: #fce7f3; color: #9d174d; } +.badge-waiting { background: #f3f4f6; color: #374151; } + +/* ═══════════════════════════════════════════ + CARDS +═══════════════════════════════════════════ */ +.card-compras { + background: var(--clr-surface); + border: 1px solid var(--clr-border); + border-radius: var(--radius-md); + padding: 16px 20px; + margin-bottom: 16px; + box-shadow: var(--shadow-sm); +} +.card-compras-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 12px; + padding-bottom: 12px; + border-bottom: 1px solid var(--clr-border); +} +.card-compras-title { + font-size: 13px; + font-weight: 600; + color: var(--clr-primary); + margin: 0; + text-transform: uppercase; + letter-spacing: .5px; +} + +/* ═══════════════════════════════════════════ + TABELA ENTERPRISE +═══════════════════════════════════════════ */ +.table-compras { + width: 100%; + border-collapse: collapse; + font-size: 13px; +} +.table-compras th { + background: var(--clr-primary-light); + color: var(--clr-primary-dark); + font-weight: 600; + font-size: 12px; + text-transform: uppercase; + letter-spacing: .4px; + padding: 8px 12px; + border-bottom: 2px solid var(--clr-primary); + white-space: nowrap; +} +.table-compras td { + padding: 8px 12px; + border-bottom: 1px solid var(--clr-border); + vertical-align: middle; + color: var(--clr-text); +} +.table-compras tbody tr:hover { + background: var(--clr-primary-light); + transition: background .15s; +} +.table-compras tbody tr:last-child td { border-bottom: none; } + +/* ═══════════════════════════════════════════ + TIMELINE DE APROVAÇÃO +═══════════════════════════════════════════ */ +.approval-timeline { + position: relative; + padding-left: 28px; +} +.approval-timeline::before { + content: ""; + position: absolute; + left: 11px; top: 0; bottom: 0; + width: 2px; + background: var(--clr-border); +} +.timeline-step { position: relative; margin-bottom: 20px; } +.timeline-dot { + position: absolute; + left: -28px; top: 2px; + width: 22px; height: 22px; + border-radius: 50%; + border: 2px solid var(--clr-border); + background: var(--clr-surface); + display: flex; + align-items: center; + justify-content: center; + font-size: 10px; + font-weight: 700; + color: var(--clr-neutral); +} +.timeline-step.done .timeline-dot { background: var(--clr-success); border-color: var(--clr-success); color: #fff; } +.timeline-step.active .timeline-dot { background: var(--clr-primary); border-color: var(--clr-primary); color: #fff; } +.timeline-step.blocked .timeline-dot { background: var(--clr-danger); border-color: var(--clr-danger); color: #fff; } +.timeline-step.pending .timeline-dot { background: #fff; border-color: var(--clr-warning); color: var(--clr-warning); } +.timeline-label { font-size: 13px; font-weight: 600; color: var(--clr-text); line-height: 1.3; } +.timeline-meta { font-size: 11px; color: var(--clr-text-muted); margin-top: 2px; } + +/* ═══════════════════════════════════════════ + EMPTY STATE +═══════════════════════════════════════════ */ +.empty-state { + text-align: center; + padding: 32px 16px; + color: var(--clr-text-muted); +} +.empty-state-icon { font-size: 40px; margin-bottom: 12px; opacity: .5; } +.empty-state-title { font-size: 15px; font-weight: 600; color: var(--clr-text); margin-bottom: 4px; } +.empty-state-desc { font-size: 13px; } + +/* ═══════════════════════════════════════════ + SKELETON LOADING +═══════════════════════════════════════════ */ +.skeleton { + background: linear-gradient(90deg, #f3f4f6 25%, #e5e7eb 50%, #f3f4f6 75%); + background-size: 200% 100%; + animation: skeleton-shimmer 1.4s infinite; + border-radius: var(--radius-sm); + height: 14px; + margin-bottom: 8px; +} +.skeleton-wide { width: 80%; } +.skeleton-short { width: 40%; } +@keyframes skeleton-shimmer { + 0% { background-position: 200% 0; } + 100% { background-position: -200% 0; } +} + +/* ═══════════════════════════════════════════ + PAINEL DE STATUS DA SC (existente — melhorado) +═══════════════════════════════════════════ */ +.sc-status-panel { + border-radius: var(--radius-lg) !important; + border-color: var(--clr-border) !important; + background: var(--clr-bg) !important; + box-shadow: var(--shadow-sm) !important; +} +.sc-status-panel .sc-field-label { + font-size: 10px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: .5px; + color: var(--clr-text-muted); + margin-bottom: 2px; +} +.sc-status-panel .sc-field-value { + font-size: 13px; + font-weight: 500; + color: var(--clr-text); +} + +/* ═══════════════════════════════════════════ + WIZARD STEPS (melhorado) +═══════════════════════════════════════════ */ +#wizard-steps .step-item { + transition: opacity .2s, transform .2s; +} +#wizard-steps .step-item:not(.done):not(.active) { + opacity: .55; +} +#wizard-steps .step-item.done { color: var(--clr-success); } +#wizard-steps .step-item.active { color: var(--clr-primary); font-weight: 700; } + +/* ═══════════════════════════════════════════ + FORMULÁRIO — campos do Fluig aprimorados +═══════════════════════════════════════════ */ +.has-error .form-control { border-color: var(--clr-danger) !important; } +.errorValidate { border-color: var(--clr-danger) !important; } + +.form-control:focus { + border-color: var(--clr-primary) !important; + box-shadow: 0 0 0 2px rgba(4,80,107,.15) !important; +} + +/* ═══════════════════════════════════════════ + MODAL DE PRODUTOS — aprimorado +═══════════════════════════════════════════ */ +#listaProdutos .table th { font-size: 11px; text-transform: uppercase; } +#listaProdutos .table td { font-size: 13px; } +#listaProdutos .btn-success { min-width: 80px; } + +/* ═══════════════════════════════════════════ + RESPONSIVIDADE +═══════════════════════════════════════════ */ +@media (max-width: 768px) { + .sc-primary-grid, + .sc-secondary-grid { grid-template-columns: 1fr 1fr !important; } + + .table-compras th, + .table-compras td { padding: 6px 8px; font-size: 12px; } +} +@media (max-width: 480px) { + .sc-primary-grid, + .sc-secondary-grid { grid-template-columns: 1fr !important; } +} diff --git a/compras_digital/forms/Compras_digital/compras_digital.js b/compras_digital/forms/Compras_digital/compras_digital.js index 80685a5..8854927 100644 --- a/compras_digital/forms/Compras_digital/compras_digital.js +++ b/compras_digital/forms/Compras_digital/compras_digital.js @@ -44,42 +44,73 @@ function recalcTotal() { } +/* Parse "fieldName___index" IDs used by Fluig Zoom child items */ +function parseZoomItemId(rawId) { + const sep = (rawId || "").indexOf("___"); + if (sep >= 0) { + return { inputId: rawId.substring(0, sep), indice: rawId.substring(sep + 3) }; + } + return { inputId: rawId || "", indice: "" }; +} + function setSelectedZoomItem(selectedItem) { - if (selectedItem.inputId === "estabelecimento") { - // dsFiliais: guarda dados da filial e define gestor da próxima atividade - var codigoProtheus = String(selectedItem.PROTHEUS || selectedItem.protheus || "").trim(); + const { inputId, indice } = parseZoomItemId(selectedItem.inputId); + + if (inputId === "estabelecimento") { + const codigoProtheus = String(selectedItem.PROTHEUS || selectedItem.protheus || "").trim(); + const gestorLoja = String(selectedItem.COLLEAGUE_ID || selectedItem.LOGIN_LOJA || "").trim(); $("#filialdest").val(selectedItem.LOJA || ""); $("#filialest").val(selectedItem.UF || ""); $("#filialprotheus").val(codigoProtheus); $("#centro_custo").val(selectedItem.RESPONSAVEL_LOJA || selectedItem.LOJA || ""); $("#codigocentroCusto").val(codigoProtheus); - - var gestorLoja = (selectedItem.COLLEAGUE_ID || selectedItem.LOGIN_LOJA || "").trim(); $("#gestor_cc").val(gestorLoja); if (!codigoProtheus) { - console.warn("Filial selecionada sem campo PROTHEUS no dsFiliais."); + console.warn("[ZoomHandler] Filial sem PROTHEUS:", selectedItem); } } + if (inputId === "centroCusto") { + $("#gestorNome").val(selectedItem.gestorCentroCusto || ""); + $("#gestorEmail").val(selectedItem.emailGestor || ""); + $("#gestor_cc").val(selectedItem.idGestor || ""); + } -} + if (inputId === "userSolicitante") { + $("#emailSolicitante").val(selectedItem.mail || ""); + } -function removedZoomItem(removedItem) { - if (removedItem.inputId === "estabelecimento") { - // Quando remover a filial, limpa os campos relacionados - $("#filialdest").val(""); - $("#filialest").val(""); - $("#filialprotheus").val(""); - $("#centro_custo").val(""); - $("#codigocentroCusto").val(""); - $("#gestor_cc").val(""); + if (inputId === "descricao") { + $("#codigoItem___" + indice).val(selectedItem.descricao || ""); } } -/* ========= Config ========= */ -const DATASET_PRODUTOS = "dsComprasProdutos"; // dataset de produtos +function removedZoomItem(removedItem) { + const { inputId, indice } = parseZoomItemId(removedItem.inputId); + + if (inputId === "estabelecimento") { + $("#filialdest, #filialest, #filialprotheus, #centro_custo, #codigocentroCusto, #gestor_cc").val(""); + } + + if (inputId === "centroCusto") { + $("#gestorNome, #gestorEmail, #gestor_cc").val(""); + } + + if (inputId === "userSolicitante") { + $("#emailSolicitante").val(""); + } + + if (inputId === "descricao") { + $("#codigoItem___" + indice + ", #quantidadeItem___" + indice).val(""); + } +} + +/* ========= Config (centralizada em compras_config.js) ========= */ +const DATASET_PRODUTOS = (typeof ComprasConfig !== "undefined") + ? ComprasConfig.datasets.produtos + : "dsComprasProdutos"; let todosProdutos = []; let paginaAtual = 1; const itensPorPagina = 10; @@ -266,9 +297,9 @@ function toggleBotaoAddItem() { } /* ========= Adicionar Item ========= */ function adicionarItem() { - const cod = $('#produtoCod').val(); + const cod = $('#produtoCod').val(); const desc = $('#descProduto').val(); - const qtd = $('#quantidade').val(); + const qtd = $('#quantidade').val() || '1'; if (!cod) { FLUIGC.toast({ title: 'Atenção', message: 'Selecione um produto/serviço', type: 'warning' }); @@ -277,20 +308,17 @@ function adicionarItem() { const idx = wdkAddChild('tbItens'); - setTimeout(() => { + setTimeout(function () { $('input[name="Codproduto___' + idx + '"]').val(cod); - const somenteDesc = desc.includes('-') ? desc.split('-').slice(1).join('-').trim() : desc; + const somenteDesc = desc.indexOf('-') >= 0 ? desc.split('-').slice(1).join('-').trim() : desc; $('input[name="produtoDesc___' + idx + '"]').val(somenteDesc); - $('input[name="qtd___' + idx + '"]').val(qtd).on('input', function () { recalcLinha(this); }); - $('input[name="ultimoPreco___' + idx + '"]').val(prec).on('input', function () { recalcLinha(this); }); + $('input[name="qtd___' + idx + '"]').val(qtd); atualizarIndex(); - atualizarTotais(); }, 0); FLUIGC.toast({ title: 'Item', message: 'Adicionado à lista', type: 'success' }); - limparCamposPrincipais(); } @@ -380,16 +408,16 @@ $(function () { var step = steps[index]; if (!step) return; - // 👉 se já estava ativo, mostra tudo de novo + // se já estava ativo, mostra tudo de novo if ($(this).hasClass("active") && $(".activity:visible").length === 1) { - $(".activity").show(); + $(".activity").css("display", "block"); $("#wizard-steps .step-item").removeClass("active"); return; } // senão, mostra só a activity clicada - $(".activity").hide(); - $(".activity-" + step.state).show(); + $(".activity").css("display", "none"); + $(".activity-" + step.state).css("display", "block"); $("#wizard-steps .step-item").removeClass("active"); $(this).addClass("active"); @@ -408,30 +436,32 @@ function setLabel(id, valor) { function badgeClassByStatus(status) { var s = String(status || "").toLowerCase(); - if (!s) return "badge bg-secondary"; - if (s.indexOf("erro") >= 0 || s.indexOf("reprov") >= 0 || s.indexOf("cancel") >= 0) return "badge bg-danger"; - if (s.indexOf("aguard") >= 0 || s.indexOf("pend") >= 0) return "badge bg-warning"; - if (s.indexOf("sucesso") >= 0 || s.indexOf("aprov") >= 0 || s.indexOf("gerad") >= 0 || s.indexOf("liberad") >= 0) return "badge bg-success"; - if (s.indexOf("bloque") >= 0 || s.indexOf("rejeit") >= 0) return "badge bg-danger"; - return "badge bg-info"; + if (!s || s === "sem cotacao" || s === "sem pedido" || s === "-") return "badge-status badge-waiting"; + if (s.indexOf("erro") >= 0 || s.indexOf("reprov") >= 0 || s.indexOf("cancel") >= 0) return "badge-status badge-rejected"; + if (s.indexOf("bloque") >= 0 || s.indexOf("rejeit") >= 0) return "badge-status badge-blocked"; + if (s.indexOf("aguard") >= 0 || s.indexOf("pend") >= 0) return "badge-status badge-pending"; + if (s.indexOf("sucesso") >= 0 || s.indexOf("aprov") >= 0 || s.indexOf("gerad") >= 0 || s.indexOf("liberad") >= 0 || s.indexOf("conclui") >= 0) return "badge-status badge-approved"; + return "badge-status badge-processing"; } +var BADGE_VARIANTS = "badge-waiting badge-pending badge-approved badge-rejected badge-blocked badge-processing"; + function setBadge(selector, valor) { var texto = String(valor || "").trim() || "-"; - var classe = badgeClassByStatus(texto); var textoLower = texto.toLowerCase(); + var classe = badgeClassByStatus(texto); - // Mantem os badges de resumo da SC sem destaque verde para sucesso/geracao. + // Mantém badges de resumo da SC como "em andamento" para não inflar expectativa visual. if ( (selector === "#statusSCProtheus_label" && textoLower.indexOf("sc cadastrada com sucesso") >= 0) || (selector === "#statusSC_label" && textoLower.indexOf("pedido gerado") >= 0) ) { - classe = "badge bg-info"; + classe = "badge-status badge-processing"; } $(selector) .text(texto) - .removeClass("bg-secondary bg-success bg-danger bg-warning bg-info") + .removeClass(BADGE_VARIANTS) .addClass(classe); } @@ -734,7 +764,7 @@ function renderizarResultadoCotacao(resumo) { var statusApiTxt = escapeHTML(linha.statusApi || "-"); var statusRaw = String(linha.label || "").trim(); var statusTxt = escapeHTML(statusRaw); - var badgeStatus = linha.badge || "badge bg-secondary"; + var badgeStatus = linha.badge || "badge-status badge-waiting"; var classeCard = classeCardCotacao(linha.tipo); var qtdTxt = escapeHTML(String(linha.quantidade || "-")); var entregaTxt = escapeHTML(normalizarDataProtheus(linha.dataPrevista || "")); @@ -1303,3 +1333,66 @@ function beforeSendValidate(numState, nextState) { } return true; } + +/* ── Accordion de histórico de atividades ───────────────────────── + Chamada pelo script.js após cada showAndBlock() para colapsar + as seções de atividades já concluídas. + ----------------------------------------------------------------- */ +var ACTIVITY_META = { + "0": { titulo: "Dados da Solicitação", campos: ["usuarioSolicitante", "estabelecimento", "tipoSolicitacao"] }, + "1": { titulo: "Dados da Solicitação", campos: ["usuarioSolicitante", "estabelecimento"] }, + "4": { titulo: "Análise do Gestor", campos: ["userValidacaoGestor", "dataValidacaoGestor"] }, + "6": { titulo: "Validação Compras", campos: ["userValidacaoCompras", "dataValidacaoCompras"] }, + "24": { titulo: "Problema na Compra", campos: [] }, + "31": { titulo: "Realização da Compra", campos: ["userRealizacaoCompras", "dataRealizacaoCompras"] }, + "57": { titulo: "Aprovação p/ Cotação", campos: ["userCotacaoGestor", "dataAprovCompras"] }, + "114": { titulo: "SC no Protheus", campos: [] }, + "121": { titulo: "Validação da Diretoria", campos: ["user_validacao_gestor", "data_validacao_gestor"] } +}; + +function _lerCampoResumo(id) { + var $el = $("#" + id); + if (!$el.length) return ""; + var val = $el.is("span, div") ? $el.text().trim() : String($el.val() || "").trim(); + return (val && val !== "-") ? val : ""; +} + +function colapsarAtividadesAnteriores(numeros) { + for (var i = 0; i < numeros.length; i++) { + var num = numeros[i]; + var $secao = $(".activity-" + num); + if (!$secao.length || $secao.hasClass("accordion-pronto")) continue; + + var meta = ACTIVITY_META[String(num)] || { titulo: "Etapa " + num, campos: [] }; + + // Envolve o conteúdo inteiro num .activity-body colapsável + $secao.children().wrapAll('
            '); + + // Monta texto de resumo a partir dos campos da etapa já preenchida + var partes = []; + for (var c = 0; c < meta.campos.length && partes.length < 2; c++) { + var val = _lerCampoResumo(meta.campos[c]); + if (val) partes.push(escapeHTML(val)); + } + var resumo = partes.length ? partes.join(" · ") : "Concluído"; + + // Injeta cabeçalho clicável antes do body + $secao.prepend( + '
            ' + + '' + + '' + escapeHTML(meta.titulo) + '' + + '' + resumo + '' + + '' + + '
            ' + ); + + $secao.addClass("accordion-pronto is-collapsed"); + + // Fecha sobre si mesmo para manter contexto correto no closure + (function ($s) { + $s.on("click.accordion", ".activity-header", function () { + $s.toggleClass("is-collapsed"); + }); + }($secao)); + } +} diff --git a/compras_digital/forms/Compras_digital/script.js b/compras_digital/forms/Compras_digital/script.js index 3f565ee..fb3af39 100644 --- a/compras_digital/forms/Compras_digital/script.js +++ b/compras_digital/forms/Compras_digital/script.js @@ -2,86 +2,38 @@ $(document).ready(function () { if ($("#formMode").val() == "VIEW") { showAndBlock(["all"]); } else { - //show the right fields var activity = $("#activity").val(); var requestDate = getCurrentDate(); - $(".activity").hide(); + // Ponto de partida: tudo visível, depois escondemos só o que ainda não chegou + $(".activity").css("display", "block"); - $(".activity-" + activity).show(); - - if (activity == 0 || activity == 1) { - //primeira atividade - //$("#dataAbertura").val(requestDate[0] + " - " + requestDate[1]); + if (activity == 0 || activity == 1 || !activity) { + // Atividade inicial — esconde tudo que ainda não foi liberado + $(".activity-121, .activity-18, .activity-24").css("display", "none"); $("#dataAbertura").val(requestDate[0]); add_new_row("tabelaItens"); - } else if (activity == 4) { - showAndBlock([0]); - $("#userValidacaoGestor").val($("#currentUserName").val()); - $("#dataValidacaoGestor").val( - requestDate[0] + " - " + requestDate[1] - ); - updt_line(); - } else if (activity == 6) { - showAndBlock([0, 4]); - $("#userValidacaoCompras").val($("#currentUserName").val()); - $("#dataValidacaoCompras").val( - requestDate[0] + " - " + requestDate[1] - ); - if ($("#justificativaDecisaoGestor").val() == "") { - $(".justificativa-activity-4").hide(); - } - updt_line(); - - } else if (activity == 57) { - $("#userCotacaoGestor").val($("#currentUserName").val()); - $("#dataAprovCompras").val( - requestDate[0] + " - " + requestDate[1] - ); - showAndBlock([0, 4, 6]); - - if ($("#justificativaDecisaoGestor").val() == "") { - $(".justificativa-activity-4").hide(); - } - if ($("#justificativaDecisaoCompras").val() == "") { - $(".justificativa-activity-6").hide(); + } else if (activity == 121) { + // Gestor analisa — esconde atividades futuras + $(".activity-18, .activity-24").css("display", "none"); + showAndBlock([1]); + if (typeof colapsarAtividadesAnteriores === "function") { + colapsarAtividadesAnteriores([1]); } + $("#user_validacao_gestor").val($("#currentUserName").val()); + $("#data_validacao_gestor").val(requestDate[0] + " - " + requestDate[1]); updt_line(); - } else if (activity == 31) { - $("#userRealizacaoCompras").val($("#currentUserName").val()); - $("#dataRealizacaoCompras").val( - requestDate[0] + " - " + requestDate[1] - ); - showAndBlock([0, 4, 6, 57]); - - if ($("#justificativaDecisaoGestor").val() == "") { - $(".justificativa-activity-4").hide(); - } - if ($("#justificativaDecisaoCompras").val() == "") { - $(".justificativa-activity-6").hide(); - } - updt_line(); } else if (activity == 18) { - if ($("justificativaValidaProblema") != "") { - showAndBlock([0, 4, 6, 24, 57, 31]); - } else { - showAndBlock([0, 4, 6, 31]); + // Validação dos itens — esconde só a atividade futura + $(".activity-24").css("display", "none"); + showAndBlock([1, 121]); + if (typeof colapsarAtividadesAnteriores === "function") { + colapsarAtividadesAnteriores([1, 121]); } $("#userValidacaoItens").val($("#currentUserName").val()); $("#dataValidacaoItens").val(requestDate[0] + " - " + requestDate[1]); - - if ($("#justificativaDecisaoGestor").val() == "") { - $(".justificativa-activity-4").hide(); - } - if ($("#justificativaDecisaoCompras").val() == "") { - $(".justificativa-activity-6").hide(); - } - if ($("#consideracoesCompras").val() == "") { - $(".justificativa-activity-31").hide(); - } - $("input[name=validacaoItens]").on("change", function () { $(".justificativaDecisaoItens").hide(); if ( @@ -92,19 +44,13 @@ $(document).ready(function () { } }); $("input[name=validacaoItens]").trigger("change"); - updt_line(); - } else if (activity == 24) { - showAndBlock([0, 4, 6, 31, 18]); - if ($("#justificativaDecisaoGestor").val() == "") { - $(".justificativa-activity-4").hide(); - } - if ($("#justificativaDecisaoCompras").val() == "") { - $(".justificativa-activity-6").hide(); - } - if ($("#consideracoesCompras").val() == "") { - $(".justificativa-activity-31").hide(); + } else if (activity == 24) { + // Última atividade — tudo visível, bloqueia anteriores + showAndBlock([1, 121, 18]); + if (typeof colapsarAtividadesAnteriores === "function") { + colapsarAtividadesAnteriores([1, 121, 18]); } updt_line(); } @@ -143,7 +89,7 @@ function formatarMoedasTabela(ids) { //show the activity and then block the fields function showAndBlock(activity) { for (var i = 0, l = activity.length; i < l; i++) { - $(".activity-" + activity[i]).show(); + $(".activity-" + activity[i]).css("display", "block"); $(".hideButton").hide(); $(".activity-" + activity[i] + " :input").each(function () { $(this).attr("readonly", "readonly"); @@ -267,99 +213,13 @@ var beforeSendValidate = function (numState, nextState) { } }; -function setSelectedZoomItem(selectedItem) { - var name_item = selectedItem.inputId; - var ehItem = name_item.indexOf("___") >= 0; - var indice = ""; - if (ehItem){ - var valores = name_item.split("___"); - name_item = valores[0]; - indice = valores[1]; - } - - var dtsCentroCusto = DatasetFactory.getDataset( - "ds_centroCusto", - null, - null, - null - ).values; - - var nomeGestorComercial = dtsCentroCusto[0].gestorCentroCusto; - var emailGestorComercial = dtsCentroCusto[0].emailGestor; - var idGestorComercial = dtsCentroCusto[0].idGestor; - - var nomeGestorOperacoes = dtsCentroCusto[2].gestorCentroCusto; - var emailGestorOperacoes = dtsCentroCusto[2].emailGestor; - var idGestorOperacoes = dtsCentroCusto[2].idGestor; - - if (name_item == "estabelecimento") { - let estabelecimento = selectedItem["estabelecimento"]; - let cnpj = selectedItem["CNPJ"]; - let protheus = selectedItem["CODIGO"] - $("#cnpj").val(cnpj); - $("#protheus").val(protheus); - - - - if (estabelecimento.includes("MATRIZ")) { - } else if (estabelecimento.includes("CD")) { - window["centroCusto"].setValue("Operações"); - $("#gestorNome").val(nomeGestorOperacoes); - $("#gestorEmail").val(emailGestorOperacoes); - $("#gestor_cc").val(idGestorOperacoes); - } else { - window["centroCusto"].setValue("Comercial"); - $("#gestorNome").val(nomeGestorComercial); - $("#gestorEmail").val(emailGestorComercial); - $("#gestor_cc").val(idGestorComercial); - } - } - - if (name_item == "centroCusto") { - $("#gestorNome").val(selectedItem["gestorCentroCusto"]); - $("#gestorEmail").val(selectedItem["emailGestor"]); - $("#gestor_cc").val(selectedItem["idGestor"]); - } - - if (name_item == "userSolicitante") { - $("#emailSolicitante").val(selectedItem.mail); - } - - if (name_item == "descricao") { - $("#codigoItem" + "___" + indice).val(selectedItem["descricao"]); - } - -} - -function removedZoomItem(removedItem) { - var name_item = removedItem.inputId; - var ehItem = name_item.indexOf("___") >= 0; - var indice = ""; - if (ehItem){ - var valores = name_item.split("___"); - name_item = valores[0]; - indice = valores[1]; - } - - if (name_item == "userSolicitante") { - $("#emailSolicitante").val(""); - } else if (name_item == "centroCusto") { - $("#gestorNome").val(""); - $("#gestorEmail").val(""); - $("#gestor_cc").val(""); - } else if (~name_item.indexOf("___")) { - var linha = name_item.split("___"); - - if (linha[0] == "descricao") { - $("#codigoItem___" + linha[1]).val(""); - $("#quantidadeItem___" + linha[1]).val(""); - } - } - - if (name_item == "descricao") { - $("#codigoItem" + "___" + indice).val(""); - } -} +// setSelectedZoomItem e removedZoomItem foram consolidados em compras_digital.js +// (carregado via
            -
            -
            -

            Aprovar cotação

            -
            Análise da cotação
            -
            -
            - -
            -
            -
            -
            - - +
            +
            + Cotações + 0 +
            +
            + Com pedido + 0 +
            +
            + Menor total + - +
            -
            - - -
            -
            -
            -
            - -
            -
            -
            -
            - - - +
            +
            Aguardando vínculo da cotação na SC.
            - -
            -
            -
            -

            Aprovação do Gestor do C.Custo

            -
            Aprovação da cotação
            -
            -
            - -
            -
            -
            -
            - - -
            -
            - - -
            -
            -
            -
            - -
            -
            -
            -
            - - - -
            -
            - - -
            -
            -
            -
            -
            - -
            -
            -
            -

            Aprovação do Gerente Financeiro

            -
            Aprovação do Gerente Financeiro
            -
            -
            - -
            -
            -
            -
            - - -
            -
            - - -
            -
            -
            -
            - -
            -
            -
            -
            - - - -
            -
            - - -
            -
            - - -
            -
            -
            -
            -
            - -
            -
            -
            -

            Aprovação CEO

            -
            Aprovação do CEO
            -
            -
            - -
            -
            -
            -
            - - -
            -
            - - -
            -
            -
            -
            - -
            -
            -
            -
            - - - -
            -
            - - -
            -
            - - -
            -
            - - -
            -
            -
            -
            -
            +

            @@ -955,14 +933,6 @@
            -
            - -
            - ⏳ Aguardando geração do pedido... -
            -
            - -
            diff --git a/compras_digital/forms/Compras_digital/compras_digital.js b/compras_digital/forms/Compras_digital/compras_digital.js index 27fe6f4..80685a5 100644 --- a/compras_digital/forms/Compras_digital/compras_digital.js +++ b/compras_digital/forms/Compras_digital/compras_digital.js @@ -410,17 +410,29 @@ function badgeClassByStatus(status) { var s = String(status || "").toLowerCase(); if (!s) return "badge bg-secondary"; if (s.indexOf("erro") >= 0 || s.indexOf("reprov") >= 0 || s.indexOf("cancel") >= 0) return "badge bg-danger"; - if (s.indexOf("sucesso") >= 0 || s.indexOf("aprov") >= 0 || s.indexOf("gerad") >= 0 || s.indexOf("liberad") >= 0) return "badge bg-success"; if (s.indexOf("aguard") >= 0 || s.indexOf("pend") >= 0) return "badge bg-warning"; + if (s.indexOf("sucesso") >= 0 || s.indexOf("aprov") >= 0 || s.indexOf("gerad") >= 0 || s.indexOf("liberad") >= 0) return "badge bg-success"; + if (s.indexOf("bloque") >= 0 || s.indexOf("rejeit") >= 0) return "badge bg-danger"; return "badge bg-info"; } function setBadge(selector, valor) { var texto = String(valor || "").trim() || "-"; + var classe = badgeClassByStatus(texto); + var textoLower = texto.toLowerCase(); + + // Mantem os badges de resumo da SC sem destaque verde para sucesso/geracao. + if ( + (selector === "#statusSCProtheus_label" && textoLower.indexOf("sc cadastrada com sucesso") >= 0) || + (selector === "#statusSC_label" && textoLower.indexOf("pedido gerado") >= 0) + ) { + classe = "badge bg-info"; + } + $(selector) .text(texto) .removeClass("bg-secondary bg-success bg-danger bg-warning bg-info") - .addClass(badgeClassByStatus(texto)); + .addClass(classe); } function normalizarStatusCadastro(statusCadastro, numeroSC) { @@ -487,11 +499,35 @@ function possuiFornecedorCotacao(row) { return !!(fornece && loja); } +function textoUtilFornecedor(valor) { + var txt = String(valor || "").trim(); + if (!txt) return ""; + if (txt === "-" || txt === "--") return ""; + if (txt.toUpperCase() === "NULL") return ""; + return txt; +} + +function obterNomeFornecedorCompleto(row) { + var candidatos = [ + textoUtilFornecedor(row.C8_FORNOME), + textoUtilFornecedor(row.A2_NOME), + textoUtilFornecedor(row.A2_NREDUZ) + ].filter(function (v) { return !!v; }); + + if (!candidatos.length) return ""; + + candidatos.sort(function (a, b) { + if (b.length !== a.length) return b.length - a.length; + return a.localeCompare(b); + }); + return candidatos[0]; +} + function classificarLinhaCotacao(row) { var status = String(row.STATUS || "").trim().toUpperCase(); if (linhaCotacaoVencedora(row)) { - return { tipo: "PEDIDO_GERADO", label: "VENCEDOR", badge: "badge bg-success", tipoFornecedor: "Fornecedor homologado" }; + return { tipo: "PEDIDO_GERADO", label: "GANHOU", badge: "badge bg-success", tipoFornecedor: "Fornecedor homologado" }; } if (possuiFornecedorCotacao(row)) { @@ -499,7 +535,7 @@ function classificarLinhaCotacao(row) { } if (status.indexOf("PEDIDO_GERADO") >= 0) { - return { tipo: "PERDEDOR", label: "PERDEDOR", badge: "badge bg-warning", tipoFornecedor: "-" }; + return { tipo: "PERDEDOR", label: "", badge: "badge bg-warning", tipoFornecedor: "-" }; } if (!possuiFornecedorCotacao(row)) { @@ -515,6 +551,41 @@ function formatarValorCotacao(valor) { return floatToBRL(parseNumeroCotacao(txt)); } +function formatarDocumentoVisual(valor) { + var txt = String(valor || "").trim(); + if (!txt || documentoEhPlaceholder(txt)) return "-"; + return txt; +} + +function classeCardCotacao(tipo) { + if (tipo === "PEDIDO_GERADO") return "sc-cotacao-card sc-cotacao-card--winner"; + if (tipo === "FORNECEDOR_HOMOLOGADO") return "sc-cotacao-card sc-cotacao-card--homologado"; + if (tipo === "NOVO_FORNECEDOR") return "sc-cotacao-card sc-cotacao-card--novo"; + if (tipo === "PERDEDOR") return "sc-cotacao-card sc-cotacao-card--perdedor"; + return "sc-cotacao-card"; +} + +function renderizarResumoCotacao(totalCotacoes, totalComPedido, menorTotal) { + var alvo = $("#cotacaoResultadoResumo"); + if (!alvo.length) return; + + var menorTxt = (menorTotal !== null) ? floatToBRL(menorTotal) : "-"; + alvo.html([ + '
            ', + ' Quantidade', + ' ' + escapeHTML(String(totalCotacoes || 0)) + "", + "
            ", + '
            ', + ' Pedidos Gerados', + ' ' + escapeHTML(String(totalComPedido || 0)) + "", + "
            ", + '
            ', + ' Menor Valor', + ' ' + escapeHTML(menorTxt) + "", + "
            " + ].join("")); +} + function comporDataHora(data, hora) { var d = String(data || "").trim(); var h = String(hora || "").trim(); @@ -614,13 +685,14 @@ function renderizarResultadoCotacao(resumo) { if (!resumo || !resumo.detalhes || !resumo.detalhes.length) { setBadge("#cotacaoResultado_label", "Sem cotacao"); - lista.html('
          • Aguardando vinculo da cotacao na SC.
          • '); + renderizarResumoCotacao(0, 0, null); + lista.html('
            Aguardando vinculo da cotacao na SC.
            '); return; } var statusResumo = "Sem fornecedor definido"; if ((resumo.qtdPedidoGerado || 0) > 0) { - statusResumo = "Pedido gerado em " + resumo.qtdPedidoGerado + " item(ns)"; + statusResumo = "Cotacao concluida"; } else if ((resumo.qtdFornecedorHomologado || 0) > 0) { statusResumo = "Fornecedor homologado em " + resumo.qtdFornecedorHomologado + " item(ns)"; } else if ((resumo.qtdNovoFornecedor || 0) > 0) { @@ -629,24 +701,69 @@ function renderizarResultadoCotacao(resumo) { setBadge("#cotacaoResultado_label", statusResumo); - var html = resumo.detalhes.map(function (linha) { + var detalhesOrdenados = resumo.detalhes.slice().sort(function (a, b) { + var pesoA = (a.tipo === "PEDIDO_GERADO") ? 0 : 1; + var pesoB = (b.tipo === "PEDIDO_GERADO") ? 0 : 1; + if (pesoA !== pesoB) return pesoA - pesoB; + + var totalA = parseNumeroCotacao(a.total); + var totalB = parseNumeroCotacao(b.total); + if (totalA === totalB) return 0; + return totalA - totalB; + }); + + var menorTotal = null; + var totalComPedido = 0; + for (var i = 0; i < detalhesOrdenados.length; i++) { + var t = parseNumeroCotacao(detalhesOrdenados[i].total); + if (t > 0 && (menorTotal === null || t < menorTotal)) menorTotal = t; + if (!documentoEhPlaceholder(detalhesOrdenados[i].pedido)) totalComPedido++; + } + renderizarResumoCotacao(detalhesOrdenados.length, totalComPedido, menorTotal); + + var html = detalhesOrdenados.map(function (linha) { var numeroTxt = escapeHTML(linha.numero || "-"); var itemTxt = escapeHTML(linha.item || "-"); var produtoTxt = escapeHTML(linha.produto || "-"); + var fornecedorNomeTxt = escapeHTML(linha.fornecedorNome || linha.fornecedor || "Fornecedor nao informado"); var fornecedorTxt = escapeHTML(linha.fornecedor || "-"); var tipoFornecedorTxt = escapeHTML(linha.tipoFornecedor || "-"); var precoTxt = escapeHTML(formatarValorCotacao(linha.preco)); var totalTxt = escapeHTML(formatarValorCotacao(linha.total)); - var pedidoTxt = escapeHTML(linha.pedido || "-"); + var pedidoTxt = escapeHTML(formatarDocumentoVisual(linha.pedido)); var statusApiTxt = escapeHTML(linha.statusApi || "-"); - var statusTxt = escapeHTML(linha.label || "EM COTACAO"); + var statusRaw = String(linha.label || "").trim(); + var statusTxt = escapeHTML(statusRaw); var badgeStatus = linha.badge || "badge bg-secondary"; + var classeCard = classeCardCotacao(linha.tipo); + var qtdTxt = escapeHTML(String(linha.quantidade || "-")); + var entregaTxt = escapeHTML(normalizarDataProtheus(linha.dataPrevista || "")); + var condicaoTxt = escapeHTML(linha.condicao || "-"); return [ - '
          • ', - ' Cotacao ' + numeroTxt + ' | Item ' + itemTxt + " | Produto: " + produtoTxt + " | Fornecedor: " + fornecedorTxt + " | Tipo: " + tipoFornecedorTxt + " | Preco: " + precoTxt + " | Total: " + totalTxt + " | Pedido: " + pedidoTxt + " | Status: " + statusApiTxt + "", - ' ' + statusTxt + "", - "
          • " + '
            ', + '
            ', + "
            ", + '
            ' + fornecedorNomeTxt + "
            ", + '
            Fornecedor: ' + fornecedorTxt + " | Tipo: " + tipoFornecedorTxt + "
            ", + "
            ", + statusRaw ? (' ' + statusTxt + "") : "", + "
            ", + '
            ', + '
            Preco unitario' + precoTxt + "
            ", + '
            Total' + totalTxt + "
            ", + "
            ", + ' ", + "
            " ].join(""); }).join(""); @@ -658,13 +775,166 @@ function renderizarErroCotacao(mensagem) { if (!lista.length) return; setBadge("#cotacaoResultado_label", "Erro consulta cotacao"); + renderizarResumoCotacao(0, 0, null); lista.html( - '
          • ' + + '
            ' + escapeHTML(mensagem || "Nao foi possivel carregar a cotacao no momento.") + - "
          • " + "
            " ); } +function mapearStatusAlcada(codigo) { + var status = String(codigo || "").trim(); + if (status === "01") return { label: "Pendente em niveis anteriores", badge: "badge bg-warning", classe: "pendente" }; + if (status === "02") return { label: "Pendente", badge: "badge bg-warning", classe: "pendente" }; + if (status === "03") return { label: "Aprovado", badge: "badge bg-success", classe: "aprovado" }; + if (status === "04") return { label: "Bloqueado", badge: "badge bg-danger", classe: "bloqueado" }; + if (status === "05") return { label: "Aprovado/rejeitado pelo nivel", badge: "badge bg-info", classe: "pendente" }; + if (status === "06") return { label: "Rejeitado", badge: "badge bg-danger", classe: "bloqueado" }; + if (status === "07") return { label: "Documento rejeitado ou bloqueado por outro usuario", badge: "badge bg-danger", classe: "bloqueado" }; + return { label: status ? ("Status " + status) : "Sem status", badge: "badge bg-secondary", classe: "" }; +} + +function primeiroTextoPreenchido() { + for (var i = 0; i < arguments.length; i++) { + var txt = String(arguments[i] || "").trim(); + if (txt) return txt; + } + return ""; +} + +function montarResumoRastreioPedido(pedidos, numeroPedido) { + if (!pedidos || !pedidos.length) return null; + + var pedidoFiltro = normalizarCodigoComparacao(numeroPedido); + var pedidoBase = null; + for (var i = 0; i < pedidos.length; i++) { + var num = normalizarCodigoComparacao(String((pedidos[i] || {}).C7_NUM || "")); + if (!pedidoFiltro || num === pedidoFiltro) { + pedidoBase = pedidos[i]; + break; + } + } + if (!pedidoBase) pedidoBase = pedidos[0]; + + var assinaturas = []; + var vistos = {}; + + for (var j = 0; j < pedidos.length; j++) { + var ped = pedidos[j] || {}; + var alcadas = ped.ALCADAS || []; + for (var k = 0; k < alcadas.length; k++) { + var a = alcadas[k] || {}; + var chave = [ + String(a.CR_TIPO || "").trim(), + String(a.CR_USER || "").trim(), + String(a.CR_USERLIB || "").trim(), + String(a.CR_STATUS || "").trim(), + String(a.CR_PRAZO || "").trim(), + String(a.CR_DATALIB || "").trim() + ].join("|"); + if (vistos[chave]) continue; + vistos[chave] = true; + + var statusInfo = mapearStatusAlcada(a.CR_STATUS); + assinaturas.push({ + statusCodigo: String(a.CR_STATUS || "").trim(), + statusLabel: statusInfo.label, + badge: statusInfo.badge, + classe: statusInfo.classe, + tipo: String(a.CR_TIPO || "").trim(), + prazo: normalizarDataProtheus(a.CR_PRAZO), + dataLiberacao: normalizarDataProtheus(a.CR_DATALIB), + usuario: primeiroTextoPreenchido(a.CR_USER_NOME, a.AK_NOME, a.CR_USER), + usuarioLiberacao: primeiroTextoPreenchido(a.CR_USERLIB_NOME, a.AK_NOME_USERLIB, a.CR_USERLIB) + }); + } + } + + var resumo = { + numero: String(pedidoBase.C7_NUM || "").trim(), + statusPedido: String(pedidoBase.STATUS || "").trim(), + fornecedor: primeiroTextoPreenchido(pedidoBase.A2_NOME, pedidoBase.A2_NREDUZ, pedidoBase.C7_FORNECE), + emissao: normalizarDataProtheus(pedidoBase.C7_EMISSAO), + entrega: normalizarDataProtheus(pedidoBase.C7_DATPRF), + assinaturas: assinaturas + }; + + return resumo; +} + +function renderizarErroRastreioPedido(mensagem) { + setBadge("#pedidoRastreio_label", "Erro no rastreio"); + $("#pedidoRastreioResumo").text("Nao foi possivel consultar o rastreio do pedido."); + $("#pedidoRastreioAssinaturas").html( + '
            ' + escapeHTML(mensagem || "Erro ao consultar rastreio.") + "
            " + ); +} + +function renderizarRastreioPedido(resumo) { + var badge = $("#pedidoRastreio_label"); + var resumoEl = $("#pedidoRastreioResumo"); + var lista = $("#pedidoRastreioAssinaturas"); + if (!badge.length || !resumoEl.length || !lista.length) return; + + if (!resumo || !resumo.numero) { + setBadge("#pedidoRastreio_label", "Sem pedido"); + resumoEl.text("Sem pedido vinculado."); + lista.html('
            Sem assinaturas para exibir.
            '); + return; + } + + var possuiBloqueio = resumo.assinaturas.some(function (a) { return a.classe === "bloqueado"; }); + var possuiPendente = resumo.assinaturas.some(function (a) { return a.classe === "pendente"; }); + var todosAprovados = resumo.assinaturas.length > 0 && resumo.assinaturas.every(function (a) { return a.statusCodigo === "03"; }); + + var statusTopo = "Pedido pendente"; + if (possuiBloqueio) statusTopo = "Pedido bloqueado"; + else if (todosAprovados) statusTopo = "Pedido aprovado"; + else if (!possuiPendente && resumo.statusPedido) statusTopo = resumo.statusPedido; + setBadge("#pedidoRastreio_label", statusTopo); + + var resumoTxt = "Pedido " + (resumo.numero || "-"); + if (resumo.fornecedor) resumoTxt += " | Fornecedor: " + resumo.fornecedor; + if (resumo.emissao) resumoTxt += " | Emissao: " + resumo.emissao; + if (resumo.entrega) resumoTxt += " | Entrega: " + resumo.entrega; + resumoEl.text(resumoTxt); + + if (!resumo.assinaturas.length) { + lista.html('
            Pedido encontrado, mas sem alcadas retornadas pela API.
            '); + return; + } + + var html = resumo.assinaturas.map(function (a, idx) { + var classeCard = "sc-pedido-ass-card" + (a.classe ? (" " + a.classe) : ""); + var nivel = "Nivel " + (idx + 1); + var usuario = escapeHTML(a.usuario || "-"); + var usuarioLib = escapeHTML(a.usuarioLiberacao || "-"); + var prazo = escapeHTML(a.prazo || "-"); + var dataLib = escapeHTML(a.dataLiberacao || "-"); + var tipo = escapeHTML(a.tipo || "-"); + var statusLabel = escapeHTML(a.statusLabel || "-"); + var badgeStatus = a.badge || "badge bg-secondary"; + + return [ + '
            ', + '
            ', + '
            ' + nivel + " - " + usuario + "
            ", + ' ' + statusLabel + "", + "
            ", + '
            ', + ' Tipo: ' + tipo + "", + ' Prazo: ' + prazo + "", + ' Data liberacao: ' + dataLib + "", + ' Liberado por: ' + usuarioLib + "", + "
            ", + "
            " + ].join(""); + }).join(""); + + lista.html(html); +} + function montarResumoCotacaoPorLinhas(rows, cotacao) { if (!rows || !rows.length) return null; @@ -699,10 +969,14 @@ function montarResumoCotacaoPorLinhas(rows, cotacao) { detalhes.push({ numero: String(row.C8_NUM || "").trim(), item: item, - produto: String(row.C8_PRODUTO || "").trim(), + produto: String(row.B1_DESC || row.C8_DESCRI || row.C8_PRODUTO || "").trim(), + quantidade: String(row.C8_QUANT || "").trim(), + condicao: String(row.C8_COND || "").trim(), + dataPrevista: String(row.C8_DATPRF || "").trim(), fornecedor: possuiFornecedorCotacao(row) ? (String(row.C8_FORNECE || "").trim() + "/" + String(row.C8_LOJA || "").trim()) : "", + fornecedorNome: obterNomeFornecedorCompleto(row), preco: row.C8_PRECO, total: row.C8_TOTAL, pedido: String(row.C8_NUMPED || "").trim(), @@ -881,7 +1155,7 @@ function montarStatusAndamento(scRow, cotacao, pedido) { return ""; } -function preencherResumoSC(resumoCotacao, erroCotacao) { +function preencherResumoSC(resumoCotacao, erroCotacao, resumoPedido, erroPedido) { var numero = valorCampo("numeroSCProtheus"); var statusCadastro = valorCampo("statusSCProtheus"); var solicitante = valorCampo("solicitanteSCProtheus"); @@ -934,6 +1208,14 @@ function preencherResumoSC(resumoCotacao, erroCotacao) { } else { renderizarResultadoCotacao(null); } + + if (erroPedido) { + renderizarErroRastreioPedido(erroPedido); + } else if (resumoPedido && resumoPedido.numero) { + renderizarRastreioPedido(resumoPedido); + } else { + renderizarRastreioPedido(null); + } } function consultarAndamentoSC() { @@ -974,7 +1256,19 @@ function consultarAndamentoSC() { } } - preencherResumoSC(resumoCotacao, erroCotacao); + var resumoPedido = null; + var erroPedido = String(row.PEDIDO_ERRO || "").trim(); + var jsonPedido = String(row.PEDIDO_JSON || "").trim(); + if (jsonPedido) { + try { + var pedidos = JSON.parse(jsonPedido); + resumoPedido = montarResumoRastreioPedido(pedidos, pedido); + } catch (ePed) { + if (!erroPedido) erroPedido = "Falha ao ler rastreio do pedido retornado pelo ds_consultaSC"; + } + } + + preencherResumoSC(resumoCotacao, erroCotacao, resumoPedido, erroPedido); } catch (e) { console.warn("Nao foi possivel consultar andamento da SC no ds_consultaSC:", e); } @@ -1001,47 +1295,11 @@ function parseNumeroCotacao(valor) { return parseFloat(texto) || 0; } -function recalcularTotalCotacao() { - var soma = 0; - - $("input[name^='selecionado___']").each(function() { - var idCampo = String($(this).attr("id") || ""); - if (idCampo.indexOf("___") < 0) return; - var idx = idCampo.split("___")[1]; - - // pega qtd e preço da linha - var qtd = parseNumeroCotacao($("#qtdc___" + idx).val() || "0"); - var preco = parseNumeroCotacao($("#preco___" + idx).val() || "0"); - - // calcula total da linha - var total = qtd * preco; - - // atualiza campo total da linha - $("#total___" + idx).val(total.toFixed(2)); - - // se marcado, acumula na soma - if ($(this).is(":checked")) { - soma += total; - } - }); - - // Atualiza o hidden e dispara change pro Fluig gravar - $("#valorTotalCotacao").val(soma.toFixed(2)).trigger("change"); - $("#valorTotalCotacaoLabel").text(floatToBRL(soma)); -} -// dispara sempre que marcar/desmarcar -$(document).on("change", "input[name^='selecionado___']", function() { - recalcularTotalCotacao(); -}); - -// recalcula ao abrir a atividade -$(document).ready(function() { - recalcularTotalCotacao(); -}); - // garante que o total seja salvo antes de enviar a atividade function beforeSendValidate(numState, nextState) { - console.log("Executando beforeSendValidate, recalculando total..."); - recalcularTotalCotacao(); - return true; // precisa retornar true senão bloqueia o envio + var campoTotal = $("#valorTotalCotacao"); + if (campoTotal.length && !String(campoTotal.val() || "").trim()) { + campoTotal.val("0").trigger("change"); + } + return true; } diff --git a/compras_digital/forms/Compras_digital/events/displayFields.js b/compras_digital/forms/Compras_digital/events/displayFields.js index ff756ae..23640fd 100644 --- a/compras_digital/forms/Compras_digital/events/displayFields.js +++ b/compras_digital/forms/Compras_digital/events/displayFields.js @@ -52,4 +52,12 @@ function displayFields(form, customHTML) { } form.setValue("data_validacao_gestor", hoje); } + + // Receber produto/servico + if (activity === 18) { + if (nomeUsuario) { + form.setValue("userValidacaoItens", nomeUsuario); + } + form.setValue("dataValidacaoItens", hoje); + } } diff --git a/compras_digital/workflow/.resources/Solicitação de compras V2.ecm30.xml b/compras_digital/workflow/.resources/Solicitação de compras V2.ecm30.xml index 6d793a7..1f39bed 100644 --- a/compras_digital/workflow/.resources/Solicitação de compras V2.ecm30.xml +++ b/compras_digital/workflow/.resources/Solicitação de compras V2.ecm30.xml @@ -29,7 +29,7 @@ 1 Solicitação de compra - Ginseng - 86 + 89 9305 @@ -180,7 +180,7 @@ true false 1560 - 415 + 330 0 0 false @@ -303,58 +303,6 @@ false 1 - - - 1 - Solicitação de compras - 1 - 105 - - Selecionar cotação - Selecionar cotação - - 0 - - false - 0 - Executor Atividade - <AssignmentController><BaseActivity>1</BaseActivity><Returns>Last</Returns></AssignmentController> - 1 - false - true - false - 3600 - 3600 - 0 - 0 - false - - 0 - true - false - false - 620 - 21 - 0 - 0 - false - false - 0 - 0 - false - - 0 - 80 - 0 - false - 0 - 0 - 0 - 0 - - false - 0 - 1 @@ -369,7 +317,6 @@ false 0 - 1 false false @@ -510,210 +457,6 @@ false 0 - - - 1 - Solicitação de compras - 1 - 133 - - Aprovação Centro de custo - Aprovação Centro de custo - - 0 - - false - 0 - Campo Formulário - <AssignmentController><FormField>gestor_cc</FormField></AssignmentController> - 1 - false - true - false - 3600 - 3600 - 0 - 0 - false - - 0 - true - false - false - 910 - 110 - 0 - 0 - false - false - 0 - 0 - false - - 0 - 80 - 0 - false - 0 - 0 - 0 - 0 - - false - 0 - - - - 1 - Solicitação de compras - 1 - 137 - - Aprovação Compras - Aprovação Compras - - 0 - - false - 0 - - 1 - false - true - false - 3600 - 3600 - 0 - 0 - false - - 0 - true - false - false - 800 - 225 - 0 - 0 - false - false - 0 - 0 - false - - 0 - 80 - 0 - false - 0 - 0 - 0 - 0 - - false - 0 - - - - 1 - Solicitação de compras - 1 - 147 - - Aprovação GERF - Aprovação GERF - - 0 - - false - 0 - - 1 - false - true - false - 3600 - 3600 - 0 - 0 - false - - 0 - true - false - false - 1060 - 429 - 0 - 0 - false - false - 0 - 0 - false - - 0 - 80 - 0 - false - 0 - 0 - 0 - 0 - - false - 0 - - - - 1 - Solicitação de compras - 1 - 158 - - Aprovação CEO - Aprovação CEO - - 0 - - false - 0 - 1 - false - true - false - 3600 - 3600 - 0 - 0 - false - - 0 - true - false - false - 1340 - 520 - 0 - 0 - false - false - 0 - 0 - false - - 0 - 80 - 0 - false - 0 - 0 - 0 - 0 - - false - 0 - 1 @@ -833,81 +576,6 @@ false - - - 1 - Solicitação de compras - 1 - 128 - - Alçada - Alçada - false - false - false - - 0 - true - 710 - 217 - false - 1 - 120 - 0 - 0 - - false - - - - 1 - Solicitação de compras - 1 - 150 - - Valor N1 - Valor N1 - false - false - false - - 0 - true - 1090 - 100 - false - 1 - 120 - 0 - 0 - - false - - - - 1 - Solicitação de compras - 1 - 154 - - Valor N2 - Valor N2 - false - false - false - - 0 - true - 1220 - 230 - false - 1 - 120 - 0 - 0 - - false - 1 @@ -1009,7 +677,7 @@ 1 Solicitação de compras 1 - 86 + 89 46 hAPI.getCardValue("validacaoItens") == "entregue" @@ -1021,85 +689,13 @@ 1 Solicitação de compras 2 - 86 + 89 46 true 24 0 - - - 1 - Solicitação de compras - 1 - 86 - 128 - - parseFloat(hAPI.getCardValue("valorTotalCotacao")) <= 100000.00 - 137 - <AssignmentController><User>001142</User></AssignmentController> - Usuário - 0 - - - - 1 - Solicitação de compras - 1 - 86 - 150 - - parseFloat(hAPI.getCardValue("valorTotalCotacao")) >= 5001.00 && -parseFloat(hAPI.getCardValue("valorTotalCotacao")) <= 50000.00 - - 147 - <AssignmentController><User>AriNascimento</User></AssignmentController> - Usuário - 0 - - - - 1 - Solicitação de compras - 2 - 86 - 150 - - true - 18 - <AssignmentController><User>andrey.cunha</User></AssignmentController> - Usuário - 0 - - - - 1 - Solicitação de compras - 1 - 86 - 154 - - parseFloat(hAPI.getCardValue("valorTotalCotacao")) > 50000.00 - 158 - <AssignmentController><User>900010</User></AssignmentController> - Usuário - 0 - - - - 1 - Solicitação de compras - 2 - 86 - 154 - - parseFloat(hAPI.getCardValue("valorTotalCotacao")) < 50000.00 - 18 - <AssignmentController><BaseActivity>1</BaseActivity><Returns>Last</Returns></AssignmentController> - Executor Atividade - 0 - @@ -1322,193 +918,6 @@ parseFloat(hAPI.getCardValue("valorTotalCotacao")) <= 50000.00 false 0 - - - 1 - Solicitação de compras - 1 - 129 - - Enviar para gestão - false - 105 - 128 - - - false - false - 0 - - - - 1 - Solicitação de compras - 1 - 138 - - - false - 128 - 137 - - - false - false - 0 - - - - 1 - Solicitação de compras - 1 - 142 - - - false - 114 - 105 - - - false - false - 0 - - - - 1 - Solicitação de compras - 1 - 144 - - - false - 137 - 133 - - - false - false - 0 - - - - 1 - Solicitação de compras - 1 - 151 - - - false - 133 - 150 - - - false - false - 0 - - - - 1 - Solicitação de compras - 1 - 152 - - - false - 150 - 18 - - - false - false - 0 - - - - 1 - Solicitação de compras - 1 - 153 - - - false - 150 - 147 - - - false - false - 0 - - - - 1 - Solicitação de compras - 1 - 155 - - - false - 147 - 154 - - - false - false - 0 - - - - 1 - Solicitação de compras - 1 - 156 - - - false - 154 - 18 - - - false - false - 0 - - - - 1 - Solicitação de compras - 1 - 159 - - - false - 154 - 158 - - - false - false - 0 - - - - 1 - Solicitação de compras - 1 - 160 - - - false - 158 - 18 - - - false - false - 0 - 1 @@ -1526,6 +935,23 @@ parseFloat(hAPI.getCardValue("valorTotalCotacao")) <= 50000.00 false 0 + + + 1 + Solicitação de compras + 1 + 162 + + + false + 114 + 18 + + + false + false + 0 + @@ -1576,10 +1002,16 @@ function servicetask82(attempt, message) { log.info("📌 Item adicionado: " + JSON.stringify(item)); } - var filial = String(hAPI.getCardValue("filialprotheus") || hAPI.getCardValue("filialProtheus") || "").trim(); - if (!filial) { - throw "Campo de filial não preenchido no formulário (filialprotheus)."; - } + var filial = String( + hAPI.getCardValue("filialprotheus") || + hAPI.getCardValue("filialProtheus") || + hAPI.getCardValue("codigocentroCusto") || + "" + ).trim(); + if (!filial) { + throw "Campo PROTHEUS da filial não preenchido no formulário (filialprotheus)."; + } + log.info("🏬 Filial PROTHEUS enviada no C1_FILENT: " + filial); var payload = { "C1_SOLICIT": String(hAPI.getCardValue("usuarioSolicitante")), @@ -1616,18 +1048,21 @@ function servicetask82(attempt, message) { if (response && response.getResult()) { var result = JSON.parse(response.getResult()); - if (result.sucesso) { - hAPI.setCardValue("numeroSCProtheus", result.C1_NUM || ""); - hAPI.setCardValue("statusSCProtheus", "SC cadastrada com sucesso"); - hAPI.setCardValue("solicitanteSCProtheus", result.C1_SOLICIT || ""); - hAPI.setCardValue("emissaoSCProtheus", result.C1_EMISSAO || ""); - hAPI.setCardValue("qtdItensSCProtheus", String(result.quantidade_itens || "")); - hAPI.setCardValue("dataCadastroSCProtheus", result.data_cadastro || ""); - hAPI.setCardValue("horaCadastroSCProtheus", result.hora_cadastro || ""); - } else { - hAPI.setCardValue("statusSCProtheus", "Erro: " + result.erro); - throw "Erro Protheus: " + result.message; - } + if (result.sucesso) { + hAPI.setCardValue("numeroSCProtheus", result.C1_NUM || ""); + hAPI.setCardValue("statusSCProtheus", "SC cadastrada com sucesso"); + hAPI.setCardValue("statusAtendimento", "Em andamento"); + hAPI.setCardValue("solicitanteSCProtheus", result.C1_SOLICIT || ""); + hAPI.setCardValue("emissaoSCProtheus", result.C1_EMISSAO || ""); + hAPI.setCardValue("qtdItensSCProtheus", String(result.quantidade_itens || "")); + hAPI.setCardValue("dataCadastroSCProtheus", result.data_cadastro || ""); + hAPI.setCardValue("horaCadastroSCProtheus", result.hora_cadastro || ""); + } else { + var erroMsg = result.erro || result.message || JSON.stringify(result); + hAPI.setCardValue("statusSCProtheus", "Erro: " + erroMsg); + hAPI.setCardValue("statusAtendimento", "Erro no envio"); + throw "Erro Protheus: " + erroMsg; + } } else { throw "Sem resposta da API Protheus"; } @@ -1649,26 +1084,162 @@ function servicetask82(attempt, message) { Solicitação de compras 1 - function servicetask114(attempt, message) { - log.info("🚀 ST92 — Verifica se já existe código de cotação no formulário"); - - var numSC = hAPI.getCardValue("numeroSCProtheus"); - var numCot = hAPI.getCardValue("cotacaoSCProtheus"); - - log.info("📌 SC: " + numSC + " | Cotação: " + numCot); - - if (!numSC) { - throw "❌ Número da SC não informado no formulário."; - } - - // se não tiver cotação ainda, força o loop da atividade - if (!numCot || numCot === "000000" || numCot === "000001") { - throw "⏳ Cotação ainda não disponível para a SC " + numSC; - } - - // se já tiver código, só registra log e deixa o processo seguir - log.info("✅ Cotação " + numCot + " encontrada no formulário. Processo segue."); -} + function documentoValido(valor) { + var v = String(valor || "").trim().toUpperCase(); + if (!v) return false; + if (v === "000000" || v === "000001") return false; + if (/^0+$/.test(v)) return false; + if (/^X+$/.test(v)) return false; + return true; +} + +function consultarComFallback(clientService, endpoints, contexto) { + var ultimoErro = ""; + + for (var i = 0; i < endpoints.length; i++) { + try { + var req = { + companyId: "1", + serviceCode: "Postprod", + endpoint: endpoints[i], + method: "get", + timeoutService: "60000", + headers: { + "Content-Type": "application/json" + } + }; + + log.info("[ST114] Consulta " + contexto + " => " + endpoints[i]); + var response = clientService.invoke(JSON.stringify(req)); + if (!response || !response.getResult()) { + ultimoErro = "Sem resposta"; + continue; + } + + var body = JSON.parse(response.getResult()); + if (body && body.sucesso) { + return { sucesso: true, body: body }; + } + + ultimoErro = (body && (body.erro || body.message)) ? String(body.erro || body.message) : "Resposta sem sucesso"; + } catch (e) { + ultimoErro = String(e); + } + } + + return { sucesso: false, erro: ultimoErro || ("Falha na consulta de " + contexto) }; +} + +function apurarAssinaturas(pedidos) { + var resumo = { + total: 0, + aprovadas: 0, + pendentes: 0, + bloqueadas: 0, + rejeitadas: 0, + outros: 0 + }; + + for (var i = 0; i < pedidos.length; i++) { + var alcadas = (pedidos[i] && pedidos[i].ALCADAS) ? pedidos[i].ALCADAS : []; + for (var j = 0; j < alcadas.length; j++) { + var status = String((alcadas[j] && alcadas[j].CR_STATUS) || "").trim(); + if (!status) continue; + + resumo.total++; + if (status === "03") { + resumo.aprovadas++; + } else if (status === "01" || status === "02") { + resumo.pendentes++; + } else if (status === "04") { + resumo.bloqueadas++; + } else if (status === "06" || status === "07") { + resumo.rejeitadas++; + } else { + resumo.outros++; + } + } + } + + return resumo; +} + +function servicetask114(attempt, message) { + log.info("[ST114] Inicio - valida cotacao, pedido e assinaturas"); + + var numSC = String(hAPI.getCardValue("numeroSCProtheus") || "").trim(); + var numCotForm = String(hAPI.getCardValue("cotacaoSCProtheus") || "").trim(); + var numPedForm = String(hAPI.getCardValue("pedidoSCProtheus") || "").trim(); + + if (!numSC) { + throw "Numero da SC nao informado no formulario."; + } + + var clientService = fluigAPI.getAuthorizeClientService(); + + var consultaSC = consultarComFallback(clientService, [ + "/UF_MATA110/" + numSC, + "/rest/UF_MATA110/" + numSC, + "/rest/uf_mata110/" + numSC + ], "SC " + numSC); + + if (!consultaSC.sucesso) { + throw "Nao foi possivel consultar a SC " + numSC + ": " + consultaSC.erro; + } + + var solicitacoes = (consultaSC.body && consultaSC.body.solicitacoes) ? consultaSC.body.solicitacoes : []; + if (!solicitacoes.length) { + throw "SC " + numSC + " sem retorno de dados no Protheus."; + } + + var sc = solicitacoes[0] || {}; + var numCot = documentoValido(sc.C1_COTACAO) ? String(sc.C1_COTACAO).trim() : numCotForm; + var numPed = documentoValido(sc.C1_PEDIDO) ? String(sc.C1_PEDIDO).trim() : numPedForm; + + if (!documentoValido(numCot)) { + hAPI.setCardValue("statusAtendimento", "Aguardando cotacao"); + throw "Cotacao ainda nao disponivel para a SC " + numSC + "."; + } + hAPI.setCardValue("cotacaoSCProtheus", numCot); + + if (!documentoValido(numPed)) { + hAPI.setCardValue("statusAtendimento", "Aguardando pedido"); + throw "Pedido ainda nao gerado para a SC " + numSC + "."; + } + hAPI.setCardValue("pedidoSCProtheus", numPed); + + var consultaPedido = consultarComFallback(clientService, [ + "/UF_MATA120/" + numPed, + "/rest/UF_MATA120/" + numPed, + "/rest/uf_mata120/" + numPed + ], "Pedido " + numPed); + + if (!consultaPedido.sucesso) { + throw "Nao foi possivel consultar o pedido " + numPed + ": " + consultaPedido.erro; + } + + var pedidos = (consultaPedido.body && consultaPedido.body.pedidos) ? consultaPedido.body.pedidos : []; + var assinatura = apurarAssinaturas(pedidos); + + if (assinatura.total === 0) { + hAPI.setCardValue("statusAtendimento", "Pedido sem alcadas"); + throw "Pedido " + numPed + " sem alcadas de assinatura retornadas."; + } + + if (assinatura.bloqueadas > 0 || assinatura.rejeitadas > 0) { + hAPI.setCardValue("statusAtendimento", "Pedido bloqueado/rejeitado"); + throw "Pedido " + numPed + " bloqueado/rejeitado. Nao pode seguir para recebimento."; + } + + if (assinatura.aprovadas < assinatura.total) { + hAPI.setCardValue("statusAtendimento", "Pedido pendente de assinatura"); + throw "Pedido " + numPed + " ainda nao esta 100% assinado (" + assinatura.aprovadas + "/" + assinatura.total + ")."; + } + + hAPI.setCardValue("statusAtendimento", "Pedido 100% assinado"); + log.info("[ST114] Pedido " + numPed + " 100% assinado. Fluxo liberado para receber produto/servico."); +} + @@ -1809,18 +1380,18 @@ function servicetask82(attempt, message) { 1 Solicitação de compras - 86 + 89 26 1 1492 - 452 + 368 1 Solicitação de compras - 86 + 89 125 1 @@ -1831,7 +1402,7 @@ function servicetask82(attempt, message) { 1 Solicitação de compras - 86 + 89 126 1 @@ -1842,7 +1413,7 @@ function servicetask82(attempt, message) { 1 Solicitação de compras - 86 + 89 127 1 @@ -1853,68 +1424,24 @@ function servicetask82(attempt, message) { 1 Solicitação de compras - 86 - 129 - 1 - - 739 - 61 - - - - 1 - Solicitação de compras - 86 - 142 - 1 - - 612 - 48 - - - - 1 - Solicitação de compras - 86 - 144 - 1 - - 852 - 155 - - - - 1 - Solicitação de compras - 86 - 152 - 1 - - 1120 - 96 - - - - 1 - Solicitação de compras - 86 - 152 - 2 - - 1120 - 59 - - - - 1 - Solicitação de compras - 86 + 89 161 1 511 47 + + + 1 + Solicitação de compras + 89 + 162 + 1 + + 613 + 55 + @@ -2030,8 +1557,8 @@ function servicetask82(attempt, message) { 5 Integração executada com sucesso - 1 - 2 + 6 + 0 diff --git a/compras_digital/workflow/.resources/Solicitação de compras V2.png b/compras_digital/workflow/.resources/Solicitação de compras V2.png index f973cdad006759a29fc74ece9de928ef1cd10784..c7cec101b0c87c248871ad7d2b3858b8563b5356 100644 GIT binary patch literal 42013 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

            Preenchimento obrigatório.

            @@ -327,6 +324,45 @@

            #c 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 KnT$WKKm2b-19wgU literal 61957 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 QN$SfNH7{hH`|IKV0nRWDZ2$lO diff --git a/compras_digital/workflow/.resources/Solicitação de compras V2.processimage.svg b/compras_digital/workflow/.resources/Solicitação de compras V2.processimage.svg index 55ae151..64b8dff 100644 --- a/compras_digital/workflow/.resources/Solicitação de compras V2.processimage.svg +++ b/compras_digital/workflow/.resources/Solicitação de compras V2.processimage.svg @@ -1,2 +1,2 @@ -CEOGERFComprasTIGestor CCComprasSolicitanteSolicitação de comprasReceber oproduto/serviçoVerificarproblemaValidarcompraTratar erroEnviar SCSelecionarcotaçãoIntegradorCotaçãoCotação forado prazoAnalisarnecessidadede compraAlçadaAprovaçãoCentro decustoAprovaçãoComprasAprovaçãoGERFValorN1ValorN2AprovaçãoCEOReprovar +CEOGERFComprasTIGestor CCComprasSolicitanteSolicitação de comprasReceber oproduto/serviçoVerificarproblemaValidarcompraTratar erroEnviar SCIntegradorCotaçãoCotação forado prazoAnalisarnecessidadede compraReprovar diff --git a/compras_digital/workflow/diagrams/Solicitação de compras V2.process b/compras_digital/workflow/diagrams/Solicitação de compras V2.process index 2b634bb..a040a99 100644 --- a/compras_digital/workflow/diagrams/Solicitação de compras V2.process +++ b/compras_digital/workflow/diagrams/Solicitação de compras V2.process @@ -1,152 +1,151 @@ - - - - - - + + + + + - - + + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - + - - - + + + - - - + + + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - - + + + - - - + + + - + @@ -162,9 +161,9 @@ - - - + + + @@ -173,85 +172,71 @@ - + - - + + - - + + - + - - - + + + - - - + + + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - + - - - - - - - - - - - - - - - - - + + + - - - + + + - + @@ -261,176 +246,62 @@ - - + + - - - + + + - + - + - + - - + + - - - + + + - + - + - - + + - - - + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - + + + - + @@ -440,20 +311,6 @@ - - - - - - - - - - - - - - @@ -461,146 +318,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -620,26 +477,26 @@ - + - + - + - + - + - + @@ -652,10 +509,10 @@ - + - + @@ -669,146 +526,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -822,146 +679,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -975,146 +832,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1128,146 +985,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1281,146 +1138,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1434,26 +1291,26 @@ - + - + - + - + - + - + @@ -1466,10 +1323,10 @@ - + - + @@ -1483,26 +1340,26 @@ - + - + - + - + - + - + @@ -1515,26 +1372,26 @@ - + - + - + - + - + - + @@ -1547,146 +1404,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1695,7 +1552,7 @@ - + @@ -1714,26 +1571,26 @@ - + - + - + - + - + - + @@ -1747,26 +1604,26 @@ - + - + - + - + - + - + @@ -1780,10 +1637,10 @@ - + - + @@ -1799,146 +1656,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1947,8 +1804,8 @@ - - + + @@ -1962,146 +1819,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2116,26 +1973,26 @@ - + - + - + - + - + - + @@ -2150,146 +2007,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2306,146 +2163,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2460,26 +2317,26 @@ - + - + - + - + - + - + @@ -2493,146 +2350,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2648,26 +2505,26 @@ - + - + - + - + - + - + @@ -2680,146 +2537,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2836,146 +2693,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2990,26 +2847,26 @@ - + - + - + - + - + - + @@ -3022,146 +2879,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3181,146 +3038,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3343,146 +3200,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3497,146 +3354,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3651,146 +3508,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3805,26 +3662,26 @@ - + - + - + - + - + - + @@ -3838,26 +3695,26 @@ - + - + - + - + - + - + @@ -3874,146 +3731,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4028,10 +3885,10 @@ - + - + @@ -4046,146 +3903,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4201,146 +4058,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4358,146 +4215,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4514,26 +4371,26 @@ - + - + - + - + - + - + @@ -4548,10 +4405,10 @@ - + - + @@ -4570,146 +4427,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4724,146 +4581,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4880,146 +4737,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5035,146 +4892,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5189,146 +5046,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5344,146 +5201,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5498,26 +5355,26 @@ - + - + - + - + - + - + @@ -5530,146 +5387,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5687,146 +5544,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5847,10 +5704,10 @@ - + - + @@ -5867,10 +5724,10 @@ - + - + @@ -5883,10 +5740,10 @@ - + - + @@ -5899,10 +5756,10 @@ - + - + @@ -5916,10 +5773,10 @@ - + - + @@ -5932,10 +5789,10 @@ - + - + @@ -5948,10 +5805,10 @@ - + - + @@ -5965,146 +5822,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6120,146 +5977,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6274,26 +6131,26 @@ - + - + - + - + - + - + @@ -6308,146 +6165,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6463,146 +6320,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6617,10 +6474,10 @@ - + - + @@ -6637,146 +6494,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6793,146 +6650,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6948,146 +6805,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7105,146 +6962,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7259,146 +7116,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7414,146 +7271,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7573,146 +7430,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7727,146 +7584,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7881,146 +7738,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -8036,146 +7893,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -8190,146 +8047,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -8344,146 +8201,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -8498,10 +8355,10 @@ - + - + @@ -8518,10 +8375,10 @@ - + - + @@ -8539,146 +8396,146 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -8689,451 +8546,280 @@ - - + + + - - + + - - - + + + - - + + - + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + - - - + + + - - + + - - - + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + \ No newline at end of file diff --git a/compras_digital/workflow/scripts/Solicitação de compras V2.servicetask114.js b/compras_digital/workflow/scripts/Solicitação de compras V2.servicetask114.js index d650ea6..2d24cff 100644 --- a/compras_digital/workflow/scripts/Solicitação de compras V2.servicetask114.js +++ b/compras_digital/workflow/scripts/Solicitação de compras V2.servicetask114.js @@ -1,20 +1,155 @@ +function documentoValido(valor) { + var v = String(valor || "").trim().toUpperCase(); + if (!v) return false; + if (v === "000000" || v === "000001") return false; + if (/^0+$/.test(v)) return false; + if (/^X+$/.test(v)) return false; + return true; +} + +function consultarComFallback(clientService, endpoints, contexto) { + var ultimoErro = ""; + + for (var i = 0; i < endpoints.length; i++) { + try { + var req = { + companyId: "1", + serviceCode: "Postprod", + endpoint: endpoints[i], + method: "get", + timeoutService: "60000", + headers: { + "Content-Type": "application/json" + } + }; + + log.info("[ST114] Consulta " + contexto + " => " + endpoints[i]); + var response = clientService.invoke(JSON.stringify(req)); + if (!response || !response.getResult()) { + ultimoErro = "Sem resposta"; + continue; + } + + var body = JSON.parse(response.getResult()); + if (body && body.sucesso) { + return { sucesso: true, body: body }; + } + + ultimoErro = (body && (body.erro || body.message)) ? String(body.erro || body.message) : "Resposta sem sucesso"; + } catch (e) { + ultimoErro = String(e); + } + } + + return { sucesso: false, erro: ultimoErro || ("Falha na consulta de " + contexto) }; +} + +function apurarAssinaturas(pedidos) { + var resumo = { + total: 0, + aprovadas: 0, + pendentes: 0, + bloqueadas: 0, + rejeitadas: 0, + outros: 0 + }; + + for (var i = 0; i < pedidos.length; i++) { + var alcadas = (pedidos[i] && pedidos[i].ALCADAS) ? pedidos[i].ALCADAS : []; + for (var j = 0; j < alcadas.length; j++) { + var status = String((alcadas[j] && alcadas[j].CR_STATUS) || "").trim(); + if (!status) continue; + + resumo.total++; + if (status === "03") { + resumo.aprovadas++; + } else if (status === "01" || status === "02") { + resumo.pendentes++; + } else if (status === "04") { + resumo.bloqueadas++; + } else if (status === "06" || status === "07") { + resumo.rejeitadas++; + } else { + resumo.outros++; + } + } + } + + return resumo; +} + function servicetask114(attempt, message) { - log.info("🚀 ST92 — Verifica se já existe código de cotação no formulário"); + log.info("[ST114] Inicio - valida cotacao, pedido e assinaturas"); - var numSC = hAPI.getCardValue("numeroSCProtheus"); - var numCot = hAPI.getCardValue("cotacaoSCProtheus"); - - log.info("📌 SC: " + numSC + " | Cotação: " + numCot); + var numSC = String(hAPI.getCardValue("numeroSCProtheus") || "").trim(); + var numCotForm = String(hAPI.getCardValue("cotacaoSCProtheus") || "").trim(); + var numPedForm = String(hAPI.getCardValue("pedidoSCProtheus") || "").trim(); if (!numSC) { - throw "❌ Número da SC não informado no formulário."; + throw "Numero da SC nao informado no formulario."; } - // se não tiver cotação ainda, força o loop da atividade - if (!numCot || numCot === "000000" || numCot === "000001") { - throw "⏳ Cotação ainda não disponível para a SC " + numSC; + var clientService = fluigAPI.getAuthorizeClientService(); + + var consultaSC = consultarComFallback(clientService, [ + "/UF_MATA110/" + numSC, + "/rest/UF_MATA110/" + numSC, + "/rest/uf_mata110/" + numSC + ], "SC " + numSC); + + if (!consultaSC.sucesso) { + throw "Nao foi possivel consultar a SC " + numSC + ": " + consultaSC.erro; } - // se já tiver código, só registra log e deixa o processo seguir - log.info("✅ Cotação " + numCot + " encontrada no formulário. Processo segue."); -} \ No newline at end of file + var solicitacoes = (consultaSC.body && consultaSC.body.solicitacoes) ? consultaSC.body.solicitacoes : []; + if (!solicitacoes.length) { + throw "SC " + numSC + " sem retorno de dados no Protheus."; + } + + var sc = solicitacoes[0] || {}; + var numCot = documentoValido(sc.C1_COTACAO) ? String(sc.C1_COTACAO).trim() : numCotForm; + var numPed = documentoValido(sc.C1_PEDIDO) ? String(sc.C1_PEDIDO).trim() : numPedForm; + + if (!documentoValido(numCot)) { + hAPI.setCardValue("statusAtendimento", "Aguardando cotacao"); + throw "Cotacao ainda nao disponivel para a SC " + numSC + "."; + } + hAPI.setCardValue("cotacaoSCProtheus", numCot); + + if (!documentoValido(numPed)) { + hAPI.setCardValue("statusAtendimento", "Aguardando pedido"); + throw "Pedido ainda nao gerado para a SC " + numSC + "."; + } + hAPI.setCardValue("pedidoSCProtheus", numPed); + + var consultaPedido = consultarComFallback(clientService, [ + "/UF_MATA120/" + numPed, + "/rest/UF_MATA120/" + numPed, + "/rest/uf_mata120/" + numPed + ], "Pedido " + numPed); + + if (!consultaPedido.sucesso) { + throw "Nao foi possivel consultar o pedido " + numPed + ": " + consultaPedido.erro; + } + + var pedidos = (consultaPedido.body && consultaPedido.body.pedidos) ? consultaPedido.body.pedidos : []; + var assinatura = apurarAssinaturas(pedidos); + + if (assinatura.total === 0) { + hAPI.setCardValue("statusAtendimento", "Pedido sem alcadas"); + throw "Pedido " + numPed + " sem alcadas de assinatura retornadas."; + } + + if (assinatura.bloqueadas > 0 || assinatura.rejeitadas > 0) { + hAPI.setCardValue("statusAtendimento", "Pedido bloqueado/rejeitado"); + throw "Pedido " + numPed + " bloqueado/rejeitado. Nao pode seguir para recebimento."; + } + + if (assinatura.aprovadas < assinatura.total) { + hAPI.setCardValue("statusAtendimento", "Pedido pendente de assinatura"); + throw "Pedido " + numPed + " ainda nao esta 100% assinado (" + assinatura.aprovadas + "/" + assinatura.total + ")."; + } + + hAPI.setCardValue("statusAtendimento", "Pedido 100% assinado"); + log.info("[ST114] Pedido " + numPed + " 100% assinado. Fluxo liberado para receber produto/servico."); +} From 2946fc4f6e8fc53b25ae3b68ccb99aa4a74a81b7 Mon Sep 17 00:00:00 2001 From: "Andrey Cunh@" Date: Fri, 8 May 2026 16:47:42 -0300 Subject: [PATCH 22/25] att --- Recrutamento e Seleção/.vscode/servers.json | 18 + .../datasets/ds_Liderdireto.js | 2 +- .../recrutamentoeselecao.html | 167 +-- .../forms/recrutamentoeselecao/script.js | 97 +- .../.resources/Ginseng Produção.ws.cache | 1316 +---------------- .../.resources/Ginseng Produção.ws.cache.bkp | 925 +++++++----- .../.resources/recrutamentoeselecao.png | Bin 45031 -> 47214 bytes 7 files changed, 668 insertions(+), 1857 deletions(-) create mode 100644 Recrutamento e Seleção/.vscode/servers.json diff --git a/Recrutamento e Seleção/.vscode/servers.json b/Recrutamento e Seleção/.vscode/servers.json new file mode 100644 index 0000000..c97970c --- /dev/null +++ b/Recrutamento e Seleção/.vscode/servers.json @@ -0,0 +1,18 @@ +{ + "version": "1.0.0", + "configurations": [ + { + "id": "li97ygt2jtpmox9f43v2yuy8w2zc9b", + "name": "Ginseng Produção", + "host": "comerciode188006.fluig.cloudtotvs.com.br", + "ssl": true, + "port": 443, + "username": "andrey.cunha", + "password": "eyJpdiI6IjU5MzE0NTNmZGEzYzY1OTg4NWM0MGRmMzNlM2QxZjU1Iiwic2FsdCI6ImYzODdiNjVkNjUwNDAzMjdjZjI1ZDFhM2I5ZDE5MGE1IiwidGV4dCI6ImIyNzQ4NWI1NTkwZjZjMzUwMjdiOTUzODVlMDExZTBiIn0=", + "userCode": "andrey.cunha", + "confirmExporting": false, + "hasBrowser": false, + "companyId": 1 + } + ] +} \ No newline at end of file diff --git a/Recrutamento e Seleção/datasets/ds_Liderdireto.js b/Recrutamento e Seleção/datasets/ds_Liderdireto.js index b0f206b..11bb308 100644 --- a/Recrutamento e Seleção/datasets/ds_Liderdireto.js +++ b/Recrutamento e Seleção/datasets/ds_Liderdireto.js @@ -23,7 +23,7 @@ function createDataset(fields, constraints, sortFields) { ["51101", "Diretoria e Gestão", "João Marcelo", "joao.loureiro@grupoginseng.com.br", "4"], ["51102", "Operações", "Lucas Barbosa", "lucas.barbosa@grupoginseng.com.br", "5"], ["51102", "Obras e Manutenção", "Diogo Demetrio", "diogo.martins@grupoginseng.com.br", "6"], - ["51103", "Controladoria", "Ariklenyo Nascimento", "ari.nascimento@grupoginseng.com.br", "7"], + ["51103", "Controladoria", "Lucas Marchiori", "lucas.marchiori@grupoginseng.com.br", "7"], ["51104", "Compliance", "Marla Palma", "marla.palma@grupoginseng.com.br", "8"], ["51107", "Administrativo", "Lucila Brandão", "lucila.brandao@grupoginseng.com.br", "9"], ["51110", "Gente e Cultura", "Francine Peiter", "francine.silva@grupoginseng.com.br", "10"], diff --git a/Recrutamento e Seleção/forms/recrutamentoeselecao/recrutamentoeselecao.html b/Recrutamento e Seleção/forms/recrutamentoeselecao/recrutamentoeselecao.html index 68a894f..355ad04 100644 --- a/Recrutamento e Seleção/forms/recrutamentoeselecao/recrutamentoeselecao.html +++ b/Recrutamento e Seleção/forms/recrutamentoeselecao/recrutamentoeselecao.html @@ -157,23 +157,20 @@ * + {'field':'LOJA','label':'Filial','standard':'true','search':'true'}, + {'field':'REGIONAL','label':'REGIONAL','standard':'true'}, + {'field':'UF','label':'UF','standard':'true'}, + {'field':'RESPONSAVEL_LOJA','label':'RESPONSAVEL_LOJA','visible':'false'}, + {'field':'PDV','label':'PDV','visible':'false'}, + {'field':'PROTHEUS','label':'PROTHEUS','visible':'false'}, + {'field':'COLLEAGUE_ID','label':'COLLEAGUE_ID','visible':'false'}, + {'field':'LOGIN_LOJA','label':'LOGIN_LOJA','visible':'false'} + ] + }">

            +
            + + *
            +
            + +
            +
            + +
            +
            + +
            +
            +
            + + *
            +
            + +
            +
            + +
            +