diff --git a/.metadata/.log b/.metadata/.log index d129dfd..36af1ac 100644 --- a/.metadata/.log +++ b/.metadata/.log @@ -447,3 +447,2171 @@ 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. + +!ENTRY org.eclipse.ui.ide 4 4 2026-03-09 09:19:25.757 +!MESSAGE Problems occurred refreshing the selected resources. +!SUBENTRY 1 org.eclipse.core.resources 4 567 2026-03-09 09:19:25.757 +!MESSAGE The project description file (.project) for 'Auditoria_checklist' is missing. This file contains important information about the project. The project will not function properly until this file is restored. +!STACK 0 +java.lang.Exception: The project description file (.project) for 'Auditoria_checklist' is missing. This file contains important information about the project. The project will not function properly until this file is restored. + at org.eclipse.core.internal.resources.ResourceException.provideStackTrace(ResourceException.java:42) + at org.eclipse.core.internal.resources.ResourceException.(ResourceException.java:38) + at org.eclipse.core.internal.localstore.FileSystemResourceManager.read(FileSystemResourceManager.java:907) + at org.eclipse.core.internal.resources.Project.updateDescription(Project.java:1336) + at org.eclipse.core.internal.resources.File.updateMetadataFiles(File.java:382) + at org.eclipse.core.internal.localstore.RefreshLocalVisitor.visit(RefreshLocalVisitor.java:291) + at org.eclipse.core.internal.localstore.UnifiedTree.accept(UnifiedTree.java:118) + at org.eclipse.core.internal.localstore.FileSystemResourceManager.refreshResource(FileSystemResourceManager.java:977) + at org.eclipse.core.internal.localstore.FileSystemResourceManager.refresh(FileSystemResourceManager.java:960) + at org.eclipse.core.internal.resources.Resource.refreshLocal(Resource.java:1552) + at org.eclipse.ui.actions.RefreshAction.refreshResource(RefreshAction.java:274) + at org.eclipse.ui.actions.RefreshAction$2.execute(RefreshAction.java:234) + at org.eclipse.ui.actions.WorkspaceModifyOperation.lambda$0(WorkspaceModifyOperation.java:110) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2295) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2322) + at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:131) + at org.eclipse.jdt.ui.actions.RefreshAction$WrappedWorkbenchRefreshAction.run(RefreshAction.java:116) + at org.eclipse.jdt.ui.actions.RefreshAction.performRefresh(RefreshAction.java:193) + at org.eclipse.jdt.ui.actions.RefreshAction.access$0(RefreshAction.java:188) + at org.eclipse.jdt.ui.actions.RefreshAction$1.run(RefreshAction.java:182) + at org.eclipse.jdt.internal.core.BatchOperation.executeOperation(BatchOperation.java:41) + at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:736) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2295) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2322) + at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:5834) + at org.eclipse.jdt.internal.ui.actions.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:108) + at org.eclipse.jdt.internal.ui.actions.WorkbenchRunnableAdapter$1.run(WorkbenchRunnableAdapter.java:121) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) + +!ENTRY org.eclipse.core.resources 2 2 2026-03-09 09:24:26.160 +!MESSAGE Save operation warnings. +!SUBENTRY 1 org.eclipse.core.resources 2 234 2026-03-09 09:24:26.160 +!MESSAGE The project description file (.project) for 'Auditoria' was missing. This file contains important information about the project. A new project description file has been created, but some information about the project may have been lost. +!SUBENTRY 1 org.eclipse.core.resources 2 234 2026-03-09 09:24:26.160 +!MESSAGE The project description file (.project) for 'Auditoria_checklist' was missing. This file contains important information about the project. A new project description file has been created, but some information about the project may have been lost. + +!ENTRY org.eclipse.ui 4 0 2026-03-09 11:03:11.202 +!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-03-09 11:03:11.202 +!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-03-09 11:03:13.397 +!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-03-09 11:03:13.403 +!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-03-09 11:03:14.406 +!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-03-09 11:03:14.411 +!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-03-09 11:03:16.028 +!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-03-09 11:03:16.028 +!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-03-09 11:03:17.437 +!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-03-09 11:03:17.439 +!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-03-09 11:03:18.738 +!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-03-09 11:03:18.754 +!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-03-09 11:03:19.681 +!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-03-09 11:03:19.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-03-09 11:03:21.178 +!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-03-09 11:03:21.183 +!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-03-09 11:18:01.100 +!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-03-09 11:18:01.106 +!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-03-09 11:18:01.112 +!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-03-09 11:18:35.516 +!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-03-09 11:18:35.521 +!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-03-09 11:29:28.557 +!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-03-09 11:29:28.564 +!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-03-09 11:29:28.573 +!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-03-09 11:29:29.774 +!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-03-09 11:29:29.774 +!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-03-09 13:52:16.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-03-09 13:52:16.052 +!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-03-09 13:53:30.884 +!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-03-09 13:56:53.540 +!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-03-09 13:56:53.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-03-09 13:56:53.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-03-09 14:01:39.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-03-09 14:01:39.503 +!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-03-09 14:01:39.508 +!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-03-09 14:07:52.546 +!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-03-09 14:07:52.553 +!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-03-09 14:07:52.558 +!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 com.totvs.tds.ecm.designer.eclipse 4 2 2026-03-09 14:13:54.723 +!MESSAGE Problems occurred when invoking code from plug-in: "com.totvs.tds.ecm.designer.eclipse". +!STACK 0 +java.lang.NullPointerException + at com.totvs.tds.ecm.designer.eclipse.ui.ExportMarshallerRunnable$1.run(ExportMarshallerRunnable.java:170) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + 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) + +!ENTRY com.totvs.tds.ecm.designer.eclipse 4 2 2026-03-09 14:13:57.221 +!MESSAGE Problems occurred when invoking code from plug-in: "com.totvs.tds.ecm.designer.eclipse". +!STACK 0 +java.lang.NullPointerException + at com.totvs.tds.ecm.designer.eclipse.ui.ExportMarshallerRunnable$1.run(ExportMarshallerRunnable.java:170) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + 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) + +!ENTRY org.eclipse.ui 4 0 2026-03-09 14:18:46.093 +!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-03-09 14:38:49.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-03-09 14:38:49.979 +!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-03-09 14:38:49.984 +!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-03-09 16:01:02.226 +!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-03-09 16:01:02.254 +!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-03-09 16:01:02.260 +!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-03-09 16:01:02.265 +!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-03-09 16:01:02.271 +!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-03-09 16:06:19.072 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NullPointerException + at com.totvs.tds.ecm.designer.eclipse.ui.BPMExportManager.getStartingPage(BPMExportManager.java:104) + at org.eclipse.jface.wizard.WizardSelectionPage.getNextPage(WizardSelectionPage.java:122) + at org.eclipse.ui.internal.dialogs.WorkbenchWizardSelectionPage.getNextPage(WorkbenchWizardSelectionPage.java:98) + at org.eclipse.ui.internal.dialogs.ImportExportPage.getNextPage(ImportExportPage.java:421) + at org.eclipse.jface.wizard.WizardDialog.nextPressed(WizardDialog.java:911) + at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:468) + at org.eclipse.jface.dialogs.Dialog.lambda$0(Dialog.java:619) + at org.eclipse.swt.events.SelectionListener$1.widgetSelected(SelectionListener.java:84) + 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.jface.window.Window.runEventLoop(Window.java:823) + at org.eclipse.jface.window.Window.open(Window.java:799) + at org.eclipse.ui.internal.handlers.WizardHandler$Export.executeHandler(WizardHandler.java:103) + at org.eclipse.ui.internal.handlers.WizardHandler.execute(WizardHandler.java:280) + 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.GeneratedMethodAccessor84.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.ui.internal.handlers.LegacyHandlerService.executeCommand(LegacyHandlerService.java:389) + at org.eclipse.ui.internal.actions.CommandAction.runWithEvent(CommandAction.java:142) + at org.eclipse.ui.internal.actions.CommandAction.run(CommandAction.java:152) + at org.eclipse.ui.actions.ExportResourcesAction.run(ExportResourcesAction.java:121) + at org.eclipse.ui.actions.BaseSelectionListenerAction.runWithEvent(BaseSelectionListenerAction.java:171) + 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) + +!ENTRY org.eclipse.ui 4 0 2026-03-09 16:52:31.148 +!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-03-09 16:52:31.171 +!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-03-09 16:56:13.902 +!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-03-10 09:41:24.856 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NullPointerException + at com.totvs.tds.ecm.designer.eclipse.ui.BPMExportManager.getStartingPage(BPMExportManager.java:104) + at org.eclipse.jface.wizard.WizardSelectionPage.getNextPage(WizardSelectionPage.java:122) + at org.eclipse.ui.internal.dialogs.WorkbenchWizardSelectionPage.getNextPage(WorkbenchWizardSelectionPage.java:98) + at org.eclipse.ui.internal.dialogs.ImportExportPage.getNextPage(ImportExportPage.java:421) + at org.eclipse.jface.wizard.WizardDialog.nextPressed(WizardDialog.java:911) + at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:468) + at org.eclipse.jface.dialogs.Dialog.lambda$0(Dialog.java:619) + at org.eclipse.swt.events.SelectionListener$1.widgetSelected(SelectionListener.java:84) + 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.jface.window.Window.runEventLoop(Window.java:823) + at org.eclipse.jface.window.Window.open(Window.java:799) + at org.eclipse.ui.internal.handlers.WizardHandler$Export.executeHandler(WizardHandler.java:103) + at org.eclipse.ui.internal.handlers.WizardHandler.execute(WizardHandler.java:280) + 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.GeneratedMethodAccessor84.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.ui.internal.handlers.LegacyHandlerService.executeCommand(LegacyHandlerService.java:389) + at org.eclipse.ui.internal.actions.CommandAction.runWithEvent(CommandAction.java:142) + at org.eclipse.ui.internal.actions.CommandAction.run(CommandAction.java:152) + at org.eclipse.ui.actions.ExportResourcesAction.run(ExportResourcesAction.java:121) + at org.eclipse.ui.actions.BaseSelectionListenerAction.runWithEvent(BaseSelectionListenerAction.java:171) + 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) + +!ENTRY org.eclipse.wst.jsdt.core 4 4 2026-03-10 14:43:36.491 +!MESSAGE null +!STACK 0 +java.lang.NullPointerException + at org.eclipse.wst.jsdt.internal.core.dom.binding.Scope.getKey(Scope.java:398) + at org.eclipse.wst.jsdt.internal.core.dom.binding.SymbolBase.getKey(SymbolBase.java:38) + at org.eclipse.wst.jsdt.core.dom.BindingResolverDom.putBinding(BindingResolverDom.java:199) + at org.eclipse.wst.jsdt.core.dom.BindingResolverDom.processVariableDeclaration(BindingResolverDom.java:163) + at org.eclipse.wst.jsdt.core.dom.BindingResolverDom.resolve(BindingResolverDom.java:105) + at org.eclipse.wst.jsdt.core.dom.ASTParser.resolveBindings(ASTParser.java:1110) + at org.eclipse.wst.jsdt.core.dom.ASTParser.createAST(ASTParser.java:656) + at org.eclipse.wst.jsdt.internal.ui.javaeditor.ASTProvider$1.run(ASTProvider.java:583) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.wst.jsdt.internal.ui.javaeditor.ASTProvider.createAST(ASTProvider.java:576) + at org.eclipse.wst.jsdt.internal.ui.javaeditor.ASTProvider.getAST(ASTProvider.java:511) + at org.eclipse.wst.jsdt.internal.ui.text.java.JavascriptReconcilingStrategy$1.run(JavascriptReconcilingStrategy.java:89) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.wst.jsdt.internal.ui.text.java.JavascriptReconcilingStrategy.reconcile(JavascriptReconcilingStrategy.java:76) + at org.eclipse.wst.jsdt.internal.ui.text.java.JavascriptReconcilingStrategy.reconcile(JavascriptReconcilingStrategy.java:129) + at org.eclipse.wst.jsdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:85) + at org.eclipse.wst.jsdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:98) + at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:76) + at org.eclipse.wst.jsdt.internal.ui.text.JavaReconciler.process(JavaReconciler.java:374) + at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:210) + +!ENTRY org.eclipse.wst.jsdt.core 4 4 2026-03-10 14:43:36.520 +!MESSAGE null +!STACK 0 +java.lang.NullPointerException + at org.eclipse.wst.jsdt.internal.core.dom.binding.Scope.getKey(Scope.java:398) + at org.eclipse.wst.jsdt.internal.core.dom.binding.SymbolBase.getKey(SymbolBase.java:38) + at org.eclipse.wst.jsdt.core.dom.BindingResolverDom.putBinding(BindingResolverDom.java:199) + at org.eclipse.wst.jsdt.core.dom.BindingResolverDom.processVariableDeclaration(BindingResolverDom.java:163) + at org.eclipse.wst.jsdt.core.dom.BindingResolverDom.resolve(BindingResolverDom.java:105) + at org.eclipse.wst.jsdt.core.dom.ASTParser.resolveBindings(ASTParser.java:1110) + at org.eclipse.wst.jsdt.core.dom.ASTParser.createAST(ASTParser.java:656) + at org.eclipse.wst.jsdt.internal.ui.javaeditor.ASTProvider$1.run(ASTProvider.java:583) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.wst.jsdt.internal.ui.javaeditor.ASTProvider.createAST(ASTProvider.java:576) + at org.eclipse.wst.jsdt.internal.ui.javaeditor.ASTProvider.getAST(ASTProvider.java:511) + at org.eclipse.wst.jsdt.internal.ui.viewsupport.SelectionListenerWithASTManager$PartListenerGroup.calculateASTandInform(SelectionListenerWithASTManager.java:150) + at org.eclipse.wst.jsdt.internal.ui.viewsupport.SelectionListenerWithASTManager$PartListenerGroup$3.run(SelectionListenerWithASTManager.java:135) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) + +!ENTRY org.eclipse.wst.jsdt.core 4 4 2026-03-10 14:45:07.474 +!MESSAGE null +!STACK 0 +java.lang.NullPointerException + at org.eclipse.wst.jsdt.internal.core.dom.binding.Scope.getKey(Scope.java:398) + at org.eclipse.wst.jsdt.internal.core.dom.binding.SymbolBase.getKey(SymbolBase.java:38) + at org.eclipse.wst.jsdt.core.dom.BindingResolverDom.putBinding(BindingResolverDom.java:199) + at org.eclipse.wst.jsdt.core.dom.BindingResolverDom.processVariableDeclaration(BindingResolverDom.java:163) + at org.eclipse.wst.jsdt.core.dom.BindingResolverDom.resolve(BindingResolverDom.java:105) + at org.eclipse.wst.jsdt.core.dom.ASTParser.resolveBindings(ASTParser.java:1110) + at org.eclipse.wst.jsdt.core.dom.ASTParser.createAST(ASTParser.java:656) + at org.eclipse.wst.jsdt.internal.ui.javaeditor.ASTProvider$1.run(ASTProvider.java:583) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.wst.jsdt.internal.ui.javaeditor.ASTProvider.createAST(ASTProvider.java:576) + at org.eclipse.wst.jsdt.internal.ui.javaeditor.ASTProvider.getAST(ASTProvider.java:511) + at org.eclipse.wst.jsdt.internal.ui.viewsupport.SelectionListenerWithASTManager$PartListenerGroup.calculateASTandInform(SelectionListenerWithASTManager.java:150) + at org.eclipse.wst.jsdt.internal.ui.viewsupport.SelectionListenerWithASTManager$PartListenerGroup$3.run(SelectionListenerWithASTManager.java:135) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) + +!ENTRY org.eclipse.wst.jsdt.core 4 4 2026-03-10 14:55:21.067 +!MESSAGE null +!STACK 0 +java.lang.NullPointerException + +!ENTRY org.eclipse.wst.jsdt.core 4 4 2026-03-10 14:55:21.209 +!MESSAGE null +!STACK 0 +java.lang.NullPointerException + +!ENTRY org.eclipse.wst.jsdt.core 4 4 2026-03-10 14:55:23.746 +!MESSAGE null +!STACK 0 +java.lang.NullPointerException + +!ENTRY org.eclipse.wst.jsdt.core 4 4 2026-03-10 14:55:38.348 +!MESSAGE null +!STACK 0 +java.lang.NullPointerException + +!ENTRY org.eclipse.wst.jsdt.core 4 4 2026-03-10 14:55:38.903 +!MESSAGE null +!STACK 0 +java.lang.NullPointerException + +!ENTRY org.eclipse.wst.jsdt.core 4 4 2026-03-10 15:12:11.768 +!MESSAGE null +!STACK 0 +java.lang.NullPointerException + +!ENTRY org.eclipse.wst.jsdt.core 4 4 2026-03-10 15:12:11.796 +!MESSAGE null +!STACK 0 +java.lang.NullPointerException + +!ENTRY org.eclipse.wst.jsdt.core 4 4 2026-03-10 15:31:14.986 +!MESSAGE null +!STACK 0 +java.lang.NullPointerException + +!ENTRY org.eclipse.wst.jsdt.core 4 4 2026-03-10 15:31:15.204 +!MESSAGE null +!STACK 0 +java.lang.NullPointerException + +!ENTRY org.eclipse.wst.jsdt.core 4 4 2026-03-10 15:31:16.239 +!MESSAGE null +!STACK 0 +java.lang.NullPointerException + +!ENTRY org.eclipse.wst.jsdt.core 4 4 2026-03-10 15:31:38.577 +!MESSAGE null +!STACK 0 +java.lang.NullPointerException diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/Ginseng_chamados/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/Ginseng_chamados/.markers.snap index 91d6c54..d6e36ca 100644 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.projects/Ginseng_chamados/.markers.snap and b/.metadata/.plugins/org.eclipse.core.resources/.projects/Ginseng_chamados/.markers.snap differ 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 index 91d6c54..d6e36ca 100644 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.projects/Ginseng_chamados/.syncinfo.snap and b/.metadata/.plugins/org.eclipse.core.resources/.projects/Ginseng_chamados/.syncinfo.snap differ 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 index 91d6c54..d6e36ca 100644 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.projects/Recrutamento e Seleção/.markers.snap and b/.metadata/.plugins/org.eclipse.core.resources/.projects/Recrutamento e Seleção/.markers.snap differ 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 index 91d6c54..d6e36ca 100644 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.projects/Recrutamento e Seleção/.syncinfo.snap and b/.metadata/.plugins/org.eclipse.core.resources/.projects/Recrutamento e Seleção/.syncinfo.snap differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/Transferência Ginseng/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/Transferência Ginseng/.markers.snap index 91d6c54..d6e36ca 100644 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.projects/Transferência Ginseng/.markers.snap and b/.metadata/.plugins/org.eclipse.core.resources/.projects/Transferência Ginseng/.markers.snap differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/Transferência Ginseng/.syncinfo.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/Transferência Ginseng/.syncinfo.snap index 91d6c54..d6e36ca 100644 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.projects/Transferência Ginseng/.syncinfo.snap and b/.metadata/.plugins/org.eclipse.core.resources/.projects/Transferência Ginseng/.syncinfo.snap differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap index 91d6c54..d6e36ca 100644 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap and b/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap differ 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 b992926..d0eee11 100644 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources and b/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources differ diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs index 6c69738..8eb7450 100644 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs +++ b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs @@ -1,3 +1,3 @@ eclipse.preferences.version=1 org.eclipse.debug.ui.PREF_LAUNCH_PERSPECTIVES=\r\n\r\n -preferredTargets=default\:default|default,org.eclipse.wst.jsdt.chromium.debug.ui.toggleTargetId\:default| +preferredTargets=default\:default|default,org.eclipse.wst.jsdt.chromium.debug.ui.toggleTargetId\:default|org.eclipse.wst.jsdt.chromium.debug.ui.toggleTargetId\:org.eclipse.wst.jsdt.chromium.debug.ui.toggleTargetId| diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs index 1c28954..b911eaa 100644 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs +++ b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs @@ -1,3 +1,3 @@ browsers=\r\n\r\n\r\n\r\n\r\n eclipse.preferences.version=1 -internalWebBrowserHistory=file\:///C\:/Users/andrey.cunha/eclipse-workspace.new/Ginseng_chamados/wcm/layout/TIginseng_layoutblocado/src/main/webapp/resources/images/icon.png|*|file\:/C\:/Users/andrey.cunha/eclipse-workspace.new/Ginseng_chamados/wcm/layout/TIginseng_layoutblocado/src/main/webapp/resources/images/icon.png|*|file\:///C\:/Users/andrey.cunha/eclipse-workspace.new/Ginseng_chamados/wcm/widget/widget_code_compras/src/main/webapp/resources/images/icon.png|*|file\:/C\:/Users/andrey.cunha/eclipse-workspace.new/Ginseng_chamados/wcm/widget/widget_code_compras/src/main/webapp/resources/images/icon.png|*| +internalWebBrowserHistory=file\:///C\:/Users/andrey.cunha/eclipse-workspace.new/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/resources/images/dev.png|*|file\:/C\:/Users/andrey.cunha/eclipse-workspace.new/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/resources/images/dev.png|*|file\:///C\:/Users/andrey.cunha/eclipse-workspace.new/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/resources/images/icon.png|*|file\:/C\:/Users/andrey.cunha/eclipse-workspace.new/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/resources/images/icon.png|*|file\:///C\:/Users/andrey.cunha/eclipse-workspace.new/Ginseng_chamados/wcm/layout/TIginseng_layoutblocado/src/main/webapp/resources/images/icon.png|*|file\:/C\:/Users/andrey.cunha/eclipse-workspace.new/Ginseng_chamados/wcm/layout/TIginseng_layoutblocado/src/main/webapp/resources/images/icon.png|*|file\:///C\:/Users/andrey.cunha/eclipse-workspace.new/Ginseng_chamados/wcm/widget/widget_code_compras/src/main/webapp/resources/images/icon.png|*|file\:/C\:/Users/andrey.cunha/eclipse-workspace.new/Ginseng_chamados/wcm/widget/widget_code_compras/src/main/webapp/resources/images/icon.png|*| diff --git a/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi b/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi index 1d2cc20..ed08513 100644 --- a/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi +++ b/.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 @@ -72,86 +72,86 @@ 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 categoryTag:General - + View categoryTag:General - + View categoryTag:Java - + View categoryTag:Java Browsing - - - - - + + + + + View categoryTag:General - + View categoryTag:Mylyn - + View categoryTag:General - + Fluig - + 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:Fluig @@ -159,7 +159,7 @@ - + persp.actionSet:org.eclipse.mylyn.doc.actionSet persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation @@ -191,1869 +191,1981 @@ 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 - - + + Minimized + View categoryTag:General active - - - - - Vertical - - View - categoryTag:General - + + + + Vertical + Terminal + + View + categoryTag:General - - Vertical - General - Minimized - - View - categoryTag:General - - - View - categoryTag:General - - - View - categoryTag:Fluig - - - View - categoryTag:Fluig - - - View - categoryTag:Fluig - - - 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 + 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.project + persp.newWizSC:org.eclipse.ui.wizards.new.folder + persp.newWizSC:org.eclipse.ui.wizards.new.file + persp.viewSC:org.eclipse.team.sync.views.SynchronizeView + persp.viewSC:org.eclipse.ui.navigator.ProjectExplorer + persp.viewSC:org.eclipse.ui.views.ContentOutline + persp.viewSC:org.eclipse.ui.views.TaskList + persp.viewSC:org.eclipse.ui.views.ProblemView + persp.actionSet:org.eclipse.team.ui.actionSet + persp.perspSC:org.eclipse.ui.resourcePerspective + persp.showIn:org.eclipse.ui.navigator.ProjectExplorer + persp.showIn:org.eclipse.team.ui.GenericHistoryView + persp.showIn:org.eclipse.team.sync.views.SynchronizeView + persp.viewSC:org.eclipse.mylyn.tasks.ui.views.repositories + persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView + + + + org.eclipse.e4.primaryNavigationStack + + View + categoryTag:Team + + + + + View + categoryTag:Mylyn + + + + + + + org.eclipse.e4.secondaryDataStack + General + + View + categoryTag:Team + + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:General - - + + View categoryTag:Help - + View categoryTag:General - + View categoryTag:Help - + View categoryTag:Help - + View categoryTag:General activeOnClose - + ViewMenu menuContribution:menu - + - + View categoryTag:Help - - + + org.eclipse.e4.primaryDataStack EditorStack - - + + Editor removeOnHide - org.eclipse.wst.html.core.htmlsource.source + com.fluig.wcm.eclipse.editor.ftl.FTLEditor - - + + Editor removeOnHide - org.eclipse.wst.html.core.htmlsource.source + com.fluig.wcm.eclipse.editor.ftl.FTLEditor - - - Editor - removeOnHide - org.eclipse.wst.jsdt.ui.CompilationUnitEditor - - - - Editor - removeOnHide - org.eclipse.wst.html.core.htmlsource.source - - - + + Editor removeOnHide com.totvs.tds.ecm.designer.bpmneditor - - - Editor - removeOnHide - org.eclipse.wst.html.core.htmlsource.source - - + 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 - + ViewMenu menuContribution:menu - + - + View categoryTag:Data Management - + 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 active - + ViewMenu menuContribution:menu - + - + View categoryTag:Fluig - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + 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 - + ViewMenu menuContribution:menu - + - + View categoryTag:General - + ViewMenu menuContribution:menu - + - - + + + + + View + categoryTag:Team + + ViewMenu + menuContribution:menu + + + + + + + + View + categoryTag:Team + + ViewMenu + menuContribution:menu + + + + + + + + View + categoryTag:Mylyn + + ViewMenu + menuContribution:menu + + + + + + + + View + categoryTag:Terminal + + ViewMenu + menuContribution:menu + + + + + toolbarSeparator - + - + Draggable - + - + toolbarSeparator - + - + Draggable - + toolbarSeparator - + - + Draggable - + 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 - + TrimStack Draggable - + TrimStack Draggable - - + + + + TrimStack Draggable - + TrimStack Draggable - + + TrimStack + 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: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: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: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:Data Management - + View categoryTag:General - + View categoryTag:JPA - + View categoryTag:JPA - + View categoryTag:JavaServer Faces - + View categoryTag:JavaServer Faces - + 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 @@ -2085,53 +2197,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:Fluig - + View categoryTag:Fluig - + View categoryTag:Fluig - + View categoryTag:General @@ -2139,1388 +2251,1388 @@ - - - - - + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log b/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log index eb2ef18..4cc00e3 100644 --- a/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log +++ b/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log @@ -183,3 +183,5 @@ 2026-02-23 10:29:20,949 [Worker-4: 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-02-24 10:35:56,560 [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. 2026-02-27 16:07:17,391 [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. +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. 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 e2c8614..b66df0e 100644 --- a/.metadata/.plugins/org.eclipse.wst.jsdt.core/indexes/savedIndexNames.txt +++ b/.metadata/.plugins/org.eclipse.wst.jsdt.core/indexes/savedIndexNames.txt @@ -1,22 +1,12 @@ INDEX VERSION 1.4+C:\Users\andrey.cunha\eclipse-workspace.new\.metadata\.plugins\org.eclipse.wst.jsdt.core\indexes -3963123655.index -3049976914.index -1889139231.index -2056597484.index -1252593962.index -160423874.index -3477032517.index -3528551409.index -17091598.index -4202715187.index 3974601650.index 1053469344.index -3371662347.index -3537614094.index -1338284093.index -1604404410.index -2070855566.index 1999126708.index -707046764.index -223663271.index -1180771715.index +2887418869.index +3963123655.index +7156200.index +2938933076.index +3537614094.index +1300356610.index +3826028853.index +3670622443.index diff --git a/.metadata/.plugins/org.eclipse.wst.jsdt.core/variablesAndContainers.dat b/.metadata/.plugins/org.eclipse.wst.jsdt.core/variablesAndContainers.dat index 139496c..9f83000 100644 Binary files a/.metadata/.plugins/org.eclipse.wst.jsdt.core/variablesAndContainers.dat and b/.metadata/.plugins/org.eclipse.wst.jsdt.core/variablesAndContainers.dat differ diff --git a/Auditoria/.project b/Auditoria/.project new file mode 100644 index 0000000..8e02de9 --- /dev/null +++ b/Auditoria/.project @@ -0,0 +1,18 @@ + + + Auditoria + + + + + + org.eclipse.wst.validation.validationbuilder + + + + + + org.eclipse.wst.jsdt.core.jsNature + com.totvs.tds.ecm.designer.nature + + diff --git a/Auditoria/datasets/ds_lojas_api.js b/Auditoria/datasets/ds_lojas_api.js new file mode 100644 index 0000000..000ba67 --- /dev/null +++ b/Auditoria/datasets/ds_lojas_api.js @@ -0,0 +1,118 @@ +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"); + + try { + var clientService = fluigAPI.getAuthorizeClientService(); + var data = { + companyId: String(getValue("WKCompany") || "1"), + serviceCode: "GINSENG API", + endpoint: "/base_pdvs", + method: "get", + timeoutService: "60000", + params: {} + }; + + var vo = clientService.invoke(JSON.stringify(data)); + var response = String(vo.getResult() || ""); + var obj = JSON.parse(response); + var list = (obj && obj.data && obj.data.length) ? obj.data : []; + + if (!list.length) { + dataset.addRow(["", "Sem lojas retornadas", "", "", "", "", "", "", "", "", ""]); + return dataset; + } + + var filter = getSearchFilter(constraints); + for (var i = 0; i < list.length; i++) { + var item = list[i] || {}; + var pdv = clean(item.PDV); + var loja = clean(item["PDV DESC"] || item.DESCRICAO); + var responsavel = clean(item.GESTAO); + var regional = clean(item.SUPERVISOR || item["REGIAO 2"] || item.REGIAO); + var uf = clean(item.UF || item["UF 2"]); + var cidade = clean(item.CIDADE); + var status = clean(item.STATUS); + var canal = clean(item.CANAL); + var id = clean(item.id); + var loginLoja = pdv ? (pdv + ".ginseng") : ""; + var colleagueId = resolveColleagueId(loginLoja); + + if (!matchesFilter(filter, [pdv, loja, responsavel, regional, uf, cidade, status, canal, loginLoja, colleagueId])) { + continue; + } + + dataset.addRow([ + pdv, + loja, + responsavel, + regional, + uf, + cidade, + status, + canal, + id, + loginLoja, + colleagueId + ]); + } + } catch (e) { + dataset = DatasetBuilder.newDataset(); + dataset.addColumn("ERRO"); + dataset.addRow([String(e)]); + } + + return dataset; +} + +function resolveColleagueId(login) { + try { + var c1 = DatasetFactory.createConstraint("login", login, login, ConstraintType.MUST); + var c2 = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST); + var ds = DatasetFactory.getDataset("colleague", null, [c1, c2], null); + if (ds && ds.rowsCount > 0) { + return clean(ds.getValue(0, "colleaguePK.colleagueId")); + } + } catch (e) {} + return ""; +} + +function getSearchFilter(constraints) { + if (!constraints || !constraints.length) return ""; + for (var i = 0; i < constraints.length; i++) { + var c = constraints[i]; + var field = String(c.fieldName || "").toUpperCase(); + if (field === "SEARCH" || field === "LOJA" || field === "PDV") { + return normalizeSearch(c.initialValue); + } + } + return ""; +} + +function matchesFilter(filter, values) { + if (!filter) return true; + for (var i = 0; i < values.length; i++) { + if (normalizeSearch(values[i]).indexOf(filter) > -1) return true; + } + return false; +} + +function normalizeSearch(text) { + var t = clean(text).toUpperCase(); + t = t.replace(/[%*_]/g, ""); + return t; +} + +function clean(value) { + return String(value || "").trim(); +} diff --git a/Auditoria/forms/auditoria_prototipo/.metadata b/Auditoria/forms/auditoria_prototipo/.metadata new file mode 100644 index 0000000..535fafc Binary files /dev/null and b/Auditoria/forms/auditoria_prototipo/.metadata differ diff --git a/Auditoria/forms/auditoria_prototipo/assets/css/css/checklist.css b/Auditoria/forms/auditoria_prototipo/assets/css/css/checklist.css new file mode 100644 index 0000000..504e87b --- /dev/null +++ b/Auditoria/forms/auditoria_prototipo/assets/css/css/checklist.css @@ -0,0 +1,585 @@ + body { background: #ffffff; } + .audit-shell { + background: #f4f8fd; + border: 1px solid #dbe4ee; + border-radius: 14px; + box-shadow: 0 4px 14px rgba(15, 23, 42, 0.06); + padding: 10px 10px 14px 10px; + margin: 14px auto 0 auto; + max-width: 1140px; + } + .audit-section { + border: 1px solid #e2e8f0; + border-radius: 14px; + background: #ffffff; + padding: 12px; + margin-bottom: 10px; + box-shadow: 0 2px 6px rgba(15, 23, 42, 0.05); + } + h1.audit-main-title { + margin: 2px 0 10px 0; + font-size: 18px !important; + line-height: 1.2; + font-weight: 700 !important; + color: #ffffff !important; + background: #0b556b; + border-radius: 10px; + padding: 8px 12px; + } + .section-title { + margin: 0 0 10px 0; + font-size: 20px; + font-weight: 700; + color: #1e293b; + } + .audit-status { + display: none; + } + .progress-section { + padding: 5px 10px 5px 10px; + margin-top: 2px; + } + .progress-section .section-title { + font-size: 16px; + margin-bottom: 6px; + } + .audit-context-card .section-title { + font-size: 17px; + } + .progress-inline { + display: grid; + grid-template-columns: 1fr auto; + gap: 16px; + align-items: center; + } + .progress-track { + width: 100%; + height: 5px; + border-radius: 999px; + background: #e6ebf2; + overflow: hidden; + } + .progress-fill { + width: 0%; + height: 100%; + background: linear-gradient(90deg, #3ea9c8 0%, #3ea9c8 100%); + transition: width .18s ease-in-out; + } + .progress-percent { + font-size: 14px; + line-height: 1; + color: #0f172a; + font-weight: 700; + min-width: 42px; + text-align: right; + } + .progress-meta { + margin-top: 3px; + font-size: 9px; + color: #52637b; + font-weight: 600; + } + .instruction-section { + display: block; + background: #ffffff; + } + .intro-data-section { + padding: 0; + overflow: hidden; + background: linear-gradient(90deg, #f4f8fd 0%, #edf3fa 100%); + } + .intro-data-section .instruction-section { + padding: 12px; + border-radius: 14px 14px 0 0; + background: #ffffff; + } + .intro-divider { + height: 1px; + background: #dfe7f0; + } + .instruction-head { + display: flex; + align-items: center; + gap: 10px; + margin-bottom: 6px; + } + .instruction-icon { + width: 34px; + height: 34px; + border-radius: 999px; + background: #3ea9c8; + color: #fff; + font-size: 22px; + font-weight: 700; + line-height: 34px; + text-align: center; + } + .instruction-title { + font-size: 16px; + color: #1f2f46; + font-weight: 700; + margin-bottom: 0; + } + .instruction-steps { + display: grid; + grid-template-columns: repeat(3, minmax(160px, 1fr)); + gap: 6px 16px; + font-size: 10px; + color: #334155; + line-height: 1.3; + } + .instruction-steps span { + display: inline-block; + border: 1px solid #b9d4ea; + background: #f4f9ff; + color: #0f3f66; + border-radius: 999px; + padding: 4px 9px; + width: fit-content; + } + .status-pill { + background: #eef5fb; + border: 1px solid #d9e8f6; + color: #0b556b; + border-radius: 999px; + padding: 6px 10px; + font-size: 12px; + font-weight: 600; + } + .audit-context-card { + background: #ffffff; + padding: 12px; + border-radius: 0 0 14px 14px; + } + .audit-context-row > div { + margin-bottom: 8px; + } + .audit-label { + font-size: 12px; + letter-spacing: 0.3px; + color: #16486a; + margin-bottom: 4px; + font-weight: 700; + } + .label-icon { opacity: 0.8; margin-right: 4px; } + .audit-input { + height: 32px; + font-size: 12px; + border-color: #c9d7e7; + border-radius: 7px; + padding: 5px 9px; + } + .audit-input:focus { + border-color: #74a5d3; + box-shadow: 0 0 0 2px rgba(34, 93, 143, 0.12); + } + .audit-card { margin-top: 12px; } + .audit-score { font-size: 22px; font-weight: 700; } + .audit-score small { font-size: 12px; font-weight: 400; color: #7f8c8d; display: block; } + #pilaresContainer { + display: grid; + grid-template-columns: repeat(4, minmax(220px, 1fr)); + gap: 14px; + background: #f4f8fd; + border: 0; + border-radius: 10px; + padding: 8px 12px 10px 12px; + } + h2.section-title.pilares-title { + margin-top: 4px; + margin-bottom: 10px; + font-size: 17px !important; + } + .audit-send-wrap { + margin-top: 10px; + text-align: right; + padding: 10px 12px 2px 12px; + border-top: 1px solid #dbe5f0; + } + .audit-send-btn { + min-width: 120px; + height: 38px; + border-radius: 8px; + font-size: 14px; + font-weight: 700; + background: #0b556b; + border-color: #0b556b; + } + .audit-send-btn:hover, + .audit-send-btn:focus { + background: #0a4b5f; + border-color: #0a4b5f; + } + .pilar-panel { + border: 1px solid #d6e1ee; + border-radius: 12px; + background: #ffffff; + padding: 8px; + min-height: 108px; + box-shadow: 0 6px 14px rgba(15, 23, 42, 0.08); + transition: box-shadow .18s ease, transform .18s ease; + } + .pilar-panel:hover { + box-shadow: 0 10px 20px rgba(15, 23, 42, 0.12); + transform: translateY(-1px); + } + .pilar-panel.is-open { + grid-column: 1 / -1; + box-shadow: 0 12px 24px rgba(15, 23, 42, 0.14); + } + .pilar-summary-card { + grid-column: span 3; + border: 1px solid #d6e1ee; + border-radius: 12px; + background: #ffffff; + padding: 10px 12px; + box-shadow: 0 6px 14px rgba(15, 23, 42, 0.08); + } + .summary-title { + font-size: 13px; + font-weight: 700; + color: #000000; + margin-bottom: 8px; + } + .summary-item { + font-size: 12px; + line-height: 1.45; + color: #000000; + margin-bottom: 6px; + } + .summary-item:last-child { + margin-bottom: 0; + } + .summary-name { + color: #000000; + font-weight: 700; + } + .pilar-head { + background: #ffffff; + border: 0; + padding: 6px; + display: grid; + gap: 6px; + cursor: pointer; + border-radius: 10px; + transition: background .15s ease, border-color .15s ease, box-shadow .15s ease, transform .15s ease; + } + .pilar-head:hover { + background: #f8fbff; + box-shadow: none; + transform: none; + } + .pilar-head.is-open { + background: #f4f8fd; + box-shadow: none; + } + .pilar-title-row { + display: flex; + align-items: center; + gap: 10px; + } + .pilar-state-dot { + width: 18px; + height: 18px; + border-radius: 999px; + background: #94a3b8; + border: 1px solid rgba(148, 163, 184, 0.25); + display: inline-flex; + align-items: center; + justify-content: center; + color: #ffffff; + font-size: 11px; + font-weight: 700; + line-height: 1; + } + .pilar-state-dot.state-pending { background: #dc2626; border-color: rgba(220, 38, 38, 0.4); } + .pilar-state-dot.state-progress { background: #d18a2f; border-color: rgba(209, 138, 47, 0.35); } + .pilar-state-dot.state-done { background: #2f9d78; border-color: rgba(47, 157, 120, 0.35); } + .pilar-title { + font-size: 13px; + font-weight: 700; + color: #000000; + letter-spacing: 0.2px; + } + .pilar-photo-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + color: #243549; + } + .pilar-photo-count { + font-size: 10px; + font-weight: 700; + color: #000000; + } + .pilar-missing { + font-size: 10px; + color: #000000; + font-weight: 600; + } + .pilar-mini-track { + height: 5px; + border-radius: 999px; + background: #e4eaf1; + overflow: hidden; + } + .pilar-mini-fill { + display: block; + width: 0%; + height: 100%; + border-radius: inherit; + background: #5d8fbe; + transition: width .18s ease; + } + .pilar-foot { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + } + .pilar-count { + font-size: 10px; + color: #000000; + font-weight: 600; + } + .pilar-open-cta { + font-size: 10px; + color: #000000; + font-weight: 700; + } + .pilar-body { padding: 8px 0 0 0; } + .audit-row { + border: 1px solid #d4e0ee; + border-radius: 12px; + padding: 10px; + margin-bottom: 8px; + background: #f9fcff; + } + .audit-row-main { + display: flex; + flex-direction: column; + gap: 8px; + } + .audit-row-top { + display: grid; + grid-template-columns: 1fr 1.3fr; + gap: 10px; + align-items: start; + } + .audit-row[data-max-fotos="1"] .audit-row-top, + .audit-row[data-max-fotos="2"] .audit-row-top { + grid-template-columns: 1fr; + } + .audit-info { + min-width: 0; + } + .indicador-cell { font-weight: 700; color: #143653; font-size: 15px; line-height: 1.25; } + .indicador-help { + margin-top: 5px; + font-size: 12px; + color: #5c6f82; + line-height: 1.35; + background: #f7fbff; + border: 1px solid #dce8f5; + border-radius: 8px; + padding: 7px 9px; + } + .indicador-help ul { + margin: 0; + padding-left: 18px; + } + .indicador-help li { + margin: 2px 0; + } + .indicador-help .indicador-group { + list-style: none; + margin-top: 6px; + margin-left: -18px; + font-weight: 700; + color: #36597b; + } + .meta-grid { + display: grid; + grid-template-columns: repeat(5, minmax(100px, 1fr)); + gap: 10px; + } + .meta-box { + border: 1px solid #d7e2ef; + border-radius: 10px; + background: #fff; + padding: 8px 10px; + min-height: 62px; + } + .meta-label { font-size: 11px; color: #64748b; text-transform: uppercase; } + .meta-value { font-size: 20px; color: #1f2937; margin-top: 4px; font-weight: 600; } + .meta-value .form-control { + font-size: 14px; + height: 34px; + padding: 4px 10px; + } + .anexo-wrap, .resultado-wrap, .just-wrap { margin-top: 0; } + .penalidade-badge { + font-size: 10px !important; + font-weight: 700; + padding: 2px 8px !important; + border-radius: 999px; + letter-spacing: 0.2px; + text-transform: uppercase; + } + .penalidade-badge.label-danger { background: #f7dada; color: #9f2d2d; } + .penalidade-badge.label-warning { background: #fff0c7; color: #8a5a00; } + .penalidade-badge.label-info { background: #dceefe; color: #1f5f9b; } + .penalidade-badge.label-success { background: #dff5e4; color: #1f7a3d; } + .penalidade-badge.label-default { background: #eceff3; color: #5f6b7a; } + .anexos-cell { + background: #edf4fb; + border: 1px solid #cfe0f3; + border-radius: 10px; + padding: 8px; + } + .anexo-auto-hint { font-size: 11px; color: #5f7d9a; margin-top: 5px; } + .anexo-progress { + margin-top: 7px; + font-size: 12px; + color: #2d4f70; + font-weight: 600; + } + .anexo-progress-count { + display: inline-block; + min-width: 40px; + text-align: center; + border-radius: 999px; + background: #d9e9fa; + color: #1d4f7c; + padding: 1px 8px; + margin-right: 4px; + } + .anexo-multi-list { + display: grid; + grid-template-columns: repeat(2, minmax(220px, 1fr)); + gap: 7px; + } + .audit-row[data-max-fotos="1"] .anexo-multi-list, + .audit-row[data-max-fotos="2"] .anexo-multi-list { + grid-template-columns: 1fr; + } + .anexo-slot { + background: #ffffff; + border: 1px solid #c9dbef; + border-radius: 8px; + padding: 5px; + } + .audit-row[data-max-fotos="1"] .anexo-slot, + .audit-row[data-max-fotos="2"] .anexo-slot { + max-width: 100%; + } + .anexo-slot.slot-filled { + border-color: #8fc1a3; + box-shadow: inset 0 0 0 1px rgba(79, 161, 109, 0.2); + } + .anexo-slot.extra-slot { display: none; } + .anexo-multi-list.expanded .anexo-slot.extra-slot { display: block; } + .anexo-slot-label { + font-size: 11px; + color: #4b5f74; + margin-bottom: 3px; + font-weight: 600; + text-transform: uppercase; + } + .anexo-toggle-wrap { + margin-top: 8px; + text-align: right; + } + .anexo-toggle { + font-size: 12px; + font-weight: 600; + color: #24557d !important; + border-color: #b5cbe3; + background: #f4f8fd; + padding: 3px 10px; + } + .anexos-cell .fluigFormAttachmentComponent { + width: 100%; + } + .anexos-cell .fluigFormAttachmentComponent input { + height: 34px; + border-color: #c7d8ec; + background: #fff; + } + .anexos-cell .fluigFormAttachmentComponent .btn { + height: 34px !important; + min-width: 40px; + } + .just-wrap input { + border-radius: 10px; + } + .audit-row-target { background: #fff8e6 !important; } + .nc-box { + border: 1px solid #f5d0d0; + background: #fff6f6; + border-radius: 10px; + padding: 10px 12px; + margin-top: 10px; + } + .nc-title { + font-weight: 700; + color: #9f2d2d; + margin-bottom: 6px; + } + .nc-list { + display: flex; + flex-wrap: wrap; + gap: 8px; + } + .nc-item { + background: #fff; + border: 1px solid #f1b7b7; + color: #7f1d1d; + border-radius: 999px; + padding: 4px 10px; + font-size: 12px; + cursor: pointer; + } + .anexo-view { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; } + .anexo-thumb-inline { + width: 34px; + height: 34px; + object-fit: cover; + border: 1px solid #ddd; + border-radius: 4px; + background: #fff; + } + .anexo-file { + font-size: 11px; + max-width: 170px; + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + border: 1px solid #e0e0e0; + border-radius: 4px; + padding: 4px 6px; + background: #fafafa; + } + .anexo-text { + background: #fff; + font-size: 12px; + } + @media (max-width: 900px) { + .section-title { font-size: 22px; } + .progress-percent { font-size: 14px; min-width: 38px; } + .progress-meta { font-size: 14px; } + .instruction-title { font-size: 16px; } + .instruction-steps { grid-template-columns: 1fr; font-size: 14px; } + .audit-label { font-size: 13px; } + .audit-input { height: 40px; font-size: 15px; } + .audit-row-top { grid-template-columns: 1fr; } + .meta-grid { grid-template-columns: repeat(2, minmax(100px, 1fr)); } + .anexo-multi-list { grid-template-columns: 1fr; } + #pilaresContainer { grid-template-columns: repeat(2, minmax(180px, 1fr)); } + .pilar-panel.is-open { grid-column: auto; } + .pilar-summary-card { grid-column: span 2; } + .audit-send-wrap { padding: 8px 0 0 0; border-top: 0; } + .audit-send-btn { width: 100%; } + } diff --git a/Auditoria/forms/auditoria_prototipo/assets/js/checklist.js b/Auditoria/forms/auditoria_prototipo/assets/js/checklist.js new file mode 100644 index 0000000..275df1f --- /dev/null +++ b/Auditoria/forms/auditoria_prototipo/assets/js/checklist.js @@ -0,0 +1,1100 @@ + var INDICADORES = [ + { pilar: "PILAR ARQUITETURA", indicador: "Fotos da Fachada (letreiro luminoso com acessibilidade)", penalidade: "GRAVISSIMA", peso: 4, maxFotos: 1 }, + { pilar: "PILAR ARQUITETURA", indicador: "Fotos de todos equipamentos", detalhe: "Mobiliario, gondolas, tela digital, caixa, mesas, cavalete, baianas e coringa.", penalidade: "GRAVE", peso: 3, maxFotos: 8 }, + { pilar: "PILAR ARQUITETURA", indicador: "Fotos da iluminacao (luzes da vitrine e interior da loja)", penalidade: "GRAVE", peso: 3, maxFotos: 2 }, + { pilar: "PILAR ARQUITETURA", indicador: "Foto do coletor de embalagem (Botirecicla)", penalidade: "MEDIA", peso: 2, maxFotos: 1 }, + { pilar: "PILAR ARQUITETURA", indicador: "Fotos dos mobshops da loja", penalidade: "MEDIA", peso: 2, maxFotos: 2 }, + + { pilar: "PILAR VISUAL MERCHANDISING", indicador: "Foto da vitrine (identificando todas comunicacoes)", penalidade: "GRAVE", peso: 3, maxFotos: 1 }, + { pilar: "PILAR VISUAL MERCHANDISING", indicador: "Fotos enquadrando cada sessao", detalhe: "Feminina, masculina, infantil, cuidados, cabelos, presentes e maquiagem.", penalidade: "GRAVE", peso: 3, maxFotos: 7 }, + { pilar: "PILAR VISUAL MERCHANDISING", indicador: "Fotos das comunicacoes destaques e storytelling", detalhe: "Feminina, masculina e cuidados.", penalidade: "GRAVE", peso: 3, maxFotos: 3 }, + { pilar: "PILAR VISUAL MERCHANDISING", indicador: "Foto das embalagens", penalidade: "MEDIA", peso: 2, maxFotos: 1 }, + { pilar: "PILAR VISUAL MERCHANDISING", indicador: "Foto do QR-Code de politica de privacidade", penalidade: "GRAVISSIMA", peso: 4, maxFotos: 1 }, + { pilar: "PILAR VISUAL MERCHANDISING", indicador: "Foto do codigo de defesa do consumidor", penalidade: "GRAVISSIMA", peso: 4, maxFotos: 1 }, + { pilar: "PILAR VISUAL MERCHANDISING", indicador: "Foto do verso da tela digital", penalidade: "GRAVE", peso: 3, maxFotos: 1 }, + + { pilar: "PILAR EXPOSIÇÃO", indicador: "Fotos das datas de validade dos produtos", detalheBullets: [ + "# Produtos O Boticario", + "Cooffe Woman", + "Linha Casa 214", + "5 itens da linha Botik", + "Dr. Botica", + "Portinari", + "Celebre", + "Floratta", + "Arbo", + "Shampoo e Condicionador - Linha Match", + "5 provadores de Make B", + "5 provadores da linha Intense", + "# Produtos QDB?", + "2 itens da linha Instamatte", + "Protetor solar facial", + "Corretivo liquido", + "Mascara para cilios", + "10 batons hidratantes", + "Shampoo e Condicionador Au.migos" + ], penalidade: "GRAVISSIMA", peso: 4, maxFotos: 22 }, + { pilar: "PILAR EXPOSIÇÃO", indicador: "Foto dos aplicadores descartaveis", penalidade: "MEDIA", peso: 2, maxFotos: 1 }, + { pilar: "PILAR EXPOSIÇÃO", indicador: "Foto da exposição da sessão Make.B", penalidade: "GRAVE", peso: 3, maxFotos: 1 }, + { pilar: "PILAR EXPOSIÇÃO", indicador: "Foto da exposição da sessão Intense", penalidade: "GRAVE", peso: 3, maxFotos: 1 }, + + { pilar: "PILAR UNIFORME", indicador: "Fotos dos uniformes (do pescoco para baixo)", penalidade: "GRAVE", peso: 3, maxFotos: 2 }, + { pilar: "PILAR INFORMATIVA", indicador: "Foto do espaco onde ficam os produtos destinados a logistica", penalidade: "NAO PONTUA", peso: 0, maxFotos: 1 } + ]; + + var FATORES = { + "CONFORME": 1, + "NAO_CONFORME": 0 + }; + var ALLOWED_EXT = { "pdf": true, "jpg": true, "jpeg": true, "png": true }; + var REQUIRE_ATTACHMENT = false; // mude para true para voltar a exigir anexo + var CURRENT_PROFILE = "LOJA"; + var KNOWN_ATTACHMENT_KEYS = {}; + // Ajuste os codigos de atividade do seu processo aqui. + var FLOW_CONFIG = { + headerOnlyStates: [4], + lojaStates: [0, 5, 9], + analistaStates: [4] + }; + + function badgeClass(penalidade) { + if (penalidade === "GRAVISSIMA") return "danger"; + if (penalidade === "GRAVE") return "warning"; + if (penalidade === "MEDIA") return "info"; + if (penalidade === "LEVE") return "default"; + return "primary"; + } + + function getClassificacao(score) { + if (score >= 90) return "Excelente"; + if (score >= 80) return "Bom"; + if (score >= 70) return "Regular"; + return "Critico"; + } + + function toTitleCase(text) { + var s = String(text || "").toLowerCase().trim(); + if (!s) return ""; + var words = s.split(/\s+/); + for (var i = 0; i < words.length; i++) { + var w = words[i]; + if (!w) continue; + words[i] = w.charAt(0).toUpperCase() + w.slice(1); + } + return words.join(" "); + } + + function indicadorCountLabel(n) { + return n === 1 ? "1 indicador" : (n + " indicadores"); + } + + function renderDetalhe(item) { + if (Array.isArray(item.detalheBullets) && item.detalheBullets.length) { + var html = "
    "; + for (var i = 0; i < item.detalheBullets.length; i++) { + var txt = String(item.detalheBullets[i] || ""); + if (txt.indexOf("# ") === 0) { + html += "
  • " + escapeHtml(txt.substring(2)) + "
  • "; + } else { + html += "
  • " + escapeHtml(txt) + "
  • "; + } + } + html += "
"; + return html; + } + if (item.detalhe) { + return "
" + escapeHtml(item.detalhe) + "
"; + } + return ""; + } + + function getResumoPilaresHtml() { + var rows = [ + { nome: "Arquitetura", texto: "Fachada da loja e estrutura física, evidenciando marca, iluminação, acessibilidade, equipamentos e estado geral do ambiente." }, + { nome: "Visual Merchandising", texto: "Vitrine e área interna com comunicação vigente, padrão visual, organização, embalagens corretas e bom estado dos materiais." }, + { nome: "Exposição", texto: "Exposição de produtos em vitrine e interior, com precificação, validade visível, testes, preenchimento de prateleiras e uso de aplicadores." }, + { nome: "Uniforme", texto: "Equipe em atendimento com uso correto de uniforme, calçados e acessórios conforme padrão estabelecido." }, + { nome: "Informativa", texto: "Ambiente com foco em informações operacionais, logística reversa, armazenamento de materiais e comunicação de serviços." } + ]; + var html = "
Guia dos Pilares
"; + for (var i = 0; i < rows.length; i++) { + html += "
" + escapeHtml(rows[i].nome) + ": " + escapeHtml(rows[i].texto) + "
"; + } + html += "
"; + return html; + } + + function buildAnexoInputs(index, maxFotos) { + var total = parseInt(maxFotos, 10); + if (isNaN(total) || total < 1) total = 1; + var html = "
"; + for (var i = 1; i <= total; i++) { + var anexoId = "anexo_" + index + "_" + i; + var anexoFileName = "EVID_" + index + "_F" + i; + var extraClass = i > 2 ? " extra-slot" : ""; + html += "" + + "
" + + "
Foto " + i + " de " + total + "
" + + "" + + "
"; + } + html += "
"; + if (total > 2) { + html += "
"; + } + return html; + } + + function buildAuditRow(item, index) { + var selectResultado = "" + + ""; + var maxFotos = parseInt(item.maxFotos, 10); + if (isNaN(maxFotos) || maxFotos < 1) maxFotos = 1; + var anexosHtml = buildAnexoInputs(index, maxFotos); + + return "" + + "
" + + "
" + + "
" + + "
" + + "
" + escapeHtml(item.indicador) + "
" + + renderDetalhe(item) + + "
" + + "
" + + anexosHtml + + "
0/" + maxFotos + " fotos enviadas
" + + "
Use os botoes de upload/visualizar em cada foto.
" + + "
" + + "
" + + "
" + + "
Penalidade
Aguardando
" + + "
Peso
" + item.peso + "
" + + "
Fator
-
" + + "
Pontuacao
0
" + + "
Resultado
" + selectResultado + "
" + + "
" + + "
" + + "
" + + "
"; + } + + function montaTabela() { + var grupos = {}; + for (var i = 0; i < INDICADORES.length; i++) { + var item = INDICADORES[i]; + if (!grupos[item.pilar]) grupos[item.pilar] = []; + grupos[item.pilar].push(item); + } + + var pilares = Object.keys(grupos); + var html = ""; + var rowIndex = 1; + for (var p = 0; p < pilares.length; p++) { + var nomePilar = pilares[p]; + var linhas = grupos[nomePilar]; + var openStyle = " style='display:none;'"; + var totalFotosPilar = 0; + for (var t = 0; t < linhas.length; t++) { + totalFotosPilar += parseInt(linhas[t].maxFotos, 10) || 0; + } + html += "
"; + html += "
"; + html += "
✕" + escapeHtml(toTitleCase(nomePilar.replace("PILAR ", ""))) + "
"; + html += "
0/" + totalFotosPilar + " fotos" + totalFotosPilar + " faltando
"; + html += "
"; + html += "
" + indicadorCountLabel(linhas.length) + "Abrir Pilar →
"; + html += "
"; + html += "
"; + for (var r = 0; r < linhas.length; r++) { + html += buildAuditRow(linhas[r], rowIndex); + rowIndex++; + } + html += "
"; + } + html += getResumoPilaresHtml(); + + $("#pilaresContainer").html(html); + } + + function getExt(fileName) { + var n = (fileName || "").toLowerCase(); + var pos = n.lastIndexOf("."); + return pos > -1 ? n.substring(pos + 1) : ""; + } + + function escapeHtml(text) { + return String(text || "") + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); + } + + function isImageExt(fileName) { + var ext = getExt(fileName); + return ext === "jpg" || ext === "jpeg" || ext === "png"; + } + + function getStateFromUrl(url) { + var u = String(url || ""); + if (!u) return ""; + var patterns = [ + /(?:\?|&)WKNumState=(\d+)/i, + /(?:\?|&)WKCurrentState=(\d+)/i, + /(?:\?|&)WKCurrentMovto=(\d+)/i, + /(?:\?|&)state=(\d+)/i, + /(?:\?|&)stateSequence=(\d+)/i, + /(?:\?|&)processState=(\d+)/i, + /(?:\?|&)movementSequence=(\d+)/i, + /(?:\?|&)choosedState=(\d+)/i, + /(?:\?|&)numState=(\d+)/i + ]; + for (var i = 0; i < patterns.length; i++) { + var m = u.match(patterns[i]); + if (m && m[1]) return m[1]; + } + return ""; + } + + function getCurrentState() { + var candidates = []; + try { + candidates.push(window.WKNumState); + candidates.push(window.WKCurrentState); + candidates.push(window.WKCurrentMovto); + candidates.push($("input[name='WKNumState']").val()); + candidates.push($("input[name='WKCurrentState']").val()); + candidates.push($("input[name='WKCurrentMovto']").val()); + candidates.push($("input[name='WKCurrentMovementSequence']").val()); + candidates.push($("input[name='numState']").val()); + candidates.push($("input[name='stateSequence']").val()); + candidates.push($("input[name='processState']").val()); + candidates.push($("#WKNumState").val()); + candidates.push($("#WKCurrentState").val()); + candidates.push($("#WKCurrentMovto").val()); + candidates.push($("#numState").val()); + candidates.push($("#stateSequence").val()); + candidates.push(getStateFromUrl(window.location && window.location.href)); + } catch (e) {} + + try { + if (window.parent) { + candidates.push(window.parent.WKNumState); + candidates.push(window.parent.WKCurrentState); + candidates.push(window.parent.WKCurrentMovto); + if (window.parent.$) { + candidates.push(window.parent.$("input[name='WKNumState']").val()); + candidates.push(window.parent.$("input[name='WKCurrentState']").val()); + candidates.push(window.parent.$("input[name='WKCurrentMovto']").val()); + candidates.push(window.parent.$("input[name='WKCurrentMovementSequence']").val()); + candidates.push(window.parent.$("input[name='numState']").val()); + candidates.push(window.parent.$("input[name='stateSequence']").val()); + candidates.push(window.parent.$("input[name='processState']").val()); + candidates.push(window.parent.$("#WKNumState").val()); + candidates.push(window.parent.$("#WKCurrentState").val()); + candidates.push(window.parent.$("#WKCurrentMovto").val()); + candidates.push(window.parent.$("#numState").val()); + candidates.push(window.parent.$("#stateSequence").val()); + } + candidates.push(getStateFromUrl(window.parent.location && window.parent.location.href)); + } + } catch (e2) {} + + for (var j = 0; j < candidates.length; j++) { + var parsed = parseInt(String(candidates[j] || "").trim(), 10); + if (!isNaN(parsed) && parsed > 0) return parsed; + } + return 0; + } + + function resolveProfileByState(state) { + for (var i = 0; i < FLOW_CONFIG.analistaStates.length; i++) { + if (FLOW_CONFIG.analistaStates[i] === state) return "ANALISTA"; + } + for (var j = 0; j < FLOW_CONFIG.lojaStates.length; j++) { + if (FLOW_CONFIG.lojaStates[j] === state) return "LOJA"; + } + try { + var pageText = ( + $("h1").first().text() + || $(".page-header h1").first().text() + || (window.parent && window.parent.$ ? window.parent.$("h1").first().text() : "") + || "" + ).toLowerCase(); + if (pageText.indexOf("validar planograma") > -1) return "ANALISTA"; + } catch (e) {} + return "LOJA"; + } + + function getCurrentUserCode() { + function readValueBySelectors(selectors, root) { + if (!root || !root.$) return ""; + for (var i = 0; i < selectors.length; i++) { + try { + var value = String(root.$(selectors[i]).val() || "").trim(); + if (value) return value; + } catch (e) {} + } + return ""; + } + + var selectors = [ + "input[name='WKUser']", + "#WKUser", + "input[name='wkuser']", + "#wkuser" + ]; + + var user = readValueBySelectors(selectors, window); + if (user) return user; + + user = readValueBySelectors(selectors, window.parent); + if (user) return user; + + try { + if (window.WCMAPI && window.WCMAPI.userCode) { + return String(window.WCMAPI.userCode).trim(); + } + } catch (e2) {} + try { + if (window.parent && window.parent.WCMAPI && window.parent.WCMAPI.userCode) { + return String(window.parent.WCMAPI.userCode).trim(); + } + } catch (e3) {} + return ""; + } + + function isNumericUserCode(value) { + return /^\d+$/.test(String(value || "").trim()); + } + + function resolveLoginFromColleagueId(colleagueId, callback) { + var id = String(colleagueId || "").trim(); + if (!id || !isNumericUserCode(id) || typeof $ === "undefined" || !$.ajax) { + callback(id); + return; + } + + $.ajax({ + url: "/api/public/ecm/dataset/datasets", + method: "POST", + contentType: "application/json", + data: JSON.stringify({ + name: "colleague", + fields: ["login"], + constraints: [ + { _field: "colleaguePK.colleagueId", _initialValue: id, _finalValue: id, _type: 1 }, + { _field: "active", _initialValue: "true", _finalValue: "true", _type: 1 } + ], + order: [] + }) + }).done(function (res) { + try { + var rows = (res && res.content && res.content.values) ? res.content.values : []; + var login = rows.length > 0 ? String(rows[0].login || "").trim() : ""; + callback(login || id); + } catch (e) { + callback(id); + } + }).fail(function () { + callback(id); + }); + } + + function fillAuditorFromLoggedUser(callback) { + var userCode = getCurrentUserCode(); + if (!userCode) { + if (callback) callback(""); + return; + } + + function applyUser(userValue) { + var finalUser = String(userValue || userCode || "").trim(); + if (!finalUser) { + if (callback) callback(""); + return; + } + var $auditor = $("#auditor"); + if (!String($auditor.val() || "").trim()) { + $auditor.val(finalUser); + } + $auditor.prop("readonly", true); + if (callback) callback(finalUser); + } + + if (isNumericUserCode(userCode)) { + resolveLoginFromColleagueId(userCode, applyUser); + return; + } + + applyUser(userCode); + } + + function getCurrentUserLogin(callback) { + var userCode = getCurrentUserCode(); + if (!userCode) { + callback(""); + return; + } + if (!isNumericUserCode(userCode)) { + callback(userCode); + return; + } + resolveLoginFromColleagueId(userCode, callback); + } + + function getNaoConformes() { + var list = []; + $(".audit-row").each(function () { + var $tr = $(this); + if ($tr.find(".resultado").val() === "NAO_CONFORME") { + list.push({ + pilar: $tr.attr("data-pilar") || "", + indicador: $tr.attr("data-indicador") || "" + }); + } + }); + return list; + } + + function renderNaoConformeResumo() { + var list = getNaoConformes(); + var $box = $("#naoConformeBox"); + var $list = $("#naoConformeList"); + $list.empty(); + if (!list.length) { + $box.hide(); + return; + } + for (var i = 0; i < list.length; i++) { + var item = list[i] || {}; + var pilar = item.pilar || ""; + var indicador = item.indicador || ""; + var texto = pilar ? (pilar + " - " + indicador) : indicador; + $list.append( + "" + ); + } + $box.show(); + } + + function applyProfileUI() { + var currentState = getCurrentState(); + var isAnalista = CURRENT_PROFILE === "ANALISTA"; + var isHeaderOnly = FLOW_CONFIG.headerOnlyStates.indexOf(currentState) > -1; + $(".col-analista").toggle(isAnalista); + $(".audit-card").toggle(isAnalista); + $(".resultado").prop("disabled", !isAnalista); + $(".justificativa").prop("disabled", !isAnalista); + $("#responsavelLoja").prop("disabled", isAnalista); + $(".progress-section, .audit-card, .pilares-title, #pilaresContainer, #naoConformeBox").toggle(!isHeaderOnly); + if (isAnalista) { + $(".anexo-auto-hint").hide(); + } else { + $(".anexo-auto-hint").show(); + } + applyAttachmentActionVisibility(); + if (isHeaderOnly) { + $("#profileBadge").text("Perfil: Cadastro Inicial (atividade " + currentState + ")"); + } else { + $("#profileBadge").text("Perfil: " + (isAnalista ? "Analista" : "Loja") + " (atividade " + currentState + ")"); + } + } + + function updateCompletionStatus() { + var total = 0; + var preenchidos = 0; + $(".anexo-plugin").each(function () { + total++; + var nome = ($(this).val() || "").trim(); + if (nome) preenchidos++; + }); + $("#progressBadge").text("Evidencias: " + preenchidos + "/" + total); + var perc = total > 0 ? Math.round((preenchidos / total) * 100) : 0; + $("#globalProgressFill").css("width", perc + "%"); + $("#globalProgressPercent").text(perc + "%"); + $("#globalProgressMeta").text(preenchidos + " de " + total + " fotos enviadas"); + updatePilarProgress(); + } + + function updateRowAttachmentProgress($row) { + if (!$row || !$row.length) return; + var total = 0; + var preenchidos = 0; + $row.find(".anexo-slot").each(function () { + var $slot = $(this); + var nome = ($slot.find(".anexo-plugin").val() || "").trim(); + total++; + var temAnexo = !!nome; + if (temAnexo) preenchidos++; + $slot.toggleClass("slot-filled", temAnexo); + }); + $row.find(".anexo-progress-count").text(preenchidos + "/" + total); + } + + function updatePilarProgress() { + $(".pilar-panel").each(function () { + var $panel = $(this); + var total = 0; + var preenchidos = 0; + $panel.find(".anexo-plugin").each(function () { + total++; + if (($(this).val() || "").trim()) preenchidos++; + }); + var perc = total > 0 ? Math.round((preenchidos / total) * 100) : 0; + var faltantes = Math.max(0, total - preenchidos); + $panel.find(".pilar-photo-count").text(preenchidos + "/" + total + " fotos"); + $panel.find(".pilar-missing").text(faltantes > 0 ? (faltantes + " faltando") : "100% concluido"); + $panel.find(".pilar-mini-fill").css("width", perc + "%"); + var $dot = $panel.find(".pilar-state-dot"); + var cls = "state-pending"; + var fillColor = "#9fb2c6"; + var icon = "✕"; + var dotTitle = "Nao iniciado"; + if (total > 0 && preenchidos === total) { + cls = "state-done"; + fillColor = "#2f9d78"; + icon = "✓"; + dotTitle = "Concluido"; + } else if (preenchidos > 0) { + cls = "state-progress"; + fillColor = "#d18a2f"; + icon = "⚠"; + dotTitle = "Em andamento"; + } + $dot.removeClass("state-pending state-progress state-done").addClass(cls).text(icon).attr("title", dotTitle); + $panel.find(".pilar-mini-fill").css("background", fillColor); + }); + } + + function initAttachmentPlugin() { + if (typeof $.fn.fluigFormAttachment !== "function") { + FLUIGC.toast({ + title: "Plugin:", + message: "fluigFormAttachment.js nao foi carregado.", + type: "warning" + }); + return; + } + $(".anexo-plugin").each(function () { + var $f = $(this); + if ($f.data("ffaInit")) return; + $f.fluigFormAttachment(); + $f.data("ffaInit", true); + }); + } + + function applyAttachmentActionVisibility() { + if (typeof $.fn.fluigFormAttachment !== "function") return; + var isAnalista = CURRENT_PROFILE === "ANALISTA"; + $(".anexo-plugin").each(function () { + var $f = $(this); + if (!$f.data("ffaInit")) return; + if (isAnalista) { + $f.fluigFormAttachment("hideActionButton"); + } else { + $f.fluigFormAttachment("showActionButton"); + } + }); + } + + function findNativeSendButtons($root) { + var $all = $root.find("button, input[type='button'], input[type='submit'], a"); + return $all.filter(function () { + var $el = $(this); + var txt = ($el.is("input") ? ($el.val() || "") : ($el.text() || "")).trim().toLowerCase(); + if (!txt) return false; + return txt === "enviar" || txt.indexOf(" enviar") > -1 || txt.indexOf("enviar ") > -1; + }); + } + + function hideNativeSendButtons() { + try { + var $local = findNativeSendButtons($(document)); + $local.not("#btnEnviarForm").css("display", "none"); + $local.each(function () { + var $group = $(this).closest(".btn-group, .btn-toolbar, .btn-group-vertical, .dropup, .dropdown"); + if ($group.length) { + $group.find(".dropdown-toggle, .btn.dropdown-toggle").css("display", "none"); + } + }); + } catch (e) {} + try { + if (window.parent && window.parent.document) { + var $parentDoc = $(window.parent.document); + var $parentBtns = findNativeSendButtons($parentDoc); + $parentBtns.css("display", "none"); + $parentBtns.each(function () { + var $group = $(this).closest(".btn-group, .btn-toolbar, .btn-group-vertical, .dropup, .dropdown"); + if ($group.length) { + $group.find(".dropdown-toggle, .btn.dropdown-toggle").css("display", "none"); + } + }); + + // Fallback: oculta toggles "soltos" que sobram no split button. + $parentDoc.find(".dropdown-toggle, .btn.dropdown-toggle").filter(function () { + var txt = ($(this).text() || "").trim(); + return txt === "" || txt === "▼" || txt === "▾" || txt === "v"; + }).each(function () { + var $toggle = $(this); + var $group = $toggle.closest(".btn-group, .btn-toolbar, .btn-group-vertical, .dropup, .dropdown"); + if (!$group.length) return; + var hasSendRef = findNativeSendButtons($group).length > 0; + if (hasSendRef) { + $toggle.css("display", "none"); + } + }); + } + } catch (e2) {} + } + + function clickNativeSendButton() { + try { + var $parentDoc = window.parent && window.parent.document ? $(window.parent.document) : $(); + var $native = findNativeSendButtons($parentDoc).first(); + if ($native.length) { + $native.trigger("click"); + return true; + } + } catch (e) {} + try { + var $local = findNativeSendButtons($(document)).not("#btnEnviarForm").first(); + if ($local.length) { + $local.trigger("click"); + return true; + } + } catch (e2) {} + return false; + } + + function syncPayload() { + var rows = []; + var naoConformeList = []; + $(".audit-row").each(function () { + var $tr = $(this); + var peso = parseFloat($tr.find(".peso").text()) || 0; + var resultado = $tr.find(".resultado").val(); + var fator = FATORES[resultado]; + var pontuacao = (typeof fator === "number") ? (peso * fator) : null; + var anexos = []; + $tr.find(".anexo-plugin").each(function () { + var nome = ($(this).val() || "").trim(); + anexos.push(nome); + }); + var anexosPreenchidos = []; + for (var a = 0; a < anexos.length; a++) { + if (anexos[a]) anexosPreenchidos.push(anexos[a]); + } + var indicador = $tr.attr("data-indicador") || ""; + if (resultado === "NAO_CONFORME") { + naoConformeList.push(indicador); + } + rows.push({ + pilar: $tr.attr("data-pilar") || "", + indicador: indicador, + penalidade: $tr.attr("data-penalidade") || "", + peso: peso, + resultado: resultado || "", + fator: (typeof fator === "number") ? fator : null, + pontuacao: pontuacao, + justificativa: ($tr.find(".justificativa").val() || "").trim(), + anexoSequence: "", + anexoKey: "", + anexoNome: anexosPreenchidos.length ? anexosPreenchidos[0] : "", + anexos: anexos, + qtdAnexosPreenchidos: anexosPreenchidos.length + }); + updateRowAttachmentProgress($tr); + }); + $("#qtdNaoConforme").val(String(naoConformeList.length)); + $("#temNaoConforme").val(naoConformeList.length > 0 ? "true" : "false"); + $("#listaNaoConforme").val(naoConformeList.join(" | ")); + $("#saidaAnalise").val(naoConformeList.length > 0 ? "NAO_CONFORME" : "CONFORME"); + $("#auditoriaPayload").val(JSON.stringify(rows)); + updateCompletionStatus(); + renderNaoConformeResumo(); + } + + function findRowByIndicador(indicador) { + var $found = $(); + $(".audit-row").each(function () { + if ($(this).attr("data-indicador") === indicador) { + $found = $(this); + return false; + } + }); + return $found; + } + + function updatePenalidadeVisual($tr) { + var resultado = $tr.find(".resultado").val(); + var penalidadeBase = ($tr.attr("data-penalidade") || "").trim(); + var $badge = $tr.find(".penalidade-status"); + var $justWrap = $tr.find(".just-wrap"); + + if (resultado === "CONFORME") { + $badge + .removeClass("label-danger label-warning label-info label-primary label-default") + .addClass("label-success") + .text("Conforme"); + $justWrap.hide(); + return; + } + + if (resultado === "NAO_CONFORME") { + $badge + .removeClass("label-success label-danger label-warning label-info label-primary label-default") + .addClass("label-" + badgeClass(penalidadeBase)) + .text(penalidadeBase || "Nao Conforme"); + $justWrap.show(); + return; + } + + $badge + .removeClass("label-success label-danger label-warning label-info label-primary") + .addClass("label-default") + .text("Aguardando"); + $justWrap.hide(); + } + + function restorePayload() { + var raw = ($("#auditoriaPayload").val() || "").trim(); + if (!raw) return; + var data = []; + try { + data = JSON.parse(raw); + if (!Array.isArray(data)) return; + } catch (e) { + return; + } + for (var i = 0; i < data.length; i++) { + var saved = data[i]; + var $tr = findRowByIndicador(saved.indicador); + if (!$tr.length) continue; + if (saved.resultado) $tr.find(".resultado").val(saved.resultado); + if (saved.justificativa) $tr.find(".justificativa").val(saved.justificativa); + if (Array.isArray(saved.anexos)) { + var $inputs = $tr.find(".anexo-plugin"); + for (var k = 0; k < saved.anexos.length; k++) { + if (k >= $inputs.length) break; + if (saved.anexos[k]) { + $($inputs.get(k)).val(saved.anexos[k]).trigger("change"); + } + } + } else if (saved.anexoNome) { + $tr.find(".anexo-plugin").first().val(saved.anexoNome).trigger("change"); + } + updatePenalidadeVisual($tr); + } + } + + function recalc() { + var pontosObtidos = 0; + var pontosPossiveis = 0; + + $(".audit-row").each(function () { + var $tr = $(this); + var peso = parseFloat($tr.find(".peso").text()) || 0; + var resultado = $tr.find(".resultado").val(); + var fator = FATORES[resultado]; + var pontuacao = 0; + updatePenalidadeVisual($tr); + + if (typeof fator === "number") { + pontuacao = peso * fator; + $tr.find(".fator").text(fator.toFixed(2)); + $tr.find(".pontuacao").text(pontuacao.toFixed(2)); + if (peso > 0) { + pontosPossiveis += peso; + pontosObtidos += pontuacao; + } + } else { + $tr.find(".fator").text("-"); + $tr.find(".pontuacao").text("0"); + } + }); + + var score = pontosPossiveis > 0 ? (pontosObtidos / pontosPossiveis) * 100 : 0; + $("#pontosObtidos").text(pontosObtidos.toFixed(2)); + $("#pontosPossiveis").text(pontosPossiveis.toFixed(2)); + $("#scoreFinal").text(score.toFixed(2) + "%"); + $("#classificacao").text(getClassificacao(score)); + } + + function validarFormulario() { + var currentState = getCurrentState(); + var isHeaderOnly = FLOW_CONFIG.headerOnlyStates.indexOf(currentState) > -1; + var requiredHeaderFields = [ + { id: "loja", label: "Loja" }, + { id: "responsavelLoja", label: "Responsavel da Loja" }, + { id: "dataAuditoria", label: "Data" }, + { id: "ciclo", label: "Ciclo" }, + { id: "regional", label: "Regional" } + ]; + for (var h = 0; h < requiredHeaderFields.length; h++) { + var hf = requiredHeaderFields[h]; + var $field = $("#" + hf.id); + var value = String($field.val() || "").trim(); + if (!value) { + $field.addClass("has-error"); + FLUIGC.toast({ + title: "Validacao:", + message: "Preencha o campo " + hf.label + ".", + type: "warning" + }); + return false; + } + $field.removeClass("has-error"); + } + if (isHeaderOnly) { + return true; + } + + var erros = []; + $(".audit-row").each(function (idx) { + var $tr = $(this); + var resultado = $tr.find(".resultado").val(); + var justificativa = ($tr.find(".justificativa").val() || "").trim(); + var $anexoInputs = $tr.find(".anexo-plugin"); + var indicador = $tr.attr("data-indicador") || ""; + var $resultadoCell = $tr.find(".resultado-wrap"); + var $anexoCell = $tr.find(".anexo-wrap"); + + if (resultado === "NAO_CONFORME" && justificativa.length === 0) { + erros.push("Linha " + (idx + 1) + " (" + indicador + "): justificativa obrigatoria."); + $tr.find(".just-wrap").addClass("has-error"); + } else { + $tr.find(".just-wrap").removeClass("has-error"); + } + + if (CURRENT_PROFILE === "ANALISTA") { + if (!resultado) { + erros.push("Linha " + (idx + 1) + " (" + indicador + "): selecione o resultado."); + $resultadoCell.addClass("has-error"); + } else { + $resultadoCell.removeClass("has-error"); + } + } + + if (REQUIRE_ATTACHMENT) { + var hasErrorAnexo = false; + $anexoInputs.each(function () { + var $anexoInput = $(this); + var anexoNome = ($anexoInput.val() || "").trim(); + var hasAttachment = anexoNome.length > 0; + var isValidAttachment = true; + if (typeof $.fn.fluigFormAttachment === "function" && $anexoInput.data("ffaInit")) { + try { + hasAttachment = $anexoInput.fluigFormAttachment("hasAttachment"); + isValidAttachment = $anexoInput.fluigFormAttachment("isValid"); + } catch (e) {} + } + if (!hasAttachment) { + hasErrorAnexo = true; + return false; + } + if (!isValidAttachment) { + hasErrorAnexo = true; + return false; + } + if (!ALLOWED_EXT[getExt(anexoNome)]) { + hasErrorAnexo = true; + return false; + } + }); + if (hasErrorAnexo) { + erros.push("Linha " + (idx + 1) + " (" + indicador + "): revise os anexos obrigatorios (PDF/JPG/PNG)."); + $anexoCell.addClass("has-error"); + } else { + $anexoCell.removeClass("has-error"); + } + } else { + $anexoCell.removeClass("has-error"); + } + }); + + syncPayload(); + + if (erros.length > 0) { + FLUIGC.toast({ + title: "Validacao:", + message: erros[0], + type: "warning" + }); + return false; + } + return true; + } + + function firstFilled(values) { + for (var i = 0; i < values.length; i++) { + var v = String(values[i] || "").trim(); + if (v) return v; + } + return ""; + } + + function mountLojaLoginFallback(lojaValue) { + var raw = String(lojaValue || ""); + var m = raw.match(/(\d{3,})/); + return m && m[1] ? (m[1] + ".ginseng") : ""; + } + + function applyLojaSelection(item) { + if (!item) return; + + var loja = firstFilled([ + item.LOJA, + item["PDV DESC"], + item.DESCRICAO + ]); + var responsavel = firstFilled([ + item.RESPONSAVEL_LOJA, + item.GESTAO, + item["RESPONSAVEL LOJA"] + ]); + var regional = firstFilled([ + item.REGIONAL, + item.SUPERVISOR, + item["REGIAO 2"], + item.ESTADO + ]); + var loginLoja = firstFilled([ + item.LOGIN_LOJA, + item.login_loja + ]); + var colleagueId = firstFilled([ + item.COLLEAGUE_ID, + item.colleagueId, + item.colleague_id + ]); + + if (!loginLoja) { + loginLoja = mountLojaLoginFallback(loja || item.PDV || ""); + } + + if (loja) $("#loja").val(loja); + $("#responsavelLoja").val(responsavel); + $("#regional").val(regional); + $("#destinoLoja").val(loginLoja); + $("#destinoLojaId").val(colleagueId); + + if (window.console && console.log) { + console.log("[checklist][zoom] loja=", loja, "login=", loginLoja, "colleagueId=", colleagueId); + } + } + + function setSelectedZoomItem(selectedItem) { + var inputName = String((selectedItem && selectedItem.inputName) || ""); + if (inputName && inputName !== "loja") return; + applyLojaSelection(selectedItem || {}); + } + + function removedZoomItem(removedItem) { + var inputName = String((removedItem && removedItem.inputName) || ""); + if (inputName && inputName !== "loja") return; + $("#responsavelLoja").val(""); + $("#regional").val(""); + $("#destinoLoja").val(""); + $("#destinoLojaId").val(""); + } + + $(document).ready(function () { + var wkState = getCurrentState(); + CURRENT_PROFILE = resolveProfileByState(wkState); + fillAuditorFromLoggedUser(function (login) { + if (!($("#usuarioRetorno").val() || "").trim()) { + $("#usuarioRetorno").val(login || getCurrentUserCode()); + } + }); + $("#responsavelLoja").prop("readonly", true); + $("#regional").prop("readonly", true); + montaTabela(); + initAttachmentPlugin(); + restorePayload(); + applyProfileUI(); + recalc(); + syncPayload(); + $(".audit-row").each(function () { + updatePenalidadeVisual($(this)); + }); + + $("#pilaresContainer").on("click", ".pilar-head", function () { + var target = $(this).attr("data-target"); + var $head = $(this); + var $panel = $head.closest(".pilar-panel"); + $("#" + target).stop(true, true).slideToggle(120, function () { + var isOpen = $(this).is(":visible"); + $head.toggleClass("is-open", isOpen); + $panel.toggleClass("is-open", isOpen); + $head.find(".pilar-open-cta").text(isOpen ? "Fechar Pilar ↑" : "Abrir Pilar →"); + }); + }); + + $("#pilaresContainer").on("change", ".resultado", function () { + recalc(); + syncPayload(); + }); + + $("#pilaresContainer").on("change keyup", ".justificativa", function () { + syncPayload(); + }); + + $("#pilaresContainer").on("change", ".anexo-plugin", function () { + syncPayload(); + }); + + $("#pilaresContainer").on("click", ".anexo-toggle", function () { + var $btn = $(this); + var expanded = $btn.attr("data-expanded") === "true"; + var total = parseInt($btn.attr("data-total"), 10) || 0; + var $wrap = $btn.closest(".anexos-cell"); + var $list = $wrap.find(".anexo-multi-list").first(); + if (expanded) { + $list.removeClass("expanded"); + $btn.attr("data-expanded", "false").text("Mostrar todas (" + total + ")"); + } else { + $list.addClass("expanded"); + $btn.attr("data-expanded", "true").text("Mostrar menos"); + } + }); + + $(document).on("click", ".nc-item", function () { + var pilar = $(this).attr("data-pilar") || ""; + var indicador = $(this).attr("data-indicador") || ""; + var $tr = $(".audit-row[data-pilar='" + pilar.replace(/'/g, "\\'") + "'][data-indicador='" + indicador.replace(/'/g, "\\'") + "']").first(); + if (!$tr.length) { + $tr = findRowByIndicador(indicador); + } + if (!$tr.length) return; + $tr.addClass("audit-row-target"); + setTimeout(function () { $tr.removeClass("audit-row-target"); }, 1600); + $("html, body").animate({ scrollTop: $tr.offset().top - 120 }, 250); + }); + + hideNativeSendButtons(); + setTimeout(hideNativeSendButtons, 600); + + $("#btnEnviarForm").on("click", function () { + if (!validarFormulario()) return; + var clicked = clickNativeSendButton(); + if (!clicked) { + FLUIGC.toast({ + title: "Envio:", + message: "Nao foi possivel acionar o botao nativo de Enviar.", + type: "warning" + }); + } + }); + + window.beforeSendValidate = function () { + return validarFormulario(); + }; + }); diff --git a/Auditoria/forms/auditoria_prototipo/assets/js/fluigFormAttachment.js b/Auditoria/forms/auditoria_prototipo/assets/js/fluigFormAttachment.js new file mode 100644 index 0000000..a4763ce --- /dev/null +++ b/Auditoria/forms/auditoria_prototipo/assets/js/fluigFormAttachment.js @@ -0,0 +1,423 @@ +/** + * 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); + + return this.#settings.showActionButton + && parent.ECM.workflowView.userPermissions.indexOf("P") >= 0 + && location.href.includes('ManagerMode') + && !location.href.includes('token') + && 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/Auditoria/forms/auditoria_prototipo/assets/js/fluigFormAttachment.min.js b/Auditoria/forms/auditoria_prototipo/assets/js/fluigFormAttachment.min.js new file mode 100644 index 0000000..23dd23a --- /dev/null +++ b/Auditoria/forms/auditoria_prototipo/assets/js/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/Auditoria/forms/auditoria_prototipo/auditoria_prototipo.html b/Auditoria/forms/auditoria_prototipo/auditoria_prototipo.html new file mode 100644 index 0000000..44e7c5f --- /dev/null +++ b/Auditoria/forms/auditoria_prototipo/auditoria_prototipo.html @@ -0,0 +1,144 @@ + + + + + + + + + + + +
+
+
+
+ Perfil: Loja + Evidências: 0/0 +
+ +

Checklist de Auditoria dos Pilares

+ +
+
+
+
+
i
+
Envie as fotos dos pilares
+
+
+ 1. Clique em um PILAR + 3. Clique em ANEXAR para enviar a foto solicitada + 5. Envie para concluir + 2. Verifique as INSTRUÇÕES + 4. Confira em VISUALIZAR +
+
+
+ +
+ +
+
Dados da Auditoria
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + + +
+

Progresso da Auditoria

+
+
+
+
+
0%
+
+
0 de 0 fotos enviadas
+
+ +
+
+
+
+
0%
+ Score final +
+
+
+
+
+
+
0
+ Pontos obtidos +
+
+
+
+
+
+
0
+ Pontos possíveis +
+
+
+
+
+
+
-
+ Classificação +
+
+
+
+ +

Pilares Analisados

+
+
+
+
+ +
+ + + + + + + + +
+
+
+ + + + diff --git a/Auditoria/workflow/scripts/beforeTaskSave.js b/Auditoria/workflow/scripts/beforeTaskSave.js new file mode 100644 index 0000000..a8e5c21 --- /dev/null +++ b/Auditoria/workflow/scripts/beforeTaskSave.js @@ -0,0 +1,208 @@ +function beforeTaskSave(colleagueId, nextSequenceId, userList) { + var FORCE_EMAIL_DESTINATION = ""; + var currentState = parseInt(getValue("WKCurrentState"), 10); + var nextState = parseInt(nextSequenceId, 10); + + try { + // Roteamento para loja na entrada da atividade "Validar Planograma" (task5). + // Usa prioridade: destinoLojaId (colleagueId) -> destinoLoja (login). + if (nextState === 5) { + atribuiResponsavelLoja(userList); + } + } catch (eAssign) { + log.error("[checklist][atribuicao] Falha ao atribuir responsavel da loja: " + eAssign); + throw eAssign; + } + + // Notificacao por email so quando sai da atividade de analise (task5). + if (currentState !== 5) { + return; + } + + try { + var saidaAnalise = (hAPI.getCardValue("saidaAnalise") || "").trim(); + var usuarioRetorno = (hAPI.getCardValue("usuarioRetorno") || "").trim(); + var destino = String(FORCE_EMAIL_DESTINATION || "").trim(); + var usuarioDestino = ""; + if (!destino) { + usuarioDestino = usuarioRetorno || String(colleagueId || getValue("WKUser") || "").trim(); + destino = resolveEmailByColleagueId(usuarioDestino); + } + + log.info("[checklist][notificacao] saidaAnalise=" + saidaAnalise + + ", usuarioRetorno=" + usuarioRetorno + + ", colleagueId=" + colleagueId + + ", usuarioDestino=" + usuarioDestino + + ", destinoFinal=" + destino + + ", nextState=" + nextState); + + if (!destino) { + log.warn("[checklist][notificacao] Usuario destino nao informado."); + return; + } + + if (!isValidEmail(destino)) { + log.warn("[checklist][notificacao] Email de destino invalido: " + destino); + return; + } + + if (nextState === 9 || saidaAnalise === "NAO_CONFORME") { + notificaPorTemplate("CHECKLIST_NAO_CONFORME", destino); + return; + } + + if (nextState === 11 || saidaAnalise === "CONFORME") { + notificaPorTemplate("CHECKLIST_CONFORME", destino); + } + } catch (e) { + log.error("[checklist][notificacao] Falha ao disparar notificacao: " + e); + } +} + +function atribuiResponsavelLoja(userList) { + var destinoLojaId = String(hAPI.getCardValue("destinoLojaId") || "").trim(); + var destinoLojaLogin = String(hAPI.getCardValue("destinoLoja") || "").trim(); + var colleagueId = ""; + + if (destinoLojaId && existsActiveUserByColleagueId(destinoLojaId)) { + colleagueId = destinoLojaId; + } + + if (!colleagueId && destinoLojaLogin) { + colleagueId = resolveColleagueIdByLogin(destinoLojaLogin); + } + + if (!colleagueId) { + throw "Preencha uma loja valida. destinoLojaId/destinoLoja nao encontrado no colleague ativo."; + } + + userList.clear(); + userList.add(colleagueId); + hAPI.setCardValue("destinoLojaId", colleagueId); + + log.info("[checklist][atribuicao] Responsavel definido. destinoLojaId=" + destinoLojaId + + ", destinoLoja=" + destinoLojaLogin + + ", colleagueIdFinal=" + colleagueId); +} + +function notificaPorTemplate(templateCode, destinatario) { + var NOTIFIER_SENDER_USER = "admin"; + var recipients = new java.util.ArrayList(); + recipients.add(destinatario); + + var parametros = new java.util.HashMap(); + parametros.put("numeroSolicitacao", String(getValue("WKNumProces") || "")); + parametros.put("qtdNaoConforme", String(hAPI.getCardValue("qtdNaoConforme") || "0")); + parametros.put("listaNaoConforme", String(hAPI.getCardValue("listaNaoConforme") || "")); + parametros.put("loja", String(hAPI.getCardValue("loja") || "")); + parametros.put("linkSolicitacao", montaLinkSolicitacao()); + + notifier.notify( + NOTIFIER_SENDER_USER, + templateCode, + parametros, + recipients, + "text/html" + ); + + log.info("[checklist][notificacao] Template " + templateCode + " enviado para " + destinatario); +} + +function montaLinkSolicitacao() { + var server = String(getValue("WKServerURL") || ""); + var companyId = String(getValue("WKCompany") || ""); + var processId = String(getValue("WKNumProces") || ""); + if (!server || !companyId || !processId) { + return ""; + } + return server + + "/portal/p/" + + companyId + + "/pageworkflowview?app_ecm_workflowview_detailsProcessInstanceID=" + + processId; +} + +function usuarioPossuiEmailValido(colleagueId) { + try { + var c1 = DatasetFactory.createConstraint("colleaguePK.colleagueId", colleagueId, colleagueId, ConstraintType.MUST); + var c2 = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST); + var ds = DatasetFactory.getDataset("colleague", null, [c1, c2], null); + if (!ds || ds.rowsCount < 1) { + log.warn("[checklist][notificacao] Usuario nao encontrado/inativo no colleague: " + colleagueId); + return false; + } + var email = String(ds.getValue(0, "mail") || "").trim(); + log.info("[checklist][notificacao] Email encontrado para " + colleagueId + ": " + email); + return email.indexOf("@") > 0; + } catch (e) { + log.error("[checklist][notificacao] Erro ao validar email do usuario " + colleagueId + ": " + e); + return false; + } +} + +function resolveEmailByColleagueId(colleagueId) { + try { + if (!colleagueId) { + return ""; + } + var ds = findColleagueByIdOrLogin(colleagueId); + if (!ds || ds.rowsCount < 1) { + log.warn("[checklist][notificacao] Usuario nao encontrado/inativo no colleague: " + colleagueId); + return ""; + } + var email = String(ds.getValue(0, "mail") || "").trim(); + log.info("[checklist][notificacao] Email encontrado para " + colleagueId + ": " + email); + return email; + } catch (e) { + log.error("[checklist][notificacao] Erro ao buscar email do usuario " + colleagueId + ": " + e); + return ""; + } +} + +function isValidEmail(email) { + var v = String(email || "").trim(); + return v.indexOf("@") > 0 && v.indexOf(".") > v.indexOf("@") + 1; +} + +function existsActiveUserByColleagueId(colleagueId) { + var ds = null; + try { + var c1 = DatasetFactory.createConstraint("colleaguePK.colleagueId", colleagueId, colleagueId, ConstraintType.MUST); + var c2 = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST); + ds = DatasetFactory.getDataset("colleague", null, [c1, c2], null); + return ds && ds.rowsCount > 0; + } catch (e) { + log.error("[checklist][atribuicao] Erro ao validar colleagueId=" + colleagueId + ": " + e); + return false; + } +} + +function resolveColleagueIdByLogin(login) { + try { + var c1 = DatasetFactory.createConstraint("login", login, login, ConstraintType.MUST); + var c2 = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST); + var ds = DatasetFactory.getDataset("colleague", null, [c1, c2], null); + if (ds && ds.rowsCount > 0) { + return String(ds.getValue(0, "colleaguePK.colleagueId") || "").trim(); + } + } catch (e) { + log.error("[checklist][atribuicao] Erro ao resolver colleagueId por login=" + login + ": " + e); + } + return ""; +} + +function findColleagueByIdOrLogin(value) { + var v = String(value || "").trim(); + if (!v) return null; + var c2 = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST); + + var cId = DatasetFactory.createConstraint("colleaguePK.colleagueId", v, v, ConstraintType.MUST); + var byId = DatasetFactory.getDataset("colleague", null, [cId, c2], null); + if (byId && byId.rowsCount > 0) return byId; + + var cLogin = DatasetFactory.createConstraint("login", v, v, ConstraintType.MUST); + var byLogin = DatasetFactory.getDataset("colleague", null, [cLogin, c2], null); + if (byLogin && byLogin.rowsCount > 0) return byLogin; + + return null; +} diff --git a/Auditoria_checklist/.project b/Auditoria_checklist/.project new file mode 100644 index 0000000..b244a92 --- /dev/null +++ b/Auditoria_checklist/.project @@ -0,0 +1,18 @@ + + + Auditoria_checklist + + + + + + org.eclipse.wst.validation.validationbuilder + + + + + + org.eclipse.wst.jsdt.core.jsNature + com.totvs.tds.ecm.designer.nature + + diff --git a/Auditoria_checklist/.settings/org.eclipse.core.resources.prefs b/Auditoria_checklist/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..f927201 --- /dev/null +++ b/Auditoria_checklist/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,108 @@ +eclipse.preferences.version=1 +encoding//wcm/layout/helloLayout/src/main/resources/application.info=utf8 +encoding//wcm/layout/helloLayout/src/main/resources/helloLayout.properties=utf8 +encoding//wcm/layout/helloLayout/src/main/resources/helloLayout_en_US.properties=utf8 +encoding//wcm/layout/helloLayout/src/main/resources/helloLayout_es.properties=utf8 +encoding//wcm/layout/helloLayout/src/main/resources/helloLayout_pt_BR.properties=utf8 +encoding//wcm/layout/helloLayout/src/main/resources/layout.ftl=utf8 +encoding//wcm/layout/helloLayout/src/main/webapp/WEB-INF/jboss-web.xml=utf8 +encoding//wcm/layout/helloLayout/src/main/webapp/WEB-INF/web.xml=utf8 +encoding//wcm/layout/helloLayout/src/main/webapp/resources/css/helloLayout.css=utf8 +encoding//wcm/layout/helloLayout/src/main/webapp/resources/images/icon.png=utf8 +encoding//wcm/layout/helloLayout/src/main/webapp/resources/js/helloLayout.js=utf8 +encoding//wcm/widget/dashconforme/src/main/resources/application.info=utf8 +encoding//wcm/widget/dashconforme/src/main/resources/dashconforme.properties=utf8 +encoding//wcm/widget/dashconforme/src/main/resources/dashconforme_en_US.properties=utf8 +encoding//wcm/widget/dashconforme/src/main/resources/dashconforme_es.properties=utf8 +encoding//wcm/widget/dashconforme/src/main/resources/dashconforme_pt_BR.properties=utf8 +encoding//wcm/widget/dashconforme/src/main/resources/edit.ftl=utf8 +encoding//wcm/widget/dashconforme/src/main/resources/view.ftl=utf8 +encoding//wcm/widget/dashconforme/src/main/webapp/WEB-INF/jboss-web.xml=utf8 +encoding//wcm/widget/dashconforme/src/main/webapp/WEB-INF/web.xml=utf8 +encoding//wcm/widget/dashconforme/src/main/webapp/resources/css/dashconforme.css=utf8 +encoding//wcm/widget/dashconforme/src/main/webapp/resources/images/icon.png=utf8 +encoding//wcm/widget/dashconforme/src/main/webapp/resources/js/dashconforme.js=utf8 +encoding//wcm/widget/dashdata/src/main/resources/application.info=utf8 +encoding//wcm/widget/dashdata/src/main/resources/dashdata.properties=utf8 +encoding//wcm/widget/dashdata/src/main/resources/dashdata_en_US.properties=utf8 +encoding//wcm/widget/dashdata/src/main/resources/dashdata_es.properties=utf8 +encoding//wcm/widget/dashdata/src/main/resources/dashdata_pt_BR.properties=utf8 +encoding//wcm/widget/dashdata/src/main/resources/edit.ftl=utf8 +encoding//wcm/widget/dashdata/src/main/resources/view.ftl=utf8 +encoding//wcm/widget/dashdata/src/main/webapp/WEB-INF/jboss-web.xml=utf8 +encoding//wcm/widget/dashdata/src/main/webapp/WEB-INF/web.xml=utf8 +encoding//wcm/widget/dashdata/src/main/webapp/resources/css/dashdata.css=utf8 +encoding//wcm/widget/dashdata/src/main/webapp/resources/images/icon.png=utf8 +encoding//wcm/widget/dashdata/src/main/webapp/resources/js/dashdata.js=utf8 +encoding//wcm/widget/dashgrafico/src/main/resources/application.info=utf8 +encoding//wcm/widget/dashgrafico/src/main/resources/dashgrafico.properties=utf8 +encoding//wcm/widget/dashgrafico/src/main/resources/dashgrafico_en_US.properties=utf8 +encoding//wcm/widget/dashgrafico/src/main/resources/dashgrafico_es.properties=utf8 +encoding//wcm/widget/dashgrafico/src/main/resources/dashgrafico_pt_BR.properties=utf8 +encoding//wcm/widget/dashgrafico/src/main/resources/edit.ftl=utf8 +encoding//wcm/widget/dashgrafico/src/main/resources/view.ftl=utf8 +encoding//wcm/widget/dashgrafico/src/main/webapp/WEB-INF/jboss-web.xml=utf8 +encoding//wcm/widget/dashgrafico/src/main/webapp/WEB-INF/web.xml=utf8 +encoding//wcm/widget/dashgrafico/src/main/webapp/resources/css/dashgrafico.css=utf8 +encoding//wcm/widget/dashgrafico/src/main/webapp/resources/images/icon.png=utf8 +encoding//wcm/widget/dashgrafico/src/main/webapp/resources/js/dashgrafico.js=utf8 +encoding//wcm/widget/dashkpi/src/main/resources/application.info=utf8 +encoding//wcm/widget/dashkpi/src/main/resources/dashkpi.properties=utf8 +encoding//wcm/widget/dashkpi/src/main/resources/dashkpi_en_US.properties=utf8 +encoding//wcm/widget/dashkpi/src/main/resources/dashkpi_es.properties=utf8 +encoding//wcm/widget/dashkpi/src/main/resources/dashkpi_pt_BR.properties=utf8 +encoding//wcm/widget/dashkpi/src/main/resources/edit.ftl=utf8 +encoding//wcm/widget/dashkpi/src/main/resources/view.ftl=utf8 +encoding//wcm/widget/dashkpi/src/main/webapp/WEB-INF/jboss-web.xml=utf8 +encoding//wcm/widget/dashkpi/src/main/webapp/WEB-INF/web.xml=utf8 +encoding//wcm/widget/dashkpi/src/main/webapp/resources/css/dashkpi.css=utf8 +encoding//wcm/widget/dashkpi/src/main/webapp/resources/images/icon.png=utf8 +encoding//wcm/widget/dashkpi/src/main/webapp/resources/js/dashkpi.js=utf8 +encoding//wcm/widget/dashregional/src/main/resources/application.info=utf8 +encoding//wcm/widget/dashregional/src/main/resources/dashregional.properties=utf8 +encoding//wcm/widget/dashregional/src/main/resources/dashregional_en_US.properties=utf8 +encoding//wcm/widget/dashregional/src/main/resources/dashregional_es.properties=utf8 +encoding//wcm/widget/dashregional/src/main/resources/dashregional_pt_BR.properties=utf8 +encoding//wcm/widget/dashregional/src/main/resources/edit.ftl=utf8 +encoding//wcm/widget/dashregional/src/main/resources/view.ftl=utf8 +encoding//wcm/widget/dashregional/src/main/webapp/WEB-INF/jboss-web.xml=utf8 +encoding//wcm/widget/dashregional/src/main/webapp/WEB-INF/web.xml=utf8 +encoding//wcm/widget/dashregional/src/main/webapp/resources/css/dashregional.css=utf8 +encoding//wcm/widget/dashregional/src/main/webapp/resources/images/icon.png=utf8 +encoding//wcm/widget/dashregional/src/main/webapp/resources/js/dashregional.js=utf8 +encoding//wcm/widget/dashtabela/src/main/resources/application.info=utf8 +encoding//wcm/widget/dashtabela/src/main/resources/dashtabela.properties=utf8 +encoding//wcm/widget/dashtabela/src/main/resources/dashtabela_en_US.properties=utf8 +encoding//wcm/widget/dashtabela/src/main/resources/dashtabela_es.properties=utf8 +encoding//wcm/widget/dashtabela/src/main/resources/dashtabela_pt_BR.properties=utf8 +encoding//wcm/widget/dashtabela/src/main/resources/edit.ftl=utf8 +encoding//wcm/widget/dashtabela/src/main/resources/view.ftl=utf8 +encoding//wcm/widget/dashtabela/src/main/webapp/WEB-INF/jboss-web.xml=utf8 +encoding//wcm/widget/dashtabela/src/main/webapp/WEB-INF/web.xml=utf8 +encoding//wcm/widget/dashtabela/src/main/webapp/resources/css/dashtabela.css=utf8 +encoding//wcm/widget/dashtabela/src/main/webapp/resources/images/icon.png=utf8 +encoding//wcm/widget/dashtabela/src/main/webapp/resources/js/dashtabela.js=utf8 +encoding//wcm/widget/filtrosDash/src/main/resources/application.info=utf8 +encoding//wcm/widget/filtrosDash/src/main/resources/edit.ftl=utf8 +encoding//wcm/widget/filtrosDash/src/main/resources/filtrosDash.properties=utf8 +encoding//wcm/widget/filtrosDash/src/main/resources/filtrosDash_en_US.properties=utf8 +encoding//wcm/widget/filtrosDash/src/main/resources/filtrosDash_es.properties=utf8 +encoding//wcm/widget/filtrosDash/src/main/resources/filtrosDash_pt_BR.properties=utf8 +encoding//wcm/widget/filtrosDash/src/main/resources/view.ftl=utf8 +encoding//wcm/widget/filtrosDash/src/main/webapp/WEB-INF/jboss-web.xml=utf8 +encoding//wcm/widget/filtrosDash/src/main/webapp/WEB-INF/web.xml=utf8 +encoding//wcm/widget/filtrosDash/src/main/webapp/resources/css/filtrosDash.css=utf8 +encoding//wcm/widget/filtrosDash/src/main/webapp/resources/images/icon.png=utf8 +encoding//wcm/widget/filtrosDash/src/main/webapp/resources/js/filtrosDash.js=utf8 +encoding//wcm/widget/helloWidget/src/main/resources/application.info=utf8 +encoding//wcm/widget/helloWidget/src/main/resources/edit.ftl=utf8 +encoding//wcm/widget/helloWidget/src/main/resources/helloWidget.properties=utf8 +encoding//wcm/widget/helloWidget/src/main/resources/helloWidget_en_US.properties=utf8 +encoding//wcm/widget/helloWidget/src/main/resources/helloWidget_es.properties=utf8 +encoding//wcm/widget/helloWidget/src/main/resources/helloWidget_pt_BR.properties=utf8 +encoding//wcm/widget/helloWidget/src/main/resources/view.ftl=utf8 +encoding//wcm/widget/helloWidget/src/main/webapp/WEB-INF/jboss-web.xml=utf8 +encoding//wcm/widget/helloWidget/src/main/webapp/WEB-INF/web.xml=utf8 +encoding//wcm/widget/helloWidget/src/main/webapp/resources/css/helloWidget.css=utf8 +encoding//wcm/widget/helloWidget/src/main/webapp/resources/images/icon.png=utf8 +encoding//wcm/widget/helloWidget/src/main/webapp/resources/js/helloWidget.js=utf8 diff --git a/Auditoria_checklist/.vscode/servers.json b/Auditoria_checklist/.vscode/servers.json new file mode 100644 index 0000000..a6c6dda --- /dev/null +++ b/Auditoria_checklist/.vscode/servers.json @@ -0,0 +1,4 @@ +{ + "version": "1.0.0", + "configurations": [] +} \ No newline at end of file diff --git a/Auditoria_checklist/datasets/ds_dashboard_checklist.js b/Auditoria_checklist/datasets/ds_dashboard_checklist.js new file mode 100644 index 0000000..ff7ef68 --- /dev/null +++ b/Auditoria_checklist/datasets/ds_dashboard_checklist.js @@ -0,0 +1,151 @@ +function createDataset(fields, constraints, sortFields) { + var ds = DatasetBuilder.newDataset(); + ds.addColumn("documentid"); + ds.addColumn("dataAuditoria"); + ds.addColumn("dataLimite"); + ds.addColumn("ciclo"); + ds.addColumn("auditor"); + ds.addColumn("usuarioRetorno"); + ds.addColumn("responsavelLoja"); + ds.addColumn("loja"); + ds.addColumn("regional"); + ds.addColumn("saidaAnalise"); + ds.addColumn("status"); + ds.addColumn("qtdNaoConforme"); + ds.addColumn("listaNaoConforme"); + + try { + var filtros = parseConstraints(constraints); + var formDs = DatasetFactory.getDataset("checklist", null, null, null); + if (!formDs || formDs.rowsCount < 1) { + return ds; + } + + var linhas = []; + + for (var i = 0; i < formDs.rowsCount; i++) { + var status = val(formDs, i, "saidaAnalise").toUpperCase(); + if (status !== "CONFORME" && status !== "NAO_CONFORME") { + continue; + } + + var dataAuditoria = val(formDs, i, "dataAuditoria"); + var dataLimite = val(formDs, i, "dataLimite"); + var ciclo = val(formDs, i, "ciclo"); + var regional = val(formDs, i, "regional"); + var loja = val(formDs, i, "loja"); + + if (filtros.loja && norm(loja).indexOf(norm(filtros.loja)) === -1) { + continue; + } + if (filtros.ciclo && norm(ciclo).indexOf(norm(filtros.ciclo)) === -1) { + continue; + } + if (filtros.regional && norm(regional).indexOf(norm(filtros.regional)) === -1) { + continue; + } + if (filtros.dataInicio || filtros.dataFim) { + var faixaAuditoria = dataNaFaixa(dataAuditoria, filtros.dataInicio, filtros.dataFim); + var faixaLimite = dataNaFaixa(dataLimite, filtros.dataInicio, filtros.dataFim); + if (!faixaAuditoria && !faixaLimite) { + continue; + } + } + + linhas.push({ + documentid: val(formDs, i, "documentid"), + dataAuditoria: dataAuditoria, + dataLimite: dataLimite, + ciclo: ciclo, + auditor: val(formDs, i, "auditor"), + usuarioRetorno: val(formDs, i, "usuarioRetorno"), + responsavelLoja: val(formDs, i, "responsavelLoja"), + loja: loja, + regional: regional, + saidaAnalise: status, + status: status, + qtdNaoConforme: val(formDs, i, "qtdNaoConforme"), + listaNaoConforme: val(formDs, i, "listaNaoConforme") + }); + } + + linhas.sort(function (a, b) { + if (a.dataAuditoria < b.dataAuditoria) return 1; + if (a.dataAuditoria > b.dataAuditoria) return -1; + if (a.documentid < b.documentid) return 1; + if (a.documentid > b.documentid) return -1; + return 0; + }); + + for (var j = 0; j < linhas.length; j++) { + var r = linhas[j]; + ds.addRow([ + r.documentid, + r.dataAuditoria, + r.dataLimite, + r.ciclo, + r.auditor, + r.usuarioRetorno, + r.responsavelLoja, + r.loja, + r.regional, + r.saidaAnalise, + r.status, + r.qtdNaoConforme, + r.listaNaoConforme + ]); + } + } catch (e) { + ds = DatasetBuilder.newDataset(); + ds.addColumn("ERRO"); + ds.addRow([String(e)]); + } + + return ds; +} + +function parseConstraints(constraints) { + var out = { + dataInicio: "", + dataFim: "", + loja: "", + ciclo: "", + regional: "" + }; + + if (!constraints) return out; + + for (var i = 0; i < constraints.length; i++) { + var c = constraints[i]; + if (!c) continue; + + var name = String(c.fieldName || c._field || ""); + var value = String(c.initialValue || c._initialValue || "").trim(); + if (!name || !value) continue; + + if (name === "dataInicio") out.dataInicio = value; + if (name === "dataFim") out.dataFim = value; + if (name === "loja") out.loja = value; + if (name === "ciclo") out.ciclo = value; + if (name === "regional") out.regional = value; + } + + return out; +} + +function val(ds, row, col) { + var v = ds.getValue(row, col); + return String(v == null ? "" : v).trim(); +} + +function norm(v) { + return String(v || "").toLowerCase().trim(); +} + +function dataNaFaixa(data, inicio, fim) { + var d = String(data || "").trim(); + if (!d) return false; + if (inicio && d < inicio) return false; + if (fim && d > fim) return false; + return true; +} diff --git a/Auditoria_checklist/datasets/ds_lojas_api.js b/Auditoria_checklist/datasets/ds_lojas_api.js new file mode 100644 index 0000000..1273d55 --- /dev/null +++ b/Auditoria_checklist/datasets/ds_lojas_api.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 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 || []; + + 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/Auditoria_checklist/forms/40213 - checklist/.metadata b/Auditoria_checklist/forms/40213 - checklist/.metadata new file mode 100644 index 0000000..f6e09b6 Binary files /dev/null and b/Auditoria_checklist/forms/40213 - checklist/.metadata differ diff --git a/Auditoria_checklist/forms/40213 - checklist/assets/css/checklist.css b/Auditoria_checklist/forms/40213 - checklist/assets/css/checklist.css new file mode 100644 index 0000000..d5b465a --- /dev/null +++ b/Auditoria_checklist/forms/40213 - checklist/assets/css/checklist.css @@ -0,0 +1,640 @@ + body { background: #ffffff; } + .audit-shell { + background: #f4f8fd; + border: 1px solid #dbe4ee; + border-radius: 14px; + box-shadow: 0 4px 14px rgba(15, 23, 42, 0.06); + padding: 10px 10px 14px 10px; + margin: 14px auto 0 auto; + max-width: 1140px; + } + .audit-section { + border: 1px solid #e2e8f0; + border-radius: 14px; + background: #ffffff; + padding: 12px; + margin-bottom: 10px; + box-shadow: 0 2px 6px rgba(15, 23, 42, 0.05); + } + h1.audit-main-title { + margin: 2px 0 10px 0; + font-size: 18px !important; + line-height: 1.2; + font-weight: 700 !important; + color: #ffffff !important; + background: #0b556b; + border-radius: 10px; + padding: 8px 12px; + } + .section-title { + margin: 0 0 10px 0; + font-size: 20px; + font-weight: 700; + color: #1e293b; + } + .audit-status { + display: flex; + gap: 8px; + align-items: center; + margin: 2px 0 10px 0; + flex-wrap: wrap; + } + .progress-section { + padding: 5px 10px 5px 10px; + margin-top: 2px; + } + .progress-section .section-title { + font-size: 16px; + margin-bottom: 6px; + } + .audit-context-card .section-title { + font-size: 17px; + } + .progress-inline { + display: grid; + grid-template-columns: 1fr auto; + gap: 16px; + align-items: center; + } + .progress-track { + width: 100%; + height: 5px; + border-radius: 999px; + background: #e6ebf2; + overflow: hidden; + } + .progress-fill { + width: 0%; + height: 100%; + background: linear-gradient(90deg, #3ea9c8 0%, #3ea9c8 100%); + transition: width .18s ease-in-out; + } + .progress-percent { + font-size: 14px; + line-height: 1; + color: #0f172a; + font-weight: 700; + min-width: 42px; + text-align: right; + } + .progress-meta { + margin-top: 3px; + font-size: 9px; + color: #52637b; + font-weight: 600; + } + .instruction-section { + display: block; + background: #ffffff; + } + .intro-data-section { + padding: 0; + overflow: hidden; + background: linear-gradient(90deg, #f4f8fd 0%, #edf3fa 100%); + } + .intro-data-section .instruction-section { + padding: 12px; + border-radius: 14px 14px 0 0; + background: #ffffff; + } + .intro-divider { + height: 1px; + background: #dfe7f0; + } + .instruction-head { + display: flex; + align-items: center; + gap: 10px; + margin-bottom: 6px; + } + .instruction-icon { + width: 34px; + height: 34px; + border-radius: 999px; + background: #3ea9c8; + color: #fff; + font-size: 22px; + font-weight: 700; + line-height: 34px; + text-align: center; + } + .instruction-title { + font-size: 16px; + color: #1f2f46; + font-weight: 700; + margin-bottom: 0; + } + .instruction-steps { + display: grid; + grid-template-columns: repeat(3, minmax(160px, 1fr)); + gap: 6px 16px; + font-size: 10px; + color: #334155; + line-height: 1.3; + } + .instruction-steps span { + display: inline-block; + border: 1px solid #b9d4ea; + background: #f4f9ff; + color: #0f3f66; + border-radius: 999px; + padding: 4px 9px; + width: fit-content; + } + .status-pill { + background: #eef5fb; + border: 1px solid #d9e8f6; + color: #0b556b; + border-radius: 999px; + padding: 6px 10px; + font-size: 12px; + font-weight: 600; + } + .audit-context-card { + background: #ffffff; + padding: 12px; + border-radius: 0 0 14px 14px; + } + .audit-context-row > div { + margin-bottom: 8px; + } + .audit-label { + font-size: 12px; + letter-spacing: 0.3px; + color: #16486a; + margin-bottom: 4px; + font-weight: 700; + } + .label-icon { opacity: 0.8; margin-right: 4px; } + .audit-input { + height: 32px; + font-size: 12px; + border-color: #c9d7e7; + border-radius: 7px; + padding: 5px 9px; + } + .audit-input:focus { + border-color: #74a5d3; + box-shadow: 0 0 0 2px rgba(34, 93, 143, 0.12); + } + .audit-card { margin-top: 12px; } + .audit-score { font-size: 22px; font-weight: 700; } + .audit-score small { font-size: 12px; font-weight: 400; color: #7f8c8d; display: block; } + #pilaresContainer { + display: grid; + grid-template-columns: repeat(4, minmax(220px, 1fr)); + gap: 14px; + background: #f4f8fd; + border: 0; + border-radius: 10px; + padding: 8px 12px 10px 12px; + } + h2.section-title.pilares-title { + margin-top: 4px; + margin-bottom: 10px; + font-size: 17px !important; + } + .audit-send-wrap { + margin-top: 10px; + text-align: right; + padding: 10px 12px 2px 12px; + border-top: 1px solid #dbe5f0; + } + .audit-send-btn { + min-width: 120px; + height: 38px; + border-radius: 8px; + font-size: 14px; + font-weight: 700; + background: #0b556b; + border-color: #0b556b; + } + .audit-send-btn:hover, + .audit-send-btn:focus { + background: #0a4b5f; + border-color: #0a4b5f; + } + .pilar-panel { + border: 1px solid #d6e1ee; + border-radius: 12px; + background: #ffffff; + padding: 8px; + min-height: 108px; + box-shadow: 0 6px 14px rgba(15, 23, 42, 0.08); + transition: box-shadow .18s ease, transform .18s ease; + } + .pilar-panel:hover { + box-shadow: 0 10px 20px rgba(15, 23, 42, 0.12); + transform: translateY(-1px); + } + .pilar-panel.is-open { + grid-column: 1 / -1; + box-shadow: 0 12px 24px rgba(15, 23, 42, 0.14); + } + .pilar-summary-card { + grid-column: span 3; + border: 1px solid #d6e1ee; + border-radius: 12px; + background: #ffffff; + padding: 10px 12px; + box-shadow: 0 6px 14px rgba(15, 23, 42, 0.08); + } + .summary-title { + font-size: 13px; + font-weight: 700; + color: #000000; + margin-bottom: 8px; + } + .summary-item { + font-size: 12px; + line-height: 1.45; + color: #000000; + margin-bottom: 6px; + } + .summary-item:last-child { + margin-bottom: 0; + } + .summary-name { + color: #000000; + font-weight: 700; + } + .pilar-head { + background: #ffffff; + border: 0; + padding: 6px; + display: grid; + gap: 6px; + cursor: pointer; + border-radius: 10px; + transition: background .15s ease, border-color .15s ease, box-shadow .15s ease, transform .15s ease; + } + .pilar-head:hover { + background: #f8fbff; + box-shadow: none; + transform: none; + } + .pilar-head.is-open { + background: transparent; + box-shadow: none; + } + .pilar-title-row { + display: flex; + align-items: center; + gap: 10px; + } + .pilar-state-dot { + width: 18px; + height: 18px; + border-radius: 999px; + background: #94a3b8; + border: 1px solid rgba(148, 163, 184, 0.25); + display: inline-flex; + align-items: center; + justify-content: center; + color: #ffffff; + font-size: 11px; + font-weight: 700; + line-height: 1; + } + .pilar-state-dot.state-pending { background: #dc2626; border-color: rgba(220, 38, 38, 0.4); } + .pilar-state-dot.state-progress { background: #d18a2f; border-color: rgba(209, 138, 47, 0.35); } + .pilar-state-dot.state-done { background: #2f9d78; border-color: rgba(47, 157, 120, 0.35); } + .pilar-title { + font-size: 13px; + font-weight: 700; + color: #000000; + letter-spacing: 0.2px; + } + .pilar-photo-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + color: #243549; + } + .pilar-photo-count { + font-size: 10px; + font-weight: 700; + color: #000000; + } + .pilar-missing { + font-size: 10px; + color: #000000; + font-weight: 600; + } + .pilar-mini-track { + height: 5px; + border-radius: 999px; + background: #e4eaf1; + overflow: hidden; + } + .pilar-mini-fill { + display: block; + width: 0%; + height: 100%; + border-radius: inherit; + background: #5d8fbe; + transition: width .18s ease; + } + .pilar-foot { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + } + .pilar-count { + font-size: 10px; + color: #000000; + font-weight: 600; + } + .pilar-open-cta { + font-size: 10px; + color: #000000; + font-weight: 700; + } + .pilar-body { padding: 8px 0 0 0; } + .audit-row { + border: 0; + border-radius: 0; + padding: 0; + margin: 0 0 12px 0; + background: transparent; + } + .audit-row-main { + display: flex; + flex-direction: column; + gap: 8px; + } + .audit-row-top { + display: grid; + grid-template-columns: 1fr; + gap: 10px; + align-items: start; + } + .audit-info { + min-width: 0; + } + .indicador-cell { font-weight: 700; color: #000000; font-size: 15px; line-height: 1.25; } + .indicador-help { + margin-top: 5px; + font-size: 12px; + color: #5c6f82; + line-height: 1.35; + background: transparent; + border: 0; + border-radius: 8px; + padding: 7px 9px; + } + .indicador-help ul { + margin: 0; + padding-left: 18px; + } + .indicador-help li { + margin: 2px 0; + } + .indicador-help .indicador-group { + list-style: none; + margin-top: 6px; + margin-left: -18px; + font-weight: 700; + color: #36597b; + } + .indicador-help-grid { + display: grid; + grid-template-columns: repeat(2, minmax(220px, 1fr)); + gap: 10px 20px; + padding-left: 0; + } + .indicador-help-col .indicador-group { + margin: 0 0 4px 0; + font-size: 12px; + } + .indicador-help-col ul { + margin: 0; + padding-left: 18px; + } + .meta-grid { + display: grid; + grid-template-columns: repeat(5, minmax(100px, 1fr)); + gap: 10px; + } + .meta-box { + border: 1px solid #d7e2ef; + border-radius: 10px; + background: #fff; + padding: 8px 10px; + min-height: 62px; + } + .meta-label { font-size: 11px; color: #64748b; text-transform: uppercase; } + .meta-value { font-size: 20px; color: #1f2937; margin-top: 4px; font-weight: 600; } + .meta-value .form-control { + font-size: 14px; + height: 34px; + padding: 4px 10px; + } + .anexo-wrap, .resultado-wrap, .just-wrap { margin-top: 0; } + .penalidade-badge { + font-size: 10px !important; + font-weight: 700; + padding: 2px 8px !important; + border-radius: 999px; + letter-spacing: 0.2px; + text-transform: uppercase; + } + .penalidade-badge.label-danger { background: #f7dada; color: #9f2d2d; } + .penalidade-badge.label-warning { background: #fff0c7; color: #8a5a00; } + .penalidade-badge.label-info { background: #dceefe; color: #1f5f9b; } + .penalidade-badge.label-success { background: #dff5e4; color: #1f7a3d; } + .penalidade-badge.label-default { background: #eceff3; color: #5f6b7a; } + .anexos-cell { + background: #eef3fb; + border: 1px solid #cfdaea; + border-radius: 14px; + padding: 10px; + } + .anexo-auto-hint { font-size: 12px; color: #5c7390; margin-top: 7px; } + .anexo-progress { + margin-top: 10px; + font-size: 13px; + color: #26486a; + font-weight: 600; + } + .anexo-progress-count { + display: inline-block; + min-width: 52px; + text-align: center; + border-radius: 999px; + background: #d8e6f8; + color: #204c7a; + padding: 4px 12px; + margin-right: 6px; + font-weight: 700; + } + .anexo-multi-list { + display: grid; + grid-template-columns: repeat(4, minmax(240px, 1fr)); + gap: 10px; + } + .audit-row[data-max-fotos="1"] .anexo-multi-list { + grid-template-columns: 1fr; + } + .audit-row[data-max-fotos="2"] .anexo-multi-list { + grid-template-columns: repeat(2, minmax(220px, 1fr)); + } + .audit-row[data-max-fotos="3"] .anexo-multi-list { + grid-template-columns: repeat(3, minmax(220px, 1fr)); + } + .anexo-slot { + background: #ffffff; + border: 1px solid #bdcde1; + border-radius: 10px; + padding: 7px; + position: relative; + } + .audit-row[data-max-fotos="1"] .anexo-slot, + .audit-row[data-max-fotos="2"] .anexo-slot { + max-width: 100%; + } + .anexo-slot.slot-filled { + border-color: #8fc1a3; + box-shadow: inset 0 0 0 1px rgba(79, 161, 109, 0.2); + } + .anexo-slot.extra-slot { display: none; } + .anexo-multi-list.expanded .anexo-slot.extra-slot { display: block; } + .anexo-slot-label { + font-size: 12px; + color: #375478; + margin-bottom: 4px; + font-weight: 700; + text-transform: uppercase; + } + .audit-row[data-max-fotos]:not([data-max-fotos="1"]) .anexo-slot::after { + content: "•••"; + position: absolute; + right: 12px; + top: 8px; + color: #b0c5df; + font-size: 15px; + letter-spacing: 2px; + } + .anexo-toggle-wrap { + margin-top: 12px; + text-align: right; + } + .anexo-toggle { + font-size: 16px; + font-weight: 700; + color: #2f4f74 !important; + border-color: #b7c8de; + background: #eef3fb; + border-radius: 12px; + padding: 8px 22px; + } + .anexos-cell .fluigFormAttachmentComponent { + width: 100%; + } + .anexos-cell .fluigFormAttachmentComponent input { + height: 36px; + border: 1px dashed #b6c9e1; + border-radius: 8px; + background: #eef3fb; + font-size: 14px; + color: #5e7898; + padding: 4px 10px; + } + .anexos-cell .fluigFormAttachmentComponent input::placeholder { + color: #8ea4bf; + opacity: 1; + } + .anexos-cell .fluigFormAttachmentComponent .btn { + height: 42px !important; + min-width: 52px; + border-radius: 8px; + } + .anexos-cell .fluigFormAttachmentComponent .btn-success { + background: #2f81c6 !important; + border-color: #2a75b3 !important; + color: #fff !important; + } + .anexos-cell .fluigFormAttachmentComponent .btn-default { + background: #eef2f7 !important; + border-color: #c7d1de !important; + color: #41597a !important; + } + .anexos-cell .fluigFormAttachmentComponent .btn-danger { + background: #e1574c !important; + border-color: #d04c42 !important; + color: #fff !important; + } + .just-wrap input { + border-radius: 10px; + } + .audit-row-target { background: #fff8e6 !important; } + .nc-box { + border: 1px solid #f5d0d0; + background: #fff6f6; + border-radius: 10px; + padding: 10px 12px; + margin-top: 10px; + } + .nc-title { + font-weight: 700; + color: #9f2d2d; + margin-bottom: 6px; + } + .nc-list { + display: flex; + flex-wrap: wrap; + gap: 8px; + } + .nc-item { + background: #fff; + border: 1px solid #f1b7b7; + color: #7f1d1d; + border-radius: 999px; + padding: 4px 10px; + font-size: 12px; + cursor: pointer; + } + .anexo-view { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; } + .anexo-thumb-inline { + width: 34px; + height: 34px; + object-fit: cover; + border: 1px solid #ddd; + border-radius: 4px; + background: #fff; + } + .anexo-file { + font-size: 11px; + max-width: 170px; + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + border: 1px solid #e0e0e0; + border-radius: 4px; + padding: 4px 6px; + background: #fafafa; + } + .anexo-text { + background: #fff; + font-size: 12px; + } + @media (max-width: 900px) { + .section-title { font-size: 22px; } + .progress-percent { font-size: 14px; min-width: 38px; } + .progress-meta { font-size: 14px; } + .instruction-title { font-size: 16px; } + .instruction-steps { grid-template-columns: 1fr; font-size: 14px; } + .audit-label { font-size: 13px; } + .audit-input { height: 40px; font-size: 15px; } + .audit-row-top { grid-template-columns: 1fr; } + .meta-grid { grid-template-columns: repeat(2, minmax(100px, 1fr)); } + .anexo-multi-list { grid-template-columns: 1fr; } + #pilaresContainer { grid-template-columns: repeat(2, minmax(180px, 1fr)); } + .pilar-panel.is-open { grid-column: auto; } + .pilar-summary-card { grid-column: span 2; } + .audit-send-wrap { padding: 8px 0 0 0; border-top: 0; } + .audit-send-btn { width: 100%; } + } diff --git a/Auditoria_checklist/forms/40213 - checklist/assets/js/checklist.js b/Auditoria_checklist/forms/40213 - checklist/assets/js/checklist.js new file mode 100644 index 0000000..8a531e0 --- /dev/null +++ b/Auditoria_checklist/forms/40213 - checklist/assets/js/checklist.js @@ -0,0 +1,1175 @@ + var INDICADORES = [ + { pilar: "PILAR ARQUITETURA", indicador: "Fotos da Fachada", detalhe: "Letreiro luminoso com acessibilidade", penalidade: "GRAVISSIMA", peso: 4, maxFotos: 1 }, + { pilar: "PILAR ARQUITETURA", indicador: "Fotos de todos os equipamentos", detalhe: "Mobiliário, gôndolas, tela digital, caixa, mesas, cavalete, baianas e coringa.", penalidade: "GRAVE", peso: 3, maxFotos: 8 }, + { pilar: "PILAR ARQUITETURA", indicador: "Fotos da iluminação", detalhe: "(Luzes da vitrine e interior da loja)", penalidade: "GRAVE", peso: 3, maxFotos: 2 }, + { pilar: "PILAR ARQUITETURA", indicador: "Foto do coletor de embalagem", detalhe: "Coletor de embalagem (Botirecicla)", penalidade: "MEDIA", peso: 2, maxFotos: 1 }, + { pilar: "PILAR ARQUITETURA", indicador: "Fotos dos mobshops", detalhe: "Mobiliário, gôndolas, tela digital, caixa, mesas, cavalete, baianas e coringa.", penalidade: "MEDIA", peso: 2, maxFotos: 2 }, + + { pilar: "PILAR VISUAL MERCHANDISING", indicador: "Foto da vitrine", detalhe: " (Identificando todas as comunicações)", penalidade: "GRAVE", peso: 3, maxFotos: 1 }, + { pilar: "PILAR VISUAL MERCHANDISING", indicador: "Fotos enquadrando cada sessão", detalhe: "Feminina, masculina, infantil, cuidados, cabelos, presentes e maquiagem.", penalidade: "GRAVE", peso: 3, maxFotos: 7 }, + { pilar: "PILAR VISUAL MERCHANDISING", indicador: "Fotos das comunicações destaques e storytelling", detalhe: "Feminina, masculina e cuidados.", penalidade: "GRAVE", peso: 3, maxFotos: 3 }, + { pilar: "PILAR VISUAL MERCHANDISING", indicador: "Foto das embalagens", penalidade: "MEDIA", peso: 2, maxFotos: 1 }, + { pilar: "PILAR VISUAL MERCHANDISING", indicador: "Foto do QR-Code de politica de privacidade", penalidade: "GRAVISSIMA", peso: 4, maxFotos: 1 }, + { pilar: "PILAR VISUAL MERCHANDISING", indicador: "Foto do código de defesa do consumidor", penalidade: "GRAVISSIMA", peso: 4, maxFotos: 1 }, + { pilar: "PILAR VISUAL MERCHANDISING", indicador: "Foto do verso da tela digital", penalidade: "GRAVE", peso: 3, maxFotos: 1 }, + { pilar: "PILAR VISUAL MERCHANDISING", indicador: "Foto dos aplicadores descartáveis", penalidade: "MEDIA", peso: 2, maxFotos: 1 }, + { pilar: "PILAR VISUAL MERCHANDISING", indicador: "Foto da exposição da sessão Make.B", penalidade: "GRAVE", peso: 3, maxFotos: 1 }, + { pilar: "PILAR VISUAL MERCHANDISING", indicador: "Foto da exposição da sessão Intense", penalidade: "GRAVE", peso: 3, maxFotos: 1 }, + + { pilar: "PILAR EXPOSIÇÃO", indicador: "Fotos das datas de validade dos produtos", detalheBullets: [ + "# Produtos O Boticário", + "Cooffe Woman", + "Linha Casa 214", + "5 itens da linha Botik", + "Dr. Botica", + "Portinari", + "Celebre", + "Floratta", + "Arbo", + "Shampoo e Condicionador - Linha Match", + "5 provadores de Make B", + "5 provadores da linha Intense", + "# Produtos QDB?", + "2 itens da linha Instamatte", + "Protetor solar facial", + "Corretivo liquido", + "Mascara para cilios", + "10 batons hidratantes", + "Shampoo e Condicionador Au.migos" + ], penalidade: "GRAVISSIMA", peso: 4, maxFotos: 22 }, + + { pilar: "PILAR UNIFORME", indicador: "Fotos dos uniformes", detalhe: " Do pescoço para baixo", penalidade: "GRAVE", peso: 3, maxFotos: 2 }, + { pilar: "PILAR INFORMATIVA", indicador: "Foto do espaço destinado a logística", penalidade: "NAO PONTUA", peso: 0, maxFotos: 1 } + ]; + + var FATORES = { + "CONFORME": 1, + "NAO_CONFORME": 0 + }; + var ALLOWED_EXT = { "pdf": true, "jpg": true, "jpeg": true, "png": true }; + var REQUIRE_ATTACHMENT = false; // mude para true para voltar a exigir anexo + var CURRENT_PROFILE = "LOJA"; + var KNOWN_ATTACHMENT_KEYS = {}; + var LOJAS_CACHE = []; + var LOJA_BY_NAME = {}; + var DATASET_LOJAS_ID = "ds_lojas_api"; + // Ajuste os codigos de atividade do seu processo aqui. + var FLOW_CONFIG = { + headerOnlyStates: [0], + lojaStates: [4, 5, 9], + analistaStates: [24], + taskTitleStateMap: [ + { pattern: /validar\s+planograma/i, state: 24 }, + { pattern: /anexar\s+planograma/i, state: 4 }, + { pattern: /refazer\s+planograma/i, state: 4 } + ] + }; + + function badgeClass(penalidade) { + if (penalidade === "GRAVISSIMA") return "danger"; + if (penalidade === "GRAVE") return "warning"; + if (penalidade === "MEDIA") return "info"; + if (penalidade === "LEVE") return "default"; + return "primary"; + } + + function getClassificacao(score) { + if (score >= 90) return "Excelente"; + if (score >= 80) return "Bom"; + if (score >= 70) return "Regular"; + return "Crítico"; + } + + function toTitleCase(text) { + var s = String(text || "").toLowerCase().trim(); + if (!s) return ""; + var words = s.split(/\s+/); + for (var i = 0; i < words.length; i++) { + var w = words[i]; + if (!w) continue; + words[i] = w.charAt(0).toUpperCase() + w.slice(1); + } + return words.join(" "); + } + + function indicadorCountLabel(n) { + return n === 1 ? "1 indicador" : (n + " indicadores"); + } + + function renderDetalhe(item) { + if (Array.isArray(item.detalheBullets) && item.detalheBullets.length) { + var groups = []; + var currentGroup = { title: "", items: [] }; + for (var i = 0; i < item.detalheBullets.length; i++) { + var txt = String(item.detalheBullets[i] || ""); + if (txt.indexOf("# ") === 0) { + if (currentGroup.title || currentGroup.items.length) { + groups.push(currentGroup); + } + currentGroup = { title: txt.substring(2), items: [] }; + } else { + currentGroup.items.push(txt); + } + } + if (currentGroup.title || currentGroup.items.length) { + groups.push(currentGroup); + } + + if (groups.length >= 2) { + var html = "
"; + for (var g = 0; g < groups.length; g++) { + var group = groups[g]; + html += "
"; + if (group.title) { + html += "
" + escapeHtml(group.title) + "
"; + } + html += "
    "; + for (var j = 0; j < group.items.length; j++) { + html += "
  • " + escapeHtml(group.items[j]) + "
  • "; + } + html += "
"; + } + html += "
"; + return html; + } + + var html = "
    "; + for (var k = 0; k < groups.length; k++) { + if (groups[k].title) { + html += "
  • " + escapeHtml(groups[k].title) + "
  • "; + } + for (var m = 0; m < groups[k].items.length; m++) { + html += "
  • " + escapeHtml(groups[k].items[m]) + "
  • "; + } + } + html += "
"; + return html; + } + if (item.detalhe) { + return "
" + escapeHtml(item.detalhe) + "
"; + } + return ""; + } + + function getResumoPilaresHtml() { + var rows = [ + { nome: "Arquitetura", texto: "Fachada da loja e estrutura física, evidenciando marca, iluminação, acessibilidade, equipamentos e estado geral do ambiente." }, + { nome: "Visual Merchandising", texto: "Vitrine e área interna com comunicação vigente, padrão visual, organização, embalagens corretas e bom estado dos materiais." }, + { nome: "Exposição", texto: "Exposição de produtos em vitrine e interior, com precificação, validade visível, testes, preenchimento de prateleiras e uso de aplicadores." }, + { nome: "Uniforme", texto: "Equipe em atendimento com uso correto de uniforme, calçados e acessórios conforme padrão estabelecido." }, + { nome: "Informativa", texto: "Ambiente com foco em informações operacionais, logística reversa, armazenamento de materiais e comunicação de serviços." } + ]; + var html = "
Guia dos Pilares
"; + for (var i = 0; i < rows.length; i++) { + html += "
" + escapeHtml(rows[i].nome) + ": " + escapeHtml(rows[i].texto) + "
"; + } + html += "
"; + return html; + } + + function buildAnexoInputs(index, maxFotos) { + var total = parseInt(maxFotos, 10); + if (isNaN(total) || total < 1) total = 1; + var html = "
"; + for (var i = 1; i <= total; i++) { + var anexoId = "anexo_" + index + "_" + i; + var anexoFileName = "EVID_" + index + "_F" + i; + var extraClass = i > 4 ? " extra-slot" : ""; + html += "" + + "
" + + "
Foto " + i + " de " + total + "
" + + "" + + "
"; + } + html += "
"; + if (total > 2) { + html += "
"; + } + return html; + } + + function buildAuditRow(item, index) { + var selectResultado = "" + + ""; + var maxFotos = parseInt(item.maxFotos, 10); + if (isNaN(maxFotos) || maxFotos < 1) maxFotos = 1; + var anexosHtml = buildAnexoInputs(index, maxFotos); + + return "" + + "
" + + "
" + + "
" + + "
" + + "
" + escapeHtml(item.indicador) + "
" + + renderDetalhe(item) + + "
" + + "
" + + anexosHtml + + "
0/" + maxFotos + " fotos enviadas
" + + "
Use os botoes de upload/visualizar em cada foto.
" + + "
" + + "
" + + "
" + + "
Penalidade
Aguardando
" + + "
Peso
" + item.peso + "
" + + "
Fator
-
" + + "
Pontuacao
0
" + + "
Resultado
" + selectResultado + "
" + + "
" + + "
" + + "
" + + "
"; + } + + function montaTabela() { + var grupos = {}; + for (var i = 0; i < INDICADORES.length; i++) { + var item = INDICADORES[i]; + if (!grupos[item.pilar]) grupos[item.pilar] = []; + grupos[item.pilar].push(item); + } + + var pilares = Object.keys(grupos); + var html = ""; + var rowIndex = 1; + for (var p = 0; p < pilares.length; p++) { + var nomePilar = pilares[p]; + var linhas = grupos[nomePilar]; + var openStyle = " style='display:none;'"; + var totalFotosPilar = 0; + for (var t = 0; t < linhas.length; t++) { + totalFotosPilar += parseInt(linhas[t].maxFotos, 10) || 0; + } + html += "
"; + html += "
"; + html += "
✕" + escapeHtml(toTitleCase(nomePilar.replace("PILAR ", ""))) + "
"; + html += "
0/" + totalFotosPilar + " fotos" + totalFotosPilar + " faltando
"; + html += "
"; + html += "
" + indicadorCountLabel(linhas.length) + "Abrir Pilar →
"; + html += "
"; + html += "
"; + for (var r = 0; r < linhas.length; r++) { + html += buildAuditRow(linhas[r], rowIndex); + rowIndex++; + } + html += "
"; + } + html += getResumoPilaresHtml(); + + $("#pilaresContainer").html(html); + } + + function getExt(fileName) { + var n = (fileName || "").toLowerCase(); + var pos = n.lastIndexOf("."); + return pos > -1 ? n.substring(pos + 1) : ""; + } + + function escapeHtml(text) { + return String(text || "") + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); + } + + function isImageExt(fileName) { + var ext = getExt(fileName); + return ext === "jpg" || ext === "jpeg" || ext === "png"; + } + + function getStateFromUrl(url) { + var u = String(url || ""); + if (!u) return ""; + var patterns = [ + /(?:\?|&)WKNumState=(\d+)/i, + /(?:\?|&)WKCurrentState=(\d+)/i, + /(?:\?|&)WKCurrentMovto=(\d+)/i, + /(?:\?|&)state=(\d+)/i, + /(?:\?|&)stateSequence=(\d+)/i, + /(?:\?|&)processState=(\d+)/i, + /(?:\?|&)movementSequence=(\d+)/i, + /(?:\?|&)choosedState=(\d+)/i, + /(?:\?|&)numState=(\d+)/i + ]; + for (var i = 0; i < patterns.length; i++) { + var m = u.match(patterns[i]); + if (m && m[1]) return m[1]; + } + return ""; + } + + function getCurrentTaskTitle() { + var title = ""; + try { + title = $("h1").first().text() || ""; + } catch (e) {} + if (String(title || "").trim()) return String(title).trim(); + try { + if (window.parent && window.parent.$) { + title = window.parent.$("h1").first().text() || ""; + } + } catch (e2) {} + return String(title || "").trim(); + } + + function inferStateFromTaskTitle() { + var taskTitle = getCurrentTaskTitle(); + if (!taskTitle) return 0; + for (var i = 0; i < FLOW_CONFIG.taskTitleStateMap.length; i++) { + var cfg = FLOW_CONFIG.taskTitleStateMap[i]; + if (cfg.pattern.test(taskTitle)) { + return parseInt(cfg.state, 10) || 0; + } + } + return 0; + } + + function getCurrentState() { + var candidates = []; + try { + candidates.push(window.WKNumState); + candidates.push(window.WKCurrentState); + candidates.push(window.WKCurrentMovto); + candidates.push($("input[name='WKNumState']").val()); + candidates.push($("input[name='WKCurrentState']").val()); + candidates.push($("input[name='WKCurrentMovto']").val()); + candidates.push($("input[name='WKCurrentMovementSequence']").val()); + candidates.push($("input[name='numState']").val()); + candidates.push($("input[name='stateSequence']").val()); + candidates.push($("input[name='processState']").val()); + candidates.push($("#WKNumState").val()); + candidates.push($("#WKCurrentState").val()); + candidates.push($("#WKCurrentMovto").val()); + candidates.push($("#numState").val()); + candidates.push($("#stateSequence").val()); + candidates.push(getStateFromUrl(window.location && window.location.href)); + } catch (e) {} + + try { + if (window.parent) { + candidates.push(window.parent.WKNumState); + candidates.push(window.parent.WKCurrentState); + candidates.push(window.parent.WKCurrentMovto); + if (window.parent.$) { + candidates.push(window.parent.$("input[name='WKNumState']").val()); + candidates.push(window.parent.$("input[name='WKCurrentState']").val()); + candidates.push(window.parent.$("input[name='WKCurrentMovto']").val()); + candidates.push(window.parent.$("input[name='WKCurrentMovementSequence']").val()); + candidates.push(window.parent.$("input[name='numState']").val()); + candidates.push(window.parent.$("input[name='stateSequence']").val()); + candidates.push(window.parent.$("input[name='processState']").val()); + candidates.push(window.parent.$("#WKNumState").val()); + candidates.push(window.parent.$("#WKCurrentState").val()); + candidates.push(window.parent.$("#WKCurrentMovto").val()); + candidates.push(window.parent.$("#numState").val()); + candidates.push(window.parent.$("#stateSequence").val()); + } + candidates.push(getStateFromUrl(window.parent.location && window.parent.location.href)); + } + } catch (e2) {} + + for (var j = 0; j < candidates.length; j++) { + var parsed = parseInt(String(candidates[j] || "").trim(), 10); + if (!isNaN(parsed) && parsed > 0) return parsed; + } + return inferStateFromTaskTitle(); + } + + function resolveProfileByState(state) { + for (var i = 0; i < FLOW_CONFIG.analistaStates.length; i++) { + if (FLOW_CONFIG.analistaStates[i] === state) return "ANALISTA"; + } + for (var j = 0; j < FLOW_CONFIG.lojaStates.length; j++) { + if (FLOW_CONFIG.lojaStates[j] === state) return "LOJA"; + } + try { + var pageText = ( + $("h1").first().text() + || $(".page-header h1").first().text() + || (window.parent && window.parent.$ ? window.parent.$("h1").first().text() : "") + || "" + ).toLowerCase(); + if (pageText.indexOf("validar planograma") > -1) return "ANALISTA"; + } catch (e) {} + return "LOJA"; + } + + function getCurrentUserLogin() { + + try { + if (window.WCMAPI && window.WCMAPI.user) { + return String(window.WCMAPI.user); + } + } catch (e) {} + + try { + if (window.parent && window.parent.WCMAPI && window.parent.WCMAPI.user) { + return String(window.parent.WCMAPI.user); + } + } catch (e2) {} + + return ""; +} + + function fillAuditorFromLoggedUser() { + var userCode = getCurrentUserLogin(); + if (!userCode) return; + var $auditor = $("#auditor"); + if (!String($auditor.val() || "").trim()) { + $auditor.val(userCode); + } + $auditor.prop("readonly", true); + } + + function fillDataAuditoriaTodayIfEmpty() { + var $data = $("#dataAuditoria"); + if (!$data.length) return; + if (String($data.val() || "").trim()) return; + var now = new Date(); + var yyyy = now.getFullYear(); + var mm = String(now.getMonth() + 1); + var dd = String(now.getDate()); + if (mm.length < 2) mm = "0" + mm; + if (dd.length < 2) dd = "0" + dd; + $data.val(yyyy + "-" + mm + "-" + dd); + } + + function normalizeText(v) { + return String(v || "").toLowerCase().trim(); + } + + function toLojaLoginFromPdv(pdv) { + var code = String(pdv || "").trim(); + if (!code) return ""; + return code + ".ginseng"; + } + + function resolveDestinoLojaFromForm() { + var destino = String($("#destinoLoja").val() || "").trim(); + if (destino) return destino; + + var lojaValor = String($("#loja").val() || "").trim(); + if (!lojaValor) return ""; + + // Ex.: "3546-COMERCIO -HIPER FAROL" -> "3546.ginseng" + var m = lojaValor.match(/(\d{3,})/); + if (m && m[1]) { + destino = toLojaLoginFromPdv(m[1]); + $("#destinoLoja").val(destino); + return destino; + } + return ""; + } + + function resolveDestinoLojaIdFromForm() { + var destinoId = String($("#destinoLojaId").val() || "").trim(); + if (destinoId) return destinoId; + return ""; + } + + function fetchDatasetRows(datasetName, callback) { + $.ajax({ + url: "/api/public/ecm/dataset/datasets", + method: "POST", + contentType: "application/json", + dataType: "json", + data: JSON.stringify({ + name: datasetName, + fields: ["PDV", "LOJA", "RESPONSAVEL_LOJA", "REGIONAL", "STATUS"], + constraints: [{ _field: "onlyAtivo", _initialValue: "true", _finalValue: "true", _type: 1 }], + order: ["LOJA"] + }), + success: function (res) { + var values = []; + if (res && res.content && $.isArray(res.content.values)) values = res.content.values; + else if (res && $.isArray(res.values)) values = res.values; + callback(values); + }, + error: function () { + callback([]); + } + }); + } + + function renderLojasSelect(rows) { + var $select = $("#loja"); + $select.empty(); + $select.append(""); + LOJA_BY_NAME = {}; + LOJAS_CACHE = rows || []; + for (var i = 0; i < LOJAS_CACHE.length; i++) { + var row = LOJAS_CACHE[i] || {}; + var lojaNome = String(row.LOJA || "").trim(); + if (!lojaNome) continue; + var key = normalizeText(lojaNome); + if (!LOJA_BY_NAME[key]) LOJA_BY_NAME[key] = row; + $select.append(""); + } + } + + function fillHeaderByLoja() { + var loja = ($("#loja").val() || "").trim(); + if (!loja) return; + var row = LOJA_BY_NAME[normalizeText(loja)]; + if (!row) return; + if (!($("#responsavelLoja").val() || "").trim()) { + $("#responsavelLoja").val(String(row.RESPONSAVEL_LOJA || "").trim()); + } + $("#regional").val(String(row.REGIONAL || "").trim()); + } + + function initLojasFromApi() { + fetchDatasetRows(DATASET_LOJAS_ID, function (rows) { + renderLojasSelect(rows); + fillHeaderByLoja(); + }); + } + + function getNaoConformes() { + var list = []; + $(".audit-row").each(function () { + var $tr = $(this); + if ($tr.find(".resultado").val() === "NAO_CONFORME") { + list.push({ + pilar: $tr.attr("data-pilar") || "", + indicador: $tr.attr("data-indicador") || "" + }); + } + }); + return list; + } + + function renderNaoConformeResumo() { + var list = getNaoConformes(); + var $box = $("#naoConformeBox"); + var $list = $("#naoConformeList"); + $list.empty(); + if (!list.length) { + $box.hide(); + return; + } + for (var i = 0; i < list.length; i++) { + var item = list[i] || {}; + var pilar = item.pilar || ""; + var indicador = item.indicador || ""; + var texto = pilar ? (pilar + " - " + indicador) : indicador; + $list.append( + "" + ); + } + $box.show(); + } + + function applyProfileUI() { + var currentState = getCurrentState(); + var isAnalista = CURRENT_PROFILE === "ANALISTA"; + var isHeaderOnly = FLOW_CONFIG.headerOnlyStates.indexOf(currentState) > -1; + $(".audit-status").show(); + $(".col-analista").toggle(isAnalista); + $(".audit-card").toggle(isAnalista); + $(".resultado").prop("disabled", !isAnalista); + $(".justificativa").prop("disabled", !isAnalista); + $("#responsavelLoja").prop("readonly", true); + $(".progress-section, .pilares-title, #pilaresContainer, #naoConformeBox").toggle(!isHeaderOnly); + if (isAnalista) { + $(".anexo-auto-hint").hide(); + } else { + $(".anexo-auto-hint").show(); + } + applyAttachmentActionVisibility(); + if (isHeaderOnly) { + $("#profileBadge").text("Perfil: Cadastro Inicial (atividade " + currentState + ")"); + } else { + $("#profileBadge").text("Perfil: " + (isAnalista ? "Analista" : "Loja") + " (atividade " + currentState + ")"); + } + } + + function updateCompletionStatus() { + var total = 0; + var preenchidos = 0; + $(".anexo-plugin").each(function () { + total++; + var nome = ($(this).val() || "").trim(); + if (nome) preenchidos++; + }); + $("#progressBadge").text("Evidencias: " + preenchidos + "/" + total); + var perc = total > 0 ? Math.round((preenchidos / total) * 100) : 0; + $("#globalProgressFill").css("width", perc + "%"); + $("#globalProgressPercent").text(perc + "%"); + $("#globalProgressMeta").text(preenchidos + " de " + total + " fotos enviadas"); + updatePilarProgress(); + } + + function updateRowAttachmentProgress($row) { + if (!$row || !$row.length) return; + var total = 0; + var preenchidos = 0; + $row.find(".anexo-slot").each(function () { + var $slot = $(this); + var nome = ($slot.find(".anexo-plugin").val() || "").trim(); + total++; + var temAnexo = !!nome; + if (temAnexo) preenchidos++; + $slot.toggleClass("slot-filled", temAnexo); + }); + $row.find(".anexo-progress-count").text(preenchidos + "/" + total); + } + + function updatePilarProgress() { + $(".pilar-panel").each(function () { + var $panel = $(this); + var total = 0; + var preenchidos = 0; + $panel.find(".anexo-plugin").each(function () { + total++; + if (($(this).val() || "").trim()) preenchidos++; + }); + var perc = total > 0 ? Math.round((preenchidos / total) * 100) : 0; + var faltantes = Math.max(0, total - preenchidos); + $panel.find(".pilar-photo-count").text(preenchidos + "/" + total + " fotos"); + $panel.find(".pilar-missing").text(faltantes > 0 ? (faltantes + " faltando") : "100% concluido"); + $panel.find(".pilar-mini-fill").css("width", perc + "%"); + var $dot = $panel.find(".pilar-state-dot"); + var cls = "state-pending"; + var fillColor = "#9fb2c6"; + var icon = "✕"; + var dotTitle = "Nao iniciado"; + if (total > 0 && preenchidos === total) { + cls = "state-done"; + fillColor = "#2f9d78"; + icon = "✓"; + dotTitle = "Concluido"; + } else if (preenchidos > 0) { + cls = "state-progress"; + fillColor = "#d18a2f"; + icon = "⚠"; + dotTitle = "Em andamento"; + } + $dot.removeClass("state-pending state-progress state-done").addClass(cls).text(icon).attr("title", dotTitle); + $panel.find(".pilar-mini-fill").css("background", fillColor); + }); + } + + function initAttachmentPlugin() { + if (typeof $.fn.fluigFormAttachment !== "function") { + FLUIGC.toast({ + title: "Plugin:", + message: "fluigFormAttachment.js nao foi carregado.", + type: "warning" + }); + return; + } + $(".anexo-plugin").each(function () { + var $f = $(this); + if ($f.data("ffaInit")) return; + $f.fluigFormAttachment(); + $f.data("ffaInit", true); + }); + } + + function applyAttachmentActionVisibility() { + if (typeof $.fn.fluigFormAttachment !== "function") return; + var isAnalista = CURRENT_PROFILE === "ANALISTA"; + $(".anexo-plugin").each(function () { + var $f = $(this); + if (!$f.data("ffaInit")) return; + if (isAnalista) { + $f.fluigFormAttachment("hideActionButton"); + } else { + $f.fluigFormAttachment("showActionButton"); + } + }); + } + + function findNativeSendButtons($root) { + var $all = $root.find("button, input[type='button'], input[type='submit'], a"); + return $all.filter(function () { + var $el = $(this); + var txt = ($el.is("input") ? ($el.val() || "") : ($el.text() || "")).trim().toLowerCase(); + if (!txt) return false; + return txt === "enviar" || txt.indexOf(" enviar") > -1 || txt.indexOf("enviar ") > -1; + }); + } + + function hideNativeSendButtons() { + try { + var $local = findNativeSendButtons($(document)); + $local.not("#btnEnviarForm").css("display", "none"); + $local.each(function () { + var $group = $(this).closest(".btn-group, .btn-toolbar, .btn-group-vertical, .dropup, .dropdown"); + if ($group.length) { + $group.find(".dropdown-toggle, .btn.dropdown-toggle").css("display", "none"); + } + }); + } catch (e) {} + try { + if (window.parent && window.parent.document) { + var $parentDoc = $(window.parent.document); + var $parentBtns = findNativeSendButtons($parentDoc); + $parentBtns.css("display", "none"); + $parentBtns.each(function () { + var $group = $(this).closest(".btn-group, .btn-toolbar, .btn-group-vertical, .dropup, .dropdown"); + if ($group.length) { + $group.find(".dropdown-toggle, .btn.dropdown-toggle").css("display", "none"); + } + }); + + // Fallback: oculta toggles "soltos" que sobram no split button. + $parentDoc.find(".dropdown-toggle, .btn.dropdown-toggle").filter(function () { + var txt = ($(this).text() || "").trim(); + return txt === "" || txt === "▼" || txt === "▾" || txt === "v"; + }).each(function () { + var $toggle = $(this); + var $group = $toggle.closest(".btn-group, .btn-toolbar, .btn-group-vertical, .dropup, .dropdown"); + if (!$group.length) return; + var hasSendRef = findNativeSendButtons($group).length > 0; + if (hasSendRef) { + $toggle.css("display", "none"); + } + }); + } + } catch (e2) {} + } + + function clickNativeSendButton() { + try { + var $parentDoc = window.parent && window.parent.document ? $(window.parent.document) : $(); + var $native = findNativeSendButtons($parentDoc).first(); + if ($native.length) { + $native.trigger("click"); + return true; + } + } catch (e) {} + try { + var $local = findNativeSendButtons($(document)).not("#btnEnviarForm").first(); + if ($local.length) { + $local.trigger("click"); + return true; + } + } catch (e2) {} + return false; + } + + function syncPayload() { + var rows = []; + var naoConformeList = []; + $(".audit-row").each(function () { + var $tr = $(this); + var peso = parseFloat($tr.find(".peso").text()) || 0; + var resultado = $tr.find(".resultado").val(); + var fator = FATORES[resultado]; + var pontuacao = (typeof fator === "number") ? (peso * fator) : null; + var anexos = []; + $tr.find(".anexo-plugin").each(function () { + var nome = ($(this).val() || "").trim(); + anexos.push(nome); + }); + var anexosPreenchidos = []; + for (var a = 0; a < anexos.length; a++) { + if (anexos[a]) anexosPreenchidos.push(anexos[a]); + } + var indicador = $tr.attr("data-indicador") || ""; + if (resultado === "NAO_CONFORME") { + naoConformeList.push(indicador); + } + rows.push({ + pilar: $tr.attr("data-pilar") || "", + indicador: indicador, + penalidade: $tr.attr("data-penalidade") || "", + peso: peso, + resultado: resultado || "", + fator: (typeof fator === "number") ? fator : null, + pontuacao: pontuacao, + justificativa: ($tr.find(".justificativa").val() || "").trim(), + anexoSequence: "", + anexoKey: "", + anexoNome: anexosPreenchidos.length ? anexosPreenchidos[0] : "", + anexos: anexos, + qtdAnexosPreenchidos: anexosPreenchidos.length + }); + updateRowAttachmentProgress($tr); + }); + $("#qtdNaoConforme").val(String(naoConformeList.length)); + $("#temNaoConforme").val(naoConformeList.length > 0 ? "true" : "false"); + $("#listaNaoConforme").val(naoConformeList.join(" | ")); + $("#saidaAnalise").val(naoConformeList.length > 0 ? "NAO_CONFORME" : "CONFORME"); + $("#auditoriaPayload").val(JSON.stringify(rows)); + updateCompletionStatus(); + renderNaoConformeResumo(); + } + + function findRowByIndicador(indicador) { + var $found = $(); + $(".audit-row").each(function () { + if ($(this).attr("data-indicador") === indicador) { + $found = $(this); + return false; + } + }); + return $found; + } + + function updatePenalidadeVisual($tr) { + var resultado = $tr.find(".resultado").val(); + var penalidadeBase = ($tr.attr("data-penalidade") || "").trim(); + var $badge = $tr.find(".penalidade-status"); + var $justWrap = $tr.find(".just-wrap"); + + if (resultado === "CONFORME") { + $badge + .removeClass("label-danger label-warning label-info label-primary label-default") + .addClass("label-success") + .text("Conforme"); + $justWrap.hide(); + return; + } + + if (resultado === "NAO_CONFORME") { + $badge + .removeClass("label-success label-danger label-warning label-info label-primary label-default") + .addClass("label-" + badgeClass(penalidadeBase)) + .text(penalidadeBase || "Nao Conforme"); + $justWrap.show(); + return; + } + + $badge + .removeClass("label-success label-danger label-warning label-info label-primary") + .addClass("label-default") + .text("Aguardando"); + $justWrap.hide(); + } + + function restorePayload() { + var raw = ($("#auditoriaPayload").val() || "").trim(); + if (!raw) return; + var data = []; + try { + data = JSON.parse(raw); + if (!Array.isArray(data)) return; + } catch (e) { + return; + } + for (var i = 0; i < data.length; i++) { + var saved = data[i]; + var $tr = findRowByIndicador(saved.indicador); + if (!$tr.length) continue; + if (saved.resultado) $tr.find(".resultado").val(saved.resultado); + if (saved.justificativa) $tr.find(".justificativa").val(saved.justificativa); + if (Array.isArray(saved.anexos)) { + var $inputs = $tr.find(".anexo-plugin"); + for (var k = 0; k < saved.anexos.length; k++) { + if (k >= $inputs.length) break; + if (saved.anexos[k]) { + $($inputs.get(k)).val(saved.anexos[k]).trigger("change"); + } + } + } else if (saved.anexoNome) { + $tr.find(".anexo-plugin").first().val(saved.anexoNome).trigger("change"); + } + updatePenalidadeVisual($tr); + } + } + + function recalc() { + var pontosObtidos = 0; + var pontosPossiveis = 0; + + $(".audit-row").each(function () { + var $tr = $(this); + var peso = parseFloat($tr.find(".peso").text()) || 0; + var resultado = $tr.find(".resultado").val(); + var fator = FATORES[resultado]; + var pontuacao = 0; + updatePenalidadeVisual($tr); + + if (typeof fator === "number") { + pontuacao = peso * fator; + $tr.find(".fator").text(fator.toFixed(2)); + $tr.find(".pontuacao").text(pontuacao.toFixed(2)); + if (peso > 0) { + pontosPossiveis += peso; + pontosObtidos += pontuacao; + } + } else { + $tr.find(".fator").text("-"); + $tr.find(".pontuacao").text("0"); + } + }); + + var score = pontosPossiveis > 0 ? (pontosObtidos / pontosPossiveis) * 100 : 0; + $("#pontosObtidos").text(pontosObtidos.toFixed(2)); + $("#pontosPossiveis").text(pontosPossiveis.toFixed(2)); + $("#scoreFinal").text(score.toFixed(2) + "%"); + $("#classificacao").text(getClassificacao(score)); + } + + function validarFormulario() { + var currentState = getCurrentState(); + var isHeaderOnly = FLOW_CONFIG.headerOnlyStates.indexOf(currentState) > -1; + var requiredHeaderFields = [ + { id: "loja", label: "Loja" }, + { id: "responsavelLoja", label: "Responsavel da Loja" }, + { id: "dataAuditoria", label: "Data" }, + { id: "ciclo", label: "Ciclo" }, + { id: "regional", label: "Regional" }, + { id: "dataLimite", label: "Data limite" } + ]; + for (var h = 0; h < requiredHeaderFields.length; h++) { + var hf = requiredHeaderFields[h]; + var $field = $("#" + hf.id); + var value = String($field.val() || "").trim(); + if (!value) { + $field.addClass("has-error"); + FLUIGC.toast({ + title: "Validacao:", + message: "Preencha o campo " + hf.label + ".", + type: "warning" + }); + return false; + } + $field.removeClass("has-error"); + } + var destinoLoja = resolveDestinoLojaFromForm(); + if (!destinoLoja) { + FLUIGC.toast({ + title: "Validacao:", + message: "Selecione a loja na busca (Zoom) para definir o usuario destino.", + type: "warning" + }); + $("#loja").addClass("has-error"); + return false; + } + $("#loja").removeClass("has-error"); + if (isHeaderOnly) { + return true; + } + + var erros = []; + $(".audit-row").each(function (idx) { + var $tr = $(this); + var resultado = $tr.find(".resultado").val(); + var justificativa = ($tr.find(".justificativa").val() || "").trim(); + var $anexoInputs = $tr.find(".anexo-plugin"); + var indicador = $tr.attr("data-indicador") || ""; + var $resultadoCell = $tr.find(".resultado-wrap"); + var $anexoCell = $tr.find(".anexo-wrap"); + + if (resultado === "NAO_CONFORME" && justificativa.length === 0) { + erros.push("Linha " + (idx + 1) + " (" + indicador + "): justificativa obrigatoria."); + $tr.find(".just-wrap").addClass("has-error"); + } else { + $tr.find(".just-wrap").removeClass("has-error"); + } + + if (CURRENT_PROFILE === "ANALISTA") { + if (!resultado) { + erros.push("Linha " + (idx + 1) + " (" + indicador + "): selecione o resultado."); + $resultadoCell.addClass("has-error"); + } else { + $resultadoCell.removeClass("has-error"); + } + } + + if (REQUIRE_ATTACHMENT) { + var hasErrorAnexo = false; + $anexoInputs.each(function () { + var $anexoInput = $(this); + var anexoNome = ($anexoInput.val() || "").trim(); + var hasAttachment = anexoNome.length > 0; + var isValidAttachment = true; + if (typeof $.fn.fluigFormAttachment === "function" && $anexoInput.data("ffaInit")) { + try { + hasAttachment = $anexoInput.fluigFormAttachment("hasAttachment"); + isValidAttachment = $anexoInput.fluigFormAttachment("isValid"); + } catch (e) {} + } + if (!hasAttachment) { + hasErrorAnexo = true; + return false; + } + if (!isValidAttachment) { + hasErrorAnexo = true; + return false; + } + if (!ALLOWED_EXT[getExt(anexoNome)]) { + hasErrorAnexo = true; + return false; + } + }); + if (hasErrorAnexo) { + erros.push("Linha " + (idx + 1) + " (" + indicador + "): revise os anexos obrigatorios (PDF/JPG/PNG)."); + $anexoCell.addClass("has-error"); + } else { + $anexoCell.removeClass("has-error"); + } + } else { + $anexoCell.removeClass("has-error"); + } + }); + + syncPayload(); + + if (erros.length > 0) { + FLUIGC.toast({ + title: "Validacao:", + message: erros[0], + type: "warning" + }); + return false; + } + return true; + } + + $(document).ready(function () { + var wkState = getCurrentState(); + CURRENT_PROFILE = resolveProfileByState(wkState); + fillDataAuditoriaTodayIfEmpty(); + fillAuditorFromLoggedUser(); + if (!($("#usuarioRetorno").val() || "").trim()) { + $("#usuarioRetorno").val(getCurrentUserLogin()); + } + montaTabela(); + initAttachmentPlugin(); + restorePayload(); + applyProfileUI(); + recalc(); + syncPayload(); + $(".audit-row").each(function () { + updatePenalidadeVisual($(this)); + }); + + $("#pilaresContainer").on("click", ".pilar-head", function () { + var target = $(this).attr("data-target"); + var $head = $(this); + var $panel = $head.closest(".pilar-panel"); + $("#" + target).stop(true, true).slideToggle(120, function () { + var isOpen = $(this).is(":visible"); + $head.toggleClass("is-open", isOpen); + $panel.toggleClass("is-open", isOpen); + $head.find(".pilar-open-cta").text(isOpen ? "Fechar Pilar ↑" : "Abrir Pilar →"); + }); + }); + + $("#pilaresContainer").on("change", ".resultado", function () { + recalc(); + syncPayload(); + }); + + $("#pilaresContainer").on("change keyup", ".justificativa", function () { + syncPayload(); + }); + + $("#pilaresContainer").on("change", ".anexo-plugin", function () { + syncPayload(); + }); + + $("#loja").on("change blur", function () { + fillHeaderByLoja(); + }); + + $("#pilaresContainer").on("click", ".anexo-toggle", function () { + var $btn = $(this); + var expanded = $btn.attr("data-expanded") === "true"; + var total = parseInt($btn.attr("data-total"), 10) || 0; + var $wrap = $btn.closest(".anexos-cell"); + var $list = $wrap.find(".anexo-multi-list").first(); + if (expanded) { + $list.removeClass("expanded"); + $btn.attr("data-expanded", "false").text("Mostrar todas (" + total + ")"); + } else { + $list.addClass("expanded"); + $btn.attr("data-expanded", "true").text("Mostrar menos"); + } + }); + + $(document).on("click", ".nc-item", function () { + var pilar = $(this).attr("data-pilar") || ""; + var indicador = $(this).attr("data-indicador") || ""; + var $tr = $(".audit-row[data-pilar='" + pilar.replace(/'/g, "\\'") + "'][data-indicador='" + indicador.replace(/'/g, "\\'") + "']").first(); + if (!$tr.length) { + $tr = findRowByIndicador(indicador); + } + if (!$tr.length) return; + $tr.addClass("audit-row-target"); + setTimeout(function () { $tr.removeClass("audit-row-target"); }, 1600); + $("html, body").animate({ scrollTop: $tr.offset().top - 120 }, 250); + }); + + hideNativeSendButtons(); + setTimeout(hideNativeSendButtons, 600); + + $("#btnEnviarForm").on("click", function () { + try { + console.info("[checklist][ui] enviar clicado", { + loja: $("#loja").val(), + destinoLoja: $("#destinoLoja").val(), + destinoLojaId: $("#destinoLojaId").val(), + responsavelLoja: $("#responsavelLoja").val(), + regional: $("#regional").val() + }); + } catch (e) {} + if (!validarFormulario()) return; + var clicked = clickNativeSendButton(); + if (!clicked) { + FLUIGC.toast({ + title: "Envio:", + message: "Nao foi possivel acionar o botao nativo de Enviar.", + type: "warning" + }); + } + }); + + window.setSelectedZoomItem = function (selectedItem) { + if (!selectedItem) return; + if (selectedItem.inputId !== "loja" && selectedItem.inputName !== "loja") return; + $("#responsavelLoja").val(String(selectedItem.RESPONSAVEL_LOJA || "").trim()); + $("#regional").val(String(selectedItem.REGIONAL || "").trim()); + var loginLoja = String(selectedItem.LOGIN_LOJA || "").trim(); + var colleagueId = String(selectedItem.COLLEAGUE_LOGIN || "").trim(); + if (!loginLoja) { + loginLoja = toLojaLoginFromPdv(selectedItem.PDV); + } + $("#destinoLoja").val(loginLoja); + $("#destinoLojaId").val(colleagueId); + try { + console.info("[checklist][zoom] loja selecionada", { + loja: selectedItem.LOJA, + pdv: selectedItem.PDV, + loginLoja: loginLoja, + colleagueId: colleagueId + }); + } catch (e) {} + }; + + window.removedZoomItem = function (removedItem) { + if (!removedItem) return; + if (removedItem.inputId !== "loja" && removedItem.inputName !== "loja") return; + $("#responsavelLoja").val(""); + $("#regional").val(""); + $("#destinoLoja").val(""); + $("#destinoLojaId").val(""); + try { + console.info("[checklist][zoom] loja removida"); + } catch (e) {} + }; + + window.beforeSendValidate = function () { + try { + console.info("[checklist][ui] beforeSendValidate", { + destinoLoja: $("#destinoLoja").val(), + destinoLojaId: $("#destinoLojaId").val(), + destinoIdResolved: resolveDestinoLojaIdFromForm() + }); + } catch (e) {} + return validarFormulario(); + }; + }); diff --git a/Auditoria_checklist/forms/40213 - checklist/assets/js/fluigFormAttachment.js b/Auditoria_checklist/forms/40213 - checklist/assets/js/fluigFormAttachment.js new file mode 100644 index 0000000..a4763ce --- /dev/null +++ b/Auditoria_checklist/forms/40213 - checklist/assets/js/fluigFormAttachment.js @@ -0,0 +1,423 @@ +/** + * 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); + + return this.#settings.showActionButton + && parent.ECM.workflowView.userPermissions.indexOf("P") >= 0 + && location.href.includes('ManagerMode') + && !location.href.includes('token') + && 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/Auditoria_checklist/forms/40213 - checklist/assets/js/fluigFormAttachment.min.js b/Auditoria_checklist/forms/40213 - checklist/assets/js/fluigFormAttachment.min.js new file mode 100644 index 0000000..23dd23a --- /dev/null +++ b/Auditoria_checklist/forms/40213 - checklist/assets/js/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/Auditoria_checklist/forms/40213 - checklist/assets/teste b/Auditoria_checklist/forms/40213 - checklist/assets/teste new file mode 100644 index 0000000..e69de29 diff --git a/Auditoria_checklist/forms/40213 - checklist/auditoria_prototipo.html b/Auditoria_checklist/forms/40213 - checklist/auditoria_prototipo.html new file mode 100644 index 0000000..405feb1 --- /dev/null +++ b/Auditoria_checklist/forms/40213 - checklist/auditoria_prototipo.html @@ -0,0 +1,166 @@ + + + + + + + + + + + +
+
+
+
+ Perfil: Loja + Evidências: 0/0 +
+ +

Checklist de Auditoria dos Pilares

+ +
+
+
+
+
i
+
Envie as fotos dos pilares
+
+
+ 1. Clique em um PILAR + 3. Clique em ANEXAR para enviar a foto solicitada + 5. Envie para concluir + 2. Verifique as INSTRUÇÕES + 4. Confira em VISUALIZAR +
+
+
+ +
+ +
+
Dados da Auditoria
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + + +
+

Progresso da Auditoria

+
+
+
+
+
0%
+
+
0 de 0 fotos enviadas
+
+ +
+
+
+
+
0%
+ Score final +
+
+
+
+
+
+
0
+ Pontos obtidos +
+
+
+
+
+
+
0
+ Pontos possíveis +
+
+
+
+
+
+
-
+ Classificação +
+
+
+
+ +

Pilares Analisados

+
+
+
+
+ +
+ + + + + + + + +
+
+
+ + + + diff --git a/Auditoria_checklist/templates/email/CHECKLIST_CONFORME.html b/Auditoria_checklist/templates/email/CHECKLIST_CONFORME.html new file mode 100644 index 0000000..b76ad8f --- /dev/null +++ b/Auditoria_checklist/templates/email/CHECKLIST_CONFORME.html @@ -0,0 +1,32 @@ + + + + + + Checklist Aprovado + + + +
+
Checklist aprovado
+
+

O checklist ${numeroSolicitacao} foi aprovado como conforme.

+
+
Loja: ${loja}
+
Status: Conforme
+
+ Abrir solicitacao + +
+
+ + diff --git a/Auditoria_checklist/templates/email/CHECKLIST_NAO_CONFORME.html b/Auditoria_checklist/templates/email/CHECKLIST_NAO_CONFORME.html new file mode 100644 index 0000000..87da187 --- /dev/null +++ b/Auditoria_checklist/templates/email/CHECKLIST_NAO_CONFORME.html @@ -0,0 +1,34 @@ + + + + + + Checklist com Pendencias + + + +
+
Checklist com pendencias de correcao
+
+

O checklist ${numeroSolicitacao} foi analisado e retornou para correcao.

+
+
Loja: ${loja}
+
Qtd. nao conforme: ${qtdNaoConforme}
+
Itens: ${listaNaoConforme}
+
+

Revise os itens e anexe as evidencias corrigidas.

+ Abrir solicitacao + +
+
+ + diff --git a/Auditoria_checklist/wcm/layout/helloLayout/src/main/resources/application.info b/Auditoria_checklist/wcm/layout/helloLayout/src/main/resources/application.info new file mode 100644 index 0000000..084c78c --- /dev/null +++ b/Auditoria_checklist/wcm/layout/helloLayout/src/main/resources/application.info @@ -0,0 +1,23 @@ +application.type=layout +application.code=helloLayout +application.title=helloLayout +application.description=helloLayout +application.fluig.version=null +application.category=SYSTEM +application.renderer=freemarker +developer.code=andrey.cunha +developer.name=andrey.cunha +developer.url=http://www.fluig.com +layout.defaultSlot=SlotA +layout.file=layout.ftl +locale.file.base.name=helloLayout +slot.SlotGlobalAlert=alertpopover +slot.SlotInstantSearch=suggestsearch +slot.SlotLogin=sociallogin +slot.SlotMenu=menu +slot.SlotUsePolicy=usepolicy +application.icon=icon.png +application.resource.css.1=/portal/resources/css/wcm_responsive_layout.css +application.responsiveLayout=true +application.newBuilder=true +hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2 diff --git a/Auditoria_checklist/wcm/layout/helloLayout/src/main/resources/helloLayout.properties b/Auditoria_checklist/wcm/layout/helloLayout/src/main/resources/helloLayout.properties new file mode 100644 index 0000000..1c793e4 --- /dev/null +++ b/Auditoria_checklist/wcm/layout/helloLayout/src/main/resources/helloLayout.properties @@ -0,0 +1 @@ +application.title=applicationTitle diff --git a/Auditoria_checklist/wcm/layout/helloLayout/src/main/resources/helloLayout_en_US.properties b/Auditoria_checklist/wcm/layout/helloLayout/src/main/resources/helloLayout_en_US.properties new file mode 100644 index 0000000..1c793e4 --- /dev/null +++ b/Auditoria_checklist/wcm/layout/helloLayout/src/main/resources/helloLayout_en_US.properties @@ -0,0 +1 @@ +application.title=applicationTitle diff --git a/Auditoria_checklist/wcm/layout/helloLayout/src/main/resources/helloLayout_es.properties b/Auditoria_checklist/wcm/layout/helloLayout/src/main/resources/helloLayout_es.properties new file mode 100644 index 0000000..1c793e4 --- /dev/null +++ b/Auditoria_checklist/wcm/layout/helloLayout/src/main/resources/helloLayout_es.properties @@ -0,0 +1 @@ +application.title=applicationTitle diff --git a/Auditoria_checklist/wcm/layout/helloLayout/src/main/resources/helloLayout_pt_BR.properties b/Auditoria_checklist/wcm/layout/helloLayout/src/main/resources/helloLayout_pt_BR.properties new file mode 100644 index 0000000..1c793e4 --- /dev/null +++ b/Auditoria_checklist/wcm/layout/helloLayout/src/main/resources/helloLayout_pt_BR.properties @@ -0,0 +1 @@ +application.title=applicationTitle diff --git a/Auditoria_checklist/wcm/layout/helloLayout/src/main/resources/layout.ftl b/Auditoria_checklist/wcm/layout/helloLayout/src/main/resources/layout.ftl new file mode 100644 index 0000000..9f40543 --- /dev/null +++ b/Auditoria_checklist/wcm/layout/helloLayout/src/main/resources/layout.ftl @@ -0,0 +1,41 @@ +<#import "/wcm.ftl" as wcm /> + +<#-- Variaveis globais para os layouts --> +<#import "/layout-globals.ftl" as globals /> + + + +<#if pageRender.isPreviewMode() = true> + <@wcm.previewPageAlert /> + <@wcm.deviceTogglePreview /> + + +
+ + <#if pageRender.isEditMode() != true> + <@wcm.header /> + <@wcm.menu /> + + +
+ +
+ + <#if pageRender.isEditMode() = true> + <@wcm.editHeader /> + <@wcm.widgetsList /> + + +
+ + + + + <#if fluigThemeCode != "responsive_theme"> + <@wcm.footer layoutuserlabel="wcm.layoutdefaultecmdashboard.user" /> + +
+ +
+
+
\ No newline at end of file diff --git a/Auditoria_checklist/wcm/layout/helloLayout/src/main/webapp/WEB-INF/jboss-web.xml b/Auditoria_checklist/wcm/layout/helloLayout/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..49991c7 --- /dev/null +++ b/Auditoria_checklist/wcm/layout/helloLayout/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /helloLayout + false + diff --git a/Auditoria_checklist/wcm/layout/helloLayout/src/main/webapp/WEB-INF/web.xml b/Auditoria_checklist/wcm/layout/helloLayout/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..6797e41 --- /dev/null +++ b/Auditoria_checklist/wcm/layout/helloLayout/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,12 @@ + + + + + + 30 + + + diff --git a/Auditoria_checklist/wcm/layout/helloLayout/src/main/webapp/resources/css/helloLayout.css b/Auditoria_checklist/wcm/layout/helloLayout/src/main/webapp/resources/css/helloLayout.css new file mode 100644 index 0000000..20bf48d --- /dev/null +++ b/Auditoria_checklist/wcm/layout/helloLayout/src/main/webapp/resources/css/helloLayout.css @@ -0,0 +1 @@ +/*insira aqui seu código CSS*/ \ No newline at end of file diff --git a/Auditoria_checklist/wcm/layout/helloLayout/src/main/webapp/resources/images/icon.png b/Auditoria_checklist/wcm/layout/helloLayout/src/main/webapp/resources/images/icon.png new file mode 100644 index 0000000..6085dba Binary files /dev/null and b/Auditoria_checklist/wcm/layout/helloLayout/src/main/webapp/resources/images/icon.png differ diff --git a/Auditoria_checklist/wcm/layout/helloLayout/src/main/webapp/resources/js/helloLayout.js b/Auditoria_checklist/wcm/layout/helloLayout/src/main/webapp/resources/js/helloLayout.js new file mode 100644 index 0000000..09b0e44 --- /dev/null +++ b/Auditoria_checklist/wcm/layout/helloLayout/src/main/webapp/resources/js/helloLayout.js @@ -0,0 +1,2 @@ +// Insira aqui seu codigo JavaScript + diff --git a/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/application.info b/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/application.info new file mode 100644 index 0000000..252f508 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/application.info @@ -0,0 +1,19 @@ +application.type=widget +application.code=dashconforme +application.title=dashconforme +application.description=dashconforme +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=dashconforme +application.resource.js.1=/resources/js/dashconforme.js +application.resource.css.2=/resources/css/dashconforme.css +hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2 diff --git a/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/dashconforme.properties b/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/dashconforme.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/dashconforme.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/dashconforme_en_US.properties b/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/dashconforme_en_US.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/dashconforme_en_US.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/dashconforme_es.properties b/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/dashconforme_es.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/dashconforme_es.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/dashconforme_pt_BR.properties b/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/dashconforme_pt_BR.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/dashconforme_pt_BR.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/edit.ftl b/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/edit.ftl new file mode 100644 index 0000000..3bc9ca3 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/edit.ftl @@ -0,0 +1,4 @@ +
+ +
+ diff --git a/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/view.ftl b/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/view.ftl new file mode 100644 index 0000000..0425dc7 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashconforme/src/main/resources/view.ftl @@ -0,0 +1,11 @@ +
+ +
+
+

Top Inconformidades

+
+
+ +
+
+
diff --git a/Auditoria_checklist/wcm/widget/dashconforme/src/main/webapp/WEB-INF/jboss-web.xml b/Auditoria_checklist/wcm/widget/dashconforme/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..df0a72b --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashconforme/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /dashconforme + false + diff --git a/Auditoria_checklist/wcm/widget/dashconforme/src/main/webapp/WEB-INF/web.xml b/Auditoria_checklist/wcm/widget/dashconforme/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..6797e41 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashconforme/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,12 @@ + + + + + + 30 + + + diff --git a/Auditoria_checklist/wcm/widget/dashconforme/src/main/webapp/resources/css/dashconforme.css b/Auditoria_checklist/wcm/widget/dashconforme/src/main/webapp/resources/css/dashconforme.css new file mode 100644 index 0000000..f90ef0e --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashconforme/src/main/webapp/resources/css/dashconforme.css @@ -0,0 +1,3 @@ +div[id^="dashConforme_"] canvas { + max-height: 420px; +} diff --git a/Auditoria_checklist/wcm/widget/dashconforme/src/main/webapp/resources/images/icon.png b/Auditoria_checklist/wcm/widget/dashconforme/src/main/webapp/resources/images/icon.png new file mode 100644 index 0000000..102160c Binary files /dev/null and b/Auditoria_checklist/wcm/widget/dashconforme/src/main/webapp/resources/images/icon.png differ diff --git a/Auditoria_checklist/wcm/widget/dashconforme/src/main/webapp/resources/js/dashconforme.js b/Auditoria_checklist/wcm/widget/dashconforme/src/main/webapp/resources/js/dashconforme.js new file mode 100644 index 0000000..009c5fa --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashconforme/src/main/webapp/resources/js/dashconforme.js @@ -0,0 +1,149 @@ +var DashConforme = SuperWidget.extend({ + + chart:null, + + init:function(){ + + var self=this; + this.renderAmostra(); + + window.addEventListener("dashboardData",function(e){ + + self.render(e.detail || []); + + }); + + }, + + render:function(dados){ + + var mapa = {}; + + dados.forEach(function(item){ + var lista = String(item.listaNaoConforme || "").trim(); + if(!lista){ + return; + } + + lista.split("|").forEach(function(indicador){ + var chave = String(indicador || "").trim(); + if(!chave){ + return; + } + if(!mapa[chave]){ + mapa[chave] = 0; + } + mapa[chave] += 1; + }); + }); + + var pares = Object.keys(mapa).map(function(k){ + return {nome:k,valor:mapa[k]}; + }); + + pares.sort(function(a,b){ + return b.valor - a.valor; + }); + + pares = pares.slice(0,10); + + var labels = pares.map(function(p){ return p.nome; }); + var valores = pares.map(function(p){ return p.valor; }); + + if(!labels.length){ + labels = ["Aguardando filtro"]; + valores = [0]; + } + + var ctx = document.getElementById("graficoConforme_"+this.instanceId); + if(!ctx){ + return; + } + + if(this.chart){ + this.chart.destroy(); + } + + this.chart = new Chart(ctx,{ + type:"bar", + data:{ + labels:labels, + datasets:[{ + label:"Ocorrências", + data:valores, + backgroundColor:"#f39c12" + }] + }, + options:{ + responsive:true, + maintainAspectRatio:false, + indexAxis:"x", + plugins:{ + legend:{display:false}, + tooltip:{ + callbacks:{ + title:function(items){ + if(labels.length === 1 && labels[0] === "Aguardando filtro"){ + return "Aguardando filtro"; + } + return items && items.length ? labels[items[0].dataIndex] : ""; + } + } + } + }, + scales:{ + x:{ + ticks:{ + autoSkip:false, + maxRotation:35, + minRotation:0, + callback:function(value,index){ + var txt = labels[index] || ""; + return txt.length > 38 ? txt.substring(0,38) + "..." : txt; + } + } + }, + y:{ + beginAtZero:true, + precision:0 + } + } + } + }); + + }, + + renderAmostra:function(){ + var ctx = document.getElementById("graficoConforme_"+this.instanceId); + if(!ctx){ + return; + } + + if(this.chart){ + this.chart.destroy(); + } + + this.chart = new Chart(ctx,{ + type:"bar", + data:{ + labels:["Aguardando filtro"], + datasets:[{ + label:"Ocorrências", + data:[0], + backgroundColor:"#cfd8dc" + }] + }, + options:{ + responsive:true, + maintainAspectRatio:false, + plugins:{legend:{display:false}}, + scales:{ + x:{ticks:{autoSkip:false,maxRotation:0,minRotation:0}}, + y:{beginAtZero:true,precision:0} + } + } + }); + + } + +}); diff --git a/Auditoria_checklist/wcm/widget/dashconforme/target/dashconforme.war b/Auditoria_checklist/wcm/widget/dashconforme/target/dashconforme.war new file mode 100644 index 0000000..4581b77 Binary files /dev/null and b/Auditoria_checklist/wcm/widget/dashconforme/target/dashconforme.war differ diff --git a/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/application.info b/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/application.info new file mode 100644 index 0000000..1d0e4dd --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/application.info @@ -0,0 +1,19 @@ +application.type=widget +application.code=dashdata +application.title=dashdata +application.description=dashdata +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=dashdata +application.resource.js.1=/resources/js/dashdata.js +application.resource.css.2=/resources/css/dashdata.css +hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2 diff --git a/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/dashdata.properties b/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/dashdata.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/dashdata.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/dashdata_en_US.properties b/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/dashdata_en_US.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/dashdata_en_US.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/dashdata_es.properties b/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/dashdata_es.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/dashdata_es.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/dashdata_pt_BR.properties b/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/dashdata_pt_BR.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/dashdata_pt_BR.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/edit.ftl b/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/edit.ftl new file mode 100644 index 0000000..3bc9ca3 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/edit.ftl @@ -0,0 +1,4 @@ +
+ +
+ diff --git a/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/view.ftl b/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/view.ftl new file mode 100644 index 0000000..aa64da7 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashdata/src/main/resources/view.ftl @@ -0,0 +1,4 @@ +
+
\ No newline at end of file diff --git a/Auditoria_checklist/wcm/widget/dashdata/src/main/webapp/WEB-INF/jboss-web.xml b/Auditoria_checklist/wcm/widget/dashdata/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..8271c6c --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashdata/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /dashdata + false + diff --git a/Auditoria_checklist/wcm/widget/dashdata/src/main/webapp/WEB-INF/web.xml b/Auditoria_checklist/wcm/widget/dashdata/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..6797e41 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashdata/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,12 @@ + + + + + + 30 + + + diff --git a/Auditoria_checklist/wcm/widget/dashdata/src/main/webapp/resources/css/dashdata.css b/Auditoria_checklist/wcm/widget/dashdata/src/main/webapp/resources/css/dashdata.css new file mode 100644 index 0000000..a23359a --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashdata/src/main/webapp/resources/css/dashdata.css @@ -0,0 +1 @@ +/* Coloque aqui seu codigo CSS */ diff --git a/Auditoria_checklist/wcm/widget/dashdata/src/main/webapp/resources/images/icon.png b/Auditoria_checklist/wcm/widget/dashdata/src/main/webapp/resources/images/icon.png new file mode 100644 index 0000000..102160c Binary files /dev/null and b/Auditoria_checklist/wcm/widget/dashdata/src/main/webapp/resources/images/icon.png differ diff --git a/Auditoria_checklist/wcm/widget/dashdata/src/main/webapp/resources/js/dashdata.js b/Auditoria_checklist/wcm/widget/dashdata/src/main/webapp/resources/js/dashdata.js new file mode 100644 index 0000000..d91b443 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashdata/src/main/webapp/resources/js/dashdata.js @@ -0,0 +1,123 @@ +var DashData = SuperWidget.extend({ + + init:function(){ + + console.log("DashData carregado"); + + var self=this; + + window.addEventListener("dashboardFiltro",function(e){ + + console.log("DashData recebeu filtros:",e.detail); + + self.carregar(e.detail); + + }); + + }, + + carregar:function(filtros){ + + console.log("Consultando dataset...", filtros); + + var self=this; + + $.ajax({ + + url:"/api/public/ecm/dataset/search", + type:"POST", + contentType:"application/json", + + data:JSON.stringify({ + datasetId:"ds_dashboard_checklist" + }), + + success:function(res){ + + console.log("Resposta dataset:",res); + + var dados=res.content || []; + + console.log("Quantidade registros:", dados.length); + + // FILTRO POR LOJA + if(filtros.loja){ + + dados = dados.filter(function(item){ + + return normalizaTexto(item.loja) === normalizaTexto(filtros.loja); + + }); + + } + + // FILTRO POR DATA + if(filtros.dataInicio || filtros.dataFim){ + + dados = dados.filter(function(item){ + + var dataInicioAuditoria = normalizaData(item.dataAuditoria); + var dataLimite = normalizaData(item.dataLimite); + var inicioFiltro = normalizaData(filtros.dataInicio); + var fimFiltro = normalizaData(filtros.dataFim); + + // Mantem quando data de auditoria OU data limite estiver na faixa filtrada + return dataNaFaixa(dataInicioAuditoria, inicioFiltro, fimFiltro) || + dataNaFaixa(dataLimite, inicioFiltro, fimFiltro); + + }); + + } + + // Mantem somente auditorias com status final (evita divergencia entre total e KPIs) + var antesStatus = dados.length; + dados = dados.filter(function(item){ + var st = normalizaTexto(item.saidaAnalise || item.status || ""); + return st === "CONFORME" || st === "NAO_CONFORME"; + }); + console.log("Registros com status final:", dados.length, "de", antesStatus); + + // Ordena por data de auditoria mais recente + dados.sort(function(a,b){ + var da = normalizaData(a.dataAuditoria); + var db = normalizaData(b.dataAuditoria); + if(da < db) return 1; + if(da > db) return -1; + return 0; + }); + + console.log("Registros filtrados:", dados); + + window.dispatchEvent( + new CustomEvent("dashboardData",{detail:dados}) + ); + + } + + }); + + } + +}); + +function normalizaTexto(valor){ + return String(valor || "").trim().toUpperCase(); +} + +function normalizaData(valor){ + var v = String(valor || "").trim(); + return v; +} + +function dataNaFaixa(data, inicio, fim){ + if(!data){ + return false; + } + if(inicio && data < inicio){ + return false; + } + if(fim && data > fim){ + return false; + } + return true; +} diff --git a/Auditoria_checklist/wcm/widget/dashdata/target/dashdata.war b/Auditoria_checklist/wcm/widget/dashdata/target/dashdata.war new file mode 100644 index 0000000..c6e0c33 Binary files /dev/null and b/Auditoria_checklist/wcm/widget/dashdata/target/dashdata.war differ diff --git a/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/application.info b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/application.info new file mode 100644 index 0000000..b425589 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/application.info @@ -0,0 +1,19 @@ +application.type=widget +application.code=dashgrafico +application.title=dashgrafico +application.description=dashgrafico +application.fluig.version=null +application.category=SYSTEM +application.renderer=freemarker +developer.code=G-ALES1NT-TEC09 +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=dashgrafico +application.resource.js.1=/resources/js/dashgrafico.js +application.resource.css.2=/resources/css/dashgrafico.css +hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2 diff --git a/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/dashgrafico.properties b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/dashgrafico.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/dashgrafico.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/dashgrafico_en_US.properties b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/dashgrafico_en_US.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/dashgrafico_en_US.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/dashgrafico_es.properties b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/dashgrafico_es.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/dashgrafico_es.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/dashgrafico_pt_BR.properties b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/dashgrafico_pt_BR.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/dashgrafico_pt_BR.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/edit.ftl b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/edit.ftl new file mode 100644 index 0000000..3bc9ca3 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/edit.ftl @@ -0,0 +1,4 @@ +
+ +
+ diff --git a/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/view.ftl b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/view.ftl new file mode 100644 index 0000000..ba1313f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/resources/view.ftl @@ -0,0 +1,9 @@ +
+ + +
+ +
+
diff --git a/Auditoria_checklist/wcm/widget/dashgrafico/src/main/webapp/WEB-INF/jboss-web.xml b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..556589e --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /dashgrafico + false + diff --git a/Auditoria_checklist/wcm/widget/dashgrafico/src/main/webapp/WEB-INF/web.xml b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..6797e41 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,12 @@ + + + + + + 30 + + + diff --git a/Auditoria_checklist/wcm/widget/dashgrafico/src/main/webapp/resources/css/dashgrafico.css b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/webapp/resources/css/dashgrafico.css new file mode 100644 index 0000000..a23359a --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/webapp/resources/css/dashgrafico.css @@ -0,0 +1 @@ +/* Coloque aqui seu codigo CSS */ diff --git a/Auditoria_checklist/wcm/widget/dashgrafico/src/main/webapp/resources/images/icon.png b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/webapp/resources/images/icon.png new file mode 100644 index 0000000..102160c Binary files /dev/null and b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/webapp/resources/images/icon.png differ diff --git a/Auditoria_checklist/wcm/widget/dashgrafico/src/main/webapp/resources/js/dashgrafico.js b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/webapp/resources/js/dashgrafico.js new file mode 100644 index 0000000..75d6797 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashgrafico/src/main/webapp/resources/js/dashgrafico.js @@ -0,0 +1,91 @@ +var DashGrafico = SuperWidget.extend({ + +chart:null, + +init:function(){ + +var self=this; +this.renderAmostra(); + +window.addEventListener("dashboardData",function(e){ + +self.render(e.detail); + +}); + +}, + +render:function(dados){ + +var conforme=dados.filter(function(i){ +return normalizaStatus(i)=="CONFORME"; +}).length; + +var nao=dados.filter(function(i){ +return normalizaStatus(i)=="NAO_CONFORME"; +}).length; + +var ctx=document.getElementById("grafico_"+this.instanceId); + +if(this.chart){ +this.chart.destroy(); +} + +this.chart=new Chart(ctx,{ + +type:'doughnut', + +data:{ +labels:["Conforme ("+conforme+")","Não Conforme ("+nao+")"], +datasets:[{ +data:[conforme,nao], +backgroundColor:["#2ecc71","#e74c3c"] +}] +}, +options:{ +responsive:true, +maintainAspectRatio:false, +cutout:"48%" +} + +}); + +function normalizaStatus(item){ +var raw = item.saidaAnalise || item.status || ""; +return String(raw).trim().toUpperCase(); +} + +}, + +renderAmostra:function(){ +var ctx=document.getElementById("grafico_"+this.instanceId); +if(!ctx){ +return; +} + +if(this.chart){ +this.chart.destroy(); +} + +this.chart=new Chart(ctx,{ +type:'doughnut', +data:{ +labels:["Conforme (0)","Não Conforme (0)"], +datasets:[{ +data:[1,0], +backgroundColor:["#cfd8dc","#eceff1"] +}] +}, +options:{ +responsive:true, +maintainAspectRatio:false, +cutout:"48%", +plugins:{ +tooltip:{enabled:false} +} +} +}); + +} + +}); diff --git a/Auditoria_checklist/wcm/widget/dashgrafico/target/dashgrafico.war b/Auditoria_checklist/wcm/widget/dashgrafico/target/dashgrafico.war new file mode 100644 index 0000000..da47bff Binary files /dev/null and b/Auditoria_checklist/wcm/widget/dashgrafico/target/dashgrafico.war differ diff --git a/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/application.info b/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/application.info new file mode 100644 index 0000000..3f3f424 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/application.info @@ -0,0 +1,19 @@ +application.type=widget +application.code=dashkpi +application.title=dashkpi +application.description=dashkpi +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=dashkpi +application.resource.js.1=/resources/js/dashkpi.js +application.resource.css.2=/resources/css/dashkpi.css +hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2 diff --git a/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/dashkpi.properties b/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/dashkpi.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/dashkpi.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/dashkpi_en_US.properties b/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/dashkpi_en_US.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/dashkpi_en_US.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/dashkpi_es.properties b/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/dashkpi_es.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/dashkpi_es.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/dashkpi_pt_BR.properties b/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/dashkpi_pt_BR.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/dashkpi_pt_BR.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/edit.ftl b/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/edit.ftl new file mode 100644 index 0000000..3bc9ca3 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/edit.ftl @@ -0,0 +1,4 @@ +
+ +
+ diff --git a/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/view.ftl b/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/view.ftl new file mode 100644 index 0000000..489808a --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashkpi/src/main/resources/view.ftl @@ -0,0 +1,44 @@ +
+ +
+ +
+
+
+

Total Auditorias

+

0

+
+
+
+ +
+
+
+

Conformes

+

0

+
+
+
+ +
+
+
+

Não Conformes

+

0

+
+
+
+ +
+
+
+

% Conformidade

+

0%

+
+
+
+ +
+
diff --git a/Auditoria_checklist/wcm/widget/dashkpi/src/main/webapp/WEB-INF/jboss-web.xml b/Auditoria_checklist/wcm/widget/dashkpi/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..7f80d54 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashkpi/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /dashkpi + false + diff --git a/Auditoria_checklist/wcm/widget/dashkpi/src/main/webapp/WEB-INF/web.xml b/Auditoria_checklist/wcm/widget/dashkpi/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..6797e41 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashkpi/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,12 @@ + + + + + + 30 + + + diff --git a/Auditoria_checklist/wcm/widget/dashkpi/src/main/webapp/resources/css/dashkpi.css b/Auditoria_checklist/wcm/widget/dashkpi/src/main/webapp/resources/css/dashkpi.css new file mode 100644 index 0000000..a23359a --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashkpi/src/main/webapp/resources/css/dashkpi.css @@ -0,0 +1 @@ +/* Coloque aqui seu codigo CSS */ diff --git a/Auditoria_checklist/wcm/widget/dashkpi/src/main/webapp/resources/images/icon.png b/Auditoria_checklist/wcm/widget/dashkpi/src/main/webapp/resources/images/icon.png new file mode 100644 index 0000000..102160c Binary files /dev/null and b/Auditoria_checklist/wcm/widget/dashkpi/src/main/webapp/resources/images/icon.png differ diff --git a/Auditoria_checklist/wcm/widget/dashkpi/src/main/webapp/resources/js/dashkpi.js b/Auditoria_checklist/wcm/widget/dashkpi/src/main/webapp/resources/js/dashkpi.js new file mode 100644 index 0000000..615153e --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashkpi/src/main/webapp/resources/js/dashkpi.js @@ -0,0 +1,41 @@ +var DashKPI = SuperWidget.extend({ + +init:function(){ + +var self=this; + +window.addEventListener("dashboardData",function(e){ + +self.calcular(e.detail); + +}); + +}, + +calcular:function(dados){ + +var total=dados.length; + +var conformes=dados.filter(function(i){ +return normalizaStatus(i)=="CONFORME"; +}).length; + +var nao=dados.filter(function(i){ +return normalizaStatus(i)=="NAO_CONFORME"; +}).length; + +var pct= total ? Math.round((conformes/total)*100) : 0; + +$("#kpi_total_"+this.instanceId).text(total); +$("#kpi_ok_"+this.instanceId).text(conformes); +$("#kpi_nok_"+this.instanceId).text(nao); +$("#kpi_pct_"+this.instanceId).text(pct+"%"); + +} + +}); + +function normalizaStatus(item){ +var raw = item.saidaAnalise || item.status || ""; +return String(raw).trim().toUpperCase(); +} diff --git a/Auditoria_checklist/wcm/widget/dashkpi/target/dashkpi.war b/Auditoria_checklist/wcm/widget/dashkpi/target/dashkpi.war new file mode 100644 index 0000000..88ec3ca Binary files /dev/null and b/Auditoria_checklist/wcm/widget/dashkpi/target/dashkpi.war differ diff --git a/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/application.info b/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/application.info new file mode 100644 index 0000000..6f9d18d --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/application.info @@ -0,0 +1,19 @@ +application.type=widget +application.code=dashregional +application.title=dashregional +application.description=dashregional +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=dashregional +application.resource.js.1=/resources/js/dashregional.js +application.resource.css.2=/resources/css/dashregional.css +hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2 diff --git a/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/dashregional.properties b/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/dashregional.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/dashregional.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/dashregional_en_US.properties b/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/dashregional_en_US.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/dashregional_en_US.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/dashregional_es.properties b/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/dashregional_es.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/dashregional_es.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/dashregional_pt_BR.properties b/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/dashregional_pt_BR.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/dashregional_pt_BR.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/edit.ftl b/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/edit.ftl new file mode 100644 index 0000000..3bc9ca3 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/edit.ftl @@ -0,0 +1,4 @@ +
+ +
+ diff --git a/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/view.ftl b/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/view.ftl new file mode 100644 index 0000000..1f83f88 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashregional/src/main/resources/view.ftl @@ -0,0 +1,18 @@ +
+ + +
+
+

Não Conformes por Regional

+
+ +
+ + + +
+
+ +
diff --git a/Auditoria_checklist/wcm/widget/dashregional/src/main/webapp/WEB-INF/jboss-web.xml b/Auditoria_checklist/wcm/widget/dashregional/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..c20130c --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashregional/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /dashregional + false + diff --git a/Auditoria_checklist/wcm/widget/dashregional/src/main/webapp/WEB-INF/web.xml b/Auditoria_checklist/wcm/widget/dashregional/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..6797e41 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashregional/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,12 @@ + + + + + + 30 + + + diff --git a/Auditoria_checklist/wcm/widget/dashregional/src/main/webapp/resources/css/dashregional.css b/Auditoria_checklist/wcm/widget/dashregional/src/main/webapp/resources/css/dashregional.css new file mode 100644 index 0000000..da86e19 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashregional/src/main/webapp/resources/css/dashregional.css @@ -0,0 +1,12 @@ +div[id^="dashRegional_"] { + position: relative !important; + z-index: 1; +} + +div[id^="dashRegional_"] .panel { + overflow: hidden; +} + +div[id^="dashRegional_"] canvas { + max-height: 260px; +} diff --git a/Auditoria_checklist/wcm/widget/dashregional/src/main/webapp/resources/images/icon.png b/Auditoria_checklist/wcm/widget/dashregional/src/main/webapp/resources/images/icon.png new file mode 100644 index 0000000..102160c Binary files /dev/null and b/Auditoria_checklist/wcm/widget/dashregional/src/main/webapp/resources/images/icon.png differ diff --git a/Auditoria_checklist/wcm/widget/dashregional/src/main/webapp/resources/js/dashregional.js b/Auditoria_checklist/wcm/widget/dashregional/src/main/webapp/resources/js/dashregional.js new file mode 100644 index 0000000..e03e722 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashregional/src/main/webapp/resources/js/dashregional.js @@ -0,0 +1,102 @@ +var DashRegional = SuperWidget.extend({ + +chart:null, + +init:function(){ + +var self=this; +this.renderAmostra(); + +window.addEventListener("dashboardData",function(e){ + +self.render(e.detail); + +}); + +}, + +render:function(dados){ + +var mapa={}; + +// soma nao conformes por regional +dados.forEach(function(i){ + +var regional=i.regional || "Sem regional"; + +if(!mapa[regional]) mapa[regional]=0; + +mapa[regional]+=parseInt(i.qtdNaoConforme||0,10) || 0; + +}); + +// transformar em arrays +var labels=Object.keys(mapa); +var valores=Object.values(mapa); + +if(!labels.length){ +labels=["Aguardando filtro"]; +valores=[0]; +} + +// canvas +var ctx=document.getElementById("graficoRegional_"+this.instanceId); + +if(this.chart){ +this.chart.destroy(); +} + +// criar gráfico +this.chart=new Chart(ctx,{ + +type:'bar', + +data:{ +labels:labels, +datasets:[{ +label:"Não conformes", +data:valores, +backgroundColor:"#e74c3c" +}] +}, + +options:{ +responsive:true, +plugins:{ +legend:{display:false} +} +} + +}); + +}, + +renderAmostra:function(){ +var ctx=document.getElementById("graficoRegional_"+this.instanceId); +if(!ctx){ +return; +} + +if(this.chart){ +this.chart.destroy(); +} + +this.chart=new Chart(ctx,{ +type:'bar', +data:{ +labels:["Aguardando filtro"], +datasets:[{ +label:"Não conformes", +data:[0], +backgroundColor:"#cfd8dc" +}] +}, +options:{ +responsive:true, +plugins:{legend:{display:false}} +} +}); + +} + +}); diff --git a/Auditoria_checklist/wcm/widget/dashregional/target/dashregional.war b/Auditoria_checklist/wcm/widget/dashregional/target/dashregional.war new file mode 100644 index 0000000..e6cd419 Binary files /dev/null and b/Auditoria_checklist/wcm/widget/dashregional/target/dashregional.war differ diff --git a/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/application.info b/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/application.info new file mode 100644 index 0000000..622c54a --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/application.info @@ -0,0 +1,19 @@ +application.type=widget +application.code=dashtabela +application.title=dashtabela +application.description=dashtabela +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=dashtabela +application.resource.js.1=/resources/js/dashtabela.js +application.resource.css.2=/resources/css/dashtabela.css +hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2 diff --git a/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/dashtabela.properties b/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/dashtabela.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/dashtabela.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/dashtabela_en_US.properties b/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/dashtabela_en_US.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/dashtabela_en_US.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/dashtabela_es.properties b/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/dashtabela_es.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/dashtabela_es.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/dashtabela_pt_BR.properties b/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/dashtabela_pt_BR.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/dashtabela_pt_BR.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/edit.ftl b/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/edit.ftl new file mode 100644 index 0000000..3bc9ca3 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/edit.ftl @@ -0,0 +1,4 @@ +
+ +
+ diff --git a/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/view.ftl b/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/view.ftl new file mode 100644 index 0000000..40db364 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashtabela/src/main/resources/view.ftl @@ -0,0 +1,44 @@ +
+ + + + + + + + + + + + + + + + + + + + + +
Data InícioData LimiteCicloAuditorResponsável LojaLojaStatus
Aguardando filtro...
+ + + +
diff --git a/Auditoria_checklist/wcm/widget/dashtabela/src/main/webapp/WEB-INF/jboss-web.xml b/Auditoria_checklist/wcm/widget/dashtabela/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..4847a66 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashtabela/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /dashtabela + false + diff --git a/Auditoria_checklist/wcm/widget/dashtabela/src/main/webapp/WEB-INF/web.xml b/Auditoria_checklist/wcm/widget/dashtabela/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..6797e41 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashtabela/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,12 @@ + + + + + + 30 + + + diff --git a/Auditoria_checklist/wcm/widget/dashtabela/src/main/webapp/resources/css/dashtabela.css b/Auditoria_checklist/wcm/widget/dashtabela/src/main/webapp/resources/css/dashtabela.css new file mode 100644 index 0000000..3cf2cfe --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashtabela/src/main/webapp/resources/css/dashtabela.css @@ -0,0 +1,53 @@ +div[id^="dashTabela_"] table th, +div[id^="dashTabela_"] table td { + vertical-align: top; +} + +div[id^="dashTabela_"] table th:nth-child(1), +div[id^="dashTabela_"] table td:nth-child(1), +div[id^="dashTabela_"] table th:nth-child(2), +div[id^="dashTabela_"] table td:nth-child(2), +div[id^="dashTabela_"] table th:nth-child(3), +div[id^="dashTabela_"] table td:nth-child(3) { + white-space: nowrap; +} + +div[id^="dashTabela_"] table th:nth-child(6), +div[id^="dashTabela_"] table td:nth-child(6) { + min-width: 220px; +} + +div[id^="dashTabela_"] .dash-table-footer { + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; + padding-top: 8px; + border-top: 1px solid #eee; +} + +div[id^="dashTabela_"] .dash-page-size { + display: flex; + align-items: center; + gap: 8px; +} + +div[id^="dashTabela_"] .dash-page-size label { + margin: 0; + font-size: 12px; + font-weight: 600; +} + +div[id^="dashTabela_"] .dash-page-size select { + width: 72px; +} + +div[id^="dashTabela_"] .dash-page-info { + font-size: 12px; + color: #666; +} + +div[id^="dashTabela_"] .dash-page-actions { + display: flex; + gap: 6px; +} diff --git a/Auditoria_checklist/wcm/widget/dashtabela/src/main/webapp/resources/images/icon.png b/Auditoria_checklist/wcm/widget/dashtabela/src/main/webapp/resources/images/icon.png new file mode 100644 index 0000000..102160c Binary files /dev/null and b/Auditoria_checklist/wcm/widget/dashtabela/src/main/webapp/resources/images/icon.png differ diff --git a/Auditoria_checklist/wcm/widget/dashtabela/src/main/webapp/resources/js/dashtabela.js b/Auditoria_checklist/wcm/widget/dashtabela/src/main/webapp/resources/js/dashtabela.js new file mode 100644 index 0000000..a175a5a --- /dev/null +++ b/Auditoria_checklist/wcm/widget/dashtabela/src/main/webapp/resources/js/dashtabela.js @@ -0,0 +1,122 @@ +var DashTabela = SuperWidget.extend({ + +dados:[], +paginaAtual:1, +itensPorPagina:5, + +init:function(){ + +var self=this; + +$("#page_prev_"+this.instanceId).on("click",function(){ +if(self.paginaAtual>1){ +self.paginaAtual--; +self.renderPage(); +} +}); + +$("#page_next_"+this.instanceId).on("click",function(){ +var totalPaginas = self.getTotalPaginas(); +if(self.paginaAtual totalPaginas){ +this.paginaAtual = totalPaginas; +} + +var inicio = (this.paginaAtual - 1) * this.itensPorPagina; +var fim = inicio + this.itensPorPagina; +var paginaDados = this.dados.slice(inicio,fim); + +paginaDados.forEach(function(item){ + +html+=""; +html+=""+esc(formataData(item.dataAuditoria))+""; +html+=""+esc(formataData(item.dataLimite))+""; +html+=""+esc(item.ciclo || "")+""; +html+=""+esc(item.auditor || item.usuarioRetorno)+""; +html+=""+esc(item.responsavelLoja)+""; +html+=""+esc(item.loja)+""; +html+=""+esc(statusResumido(item))+""; +html+=""; + +}); + +if(!html){ +html+="Sem dados para o filtro selecionado"; +} + +$("#lista_"+this.instanceId).html(html); +$("#page_info_"+this.instanceId).text("Página " + this.paginaAtual + " de " + totalPaginas + " (" + this.dados.length + " registros)"); +$("#page_prev_"+this.instanceId).prop("disabled", this.paginaAtual <= 1); +$("#page_next_"+this.instanceId).prop("disabled", this.paginaAtual >= totalPaginas); + +}, + +getTotalPaginas:function(){ +if(!this.dados.length){ +return 1; +} +return Math.ceil(this.dados.length / this.itensPorPagina); +} + +}); + +function esc(v){ +return String(v == null ? "" : v) + .replace(/&/g,"&") + .replace(//g,">") + .replace(/\"/g,""") + .replace(/'/g,"'"); +} + +function formataData(v){ +var s = String(v || "").trim(); +if(!s){ +return ""; +} +if(/^\d{4}-\d{2}-\d{2}$/.test(s)){ +var p = s.split("-"); +return p[2] + "/" + p[1] + "/" + p[0]; +} +return s; +} + +function statusResumido(item){ +var s = String(item.saidaAnalise || item.status || "").trim().toUpperCase(); +if(s === "CONFORME"){ +return "CONFORME"; +} +return "NAO_CONFORME"; +} diff --git a/Auditoria_checklist/wcm/widget/dashtabela/target/dashtabela.war b/Auditoria_checklist/wcm/widget/dashtabela/target/dashtabela.war new file mode 100644 index 0000000..9cec4c7 Binary files /dev/null and b/Auditoria_checklist/wcm/widget/dashtabela/target/dashtabela.war differ diff --git a/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/application.info b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/application.info new file mode 100644 index 0000000..db88015 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/application.info @@ -0,0 +1,19 @@ +application.type=widget +application.code=filtrosDash +application.title=filtrosDash +application.description=filtrosDash +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=filtrosDash +application.resource.js.1=/resources/js/filtrosDash.js +application.resource.css.2=/resources/css/filtrosDash.css +hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2 diff --git a/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/edit.ftl b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/edit.ftl new file mode 100644 index 0000000..3bc9ca3 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/edit.ftl @@ -0,0 +1,4 @@ +
+ +
+ diff --git a/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/filtrosDash.properties b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/filtrosDash.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/filtrosDash.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/filtrosDash_en_US.properties b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/filtrosDash_en_US.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/filtrosDash_en_US.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/filtrosDash_es.properties b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/filtrosDash_es.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/filtrosDash_es.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/filtrosDash_pt_BR.properties b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/filtrosDash_pt_BR.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/filtrosDash_pt_BR.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/view.ftl b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/view.ftl new file mode 100644 index 0000000..e861904 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/resources/view.ftl @@ -0,0 +1,34 @@ +
+ +
+ +
+ + +
+ +
+ + +
+ +
+ + + + + +
+ +
+ + +
+ +
+ +
diff --git a/Auditoria_checklist/wcm/widget/filtrosDash/src/main/webapp/WEB-INF/jboss-web.xml b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..3ecf7cd --- /dev/null +++ b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /filtrosDash + false + diff --git a/Auditoria_checklist/wcm/widget/filtrosDash/src/main/webapp/WEB-INF/web.xml b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..6797e41 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,12 @@ + + + + + + 30 + + + diff --git a/Auditoria_checklist/wcm/widget/filtrosDash/src/main/webapp/resources/css/filtrosDash.css b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/webapp/resources/css/filtrosDash.css new file mode 100644 index 0000000..e348c29 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/webapp/resources/css/filtrosDash.css @@ -0,0 +1,7 @@ +div[id^="filtroDash_"] input[list] { + padding-right: 30px; +} + +div[id^="filtroDash_"] .btn[data-filtrar] { + font-weight: 600; +} diff --git a/Auditoria_checklist/wcm/widget/filtrosDash/src/main/webapp/resources/images/icon.png b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/webapp/resources/images/icon.png new file mode 100644 index 0000000..102160c Binary files /dev/null and b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/webapp/resources/images/icon.png differ diff --git a/Auditoria_checklist/wcm/widget/filtrosDash/src/main/webapp/resources/js/filtrosDash.js b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/webapp/resources/js/filtrosDash.js new file mode 100644 index 0000000..e0faf42 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/filtrosDash/src/main/webapp/resources/js/filtrosDash.js @@ -0,0 +1,111 @@ +var FiltroDash = SuperWidget.extend({ + + lojasCarregadas:[], + + init: function(){ + + console.log("FiltroDash carregado"); + + this.carregarLojas(); + + }, + + bindings: { + local:{ + 'filtrar': ['click_filtrar'] + } + }, + + carregarLojas: function(){ + + var self = this; + var dataList = $("#filial_list_"+this.instanceId); + + $.ajax({ + + url: "/api/public/ecm/dataset/search", + type: "POST", + contentType: "application/json", + + data: JSON.stringify({ + datasetId: "ds_lojas_api", + constraints: [], + fields: [], + order: [] + }), + + success: function(response){ + + var dados = response.content || []; + self.lojasCarregadas = dados.map(function(loja){ + return String(loja.LOJA || "").trim(); + }).filter(function(v){ return !!v; }); + + self.lojasCarregadas.sort(function(a,b){ + return a.localeCompare(b); + }); + + self.lojasCarregadas.forEach(function(loja){ + + dataList.append( + '' + ); + + }); + + } + + }); + + }, + + filtrar:function(){ + + console.log("Filtrar clicado"); + + var lojaDigitada = String($("#filial_"+this.instanceId).val() || "").trim(); + + var filtros = { + + dataInicio: $("#dtInicio_"+this.instanceId).val(), + dataFim: $("#dtFim_"+this.instanceId).val(), + loja: this.resolverLoja(lojaDigitada) + + }; + + console.log("Filtros enviados:", filtros); + + window.dispatchEvent( + new CustomEvent("dashboardFiltro",{detail:filtros}) + ); + + }, + + resolverLoja:function(lojaDigitada){ + if(!lojaDigitada){ + return ""; + } + + var buscado = lojaDigitada.toUpperCase(); + if(buscado === "TODAS" || buscado === "TODOS"){ + return ""; + } + var lojas = this.lojasCarregadas || []; + + for(var i=0;i= 0){ + return lojas[j]; + } + } + + return lojaDigitada; + + } + +}); diff --git a/Auditoria_checklist/wcm/widget/filtrosDash/target/filtrosDash.war b/Auditoria_checklist/wcm/widget/filtrosDash/target/filtrosDash.war new file mode 100644 index 0000000..4c5bd70 Binary files /dev/null and b/Auditoria_checklist/wcm/widget/filtrosDash/target/filtrosDash.war differ diff --git a/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/application.info b/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/application.info new file mode 100644 index 0000000..1a3ebe2 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/application.info @@ -0,0 +1,21 @@ +application.type=widget +application.code=helloWidget +application.title=Hello Widget +application.description=Primeira Widget +application.fluig.version=null +application.category=SYSTEM +application.renderer=freemarker +developer.code=G-ALES1NT-TEC09 +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=helloWidget +application.resource.js.1=/resources/js/helloWidget.js +application.resource.css.2=/resources/css/helloWidget.css +hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2 +application.resource.js.3=/resources/js/jsCustom.js +application.icon = dev.png diff --git a/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/edit.ftl b/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/edit.ftl new file mode 100644 index 0000000..4bb5a15 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/edit.ftl @@ -0,0 +1,15 @@ +
+

Estou no arquivo edit.ftl

+ +
+
+

+ Configurações da Widget Hello Widget +

+
+
+ .... configurações que ainda vamos criar +
+
+
+ diff --git a/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/helloWidget.properties b/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/helloWidget.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/helloWidget.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/helloWidget_en_US.properties b/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/helloWidget_en_US.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/helloWidget_en_US.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/helloWidget_es.properties b/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/helloWidget_es.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/helloWidget_es.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/helloWidget_pt_BR.properties b/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/helloWidget_pt_BR.properties new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/helloWidget_pt_BR.properties @@ -0,0 +1,2 @@ + + diff --git a/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/view.ftl b/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/view.ftl new file mode 100644 index 0000000..19dda99 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/helloWidget/src/main/resources/view.ftl @@ -0,0 +1,33 @@ +
+

Estou no arquivo view.ftl

+ +
+
+

Hello Widget

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

Olá ${pageRender.getUser().fullName}

+
+
+ + +
+ diff --git a/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/WEB-INF/jboss-web.xml b/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..24853a1 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /helloWidget + false + diff --git a/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/WEB-INF/web.xml b/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..6797e41 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,12 @@ + + + + + + 30 + + + diff --git a/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/resources/css/helloWidget.css b/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/resources/css/helloWidget.css new file mode 100644 index 0000000..a23359a --- /dev/null +++ b/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/resources/css/helloWidget.css @@ -0,0 +1 @@ +/* Coloque aqui seu codigo CSS */ diff --git a/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/resources/images/dev.png b/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/resources/images/dev.png new file mode 100644 index 0000000..ecc1094 Binary files /dev/null and b/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/resources/images/dev.png differ diff --git a/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/resources/images/icon.png b/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/resources/images/icon.png new file mode 100644 index 0000000..102160c Binary files /dev/null and b/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/resources/images/icon.png differ diff --git a/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/resources/js/helloWidget.js b/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/resources/js/helloWidget.js new file mode 100644 index 0000000..4e0ec95 --- /dev/null +++ b/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/resources/js/helloWidget.js @@ -0,0 +1,23 @@ +var FiltroDash = SuperWidget.extend({ + + init: function(){}, + + bindings: { + local: { + 'filtrar': ['click_filtrar'] + } + }, + + filtrar: function(){ + + var filtros = { + inicio: $("#dtInicio_"+this.instanceId).val(), + fim: $("#dtFim_"+this.instanceId).val(), + filial: $("#filial_"+this.instanceId).val() + }; + + window.dispatchEvent( + new CustomEvent("dashboardFiltro", {detail: filtros}) + ); + + } \ No newline at end of file diff --git a/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/resources/js/jsCustom.js b/Auditoria_checklist/wcm/widget/helloWidget/src/main/webapp/resources/js/jsCustom.js new file mode 100644 index 0000000..e69de29 diff --git a/Auditoria_checklist/wcm/widget/helloWidget/target/helloWidget.war b/Auditoria_checklist/wcm/widget/helloWidget/target/helloWidget.war new file mode 100644 index 0000000..419ab71 Binary files /dev/null and b/Auditoria_checklist/wcm/widget/helloWidget/target/helloWidget.war differ diff --git a/Auditoria_checklist/workflow/.resources/Ginseng Produção.ws.cache b/Auditoria_checklist/workflow/.resources/Ginseng Produção.ws.cache new file mode 100644 index 0000000..6b9f12d --- /dev/null +++ b/Auditoria_checklist/workflow/.resources/Ginseng Produção.ws.cache @@ -0,0 +1,717 @@ + + + + + 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 + + + + + + + camposFormulario, documentoId = 40213 + + + auditor + + + auditoriaPayload + + + ciclo + + + dataAuditoria + + + dataLimite + + + destinoLoja + + + destinoLojaId + + + listaNaoConforme + + + loja + + + qtdNaoConforme + + + regional + + + responsavelLoja + + + saidaAnalise + + + temNaoConforme + + + usuarioRetorno + + + + + 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 + + + + + + + diff --git a/Auditoria_checklist/workflow/.resources/Ginseng Produção.ws.cache.bkp b/Auditoria_checklist/workflow/.resources/Ginseng Produção.ws.cache.bkp new file mode 100644 index 0000000..c8ca446 --- /dev/null +++ b/Auditoria_checklist/workflow/.resources/Ginseng Produção.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/Auditoria_checklist/workflow/.resources/checklist.ecm30.xml b/Auditoria_checklist/workflow/.resources/checklist.ecm30.xml new file mode 100644 index 0000000..b3e841a --- /dev/null +++ b/Auditoria_checklist/workflow/.resources/checklist.ecm30.xml @@ -0,0 +1,718 @@ + + + + 1 + checklist + + checklist + + true + false + Default + + + 0 + 0 + 0 + Default + false + + 1 + true + false + 0 + 0 + true + + + + 1 + checklist + 19 + + + 40213 + true + false + false + true + false + false + 0 + 2 + + false + false + false + + + + + 1 + checklist + 1 + 4 + + Início + Início + + 0 + false + 0 + + + 1 + true + true + false + 3600 + 3600 + 0 + 0 + false + + 0 + false + false + false + 130 + 570 + 0 + 0 + false + false + 0 + 0 + false + Expediente BackOffice, Logística e Motorista + 0 + 10 + 0 + false + 0 + 0 + 0 + 0 + + false + + + + 1 + checklist + 1 + 5 + + Fazer Planograma + Fazer Planograma + + 0 + dataLimite + false + 0 + Campo Formulário + <AssignmentController><FormField>destinoLojaId</FormField></AssignmentController> + 1 + false + true + false + 3600 + 3600 + 0 + 0 + false + + 0 + true + false + false + 320 + 550 + 0 + 0 + false + false + 0 + 0 + false + Expediente BackOffice, Logística e Motorista + 0 + 80 + 0 + false + 0 + 0 + 0 + 0 + + false + 0 + + + + 1 + checklist + 1 + 9 + + Refazer Planograma + Refazer Planograma + + 0 + + false + 0 + 1 + false + true + false + 3600 + 3600 + 0 + 0 + false + + 0 + true + false + false + 670 + 169 + 0 + 0 + false + false + 0 + 0 + false + + 0 + 80 + 0 + false + 0 + 0 + 0 + 0 + + false + 0 + + + + 1 + checklist + 1 + 11 + + Enviar Email e PDF + Enviar Email e PDF + + 600 + + false + 0 + + 1 + false + true + false + 3600 + 3600 + 0 + 0 + false + + 0 + true + false + false + 1000 + 550 + 0 + 0 + false + false + 0 + 0 + false + + 0 + 80 + 0 + false + 0 + 0 + 0 + 0 + + false + 0 + + + + 1 + checklist + 1 + 24 + + Analisar Planograma + Analisar Planograma + + 0 + + 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 + 520 + 550 + 0 + 0 + false + false + 0 + 0 + false + + 0 + 80 + 0 + false + 0 + 0 + 0 + 0 + + false + 0 + + + + 1 + checklist + 1 + 7 + + Análise + Análise + false + false + false + + 0 + true + 700 + 540 + false + 1 + 120 + 0 + 0 + + false + + + + 1 + checklist + 1 + 21 + + Concluído + Concluído + Esta atividade indica que o processo terminado e que não ocorrerá nenhum tipo de pós processamento. + 0 + false + 0 + + + 0 + false + false + false + 0 + 1 + 0 + 0 + false + + 0 + false + true + false + 1320 + 570 + 0 + 0 + false + false + 0 + 0 + false + + 6 + 68 + 0 + false + 0 + + false + + + + + + 1 + checklist + 1 + 19 + 7 + + hAPI.getCardValue("saidaAnalise") == "NAO_CONFORME" + 9 + <AssignmentController><BaseActivity>4</BaseActivity><Returns>Last</Returns></AssignmentController> + Executor Atividade + 0 + + + + 1 + checklist + 2 + 19 + 7 + + hAPI.getCardValue("saidaAnalise") == "CONFORME" + 11 + 0 + + + + + + 1 + checklist + 1 + 6 + + + false + 4 + 5 + + + false + false + 0 + + + + 1 + checklist + 1 + 12 + + Conforme + false + 7 + 11 + + Conforme + false + false + 0 + + + + 1 + checklist + 1 + 15 + + Enviar correção + false + 9 + 5 + + Enviar correção do planograma + false + false + 0 + + + + 1 + checklist + 1 + 22 + + + false + 11 + 21 + + + false + false + 0 + + + + 1 + checklist + 1 + 23 + + + false + 7 + 9 + + + false + false + 0 + + + + 1 + checklist + 1 + 25 + + + false + 5 + 24 + + + false + false + 0 + + + + 1 + checklist + 1 + 26 + + + false + 24 + 7 + + + false + false + 0 + + + + + + + 1 + ENG_LITERALS + checklist + 1 + + process.description=checklist +process.category= +process.instructions= + + + + 1 + ESP_LITERALS + checklist + 1 + + process.description=checklist +process.category= +process.instructions= + + + + 1 + POR_LITERALS + checklist + 1 + + process.description=checklist +process.category= +process.instructions= + + + + + + FFFFFF + 571 + 1521 + 10 + 100 + Compliance + 1 + 0 + + 1 + checklist + 1 + 1 + + + + FFFFFF + 286 + 1491 + 40 + 385 + Lojas + 2 + 1 + + 1 + checklist + 1 + 2 + + + + C0C0C0 + 285 + 1491 + 40 + 100 + Analista + 2 + 1 + + 1 + checklist + 1 + 3 + + + + + + + + + 1 + checklist + 19 + 15 + 1 + + 372 + 208 + + + + + + + + 1 + checklist + auditor + + Analista + 1 + + + + 1 + checklist + ciclo + + Ciclo + 2 + + + + 1 + checklist + dataAuditoria + + Data + 3 + + + + 1 + checklist + dataLimite + + Prazo + 4 + + + + 1 + checklist + destinoLoja + + Loja + 5 + + + + 1 + checklist + listaNaoConforme + + Não conforme + 6 + + + + 1 + checklist + qtdNaoConforme + + Quantidade + 7 + + + + 1 + checklist + regional + + Regional + 8 + + + + 1 + checklist + responsavelLoja + + Gerente + 9 + + + + + + + + \ No newline at end of file diff --git a/Auditoria_checklist/workflow/.resources/checklist.png b/Auditoria_checklist/workflow/.resources/checklist.png new file mode 100644 index 0000000..026ca85 Binary files /dev/null and b/Auditoria_checklist/workflow/.resources/checklist.png differ diff --git a/Auditoria_checklist/workflow/.resources/checklist.processimage.svg b/Auditoria_checklist/workflow/.resources/checklist.processimage.svg new file mode 100644 index 0000000..4ca4b36 --- /dev/null +++ b/Auditoria_checklist/workflow/.resources/checklist.processimage.svg @@ -0,0 +1,2 @@ + +AnalistaLojasComplianceFazerPlanogramaAnáliseRefazerPlanogramaEnviar Emaile PDFAnalisarPlanogramaConformeEnviar correção doplanograma diff --git a/Auditoria_checklist/workflow/diagrams/checklist.process b/Auditoria_checklist/workflow/diagrams/checklist.process new file mode 100644 index 0000000..c3aea3f --- /dev/null +++ b/Auditoria_checklist/workflow/diagrams/checklist.process @@ -0,0 +1,1142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Auditoria_checklist/workflow/literals/checklist_en_US.properties b/Auditoria_checklist/workflow/literals/checklist_en_US.properties new file mode 100644 index 0000000..d60e94c --- /dev/null +++ b/Auditoria_checklist/workflow/literals/checklist_en_US.properties @@ -0,0 +1,3 @@ +process.description=checklist +process.category= +process.instructions= \ No newline at end of file diff --git a/Auditoria_checklist/workflow/literals/checklist_es.properties b/Auditoria_checklist/workflow/literals/checklist_es.properties new file mode 100644 index 0000000..d60e94c --- /dev/null +++ b/Auditoria_checklist/workflow/literals/checklist_es.properties @@ -0,0 +1,3 @@ +process.description=checklist +process.category= +process.instructions= \ No newline at end of file diff --git a/Auditoria_checklist/workflow/literals/checklist_pt_BR.properties b/Auditoria_checklist/workflow/literals/checklist_pt_BR.properties new file mode 100644 index 0000000..d60e94c --- /dev/null +++ b/Auditoria_checklist/workflow/literals/checklist_pt_BR.properties @@ -0,0 +1,3 @@ +process.description=checklist +process.category= +process.instructions= \ No newline at end of file diff --git a/Auditoria_checklist/workflow/scripts/beforeTaskSave.js b/Auditoria_checklist/workflow/scripts/beforeTaskSave.js new file mode 100644 index 0000000..714e271 --- /dev/null +++ b/Auditoria_checklist/workflow/scripts/beforeTaskSave.js @@ -0,0 +1,165 @@ +function beforeTaskSave(colleagueId, nextSequenceId, userList) { + var FORCE_EMAIL_DESTINATION = "andreycunha@outlook.com"; + var currentState = parseInt(getValue("WKCurrentState"), 10); + var nextState = parseInt(nextSequenceId, 10); + log.info("[checklist][atribuicao] beforeTaskSave currentState=" + currentState + ", nextState=" + nextState + ", colleagueId=" + colleagueId); + + // Encaminha automaticamente para a loja selecionada na atividade da loja. + // Ajustado para aceitar 4 e 5, pois no seu fluxo a loja pode estar na task 5 (Validar Planograma). + if (nextState === 4 || nextState === 5) { + var destinoLojaId = String(hAPI.getCardValue("destinoLojaId") || "").trim(); + var destinoLoja = String(hAPI.getCardValue("destinoLoja") || "").trim(); + var lojaSelecionada = String(hAPI.getCardValue("loja") || "").trim(); + var destinoFinal = destinoLojaId; + log.info("[checklist][atribuicao] destinoLojaId card=" + destinoLojaId + ", destinoLoja card=" + destinoLoja + ", loja=" + lojaSelecionada); + if (!destinoFinal && destinoLoja) { + destinoFinal = resolveColleagueIdByLogin(destinoLoja); + } + if (!destinoFinal) { + throw "Nao foi possivel identificar o usuario da loja. Selecione a Loja no cabecalho."; + } + if (!usuarioExisteAtivo(destinoFinal)) { + throw "Usuario da loja nao encontrado/inativo: " + destinoFinal; + } + userList.clear(); + userList.add(destinoFinal); + hAPI.setCardValue("destinoLojaId", destinoFinal); + log.info("[checklist][atribuicao] atividade " + nextState + " atribuida para " + destinoFinal); + } + + // Dispara apenas quando sai da atividade de analise (task5: Validar Planograma) + if (currentState !== 5) { + return; + } + + try { + var saidaAnalise = (hAPI.getCardValue("saidaAnalise") || "").trim(); + var usuarioRetorno = (hAPI.getCardValue("usuarioRetorno") || "").trim(); + var destino = String(FORCE_EMAIL_DESTINATION || "").trim(); + if (!destino) { + destino = usuarioRetorno; + if (!destino) { + destino = String(colleagueId || getValue("WKUser") || ""); + } + destino = String(destino || "").trim(); + } + + log.info("[checklist][notificacao] saidaAnalise=" + saidaAnalise + + ", usuarioRetorno=" + usuarioRetorno + + ", colleagueId=" + colleagueId + + ", destinoFinal=" + destino + + ", nextState=" + nextState); + + if (!destino) { + log.warn("[checklist][notificacao] Usuario destino nao informado."); + return; + } + + if (destino.indexOf("@") === -1 && !usuarioPossuiEmailValido(destino)) { + log.warn("[checklist][notificacao] Destino sem email valido no cadastro: " + destino); + return; + } + + if (nextState === 9 || saidaAnalise === "NAO_CONFORME") { + notificaPorTemplate("CHECKLIST_NAO_CONFORME", destino); + return; + } + + if (nextState === 11 || saidaAnalise === "CONFORME") { + notificaPorTemplate("CHECKLIST_CONFORME", destino); + } + } catch (e) { + log.error("[checklist][notificacao] Falha ao disparar notificacao: " + e); + } +} + +function notificaPorTemplate(templateCode, destinatario) { + var NOTIFIER_SENDER_USER = "admin"; + var recipients = new java.util.ArrayList(); + recipients.add(destinatario); + + var parametros = new java.util.HashMap(); + parametros.put("numeroSolicitacao", String(getValue("WKNumProces") || "")); + parametros.put("qtdNaoConforme", String(hAPI.getCardValue("qtdNaoConforme") || "0")); + parametros.put("listaNaoConforme", String(hAPI.getCardValue("listaNaoConforme") || "")); + parametros.put("loja", String(hAPI.getCardValue("loja") || "")); + parametros.put("linkSolicitacao", montaLinkSolicitacao()); + + notifier.notify( + NOTIFIER_SENDER_USER, + templateCode, + parametros, + recipients, + "text/html" + ); + + log.info("[checklist][notificacao] Template " + templateCode + " enviado para " + destinatario); +} + +function montaLinkSolicitacao() { + var server = String(getValue("WKServerURL") || ""); + var companyId = String(getValue("WKCompany") || ""); + var processId = String(getValue("WKNumProces") || ""); + if (!server || !companyId || !processId) { + return ""; + } + return server + + "/portal/p/" + + companyId + + "/pageworkflowview?app_ecm_workflowview_detailsProcessInstanceID=" + + processId; +} + +function usuarioPossuiEmailValido(colleagueId) { + try { + var c1 = DatasetFactory.createConstraint("colleaguePK.colleagueId", colleagueId, colleagueId, ConstraintType.MUST); + var c2 = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST); + var ds = DatasetFactory.getDataset("colleague", null, [c1, c2], null); + if (!ds || ds.rowsCount < 1) { + log.warn("[checklist][notificacao] Usuario nao encontrado/inativo no colleague: " + colleagueId); + return false; + } + var email = String(ds.getValue(0, "mail") || "").trim(); + log.info("[checklist][notificacao] Email encontrado para " + colleagueId + ": " + email); + return email.indexOf("@") > 0; + } catch (e) { + log.error("[checklist][notificacao] Erro ao validar email do usuario " + colleagueId + ": " + e); + return false; + } +} + +function usuarioExisteAtivo(colleagueId) { + try { + var cActive = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST); + var cLogin = DatasetFactory.createConstraint("login", colleagueId, colleagueId, ConstraintType.MUST); + var ds = DatasetFactory.getDataset("colleague", null, [cLogin, cActive], null); + var exists = !!(ds && ds.rowsCount > 0); + if (exists) { + log.info("[checklist][atribuicao] usuario ativo encontrado por login: " + colleagueId); + return true; + } + // fallback para ambientes que usam colleagueId como login tecnico + var cId = DatasetFactory.createConstraint("colleaguePK.colleagueId", colleagueId, colleagueId, ConstraintType.MUST); + ds = DatasetFactory.getDataset("colleague", null, [cId, cActive], null); + exists = !!(ds && ds.rowsCount > 0); + log.info("[checklist][atribuicao] consulta fallback colleagueId=" + colleagueId + ", exists=" + exists); + return exists; + } catch (e) { + log.error("[checklist][atribuicao] Erro ao validar usuario da loja " + colleagueId + ": " + e); + return false; + } +} + +function resolveColleagueIdByLogin(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); + if (ds && ds.rowsCount > 0) { + return String(ds.getValue(0, "colleaguePK.colleagueId") || "").trim(); + } + } catch (e) { + log.error("[checklist][atribuicao] Erro ao resolver colleagueId por login " + login + ": " + e); + } + return ""; +}