v0.1.4
authorelgekko <vasary@elgekko.net>
Tue, 5 Sep 2023 18:46:55 +0000 (20:46 +0200)
committerelgekko <vasary@elgekko.net>
Tue, 5 Sep 2023 18:46:55 +0000 (20:46 +0200)
32 files changed:
.idea/compiler.xml
.idea/encodings.xml
lis-app/pom.xml
lis-app/src/main/resources/application-dev.yaml
lis-app/src/main/resources/application.yaml
lis-app/src/main/resources/logback-spring.xml [new file with mode: 0644]
lis-app/src/test/java/hu/user/lis/workflow/ImportIncomingInvoicesIT.java [new file with mode: 0644]
lis-db/migrations/README
lis-db/migrations/scripts/006_camunda_engine.sql [new file with mode: 0644]
lis-db/migrations/scripts/007_camunda_identity.sql [new file with mode: 0644]
lis-db/src/main/java/hu/user/lis/db/Invoice.java
lis-db/src/main/java/hu/user/lis/db/Project.java
lis-ui/src/main/java/hu/user/lis/ui/data/IncomeMarginsDataModel.java
lis-ui/src/main/java/hu/user/lis/ui/data/PartnersDataModel.java
lis-ui/src/main/java/hu/user/lis/ui/data/ProjectAssociatesDataModel.java
lis-ui/src/main/java/hu/user/lis/ui/data/ProjectsDataModel.java
lis-ui/src/main/java/hu/user/lis/ui/editor/InvoiceEditorModel.java
lis-ui/src/main/java/hu/user/lis/ui/editor/ProjectEditorModel.java
lis-ui/src/main/java/hu/user/lis/ui/editor/ServiceRecordEditorModel.java
lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityEditorModel.java
lis-ui/src/main/java/hu/user/lis/ui/view/PartnersViewModel.java
lis-ui/src/main/java/hu/user/lis/ui/view/ProjectsViewModel.java
lis-ui/src/main/resources/web/associates.zul
lis-ui/src/main/resources/web/partners.zul
lis-ui/src/main/resources/web/projects.zul
lis-ui/src/main/resources/web/service-records.zul
lis-ui/src/main/resources/web/settings.zul
lis-workflow/pom.xml [new file with mode: 0644]
lis-workflow/src/main/java/hu/user/lis/workflow/invoice/DownloadInvoiceData.java [new file with mode: 0644]
lis-workflow/src/main/java/hu/user/lis/workflow/invoice/ListNewInvoices.java [new file with mode: 0644]
lis-workflow/src/main/resources/import-incoming-invoices.bpmn [new file with mode: 0644]
pom.xml

index 0feed9e50de48c8bf9cba254b8872aad5a842cef..6773a7add4ed5a587d4d8aa5de23c205cb734d64 100644 (file)
@@ -23,6 +23,7 @@
         <module name="lis-ui" />
         <module name="lis-services" />
         <module name="lis-db" />
+        <module name="lis-workflow" />
       </profile>
     </annotationProcessing>
   </component>
@@ -32,6 +33,7 @@
       <module name="lis-db" options="-parameters" />
       <module name="lis-services" options="-parameters" />
       <module name="lis-ui" options="-parameters" />
+      <module name="lis-workflow" options="-parameters" />
     </option>
   </component>
 </project>
\ No newline at end of file
index 4431c81f5d7aa2acff7bf0185a907024a6cbe4f7..41e5117c450799629c6f00e8ad64019dd3858530 100644 (file)
@@ -8,6 +8,7 @@
     <file url="file://$PROJECT_DIR$/lis-services/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/lis-ui/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/lis-ui/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/lis-workflow/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
   </component>
index 665a7540cff5f015bb8eaee5eb5ff6fa649a7f69..815ef70bbb31b5e0a2a805975970db8ea0bdc369 100644 (file)
@@ -3,7 +3,7 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <artifactId>lis-app</artifactId>
-    <version>0.1.3-SNAPSHOT</version>
+    <version>0.1.4-SNAPSHOT</version>
     <parent>
         <groupId>hu.user</groupId>
         <artifactId>lis</artifactId>
         <!--            <version>4.0.0</version>-->
         <!--            <scope>provided</scope>-->
         <!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>org.springframework.boot</groupId>-->
+        <!--            <artifactId>spring-boot-starter</artifactId>-->
+        <!--            <exclusions>-->
+        <!--                <exclusion>-->
+        <!--                    <groupId>org.springframework.boot</groupId>-->
+        <!--                    <artifactId>spring-boot-starter-logging</artifactId>-->
+        <!--                </exclusion>-->
+        <!--            </exclusions>-->
+        <!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>org.springframework.boot</groupId>-->
+        <!--            <artifactId>spring-boot-starter-log4j2</artifactId>-->
+        <!--        </dependency>-->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
                     <groupId>org.springframework.boot</groupId>
                     <artifactId>spring-boot-starter-tomcat</artifactId>
                 </exclusion>
+                <!--                <exclusion>-->
+                <!--                    <groupId>org.springframework.boot</groupId>-->
+                <!--                    <artifactId>spring-boot-starter-logging</artifactId>-->
+                <!--                </exclusion>-->
             </exclusions>
         </dependency>
         <dependency>
             <artifactId>lis-services</artifactId>
             <version>0.0.1-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>hu.user</groupId>
+            <artifactId>lis-workflow</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
         <dependency>
             <groupId>org.assertj</groupId>
             <artifactId>assertj-core</artifactId>
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.camunda.bpm</groupId>
+            <artifactId>camunda-bpm-assert</artifactId>
+            <version>${camunda.spring-boot.version}</version> <!-- set correct version here -->
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
index bd0d54e340932d2ddabd3d635107bfa2c955c4d7..dc317389f540df5d8b367d3dd6a37acf0e283125 100644 (file)
@@ -9,10 +9,12 @@ spring:
   jpa:
     #    hibernate:
     #      use-new-id-generator-mappings: false
-    show-sql: false
+    show-sql: true
     properties:
       hibernate:
         format_sql: true
+  main:
+    banner-mode: off
   output:
     ansi:
       enabled: always
@@ -21,6 +23,28 @@ spring:
     url: jdbc:db2://localhost:50000/lis
     username: db2admin
     password: password
+camunda.bpm:
+  generic-properties.properties:
+    telemetry-reporter-activate: false
+  job-executor-acquire-by-priority: true
+  job-execution:
+    core-pool-size: 10
+    #lock-time-in-millis: 600000
+  database:
+    type: db2
+    schema-update: false
+    table-prefix: CAMUNDA.
+    schema-name: CAMUNDA
+  webapp:
+    enabled: true
+    index-redirect-enabled: false
+  admin-user:
+    id: kermit
+    password: password
+    firstName: Kermit
+  filter:
+    create: All tasks
+  job-execution.enabled: true
 logging:
   level:
     org.hibernate.engine.jdbc.spi.SqlExceptionHelper: ERROR
index 663e02bd3a9af8f575e347fb18d2c94573f98c5e..77ec0895dfef27fcce1237ee7dc112764a2a8fd1 100644 (file)
@@ -21,7 +21,24 @@ spring:
     url: jdbc:db2://dvdev.in.useribm.hu:50000/lis
     username: db2admin
     password: password
+camunda.bpm:
+  database:
+    type: db2
+    schema-update: false
+    table-prefix: CAMUNDA.
+    schema-name: CAMUNDA
+  webapp:
+    enabled: true
+    index-redirect-enabled: false
+  admin-user:
+    id: kermit
+    password: password
+    firstName: Kermit
+  filter:
+    create: All tasks
+  job-execution.enabled: true
 logging:
+  #  config: classpath:log4j2.xml
   level:
     org.hibernate.engine.jdbc.spi.SqlExceptionHelper: ERROR
 #    org.springframework.security: DEBUG
diff --git a/lis-app/src/main/resources/logback-spring.xml b/lis-app/src/main/resources/logback-spring.xml
new file mode 100644 (file)
index 0000000..cf0a9f0
--- /dev/null
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+
+    <property name="LOGS" value="./logs"/>
+
+    <appender name="Console"
+              class="ch.qos.logback.core.ConsoleAppender">
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <Pattern>
+                %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable
+            </Pattern>
+        </layout>
+    </appender>
+
+    <appender name="RollingFile"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${LOGS}/spring-boot-logger.log</file>
+        <encoder
+                class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
+        </encoder>
+
+        <rollingPolicy
+                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- rollover daily and when the file reaches 10 MegaBytes -->
+            <fileNamePattern>${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.log
+            </fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy
+                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>10MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+    </appender>
+
+    <!-- LOG everything at INFO level -->
+    <root level="info">
+        <appender-ref ref="RollingFile"/>
+        <appender-ref ref="Console"/>
+    </root>
+
+    <!-- LOG "com.baeldung*" at TRACE level -->
+    <logger name="hu.user.lis" level="trace" additivity="false">
+        <appender-ref ref="RollingFile"/>
+        <appender-ref ref="Console"/>
+    </logger>
+
+</configuration>
\ No newline at end of file
diff --git a/lis-app/src/test/java/hu/user/lis/workflow/ImportIncomingInvoicesIT.java b/lis-app/src/test/java/hu/user/lis/workflow/ImportIncomingInvoicesIT.java
new file mode 100644 (file)
index 0000000..dc440d5
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) $today.year-$today.month-24.
+ * By elGekko
+ */
+
+package hu.user.lis.workflow;
+
+import lombok.extern.log4j.Log4j2;
+import org.camunda.bpm.engine.RuntimeService;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringRunner;
+
+
+@Log4j2
+@SpringBootTest
+@RunWith(SpringRunner.class)
+@ActiveProfiles("dev")
+@ComponentScan("hu.user.lis")
+@TestPropertySource("classpath:application-dev.yaml")
+public class ImportIncomingInvoicesIT {
+    @Autowired
+    private RuntimeService runtimeService;
+
+    @Test
+    public void testImportIncomingInvoice() throws InterruptedException {
+
+        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("importIncomingInvoices");
+
+        //verify(processInstance).hasFinished("WorkFinished");
+        while (true) {
+            ProcessInstance active = runtimeService.createProcessInstanceQuery().processInstanceId(processInstance.getProcessInstanceId()).active().singleResult();
+            if (active == null) {
+                break;
+            }
+            Thread.sleep(1000);
+        }
+    }
+}
\ No newline at end of file
index 154d66b6bfb67324f2db1c529e3ca40689c8acc4..c1cb4870bb784edded97f8312b660bbf30c162a3 100644 (file)
@@ -56,7 +56,7 @@ docker remove lis
 
 MIGRATE
 migrate new create profile --idpattern=000
-
+migrate up --env=prod
 
 Move data
 ----------
diff --git a/lis-db/migrations/scripts/006_camunda_engine.sql b/lis-db/migrations/scripts/006_camunda_engine.sql
new file mode 100644 (file)
index 0000000..3e42bf5
--- /dev/null
@@ -0,0 +1,1931 @@
+-- // camunda engine
+-- Migration SQL that makes the change goes here.
+CREATE SCHEMA CAMUNDA;
+SET SCHEMA CAMUNDA;
+
+--
+-- Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+-- under one or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information regarding copyright
+-- ownership. Camunda licenses this file to you under the Apache License,
+-- Version 2.0; you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+create table ACT_GE_PROPERTY (
+    NAME_ varchar(64) not null,
+    VALUE_ varchar(300),
+    REV_ integer,
+    primary key (NAME_)
+);
+
+insert into ACT_GE_PROPERTY
+values ('schema.version', 'fox', 1);
+
+insert into ACT_GE_PROPERTY
+values ('schema.history', 'create(fox)', 1);
+
+insert into ACT_GE_PROPERTY
+values ('next.dbid', '1', 1);
+
+insert into ACT_GE_PROPERTY
+values ('deployment.lock', '0', 1);
+
+insert into ACT_GE_PROPERTY
+values ('history.cleanup.job.lock', '0', 1);
+
+insert into ACT_GE_PROPERTY
+values ('startup.lock', '0', 1);
+
+insert into ACT_GE_PROPERTY
+values ('telemetry.lock', '0', 1);
+
+insert into ACT_GE_PROPERTY
+values ('installationId.lock', '0', 1);
+
+create table ACT_GE_BYTEARRAY (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    NAME_ varchar(255),
+    DEPLOYMENT_ID_ varchar(64),
+    BYTES_ BLOB,
+    GENERATED_ smallint check(GENERATED_ in (1,0)),
+    TENANT_ID_ varchar(64),
+    TYPE_ integer,
+    CREATE_TIME_ timestamp,
+    ROOT_PROC_INST_ID_ varchar(64),
+    REMOVAL_TIME_ timestamp,
+    primary key (ID_)
+);
+
+create table ACT_GE_SCHEMA_LOG (
+    ID_ varchar(64) not null,
+    TIMESTAMP_ timestamp,
+    VERSION_ varchar(255),
+    primary key (ID_)
+);
+
+insert into ACT_GE_SCHEMA_LOG
+values ('0', CURRENT_TIMESTAMP, '7.19.0');
+
+create table ACT_RE_DEPLOYMENT (
+    ID_ varchar(64) not null,
+    NAME_ varchar(255),
+    DEPLOY_TIME_ timestamp,
+    SOURCE_ varchar(255),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+);
+
+create table ACT_RU_EXECUTION (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    ROOT_PROC_INST_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    BUSINESS_KEY_ varchar(255),
+    PARENT_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    SUPER_EXEC_ varchar(64),
+    SUPER_CASE_EXEC_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    ACT_ID_ varchar(255),
+    ACT_INST_ID_ varchar(64),
+    IS_ACTIVE_ smallint check(IS_ACTIVE_ in (1,0)),
+    IS_CONCURRENT_ smallint check(IS_CONCURRENT_ in (1,0)),
+    IS_SCOPE_ smallint check(IS_SCOPE_ in (1,0)),
+    IS_EVENT_SCOPE_ smallint check(IS_EVENT_SCOPE_ in (1,0)),
+    SUSPENSION_STATE_ integer,
+    CACHED_ENT_STATE_ integer,
+    SEQUENCE_COUNTER_ bigint,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+);
+
+create table ACT_RU_JOB (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    TYPE_ varchar(255) not null,
+    LOCK_EXP_TIME_ timestamp,
+    LOCK_OWNER_ varchar(255),
+    EXCLUSIVE_ smallint check(EXCLUSIVE_ in (1,0)),
+    EXECUTION_ID_ varchar(64),
+    PROCESS_INSTANCE_ID_ varchar(64),
+    PROCESS_DEF_ID_ varchar(64),
+    PROCESS_DEF_KEY_ varchar(255),
+    RETRIES_ integer,
+    EXCEPTION_STACK_ID_ varchar(64),
+    EXCEPTION_MSG_ varchar(4000),
+    FAILED_ACT_ID_ varchar(255),
+    DUEDATE_ timestamp,
+    REPEAT_ varchar(255),
+    REPEAT_OFFSET_ bigint default 0,
+    HANDLER_TYPE_ varchar(255),
+    HANDLER_CFG_ varchar(4000),
+    DEPLOYMENT_ID_ varchar(64),
+    SUSPENSION_STATE_ integer not null default 1,
+    JOB_DEF_ID_ varchar(64),
+    PRIORITY_ bigint not null default 0,
+    SEQUENCE_COUNTER_ bigint,
+    TENANT_ID_ varchar(64),
+    CREATE_TIME_ timestamp,
+    LAST_FAILURE_LOG_ID_ varchar(64),
+    primary key (ID_)
+);
+
+create table ACT_RU_JOBDEF (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    PROC_DEF_ID_ varchar(64),
+    PROC_DEF_KEY_ varchar(255),
+    ACT_ID_ varchar(255),
+    JOB_TYPE_ varchar(255) not null,
+    JOB_CONFIGURATION_ varchar(255),
+    SUSPENSION_STATE_ integer,
+    JOB_PRIORITY_ bigint,
+    TENANT_ID_ varchar(64),
+    DEPLOYMENT_ID_ varchar(64),
+    primary key (ID_)
+);
+
+create table ACT_RE_PROCDEF (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    CATEGORY_ varchar(255),
+    NAME_ varchar(255),
+    KEY_ varchar(255) not null,
+    VERSION_ integer not null,
+    DEPLOYMENT_ID_ varchar(64),
+    RESOURCE_NAME_ varchar(4000),
+    DGRM_RESOURCE_NAME_ varchar(4000),
+    HAS_START_FORM_KEY_ smallint check(HAS_START_FORM_KEY_ in (1,0)),
+    SUSPENSION_STATE_ integer,
+    TENANT_ID_ varchar(64),
+    VERSION_TAG_ varchar(64),
+    HISTORY_TTL_ integer,
+    STARTABLE_ smallint default 1 NOT NULL check(STARTABLE_ in (1,0)),
+    primary key (ID_)
+);
+
+create table ACT_RE_CAMFORMDEF (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    KEY_ varchar(255) not null,
+    VERSION_ integer not null,
+    DEPLOYMENT_ID_ varchar(64),
+    RESOURCE_NAME_ varchar(4000),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+);
+
+create table ACT_RU_TASK (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    EXECUTION_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    CASE_EXECUTION_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    CASE_DEF_ID_ varchar(64),
+    NAME_ varchar(255),
+    PARENT_TASK_ID_ varchar(64),
+    DESCRIPTION_ varchar(4000),
+    TASK_DEF_KEY_ varchar(255),
+    OWNER_ varchar(255),
+    ASSIGNEE_ varchar(255),
+    DELEGATION_ varchar(64),
+    PRIORITY_ integer,
+    CREATE_TIME_ timestamp,
+    LAST_UPDATED_ timestamp,
+    DUE_DATE_ timestamp,
+    FOLLOW_UP_DATE_ timestamp,
+    SUSPENSION_STATE_ integer,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+);
+
+create table ACT_RU_IDENTITYLINK (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    GROUP_ID_ varchar(255),
+    TYPE_ varchar(255),
+    USER_ID_ varchar(255),
+    TASK_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+);
+
+create table ACT_RU_VARIABLE (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    TYPE_ varchar(255) not null,
+    NAME_ varchar(255) not null,
+    EXECUTION_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    CASE_EXECUTION_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    TASK_ID_ varchar(64),
+    BATCH_ID_ varchar(64),
+    BYTEARRAY_ID_ varchar(64),
+    DOUBLE_ double precision,
+    LONG_ bigint,
+    TEXT_ varchar(4000),
+    TEXT2_ varchar(4000),
+    VAR_SCOPE_ varchar(64) not null,
+    SEQUENCE_COUNTER_ bigint,
+    IS_CONCURRENT_LOCAL_ smallint check(IS_CONCURRENT_LOCAL_ in (1,0)),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+);
+
+create table ACT_RU_EVENT_SUBSCR (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    EVENT_TYPE_ varchar(255) not null,
+    EVENT_NAME_ varchar(255),
+    EXECUTION_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    ACTIVITY_ID_ varchar(255),
+    CONFIGURATION_ varchar(255),
+    CREATED_ timestamp not null,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+);
+
+create table ACT_RU_INCIDENT (
+  ID_ varchar(64) not null,
+  REV_ integer not null,
+  INCIDENT_TIMESTAMP_ timestamp not null,
+  INCIDENT_MSG_ varchar(4000),
+  INCIDENT_TYPE_ varchar(255) not null,
+  EXECUTION_ID_ varchar(64),
+  ACTIVITY_ID_ varchar(255),
+  FAILED_ACTIVITY_ID_ varchar(255),
+  PROC_INST_ID_ varchar(64),
+  PROC_DEF_ID_ varchar(64),
+  CAUSE_INCIDENT_ID_ varchar(64),
+  ROOT_CAUSE_INCIDENT_ID_ varchar(64),
+  CONFIGURATION_ varchar(255),
+  TENANT_ID_ varchar(64),
+  JOB_DEF_ID_ varchar(64),
+  ANNOTATION_ varchar(4000),
+  primary key (ID_)
+);
+
+create table ACT_RU_AUTHORIZATION (
+  ID_ varchar(64) not null,
+  REV_ integer not null,
+  TYPE_ integer not null,
+  GROUP_ID_ varchar(255),
+  USER_ID_ varchar(255),
+  RESOURCE_TYPE_ integer not null,
+  RESOURCE_ID_ varchar(255),
+  PERMS_ integer,
+  REMOVAL_TIME_ timestamp,
+  ROOT_PROC_INST_ID_ varchar(64),
+  primary key (ID_),
+  UNI_USER_ID_ varchar (255) not null generated always as (case when "USER_ID_" is null then "ID_" else "USER_ID_" end),
+  UNI_GROUP_ID_ varchar (255) not null generated always as (case when "GROUP_ID_" is null then "ID_" else "GROUP_ID_" end),
+  UNI_RESOURCE_ID_ varchar (255) not null generated always as (case when "RESOURCE_ID_" is null then "ID_" else "RESOURCE_ID_" end)
+);
+
+create table ACT_RU_FILTER (
+  ID_ varchar(64) not null,
+  REV_ integer not null,
+  RESOURCE_TYPE_ varchar(255) not null,
+  NAME_ varchar(255) not null,
+  OWNER_ varchar(255),
+  QUERY_ CLOB not null,
+  PROPERTIES_ CLOB,
+  primary key (ID_)
+);
+
+create table ACT_RU_METER_LOG (
+  ID_ varchar(64) not null,
+  NAME_ varchar(64) not null,
+  REPORTER_ varchar(255),
+  VALUE_ bigint,
+  TIMESTAMP_ timestamp,
+  MILLISECONDS_ bigint DEFAULT 0,
+  primary key (ID_)
+);
+
+create table ACT_RU_TASK_METER_LOG (
+  ID_ varchar(64) not null,
+  ASSIGNEE_HASH_ bigint,
+  TIMESTAMP_ timestamp,
+  primary key (ID_)
+);
+
+create table ACT_RU_EXT_TASK (
+  ID_ varchar(64) not null,
+  REV_ integer not null,
+  WORKER_ID_ varchar(255),
+  TOPIC_NAME_ varchar(255),
+  RETRIES_ integer,
+  ERROR_MSG_ varchar(4000),
+  ERROR_DETAILS_ID_ varchar(64),
+  LOCK_EXP_TIME_ timestamp,
+  SUSPENSION_STATE_ integer,
+  EXECUTION_ID_ varchar(64),
+  PROC_INST_ID_ varchar(64),
+  PROC_DEF_ID_ varchar(64),
+  PROC_DEF_KEY_ varchar(255),
+  ACT_ID_ varchar(255),
+  ACT_INST_ID_ varchar(64),
+  TENANT_ID_ varchar(64),
+  PRIORITY_ bigint not null default 0,
+  LAST_FAILURE_LOG_ID_ varchar(64),
+  primary key (ID_)
+);
+
+create table ACT_RU_BATCH (
+  ID_ varchar(64) not null,
+  REV_ integer not null,
+  TYPE_ varchar(255),
+  TOTAL_JOBS_ integer,
+  JOBS_CREATED_ integer,
+  JOBS_PER_SEED_ integer,
+  INVOCATIONS_PER_JOB_ integer,
+  SEED_JOB_DEF_ID_ varchar(64),
+  BATCH_JOB_DEF_ID_ varchar(64),
+  MONITOR_JOB_DEF_ID_ varchar(64),
+  SUSPENSION_STATE_ integer,
+  CONFIGURATION_ varchar(255),
+  TENANT_ID_ varchar(64),
+  CREATE_USER_ID_ varchar(255),
+  START_TIME_ timestamp,
+  EXEC_START_TIME_ timestamp,
+  primary key (ID_)
+);
+
+create index ACT_IDX_EXECUTION_ROOT_PI on ACT_RU_EXECUTION(ROOT_PROC_INST_ID_);
+create index ACT_IDX_EXEC_BUSKEY on ACT_RU_EXECUTION(BUSINESS_KEY_);
+create index ACT_IDX_EXEC_TENANT_ID on ACT_RU_EXECUTION(TENANT_ID_);
+create index ACT_IDX_TASK_CREATE on ACT_RU_TASK(CREATE_TIME_);
+create index ACT_IDX_TASK_LAST_UPDATED on ACT_RU_TASK(LAST_UPDATED_);
+create index ACT_IDX_TASK_ASSIGNEE on ACT_RU_TASK(ASSIGNEE_);
+create index ACT_IDX_TASK_OWNER on ACT_RU_TASK(OWNER_);
+create index ACT_IDX_TASK_TENANT_ID on ACT_RU_TASK(TENANT_ID_);
+create index ACT_IDX_IDENT_LNK_USER on ACT_RU_IDENTITYLINK(USER_ID_);
+create index ACT_IDX_IDENT_LNK_GROUP on ACT_RU_IDENTITYLINK(GROUP_ID_);
+create index ACT_IDX_EVENT_SUBSCR_CONFIG_ on ACT_RU_EVENT_SUBSCR(CONFIGURATION_);
+create index ACT_IDX_EVENT_SUBSCR_TENANT_ID on ACT_RU_EVENT_SUBSCR(TENANT_ID_);
+
+create index ACT_IDX_VARIABLE_TASK_ID on ACT_RU_VARIABLE(TASK_ID_);
+create index ACT_IDX_VARIABLE_TENANT_ID on ACT_RU_VARIABLE(TENANT_ID_);
+create index ACT_IDX_VARIABLE_TASK_NAME_TYPE on ACT_RU_VARIABLE(TASK_ID_, NAME_, TYPE_);
+
+create index ACT_IDX_ATHRZ_PROCEDEF on ACT_RU_IDENTITYLINK(PROC_DEF_ID_);
+create index ACT_IDX_INC_CONFIGURATION on ACT_RU_INCIDENT(CONFIGURATION_);
+create index ACT_IDX_INC_TENANT_ID on ACT_RU_INCIDENT(TENANT_ID_);
+-- CAM-5914
+create index ACT_IDX_JOB_EXECUTION_ID on ACT_RU_JOB(EXECUTION_ID_);
+create index ACT_IDX_JOB_PROCINST on ACT_RU_JOB(PROCESS_INSTANCE_ID_);
+create index ACT_IDX_JOB_TENANT_ID on ACT_RU_JOB(TENANT_ID_);
+create index ACT_IDX_JOBDEF_TENANT_ID on ACT_RU_JOBDEF(TENANT_ID_);
+
+-- new metric milliseconds column
+CREATE INDEX ACT_IDX_METER_LOG_MS ON ACT_RU_METER_LOG(MILLISECONDS_);
+CREATE INDEX ACT_IDX_METER_LOG_NAME_MS ON ACT_RU_METER_LOG(NAME_, MILLISECONDS_);
+CREATE INDEX ACT_IDX_METER_LOG_REPORT ON ACT_RU_METER_LOG(NAME_, REPORTER_, MILLISECONDS_);
+
+-- old metric timestamp column
+CREATE INDEX ACT_IDX_METER_LOG_TIME ON ACT_RU_METER_LOG(TIMESTAMP_);
+CREATE INDEX ACT_IDX_METER_LOG ON ACT_RU_METER_LOG(NAME_, TIMESTAMP_);
+
+-- task metric timestamp column
+CREATE INDEX ACT_IDX_TASK_METER_LOG_TIME ON ACT_RU_TASK_METER_LOG(TIMESTAMP_);
+
+create index ACT_IDX_EXT_TASK_TOPIC ON ACT_RU_EXT_TASK(TOPIC_NAME_);
+create index ACT_IDX_EXT_TASK_TENANT_ID ON ACT_RU_EXT_TASK(TENANT_ID_);
+create index ACT_IDX_EXT_TASK_PRIORITY ON ACT_RU_EXT_TASK(PRIORITY_);
+create index ACT_IDX_EXT_TASK_ERR_DETAILS ON ACT_RU_EXT_TASK(ERROR_DETAILS_ID_);
+create index ACT_IDX_AUTH_GROUP_ID ON ACT_RU_AUTHORIZATION(GROUP_ID_);
+create index ACT_IDX_JOB_JOB_DEF_ID on ACT_RU_JOB(JOB_DEF_ID_);
+
+create unique index ACT_UNIQ_AUTH_USER on ACT_RU_AUTHORIZATION(TYPE_,UNI_USER_ID_,RESOURCE_TYPE_,UNI_RESOURCE_ID_);
+create unique index ACT_UNIQ_AUTH_GROUP on ACT_RU_AUTHORIZATION(TYPE_,UNI_GROUP_ID_,RESOURCE_TYPE_,UNI_RESOURCE_ID_);
+create unique index ACT_UNIQ_VARIABLE on ACT_RU_VARIABLE(VAR_SCOPE_,NAME_);
+
+alter table ACT_GE_BYTEARRAY
+    add constraint ACT_FK_BYTEARR_DEPL
+    foreign key (DEPLOYMENT_ID_)
+    references ACT_RE_DEPLOYMENT (ID_);
+
+alter table ACT_RU_EXECUTION
+    add constraint ACT_FK_EXE_PROCINST
+    foreign key (PROC_INST_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_EXECUTION
+    add constraint ACT_FK_EXE_PARENT
+    foreign key (PARENT_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_EXECUTION
+    add constraint ACT_FK_EXE_SUPER
+    foreign key (SUPER_EXEC_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_EXECUTION
+    add constraint ACT_FK_EXE_PROCDEF
+    foreign key (PROC_DEF_ID_)
+    references ACT_RE_PROCDEF (ID_);
+
+alter table ACT_RU_IDENTITYLINK
+    add constraint ACT_FK_TSKASS_TASK
+    foreign key (TASK_ID_)
+    references ACT_RU_TASK (ID_);
+
+alter table ACT_RU_IDENTITYLINK
+    add constraint ACT_FK_ATHRZ_PROCEDEF
+    foreign key (PROC_DEF_ID_)
+    references ACT_RE_PROCDEF (ID_);
+
+alter table ACT_RU_TASK
+    add constraint ACT_FK_TASK_EXE
+    foreign key (EXECUTION_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_TASK
+    add constraint ACT_FK_TASK_PROCINST
+    foreign key (PROC_INST_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_TASK
+  add constraint ACT_FK_TASK_PROCDEF
+  foreign key (PROC_DEF_ID_)
+  references ACT_RE_PROCDEF (ID_);
+
+alter table ACT_RU_VARIABLE
+    add constraint ACT_FK_VAR_EXE
+    foreign key (EXECUTION_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_VARIABLE
+    add constraint ACT_FK_VAR_PROCINST
+    foreign key (PROC_INST_ID_)
+    references ACT_RU_EXECUTION(ID_);
+
+alter table ACT_RU_VARIABLE
+    add constraint ACT_FK_VAR_BYTEARRAY
+    foreign key (BYTEARRAY_ID_)
+    references ACT_GE_BYTEARRAY (ID_);
+
+alter table ACT_RU_JOB
+    add constraint ACT_FK_JOB_EXCEPTION
+    foreign key (EXCEPTION_STACK_ID_)
+    references ACT_GE_BYTEARRAY (ID_);
+
+alter table ACT_RU_EVENT_SUBSCR
+    add constraint ACT_FK_EVENT_EXEC
+    foreign key (EXECUTION_ID_)
+    references ACT_RU_EXECUTION(ID_);
+
+alter table ACT_RU_INCIDENT
+    add constraint ACT_FK_INC_EXE
+    foreign key (EXECUTION_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_INCIDENT
+    add constraint ACT_FK_INC_PROCINST
+    foreign key (PROC_INST_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_INCIDENT
+    add constraint ACT_FK_INC_PROCDEF
+    foreign key (PROC_DEF_ID_)
+    references ACT_RE_PROCDEF (ID_);
+
+alter table ACT_RU_INCIDENT
+    add constraint ACT_FK_INC_CAUSE
+    foreign key (CAUSE_INCIDENT_ID_)
+    references ACT_RU_INCIDENT (ID_);
+
+alter table ACT_RU_INCIDENT
+    add constraint ACT_FK_INC_RCAUSE
+    foreign key (ROOT_CAUSE_INCIDENT_ID_)
+    references ACT_RU_INCIDENT (ID_);
+
+alter table ACT_RU_EXT_TASK
+    add constraint ACT_FK_EXT_TASK_ERROR_DETAILS
+    foreign key (ERROR_DETAILS_ID_)
+    references ACT_GE_BYTEARRAY (ID_);
+
+create index ACT_IDX_INCIDENT_JOB_DEF on ACT_RU_INCIDENT(JOB_DEF_ID_);
+alter table ACT_RU_INCIDENT
+    add constraint ACT_FK_INC_JOB_DEF
+    foreign key (JOB_DEF_ID_)
+    references ACT_RU_JOBDEF (ID_);
+
+alter table ACT_RU_EXT_TASK
+    add constraint ACT_FK_EXT_TASK_EXE
+    foreign key (EXECUTION_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+create index ACT_IDX_BATCH_SEED_JOB_DEF ON ACT_RU_BATCH(SEED_JOB_DEF_ID_);
+alter table ACT_RU_BATCH
+    add constraint ACT_FK_BATCH_SEED_JOB_DEF
+    foreign key (SEED_JOB_DEF_ID_)
+    references ACT_RU_JOBDEF (ID_);
+
+create index ACT_IDX_BATCH_MONITOR_JOB_DEF ON ACT_RU_BATCH(MONITOR_JOB_DEF_ID_);
+alter table ACT_RU_BATCH
+    add constraint ACT_FK_BATCH_MONITOR_JOB_DEF
+    foreign key (MONITOR_JOB_DEF_ID_)
+    references ACT_RU_JOBDEF (ID_);
+
+create index ACT_IDX_BATCH_JOB_DEF ON ACT_RU_BATCH(BATCH_JOB_DEF_ID_);
+alter table ACT_RU_BATCH
+    add constraint ACT_FK_BATCH_JOB_DEF
+    foreign key (BATCH_JOB_DEF_ID_)
+    references ACT_RU_JOBDEF (ID_);
+
+create index ACT_IDX_BATCH_ID ON ACT_RU_VARIABLE(BATCH_ID_);
+alter table ACT_RU_VARIABLE
+    add constraint ACT_FK_VAR_BATCH
+    foreign key (BATCH_ID_)
+    references ACT_RU_BATCH (ID_);
+
+-- indexes for concurrency problems - https://app.camunda.com/jira/browse/CAM-1646 --
+create index ACT_IDX_EXECUTION_PROC on ACT_RU_EXECUTION(PROC_DEF_ID_);
+create index ACT_IDX_EXECUTION_PARENT on ACT_RU_EXECUTION(PARENT_ID_);
+create index ACT_IDX_EXECUTION_SUPER on ACT_RU_EXECUTION(SUPER_EXEC_);
+create index ACT_IDX_EXECUTION_PROCINST on ACT_RU_EXECUTION(PROC_INST_ID_);
+create index ACT_IDX_EVENT_SUBSCR_EXEC on ACT_RU_EVENT_SUBSCR(EXECUTION_ID_);
+create index ACT_IDX_BA_DEPLOYMENT on ACT_GE_BYTEARRAY(DEPLOYMENT_ID_);
+create index ACT_IDX_IDENT_LNK_TASK on ACT_RU_IDENTITYLINK(TASK_ID_);
+create index ACT_IDX_INCIDENT_EXEC on ACT_RU_INCIDENT(EXECUTION_ID_);
+create index ACT_IDX_INCIDENT_PROCINST on ACT_RU_INCIDENT(PROC_INST_ID_);
+create index ACT_IDX_INCIDENT_PROC_DEF_ID on ACT_RU_INCIDENT(PROC_DEF_ID_);
+create index ACT_IDX_INCIDENT_CAUSE on ACT_RU_INCIDENT(CAUSE_INCIDENT_ID_);
+create index ACT_IDX_INCIDENT_ROOT_CAUSE on ACT_RU_INCIDENT(ROOT_CAUSE_INCIDENT_ID_);
+create index ACT_IDX_JOB_EXCEPTION_STACK on ACT_RU_JOB(EXCEPTION_STACK_ID_);
+create index ACT_IDX_VARIABLE_BA on ACT_RU_VARIABLE(BYTEARRAY_ID_);
+create index ACT_IDX_VARIABLE_EXEC on ACT_RU_VARIABLE(EXECUTION_ID_);
+create index ACT_IDX_VARIABLE_PROCINST on ACT_RU_VARIABLE(PROC_INST_ID_);
+create index ACT_IDX_TASK_EXEC on ACT_RU_TASK(EXECUTION_ID_);
+create index ACT_IDX_TASK_PROCINST on ACT_RU_TASK(PROC_INST_ID_);
+create index ACT_IDX_TASK_PROC_DEF_ID on ACT_RU_TASK(PROC_DEF_ID_);
+-- index for deadlock problem - https://app.camunda.com/jira/browse/CAM-4440 --
+create index ACT_IDX_AUTH_RESOURCE_ID on ACT_RU_AUTHORIZATION(RESOURCE_ID_);
+-- index to prevent deadlock on fk constraint - https://app.camunda.com/jira/browse/CAM-5440 --
+create index ACT_IDX_EXT_TASK_EXEC on ACT_RU_EXT_TASK(EXECUTION_ID_);
+
+
+-- indexes to improve deployment
+create index ACT_IDX_BYTEARRAY_ROOT_PI on ACT_GE_BYTEARRAY(ROOT_PROC_INST_ID_);
+create index ACT_IDX_BYTEARRAY_RM_TIME on ACT_GE_BYTEARRAY(REMOVAL_TIME_);
+create index ACT_IDX_BYTEARRAY_NAME on ACT_GE_BYTEARRAY(NAME_);
+create index ACT_IDX_DEPLOYMENT_NAME on ACT_RE_DEPLOYMENT(NAME_);
+create index ACT_IDX_DEPLOYMENT_TENANT_ID on ACT_RE_DEPLOYMENT(TENANT_ID_);
+create index ACT_IDX_JOBDEF_PROC_DEF_ID ON ACT_RU_JOBDEF(PROC_DEF_ID_);
+create index ACT_IDX_JOB_HANDLER_TYPE ON ACT_RU_JOB(HANDLER_TYPE_);
+create index ACT_IDX_EVENT_SUBSCR_EVT_NAME ON ACT_RU_EVENT_SUBSCR(EVENT_NAME_);
+create index ACT_IDX_PROCDEF_DEPLOYMENT_ID ON ACT_RE_PROCDEF(DEPLOYMENT_ID_);
+create index ACT_IDX_PROCDEF_TENANT_ID ON ACT_RE_PROCDEF(TENANT_ID_);
+create index ACT_IDX_PROCDEF_VER_TAG ON ACT_RE_PROCDEF(VERSION_TAG_);
+
+-- indices for history cleanup: https://jira.camunda.com/browse/CAM-11616
+create index ACT_IDX_AUTH_ROOT_PI on ACT_RU_AUTHORIZATION(ROOT_PROC_INST_ID_);
+create index ACT_IDX_AUTH_RM_TIME on ACT_RU_AUTHORIZATION(REMOVAL_TIME_);
+--
+-- Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+-- under one or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information regarding copyright
+-- ownership. Camunda licenses this file to you under the Apache License,
+-- Version 2.0; you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+-- create case definition table --
+
+create table ACT_RE_CASE_DEF (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    CATEGORY_ varchar(255),
+    NAME_ varchar(255),
+    KEY_ varchar(255) not null,
+    VERSION_ integer not null,
+    DEPLOYMENT_ID_ varchar(64),
+    RESOURCE_NAME_ varchar(4000),
+    DGRM_RESOURCE_NAME_ varchar(4000),
+    TENANT_ID_ varchar(64),
+    HISTORY_TTL_ integer,
+    primary key (ID_)
+);
+
+-- create case execution table --
+
+create table ACT_RU_CASE_EXECUTION (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    CASE_INST_ID_ varchar(64),
+    SUPER_CASE_EXEC_ varchar(64),
+    SUPER_EXEC_ varchar(64),
+    BUSINESS_KEY_ varchar(255),
+    PARENT_ID_ varchar(64),
+    CASE_DEF_ID_ varchar(64),
+    ACT_ID_ varchar(255),
+    PREV_STATE_ integer,
+    CURRENT_STATE_ integer,
+    REQUIRED_ smallint check(REQUIRED_ in (1,0)),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+);
+
+-- create case sentry part table --
+
+create table ACT_RU_CASE_SENTRY_PART (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    CASE_INST_ID_ varchar(64),
+    CASE_EXEC_ID_ varchar(64),
+    SENTRY_ID_ varchar(255),
+    TYPE_ varchar(255),
+    SOURCE_CASE_EXEC_ID_ varchar(64),
+    STANDARD_EVENT_ varchar(255),
+    SOURCE_ varchar(255),
+    VARIABLE_EVENT_ varchar(255),
+    VARIABLE_NAME_ varchar(255),
+    SATISFIED_ smallint check(SATISFIED_ in (1,0)),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+);
+
+-- create index on business key --
+create index ACT_IDX_CASE_EXEC_BUSKEY on ACT_RU_CASE_EXECUTION(BUSINESS_KEY_);
+
+-- https://app.camunda.com/jira/browse/CAM-9165
+create index ACT_IDX_CASE_EXE_CASE_INST on ACT_RU_CASE_EXECUTION(CASE_INST_ID_);
+
+-- create foreign key constraints on ACT_RU_CASE_EXECUTION --
+alter table ACT_RU_CASE_EXECUTION
+    add constraint ACT_FK_CASE_EXE_CASE_INST
+    foreign key (CASE_INST_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+alter table ACT_RU_CASE_EXECUTION
+    add constraint ACT_FK_CASE_EXE_PARENT
+    foreign key (PARENT_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+alter table ACT_RU_CASE_EXECUTION
+    add constraint ACT_FK_CASE_EXE_CASE_DEF
+    foreign key (CASE_DEF_ID_)
+    references ACT_RE_CASE_DEF(ID_);
+
+-- create foreign key constraints on ACT_RU_VARIABLE --
+alter table ACT_RU_VARIABLE
+    add constraint ACT_FK_VAR_CASE_EXE
+    foreign key (CASE_EXECUTION_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+alter table ACT_RU_VARIABLE
+    add constraint ACT_FK_VAR_CASE_INST
+    foreign key (CASE_INST_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+-- create foreign key constraints on ACT_RU_TASK --
+alter table ACT_RU_TASK
+    add constraint ACT_FK_TASK_CASE_EXE
+    foreign key (CASE_EXECUTION_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+alter table ACT_RU_TASK
+  add constraint ACT_FK_TASK_CASE_DEF
+  foreign key (CASE_DEF_ID_)
+  references ACT_RE_CASE_DEF(ID_);
+
+-- create foreign key constraints on ACT_RU_CASE_SENTRY_PART --
+alter table ACT_RU_CASE_SENTRY_PART
+    add constraint ACT_FK_CASE_SENTRY_CASE_INST
+    foreign key (CASE_INST_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+alter table ACT_RU_CASE_SENTRY_PART
+    add constraint ACT_FK_CASE_SENTRY_CASE_EXEC
+    foreign key (CASE_EXEC_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+-- indexes for concurrency problems - https://app.camunda.com/jira/browse/CAM-1646 --
+create index ACT_IDX_CASE_EXEC_CASE on ACT_RU_CASE_EXECUTION(CASE_DEF_ID_);
+create index ACT_IDX_CASE_EXEC_PARENT on ACT_RU_CASE_EXECUTION(PARENT_ID_);
+create index ACT_IDX_VARIABLE_CASE_EXEC on ACT_RU_VARIABLE(CASE_EXECUTION_ID_);
+create index ACT_IDX_VARIABLE_CASE_INST on ACT_RU_VARIABLE(CASE_INST_ID_);
+create index ACT_IDX_TASK_CASE_EXEC on ACT_RU_TASK(CASE_EXECUTION_ID_);
+create index ACT_IDX_TASK_CASE_DEF_ID on ACT_RU_TASK(CASE_DEF_ID_);
+
+-- add indexes for ACT_RU_CASE_SENTRY_PART --
+create index ACT_IDX_CASE_SENTRY_CASE_INST on ACT_RU_CASE_SENTRY_PART(CASE_INST_ID_);
+create index ACT_IDX_CASE_SENTRY_CASE_EXEC on ACT_RU_CASE_SENTRY_PART(CASE_EXEC_ID_);
+
+create index ACT_IDX_CASE_DEF_TENANT_ID on ACT_RE_CASE_DEF(TENANT_ID_);
+create index ACT_IDX_CASE_EXEC_TENANT_ID on ACT_RU_CASE_EXECUTION(TENANT_ID_);
+--
+-- Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+-- under one or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information regarding copyright
+-- ownership. Camunda licenses this file to you under the Apache License,
+-- Version 2.0; you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+-- create decision definition table --
+create table ACT_RE_DECISION_DEF (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    CATEGORY_ varchar(255),
+    NAME_ varchar(255),
+    KEY_ varchar(255) not null,
+    VERSION_ integer not null,
+    DEPLOYMENT_ID_ varchar(64),
+    RESOURCE_NAME_ varchar(4000),
+    DGRM_RESOURCE_NAME_ varchar(4000),
+    DEC_REQ_ID_ varchar(64),
+    DEC_REQ_KEY_ varchar(255),
+    TENANT_ID_ varchar(64),
+    HISTORY_TTL_ integer,
+    VERSION_TAG_ varchar(64),
+    primary key (ID_)
+);
+
+-- create decision requirements definition table --
+create table ACT_RE_DECISION_REQ_DEF (
+    ID_ varchar(64) NOT NULL,
+    REV_ integer,
+    CATEGORY_ varchar(255),
+    NAME_ varchar(255),
+    KEY_ varchar(255) NOT NULL,
+    VERSION_ integer NOT NULL,
+    DEPLOYMENT_ID_ varchar(64),
+    RESOURCE_NAME_ varchar(4000),
+    DGRM_RESOURCE_NAME_ varchar(4000),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+);
+
+alter table ACT_RE_DECISION_DEF
+    add constraint ACT_FK_DEC_REQ
+    foreign key (DEC_REQ_ID_)
+    references ACT_RE_DECISION_REQ_DEF(ID_);
+
+create index ACT_IDX_DEC_DEF_TENANT_ID on ACT_RE_DECISION_DEF(TENANT_ID_);
+create index ACT_IDX_DEC_DEF_REQ_ID on ACT_RE_DECISION_DEF(DEC_REQ_ID_);
+create index ACT_IDX_DEC_REQ_DEF_TENANT_ID on ACT_RE_DECISION_REQ_DEF(TENANT_ID_);
+--
+-- Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+-- under one or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information regarding copyright
+-- ownership. Camunda licenses this file to you under the Apache License,
+-- Version 2.0; you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+create table ACT_HI_PROCINST (
+    ID_ varchar(64) not null,
+    PROC_INST_ID_ varchar(64) not null,
+    BUSINESS_KEY_ varchar(255),
+    PROC_DEF_KEY_ varchar(255),
+    PROC_DEF_ID_ varchar(64) not null,
+    START_TIME_ timestamp not null,
+    END_TIME_ timestamp,
+    REMOVAL_TIME_ timestamp,
+    DURATION_ bigint,
+    START_USER_ID_ varchar(255),
+    START_ACT_ID_ varchar(255),
+    END_ACT_ID_ varchar(255),
+    SUPER_PROCESS_INSTANCE_ID_ varchar(64),
+    ROOT_PROC_INST_ID_ varchar(64),
+    SUPER_CASE_INSTANCE_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    DELETE_REASON_ varchar(4000),
+    TENANT_ID_ varchar(64),
+    STATE_ varchar(255),
+    primary key (ID_)
+);
+
+alter table ACT_HI_PROCINST add constraint PROC_INST_ID_ unique(PROC_INST_ID_);
+
+create table ACT_HI_ACTINST (
+    ID_ varchar(64) not null,
+    PARENT_ACT_INST_ID_ varchar(64),
+    PROC_DEF_KEY_ varchar(255),
+    PROC_DEF_ID_ varchar(64) not null,
+    ROOT_PROC_INST_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64) not null,
+    EXECUTION_ID_ varchar(64) not null,
+    ACT_ID_ varchar(255) not null,
+    TASK_ID_ varchar(64),
+    CALL_PROC_INST_ID_ varchar(64),
+    CALL_CASE_INST_ID_ varchar(64),
+    ACT_NAME_ varchar(255),
+    ACT_TYPE_ varchar(255) not null,
+    ASSIGNEE_ varchar(255),
+    START_TIME_ timestamp not null,
+    END_TIME_ timestamp,
+    DURATION_ bigint,
+    ACT_INST_STATE_ integer,
+    SEQUENCE_COUNTER_ bigint,
+    TENANT_ID_ varchar(64),
+    REMOVAL_TIME_ timestamp,
+    primary key (ID_)
+);
+
+create table ACT_HI_TASKINST (
+    ID_ varchar(64) not null,
+    TASK_DEF_KEY_ varchar(255),
+    PROC_DEF_KEY_ varchar(255),
+    PROC_DEF_ID_ varchar(64),
+    ROOT_PROC_INST_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    EXECUTION_ID_ varchar(64),
+    CASE_DEF_KEY_ varchar(255),
+    CASE_DEF_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    CASE_EXECUTION_ID_ varchar(64),
+    ACT_INST_ID_ varchar(64),
+    NAME_ varchar(255),
+    PARENT_TASK_ID_ varchar(64),
+    DESCRIPTION_ varchar(4000),
+    OWNER_ varchar(255),
+    ASSIGNEE_ varchar(255),
+    START_TIME_ timestamp not null,
+    END_TIME_ timestamp,
+    DURATION_ bigint,
+    DELETE_REASON_ varchar(4000),
+    PRIORITY_ integer,
+    DUE_DATE_ timestamp,
+    FOLLOW_UP_DATE_ timestamp,
+    TENANT_ID_ varchar(64),
+    REMOVAL_TIME_ timestamp,
+    primary key (ID_)
+);
+
+create table ACT_HI_VARINST (
+    ID_ varchar(64) not null,
+    PROC_DEF_KEY_ varchar(255),
+    PROC_DEF_ID_ varchar(64),
+    ROOT_PROC_INST_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    EXECUTION_ID_ varchar(64),
+    ACT_INST_ID_ varchar(64),
+    CASE_DEF_KEY_ varchar(255),
+    CASE_DEF_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    CASE_EXECUTION_ID_ varchar(64),
+    TASK_ID_ varchar(64),
+    NAME_ varchar(255) not null,
+    VAR_TYPE_ varchar(100),
+    CREATE_TIME_ timestamp,
+    REV_ integer,
+    BYTEARRAY_ID_ varchar(64),
+    DOUBLE_ double precision,
+    LONG_ bigint,
+    TEXT_ varchar(4000),
+    TEXT2_ varchar(4000),
+    TENANT_ID_ varchar(64),
+    STATE_ varchar(20),
+    REMOVAL_TIME_ timestamp,
+    primary key (ID_)
+);
+
+create table ACT_HI_DETAIL (
+    ID_ varchar(64) not null,
+    TYPE_ varchar(255) not null,
+    PROC_DEF_KEY_ varchar(255),
+    PROC_DEF_ID_ varchar(64),
+    ROOT_PROC_INST_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    EXECUTION_ID_ varchar(64),
+    CASE_DEF_KEY_ varchar(255),
+    CASE_DEF_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    CASE_EXECUTION_ID_ varchar(64),
+    TASK_ID_ varchar(64),
+    ACT_INST_ID_ varchar(64),
+    VAR_INST_ID_ varchar(64),
+    NAME_ varchar(255) not null,
+    VAR_TYPE_ varchar(255),
+    REV_ integer,
+    TIME_ timestamp not null,
+    BYTEARRAY_ID_ varchar(64),
+    DOUBLE_ double precision,
+    LONG_ bigint,
+    TEXT_ varchar(4000),
+    TEXT2_ varchar(4000),
+    SEQUENCE_COUNTER_ bigint,
+    TENANT_ID_ varchar(64),
+    OPERATION_ID_ varchar(64),
+    REMOVAL_TIME_ timestamp,
+    INITIAL_ smallint check(INITIAL_ in (1,0)),
+    primary key (ID_)
+);
+
+create table ACT_HI_IDENTITYLINK (
+    ID_ varchar(64) not null,
+    TIMESTAMP_ timestamp not null,
+    TYPE_ varchar(255),
+    USER_ID_ varchar(255),
+    GROUP_ID_ varchar(255),
+    TASK_ID_ varchar(64),
+    ROOT_PROC_INST_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    OPERATION_TYPE_ varchar(64),
+    ASSIGNER_ID_ varchar(64),
+    PROC_DEF_KEY_ varchar(255),
+    TENANT_ID_ varchar(64),
+    REMOVAL_TIME_ timestamp,
+    primary key (ID_)
+);
+
+create table ACT_HI_COMMENT (
+    ID_ varchar(64) not null,
+    TYPE_ varchar(255),
+    TIME_ timestamp not null,
+    USER_ID_ varchar(255),
+    TASK_ID_ varchar(64),
+    ROOT_PROC_INST_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    ACTION_ varchar(255),
+    MESSAGE_ varchar(4000),
+    FULL_MSG_ BLOB,
+    TENANT_ID_ varchar(64),
+    REMOVAL_TIME_ timestamp,
+    primary key (ID_)
+);
+
+create table ACT_HI_ATTACHMENT (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    USER_ID_ varchar(255),
+    NAME_ varchar(255),
+    DESCRIPTION_ varchar(4000),
+    TYPE_ varchar(255),
+    TASK_ID_ varchar(64),
+    ROOT_PROC_INST_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    URL_ varchar(4000),
+    CONTENT_ID_ varchar(64),
+    TENANT_ID_ varchar(64),
+    CREATE_TIME_ timestamp,
+    REMOVAL_TIME_ timestamp,
+    primary key (ID_)
+);
+
+create table ACT_HI_OP_LOG (
+    ID_ varchar(64) not null,
+    DEPLOYMENT_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    PROC_DEF_KEY_ varchar(255),
+    ROOT_PROC_INST_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    EXECUTION_ID_ varchar(64),
+    CASE_DEF_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    CASE_EXECUTION_ID_ varchar(64),
+    TASK_ID_ varchar(64),
+    JOB_ID_ varchar(64),
+    JOB_DEF_ID_ varchar(64),
+    BATCH_ID_ varchar(64),
+    USER_ID_ varchar(255),
+    TIMESTAMP_ timestamp not null,
+    OPERATION_TYPE_ varchar(64),
+    OPERATION_ID_ varchar(64),
+    ENTITY_TYPE_ varchar(30),
+    PROPERTY_ varchar(64),
+    ORG_VALUE_ varchar(4000),
+    NEW_VALUE_ varchar(4000),
+    TENANT_ID_ varchar(64),
+    REMOVAL_TIME_ timestamp,
+       CATEGORY_ varchar(64),
+       EXTERNAL_TASK_ID_ varchar(64),
+       ANNOTATION_ varchar(4000),
+    primary key (ID_)
+);
+
+create table ACT_HI_INCIDENT (
+  ID_ varchar(64) not null,
+  PROC_DEF_KEY_ varchar(255),
+  PROC_DEF_ID_ varchar(64),
+  ROOT_PROC_INST_ID_ varchar(64),
+  PROC_INST_ID_ varchar(64),
+  EXECUTION_ID_ varchar(64),
+  CREATE_TIME_ timestamp not null,
+  END_TIME_ timestamp,
+  INCIDENT_MSG_ varchar(4000),
+  INCIDENT_TYPE_ varchar(255) not null,
+  ACTIVITY_ID_ varchar(255),
+  FAILED_ACTIVITY_ID_ varchar(255),
+  CAUSE_INCIDENT_ID_ varchar(64),
+  ROOT_CAUSE_INCIDENT_ID_ varchar(64),
+  CONFIGURATION_ varchar(255),
+  HISTORY_CONFIGURATION_ varchar(255),
+  INCIDENT_STATE_ integer,
+  TENANT_ID_ varchar(64),
+  JOB_DEF_ID_ varchar(64),
+  ANNOTATION_ varchar(4000),
+  REMOVAL_TIME_ timestamp,
+  primary key (ID_)
+);
+
+create table ACT_HI_JOB_LOG (
+    ID_ varchar(64) not null,
+    TIMESTAMP_ timestamp not null,
+    JOB_ID_ varchar(64) not null,
+    JOB_DUEDATE_ timestamp,
+    JOB_RETRIES_ integer,
+    JOB_PRIORITY_ bigint not null default 0,
+    JOB_EXCEPTION_MSG_ varchar(4000),
+    JOB_EXCEPTION_STACK_ID_ varchar(64),
+    JOB_STATE_ integer,
+    JOB_DEF_ID_ varchar(64),
+    JOB_DEF_TYPE_ varchar(255),
+    JOB_DEF_CONFIGURATION_ varchar(255),
+    ACT_ID_ varchar(255),
+    FAILED_ACT_ID_ varchar(255),
+    EXECUTION_ID_ varchar(64),
+    ROOT_PROC_INST_ID_ varchar(64),
+    PROCESS_INSTANCE_ID_ varchar(64),
+    PROCESS_DEF_ID_ varchar(64),
+    PROCESS_DEF_KEY_ varchar(255),
+    DEPLOYMENT_ID_ varchar(64),
+    SEQUENCE_COUNTER_ bigint,
+    TENANT_ID_ varchar(64),
+    HOSTNAME_ varchar(255),
+    REMOVAL_TIME_ timestamp,
+    primary key (ID_)
+);
+
+create table ACT_HI_BATCH (
+    ID_ varchar(64) not null,
+    TYPE_ varchar(255),
+    TOTAL_JOBS_ integer,
+    JOBS_PER_SEED_ integer,
+    INVOCATIONS_PER_JOB_ integer,
+    SEED_JOB_DEF_ID_ varchar(64),
+    MONITOR_JOB_DEF_ID_ varchar(64),
+    BATCH_JOB_DEF_ID_ varchar(64),
+    TENANT_ID_  varchar(64),
+    CREATE_USER_ID_ varchar(255),
+    START_TIME_ timestamp not null,
+    END_TIME_ timestamp,
+    REMOVAL_TIME_ timestamp,
+    EXEC_START_TIME_ timestamp,
+    primary key (ID_)
+);
+
+create table ACT_HI_EXT_TASK_LOG (
+    ID_ varchar(64) not null,
+    TIMESTAMP_ timestamp not null,
+    EXT_TASK_ID_ varchar(64) not null,
+    RETRIES_ integer,
+    TOPIC_NAME_ varchar(255),
+    WORKER_ID_ varchar(255),
+    PRIORITY_ bigint not null default 0,
+    ERROR_MSG_ varchar(4000),
+    ERROR_DETAILS_ID_ varchar(64),
+    ACT_ID_ varchar(255),
+    ACT_INST_ID_ varchar(64),
+    EXECUTION_ID_ varchar(64),
+    ROOT_PROC_INST_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    PROC_DEF_KEY_ varchar(255),
+    TENANT_ID_ varchar(64),
+    STATE_ integer,
+    REMOVAL_TIME_ timestamp,
+    primary key (ID_)
+);
+
+create index ACT_IDX_HI_PRO_INST_END on ACT_HI_PROCINST(END_TIME_);
+create index ACT_IDX_HI_PRO_I_BUSKEY on ACT_HI_PROCINST(BUSINESS_KEY_);
+create index ACT_IDX_HI_PRO_INST_TENANT_ID on ACT_HI_PROCINST(TENANT_ID_);
+create index ACT_IDX_HI_PRO_INST_PROC_DEF_KEY on ACT_HI_PROCINST(PROC_DEF_KEY_);
+create index ACT_IDX_HI_PRO_INST_PROC_TIME on ACT_HI_PROCINST(START_TIME_, END_TIME_);
+create index ACT_IDX_HI_PI_PDEFID_END_TIME on ACT_HI_PROCINST(PROC_DEF_ID_, END_TIME_);
+create index ACT_IDX_HI_PRO_INST_ROOT_PI on ACT_HI_PROCINST(ROOT_PROC_INST_ID_);
+create index ACT_IDX_HI_PRO_INST_RM_TIME on ACT_HI_PROCINST(REMOVAL_TIME_);
+
+create index ACT_IDX_HI_ACTINST_ROOT_PI on ACT_HI_ACTINST(ROOT_PROC_INST_ID_);
+create index ACT_IDX_HI_ACT_INST_START_END on ACT_HI_ACTINST(START_TIME_, END_TIME_);
+create index ACT_IDX_HI_ACT_INST_END on ACT_HI_ACTINST(END_TIME_);
+create index ACT_IDX_HI_ACT_INST_PROCINST on ACT_HI_ACTINST(PROC_INST_ID_, ACT_ID_);
+create index ACT_IDX_HI_ACT_INST_COMP on ACT_HI_ACTINST(EXECUTION_ID_, ACT_ID_, END_TIME_, ID_);
+create index ACT_IDX_HI_ACT_INST_STATS on ACT_HI_ACTINST(PROC_DEF_ID_, PROC_INST_ID_, ACT_ID_, END_TIME_, ACT_INST_STATE_);
+create index ACT_IDX_HI_ACT_INST_TENANT_ID on ACT_HI_ACTINST(TENANT_ID_);
+create index ACT_IDX_HI_ACT_INST_PROC_DEF_KEY on ACT_HI_ACTINST(PROC_DEF_KEY_);
+create index ACT_IDX_HI_AI_PDEFID_END_TIME on ACT_HI_ACTINST(PROC_DEF_ID_, END_TIME_);
+create index ACT_IDX_HI_ACT_INST_RM_TIME on ACT_HI_ACTINST(REMOVAL_TIME_);
+
+create index ACT_IDX_HI_TASKINST_ROOT_PI on ACT_HI_TASKINST(ROOT_PROC_INST_ID_);
+create index ACT_IDX_HI_TASK_INST_TENANT_ID on ACT_HI_TASKINST(TENANT_ID_);
+create index ACT_IDX_HI_TASK_INST_PROC_DEF_KEY on ACT_HI_TASKINST(PROC_DEF_KEY_);
+create index ACT_IDX_HI_TASKINST_PROCINST on ACT_HI_TASKINST(PROC_INST_ID_);
+create index ACT_IDX_HI_TASKINSTID_PROCINST on ACT_HI_TASKINST(ID_,PROC_INST_ID_);
+create index ACT_IDX_HI_TASK_INST_RM_TIME on ACT_HI_TASKINST(REMOVAL_TIME_);
+create index ACT_IDX_HI_TASK_INST_START on ACT_HI_TASKINST(START_TIME_);
+create index ACT_IDX_HI_TASK_INST_END on ACT_HI_TASKINST(END_TIME_);
+
+create index ACT_IDX_HI_DETAIL_ROOT_PI on ACT_HI_DETAIL(ROOT_PROC_INST_ID_);
+create index ACT_IDX_HI_DETAIL_PROC_INST on ACT_HI_DETAIL(PROC_INST_ID_);
+create index ACT_IDX_HI_DETAIL_ACT_INST on ACT_HI_DETAIL(ACT_INST_ID_);
+create index ACT_IDX_HI_DETAIL_CASE_INST on ACT_HI_DETAIL(CASE_INST_ID_);
+create index ACT_IDX_HI_DETAIL_CASE_EXEC on ACT_HI_DETAIL(CASE_EXECUTION_ID_);
+create index ACT_IDX_HI_DETAIL_TIME on ACT_HI_DETAIL(TIME_);
+create index ACT_IDX_HI_DETAIL_NAME on ACT_HI_DETAIL(NAME_);
+create index ACT_IDX_HI_DETAIL_TASK_ID on ACT_HI_DETAIL(TASK_ID_);
+create index ACT_IDX_HI_DETAIL_TENANT_ID on ACT_HI_DETAIL(TENANT_ID_);
+create index ACT_IDX_HI_DETAIL_PROC_DEF_KEY on ACT_HI_DETAIL(PROC_DEF_KEY_);
+create index ACT_IDX_HI_DETAIL_BYTEAR on ACT_HI_DETAIL(BYTEARRAY_ID_);
+create index ACT_IDX_HI_DETAIL_RM_TIME on ACT_HI_DETAIL(REMOVAL_TIME_);
+create index ACT_IDX_HI_DETAIL_TASK_BYTEAR on ACT_HI_DETAIL(BYTEARRAY_ID_, TASK_ID_);
+create index ACT_IDX_HI_DETAIL_VAR_INST_ID on ACT_HI_DETAIL(VAR_INST_ID_);
+
+create index ACT_IDX_HI_IDENT_LNK_ROOT_PI on ACT_HI_IDENTITYLINK(ROOT_PROC_INST_ID_);
+create index ACT_IDX_HI_IDENT_LNK_USER on ACT_HI_IDENTITYLINK(USER_ID_);
+create index ACT_IDX_HI_IDENT_LNK_GROUP on ACT_HI_IDENTITYLINK(GROUP_ID_);
+create index ACT_IDX_HI_IDENT_LNK_TENANT_ID on ACT_HI_IDENTITYLINK(TENANT_ID_);
+create index ACT_IDX_HI_IDENT_LNK_PROC_DEF_KEY on ACT_HI_IDENTITYLINK(PROC_DEF_KEY_);
+create index ACT_IDX_HI_IDENT_LINK_TASK on ACT_HI_IDENTITYLINK(TASK_ID_);
+create index ACT_IDX_HI_IDENT_LINK_RM_TIME on ACT_HI_IDENTITYLINK(REMOVAL_TIME_);
+create index ACT_IDX_HI_IDENT_LNK_TIMESTAMP on ACT_HI_IDENTITYLINK(TIMESTAMP_);
+
+create index ACT_IDX_HI_VARINST_ROOT_PI on ACT_HI_VARINST(ROOT_PROC_INST_ID_);
+create index ACT_IDX_HI_PROCVAR_PROC_INST on ACT_HI_VARINST(PROC_INST_ID_);
+create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_VARINST(NAME_, VAR_TYPE_);
+create index ACT_IDX_HI_CASEVAR_CASE_INST on ACT_HI_VARINST(CASE_INST_ID_);
+create index ACT_IDX_HI_VAR_INST_TENANT_ID on ACT_HI_VARINST(TENANT_ID_);
+create index ACT_IDX_HI_VAR_INST_PROC_DEF_KEY on ACT_HI_VARINST(PROC_DEF_KEY_);
+create index ACT_IDX_HI_VARINST_BYTEAR on ACT_HI_VARINST(BYTEARRAY_ID_);
+create index ACT_IDX_HI_VARINST_RM_TIME on ACT_HI_VARINST(REMOVAL_TIME_);
+create index ACT_IDX_HI_VAR_PI_NAME_TYPE on ACT_HI_VARINST(PROC_INST_ID_, NAME_, VAR_TYPE_);
+create index ACT_IDX_HI_VARINST_NAME on ACT_HI_VARINST(NAME_);
+create index ACT_IDX_HI_VARINST_ACT_INST_ID on ACT_HI_VARINST(ACT_INST_ID_);
+
+create index ACT_IDX_HI_INCIDENT_TENANT_ID on ACT_HI_INCIDENT(TENANT_ID_);
+create index ACT_IDX_HI_INCIDENT_PROC_DEF_KEY on ACT_HI_INCIDENT(PROC_DEF_KEY_);
+create index ACT_IDX_HI_INCIDENT_ROOT_PI on ACT_HI_INCIDENT(ROOT_PROC_INST_ID_);
+create index ACT_IDX_HI_INCIDENT_PROCINST on ACT_HI_INCIDENT(PROC_INST_ID_);
+create index ACT_IDX_HI_INCIDENT_RM_TIME on ACT_HI_INCIDENT(REMOVAL_TIME_);
+create index ACT_IDX_HI_INCIDENT_CREATE_TIME on ACT_HI_INCIDENT(CREATE_TIME_);
+create index ACT_IDX_HI_INCIDENT_END_TIME on ACT_HI_INCIDENT(END_TIME_);
+
+create index ACT_IDX_HI_JOB_LOG_ROOT_PI on ACT_HI_JOB_LOG(ROOT_PROC_INST_ID_);
+create index ACT_IDX_HI_JOB_LOG_PROCINST on ACT_HI_JOB_LOG(PROCESS_INSTANCE_ID_);
+create index ACT_IDX_HI_JOB_LOG_PROCDEF on ACT_HI_JOB_LOG(PROCESS_DEF_ID_);
+create index ACT_IDX_HI_JOB_LOG_TENANT_ID on ACT_HI_JOB_LOG(TENANT_ID_);
+create index ACT_IDX_HI_JOB_LOG_JOB_DEF_ID on ACT_HI_JOB_LOG(JOB_DEF_ID_);
+create index ACT_IDX_HI_JOB_LOG_PROC_DEF_KEY on ACT_HI_JOB_LOG(PROCESS_DEF_KEY_);
+create index ACT_IDX_HI_JOB_LOG_EX_STACK on ACT_HI_JOB_LOG(JOB_EXCEPTION_STACK_ID_);
+create index ACT_IDX_HI_JOB_LOG_RM_TIME on ACT_HI_JOB_LOG(REMOVAL_TIME_);
+create index ACT_IDX_HI_JOB_LOG_JOB_CONF on ACT_HI_JOB_LOG(JOB_DEF_CONFIGURATION_);
+
+create index ACT_HI_BAT_RM_TIME on ACT_HI_BATCH(REMOVAL_TIME_);
+
+create index ACT_HI_EXT_TASK_LOG_ROOT_PI on ACT_HI_EXT_TASK_LOG(ROOT_PROC_INST_ID_);
+create index ACT_HI_EXT_TASK_LOG_PROCINST on ACT_HI_EXT_TASK_LOG(PROC_INST_ID_);
+create index ACT_HI_EXT_TASK_LOG_PROCDEF on ACT_HI_EXT_TASK_LOG(PROC_DEF_ID_);
+create index ACT_HI_EXT_TASK_LOG_PROC_DEF_KEY on ACT_HI_EXT_TASK_LOG(PROC_DEF_KEY_);
+create index ACT_HI_EXT_TASK_LOG_TENANT_ID on ACT_HI_EXT_TASK_LOG(TENANT_ID_);
+create index ACT_IDX_HI_EXTTASKLOG_ERRORDET on ACT_HI_EXT_TASK_LOG(ERROR_DETAILS_ID_);
+create index ACT_HI_EXT_TASK_LOG_RM_TIME on ACT_HI_EXT_TASK_LOG(REMOVAL_TIME_);
+
+create index ACT_IDX_HI_OP_LOG_ROOT_PI on ACT_HI_OP_LOG(ROOT_PROC_INST_ID_);
+create index ACT_IDX_HI_OP_LOG_PROCINST on ACT_HI_OP_LOG(PROC_INST_ID_);
+create index ACT_IDX_HI_OP_LOG_PROCDEF on ACT_HI_OP_LOG(PROC_DEF_ID_);
+create index ACT_IDX_HI_OP_LOG_TASK on ACT_HI_OP_LOG(TASK_ID_);
+create index ACT_IDX_HI_OP_LOG_RM_TIME on ACT_HI_OP_LOG(REMOVAL_TIME_);
+create index ACT_IDX_HI_OP_LOG_TIMESTAMP on ACT_HI_OP_LOG(TIMESTAMP_);
+create index ACT_IDX_HI_OP_LOG_USER_ID on ACT_HI_OP_LOG(USER_ID_);
+create index ACT_IDX_HI_OP_LOG_OP_TYPE on ACT_HI_OP_LOG(OPERATION_TYPE_);
+create index ACT_IDX_HI_OP_LOG_ENTITY_TYPE on ACT_HI_OP_LOG(ENTITY_TYPE_);
+
+create index ACT_IDX_HI_ATTACHMENT_CONTENT on ACT_HI_ATTACHMENT(CONTENT_ID_);
+create index ACT_IDX_HI_COMMENT_ROOT_PI on ACT_HI_COMMENT(ROOT_PROC_INST_ID_);
+create index ACT_IDX_HI_ATTACHMENT_PROCINST on ACT_HI_ATTACHMENT(PROC_INST_ID_);
+create index ACT_IDX_HI_ATTACHMENT_TASK on ACT_HI_ATTACHMENT(TASK_ID_);
+create index ACT_IDX_HI_ATTACHMENT_RM_TIME on ACT_HI_ATTACHMENT(REMOVAL_TIME_);
+
+create index ACT_IDX_HI_COMMENT_TASK on ACT_HI_COMMENT(TASK_ID_);
+create index ACT_IDX_HI_ATTACHMENT_ROOT_PI on ACT_HI_ATTACHMENT(ROOT_PROC_INST_ID_);
+create index ACT_IDX_HI_COMMENT_PROCINST on ACT_HI_COMMENT(PROC_INST_ID_);
+create index ACT_IDX_HI_COMMENT_RM_TIME on ACT_HI_COMMENT(REMOVAL_TIME_);
+--
+-- Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+-- under one or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information regarding copyright
+-- ownership. Camunda licenses this file to you under the Apache License,
+-- Version 2.0; you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+create table ACT_HI_CASEINST (
+    ID_ varchar(64) not null,
+    CASE_INST_ID_ varchar(64) not null,
+    BUSINESS_KEY_ varchar(255),
+    CASE_DEF_ID_ varchar(64) not null,
+    CREATE_TIME_ timestamp not null,
+    CLOSE_TIME_ timestamp,
+    DURATION_ bigint,
+    STATE_ integer,
+    CREATE_USER_ID_ varchar(255),
+    SUPER_CASE_INSTANCE_ID_ varchar(64),
+    SUPER_PROCESS_INSTANCE_ID_ varchar(64),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+);
+
+alter table ACT_HI_CASEINST add constraint CASE_INST_ID_ unique(CASE_INST_ID_);
+
+create table ACT_HI_CASEACTINST (
+    ID_ varchar(64) not null,
+    PARENT_ACT_INST_ID_ varchar(64),
+    CASE_DEF_ID_ varchar(64) not null,
+    CASE_INST_ID_ varchar(64) not null,
+    CASE_ACT_ID_ varchar(255) not null,
+    TASK_ID_ varchar(64),
+    CALL_PROC_INST_ID_ varchar(64),
+    CALL_CASE_INST_ID_ varchar(64),
+    CASE_ACT_NAME_ varchar(255),
+    CASE_ACT_TYPE_ varchar(255),
+    CREATE_TIME_ timestamp not null,
+    END_TIME_ timestamp,
+    DURATION_ bigint,
+    STATE_ integer,
+    REQUIRED_ smallint check(REQUIRED_ in (1,0)),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+);
+
+create index ACT_IDX_HI_CAS_I_CLOSE on ACT_HI_CASEINST(CLOSE_TIME_);
+create index ACT_IDX_HI_CAS_I_BUSKEY on ACT_HI_CASEINST(BUSINESS_KEY_);
+create index ACT_IDX_HI_CAS_I_TENANT_ID on ACT_HI_CASEINST(TENANT_ID_);
+create index ACT_IDX_HI_CAS_A_I_CREATE on ACT_HI_CASEACTINST(CREATE_TIME_);
+create index ACT_IDX_HI_CAS_A_I_END on ACT_HI_CASEACTINST(END_TIME_);
+create index ACT_IDX_HI_CAS_A_I_COMP on ACT_HI_CASEACTINST(CASE_ACT_ID_, END_TIME_, ID_);
+create index ACT_IDX_HI_CAS_A_I_TENANT_ID on ACT_HI_CASEACTINST(TENANT_ID_);
+--
+-- Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+-- under one or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information regarding copyright
+-- ownership. Camunda licenses this file to you under the Apache License,
+-- Version 2.0; you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+-- create history decision instance table --
+create table ACT_HI_DECINST (
+    ID_ varchar(64) NOT NULL,
+    DEC_DEF_ID_ varchar(64) NOT NULL,
+    DEC_DEF_KEY_ varchar(255) NOT NULL,
+    DEC_DEF_NAME_ varchar(255),
+    PROC_DEF_KEY_ varchar(255),
+    PROC_DEF_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    CASE_DEF_KEY_ varchar(255),
+    CASE_DEF_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    ACT_INST_ID_ varchar(64),
+    ACT_ID_ varchar(255),
+    EVAL_TIME_ timestamp not null,
+    REMOVAL_TIME_ timestamp,
+    COLLECT_VALUE_ double precision,
+    USER_ID_ varchar(255),
+    ROOT_DEC_INST_ID_ varchar(64),
+    ROOT_PROC_INST_ID_ varchar(64),
+    DEC_REQ_ID_ varchar(64),
+    DEC_REQ_KEY_ varchar(255),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+);
+
+-- create history decision input table --
+create table ACT_HI_DEC_IN (
+    ID_ varchar(64) NOT NULL,
+    DEC_INST_ID_ varchar(64) NOT NULL,
+    CLAUSE_ID_ varchar(64),
+    CLAUSE_NAME_ varchar(255),
+    VAR_TYPE_ varchar(100),
+    BYTEARRAY_ID_ varchar(64),
+    DOUBLE_ double precision,
+    LONG_ bigint,
+    TEXT_ varchar(4000),
+    TEXT2_ varchar(4000),
+    TENANT_ID_ varchar(64),
+    CREATE_TIME_ timestamp,
+    ROOT_PROC_INST_ID_ varchar(64),
+    REMOVAL_TIME_ timestamp,
+    primary key (ID_)
+);
+
+-- create history decision output table --
+create table ACT_HI_DEC_OUT (
+    ID_ varchar(64) NOT NULL,
+    DEC_INST_ID_ varchar(64) NOT NULL,
+    CLAUSE_ID_ varchar(64),
+    CLAUSE_NAME_ varchar(255),
+    RULE_ID_ varchar(64),
+    RULE_ORDER_ integer,
+    VAR_NAME_ varchar(255),
+    VAR_TYPE_ varchar(100),
+    BYTEARRAY_ID_ varchar(64),
+    DOUBLE_ double precision,
+    LONG_ bigint,
+    TEXT_ varchar(4000),
+    TEXT2_ varchar(4000),
+    TENANT_ID_ varchar(64),
+    CREATE_TIME_ timestamp,
+    ROOT_PROC_INST_ID_ varchar(64),
+    REMOVAL_TIME_ timestamp,
+    primary key (ID_)
+);
+
+
+create index ACT_IDX_HI_DEC_INST_ID on ACT_HI_DECINST(DEC_DEF_ID_);
+create index ACT_IDX_HI_DEC_INST_KEY on ACT_HI_DECINST(DEC_DEF_KEY_);
+create index ACT_IDX_HI_DEC_INST_PI on ACT_HI_DECINST(PROC_INST_ID_);
+create index ACT_IDX_HI_DEC_INST_CI on ACT_HI_DECINST(CASE_INST_ID_);
+create index ACT_IDX_HI_DEC_INST_ACT on ACT_HI_DECINST(ACT_ID_);
+create index ACT_IDX_HI_DEC_INST_ACT_INST on ACT_HI_DECINST(ACT_INST_ID_);
+create index ACT_IDX_HI_DEC_INST_TIME on ACT_HI_DECINST(EVAL_TIME_);
+create index ACT_IDX_HI_DEC_INST_TENANT_ID on ACT_HI_DECINST(TENANT_ID_);
+create index ACT_IDX_HI_DEC_INST_ROOT_ID on ACT_HI_DECINST(ROOT_DEC_INST_ID_);
+create index ACT_IDX_HI_DEC_INST_REQ_ID on ACT_HI_DECINST(DEC_REQ_ID_);
+create index ACT_IDX_HI_DEC_INST_REQ_KEY on ACT_HI_DECINST(DEC_REQ_KEY_);
+create index ACT_IDX_HI_DEC_INST_ROOT_PI on ACT_HI_DECINST(ROOT_PROC_INST_ID_);
+create index ACT_IDX_HI_DEC_INST_RM_TIME on ACT_HI_DECINST(REMOVAL_TIME_);
+
+create index ACT_IDX_HI_DEC_IN_INST on ACT_HI_DEC_IN(DEC_INST_ID_);
+create index ACT_IDX_HI_DEC_IN_CLAUSE on ACT_HI_DEC_IN(DEC_INST_ID_, CLAUSE_ID_);
+create index ACT_IDX_HI_DEC_IN_ROOT_PI on ACT_HI_DEC_IN(ROOT_PROC_INST_ID_);
+create index ACT_IDX_HI_DEC_IN_RM_TIME on ACT_HI_DEC_IN(REMOVAL_TIME_);
+
+create index ACT_IDX_HI_DEC_OUT_INST on ACT_HI_DEC_OUT(DEC_INST_ID_);
+create index ACT_IDX_HI_DEC_OUT_RULE on ACT_HI_DEC_OUT(RULE_ORDER_, CLAUSE_ID_);
+create index ACT_IDX_HI_DEC_OUT_ROOT_PI on ACT_HI_DEC_OUT(ROOT_PROC_INST_ID_);
+create index ACT_IDX_HI_DEC_OUT_RM_TIME on ACT_HI_DEC_OUT(REMOVAL_TIME_);
+
+SET SCHEMA DB2ADMIN;
+
+-- //@UNDO
+-- SQL to undo the change goes here.
+
+SET SCHEMA CAMUNDA;
+
+alter table ACT_RE_DECISION_DEF
+    drop constraint ACT_FK_DEC_REQ;
+
+drop index ACT_IDX_DEC_DEF_TENANT_ID;
+drop index ACT_IDX_DEC_DEF_REQ_ID;
+drop index ACT_IDX_DEC_REQ_DEF_TENANT_ID;
+
+drop table ACT_RE_DECISION_DEF;
+drop table ACT_RE_DECISION_REQ_DEF;
+
+--
+-- Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+-- under one or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information regarding copyright
+-- ownership. Camunda licenses this file to you under the Apache License,
+-- Version 2.0; you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+drop index ACT_IDX_CASE_EXEC_BUSKEY;
+
+alter table ACT_RU_CASE_EXECUTION
+    drop foreign key ACT_FK_CASE_EXE_CASE_INST;
+
+alter table ACT_RU_CASE_EXECUTION
+    drop foreign key ACT_FK_CASE_EXE_PARENT;
+
+alter table ACT_RU_CASE_EXECUTION
+    drop foreign key ACT_FK_CASE_EXE_CASE_DEF;
+
+alter table ACT_RU_VARIABLE
+    drop foreign key ACT_FK_VAR_CASE_EXE;
+
+alter table ACT_RU_VARIABLE
+    drop foreign key ACT_FK_VAR_CASE_INST;
+
+alter table ACT_RU_TASK
+    drop foreign key ACT_FK_TASK_CASE_EXE;
+
+alter table ACT_RU_TASK
+    drop foreign key ACT_FK_TASK_CASE_DEF;
+
+alter table ACT_RU_CASE_SENTRY_PART
+    drop foreign key ACT_FK_CASE_SENTRY_CASE_INST;
+
+alter table ACT_RU_CASE_SENTRY_PART
+    drop foreign key ACT_FK_CASE_SENTRY_CASE_EXEC;
+
+-- indexes for concurrency problems - https://app.camunda.com/jira/browse/CAM-1646 --
+drop index ACT_IDX_CASE_EXEC_CASE;
+drop index ACT_IDX_CASE_EXEC_PARENT;
+drop index ACT_IDX_VARIABLE_CASE_EXEC;
+drop index ACT_IDX_VARIABLE_CASE_INST;
+drop index ACT_IDX_TASK_CASE_EXEC;
+drop index ACT_IDX_TASK_CASE_DEF_ID;
+drop index ACT_IDX_CASE_SENTRY_CASE_INST;
+drop index ACT_IDX_CASE_SENTRY_CASE_EXEC;
+
+drop index ACT_IDX_CASE_DEF_TENANT_ID;
+drop index ACT_IDX_CASE_EXEC_TENANT_ID;
+
+-- https://app.camunda.com/jira/browse/CAM-9165
+drop index ACT_IDX_CASE_EXE_CASE_INST;
+
+drop table ACT_RE_CASE_DEF;
+drop table ACT_RU_CASE_EXECUTION;
+drop table ACT_RU_CASE_SENTRY_PART;
+--
+-- Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+-- under one or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information regarding copyright
+-- ownership. Camunda licenses this file to you under the Apache License,
+-- Version 2.0; you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+drop index ACT_IDX_BYTEARRAY_ROOT_PI;
+drop index ACT_IDX_BYTEARRAY_RM_TIME;
+drop index ACT_IDX_EXECUTION_ROOT_PI;
+drop index ACT_IDX_EXEC_BUSKEY;
+drop index ACT_IDX_TASK_CREATE;
+drop index ACT_IDX_TASK_LAST_UPDATED;
+drop index ACT_IDX_TASK_ASSIGNEE;
+drop index ACT_IDX_TASK_OWNER;
+drop index ACT_IDX_IDENT_LNK_USER;
+drop index ACT_IDX_IDENT_LNK_GROUP;
+drop index ACT_IDX_VARIABLE_TASK_ID;
+drop index ACT_IDX_VARIABLE_TASK_NAME_TYPE;
+drop index ACT_IDX_INC_CONFIGURATION;
+drop index ACT_IDX_JOB_PROCINST;
+drop index ACT_UNIQ_AUTH_USER;
+drop index ACT_UNIQ_AUTH_GROUP;
+drop index ACT_UNIQ_VARIABLE;
+drop index ACT_IDX_AUTH_GROUP_ID;
+
+alter table ACT_GE_BYTEARRAY
+    drop foreign key ACT_FK_BYTEARR_DEPL;
+
+alter table ACT_RU_EXECUTION
+    drop foreign key ACT_FK_EXE_PROCINST;
+
+alter table ACT_RU_EXECUTION
+    drop foreign key ACT_FK_EXE_PARENT;
+
+alter table ACT_RU_EXECUTION
+    drop foreign key ACT_FK_EXE_SUPER;
+
+alter table ACT_RU_EXECUTION
+    drop foreign key ACT_FK_EXE_PROCDEF;
+
+alter table ACT_RU_IDENTITYLINK
+    drop foreign key ACT_FK_TSKASS_TASK;
+
+alter table ACT_RU_IDENTITYLINK
+    drop foreign key ACT_FK_ATHRZ_PROCEDEF;
+
+alter table ACT_RU_TASK
+       drop foreign key ACT_FK_TASK_EXE;
+
+alter table ACT_RU_TASK
+       drop foreign key ACT_FK_TASK_PROCINST;
+
+alter table ACT_RU_TASK
+       drop foreign key ACT_FK_TASK_PROCDEF;
+
+alter table ACT_RU_VARIABLE
+    drop foreign key ACT_FK_VAR_EXE;
+
+alter table ACT_RU_VARIABLE
+       drop foreign key ACT_FK_VAR_PROCINST;
+
+alter table ACT_RU_VARIABLE
+    drop foreign key ACT_FK_VAR_BYTEARRAY;
+
+alter table ACT_RU_JOB
+    drop foreign key ACT_FK_JOB_EXCEPTION;
+
+alter table ACT_RU_EVENT_SUBSCR
+    drop foreign key ACT_FK_EVENT_EXEC;
+
+alter table ACT_RU_INCIDENT
+    drop foreign key ACT_FK_INC_EXE;
+
+alter table ACT_RU_INCIDENT
+    drop foreign key ACT_FK_INC_PROCINST;
+
+alter table ACT_RU_INCIDENT
+    drop foreign key ACT_FK_INC_PROCDEF;
+
+alter table ACT_RU_INCIDENT
+    drop foreign key ACT_FK_INC_CAUSE;
+
+alter table ACT_RU_INCIDENT
+    drop foreign key ACT_FK_INC_RCAUSE;
+
+alter table ACT_RU_INCIDENT
+    drop foreign key ACT_FK_INC_JOB_DEF;
+
+alter table ACT_RU_EXT_TASK
+    drop foreign key ACT_FK_EXT_TASK_EXE;
+
+alter table ACT_RU_BATCH
+    drop foreign key ACT_FK_BATCH_SEED_JOB_DEF;
+
+alter table ACT_RU_BATCH
+    drop foreign key ACT_FK_BATCH_MONITOR_JOB_DEF;
+
+alter table ACT_RU_BATCH
+    drop foreign key ACT_FK_BATCH_JOB_DEF;
+
+alter table ACT_RU_EXT_TASK
+    drop foreign key ACT_FK_EXT_TASK_ERROR_DETAILS;
+
+alter table ACT_RU_VARIABLE
+    drop foreign key ACT_FK_VAR_BATCH;
+
+drop index ACT_IDX_EVENT_SUBSCR_CONFIG_;
+drop index ACT_IDX_ATHRZ_PROCEDEF;
+
+-- indexes for concurrency problems - https://app.camunda.com/jira/browse/CAM-1646 --
+drop index ACT_IDX_EXECUTION_PROC;
+drop index ACT_IDX_EXECUTION_PARENT;
+drop index ACT_IDX_EXECUTION_SUPER;
+drop index ACT_IDX_EXECUTION_PROCINST;
+drop index ACT_IDX_EVENT_SUBSCR_EXEC;
+drop index ACT_IDX_BA_DEPLOYMENT;
+drop index ACT_IDX_IDENT_LNK_TASK;
+drop index ACT_IDX_INCIDENT_EXEC;
+drop index ACT_IDX_INCIDENT_PROCINST;
+drop index ACT_IDX_INCIDENT_PROC_DEF_ID;
+drop index ACT_IDX_INCIDENT_CAUSE;
+drop index ACT_IDX_INCIDENT_ROOT_CAUSE;
+drop index ACT_IDX_INCIDENT_JOB_DEF;
+drop index ACT_IDX_JOB_EXCEPTION_STACK;
+drop index ACT_IDX_VARIABLE_BA;
+drop index ACT_IDX_VARIABLE_EXEC;
+drop index ACT_IDX_VARIABLE_PROCINST;
+drop index ACT_IDX_TASK_EXEC;
+drop index ACT_IDX_TASK_PROCINST;
+drop index ACT_IDX_TASK_PROC_DEF_ID;
+
+-- new metric milliseconds column
+DROP INDEX ACT_IDX_METER_LOG_MS;
+DROP INDEX ACT_IDX_METER_LOG_NAME_MS;
+DROP INDEX ACT_IDX_METER_LOG_REPORT;
+
+-- old metric timestamp column
+DROP INDEX ACT_IDX_METER_LOG_TIME;
+DROP INDEX ACT_IDX_METER_LOG;
+
+-- task metric timestamp column
+drop index ACT_IDX_TASK_METER_LOG_TIME;
+
+drop index ACT_IDX_AUTH_RESOURCE_ID;
+drop index ACT_IDX_EXT_TASK_TOPIC;
+drop index ACT_IDX_EXT_TASK_EXEC;
+
+drop index ACT_IDX_BYTEARRAY_NAME;
+drop index ACT_IDX_DEPLOYMENT_NAME;
+drop index ACT_IDX_JOBDEF_PROC_DEF_ID;
+drop index ACT_IDX_JOB_HANDLER_TYPE;
+drop index ACT_IDX_EVENT_SUBSCR_EVT_NAME;
+drop index ACT_IDX_PROCDEF_DEPLOYMENT_ID;
+
+drop index ACT_IDX_EXT_TASK_TENANT_ID;
+drop index ACT_IDX_EXT_TASK_PRIORITY;
+drop index ACT_IDX_EXT_TASK_ERR_DETAILS;
+drop index ACT_IDX_INC_TENANT_ID;
+drop index ACT_IDX_JOBDEF_TENANT_ID;
+drop index ACT_IDX_JOB_TENANT_ID;
+drop index ACT_IDX_EVENT_SUBSCR_TENANT_ID;
+drop index ACT_IDX_VARIABLE_TENANT_ID;
+drop index ACT_IDX_TASK_TENANT_ID;
+drop index ACT_IDX_EXEC_TENANT_ID;
+drop index ACT_IDX_PROCDEF_TENANT_ID;
+drop index ACT_IDX_DEPLOYMENT_TENANT_ID;
+
+drop index ACT_IDX_JOB_JOB_DEF_ID;
+drop index ACT_IDX_BATCH_SEED_JOB_DEF;
+drop index ACT_IDX_BATCH_MONITOR_JOB_DEF;
+drop index ACT_IDX_BATCH_JOB_DEF;
+
+drop index ACT_IDX_PROCDEF_VER_TAG;
+
+drop index ACT_IDX_JOB_EXECUTION_ID;
+
+drop index ACT_IDX_AUTH_ROOT_PI;
+drop index ACT_IDX_AUTH_RM_TIME;
+
+drop index ACT_IDX_BATCH_ID;
+
+drop table ACT_GE_PROPERTY;
+drop table ACT_GE_BYTEARRAY;
+drop table ACT_RE_DEPLOYMENT;
+drop table ACT_RE_PROCDEF;
+drop table ACT_RE_CAMFORMDEF;
+drop table ACT_RU_VARIABLE;
+drop table ACT_RU_IDENTITYLINK;
+drop table ACT_RU_TASK;
+drop table ACT_RU_EXECUTION;
+drop table ACT_RU_JOB;
+drop table ACT_RU_JOBDEF;
+drop table ACT_RU_EVENT_SUBSCR;
+drop table ACT_RU_INCIDENT;
+drop table ACT_RU_AUTHORIZATION;
+drop table ACT_RU_FILTER;
+drop table ACT_RU_METER_LOG;
+drop table ACT_RU_TASK_METER_LOG;
+drop table ACT_RU_EXT_TASK;
+drop table ACT_RU_BATCH;
+drop table ACT_GE_SCHEMA_LOG;
+--
+-- Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+-- under one or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information regarding copyright
+-- ownership. Camunda licenses this file to you under the Apache License,
+-- Version 2.0; you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+drop index ACT_IDX_HI_DEC_INST_ID;
+drop index ACT_IDX_HI_DEC_INST_KEY;
+drop index ACT_IDX_HI_DEC_INST_PI;
+drop index ACT_IDX_HI_DEC_INST_CI;
+drop index ACT_IDX_HI_DEC_INST_ACT;
+drop index ACT_IDX_HI_DEC_INST_ACT_INST;
+drop index ACT_IDX_HI_DEC_INST_TIME;
+drop index ACT_IDX_HI_DEC_INST_TENANT_ID;
+drop index ACT_IDX_HI_DEC_INST_ROOT_ID;
+drop index ACT_IDX_HI_DEC_INST_REQ_ID;
+drop index ACT_IDX_HI_DEC_INST_REQ_KEY;
+drop index ACT_IDX_HI_DEC_INST_ROOT_PI;
+drop index ACT_IDX_HI_DEC_INST_RM_TIME;
+
+drop index ACT_IDX_HI_DEC_IN_INST;
+drop index ACT_IDX_HI_DEC_IN_CLAUSE;
+drop index ACT_IDX_HI_DEC_IN_ROOT_PI;
+drop index ACT_IDX_HI_DEC_IN_RM_TIME;
+
+drop index ACT_IDX_HI_DEC_OUT_INST;
+drop index ACT_IDX_HI_DEC_OUT_RULE;
+drop index ACT_IDX_HI_DEC_OUT_ROOT_PI;
+drop index ACT_IDX_HI_DEC_OUT_RM_TIME;
+
+drop table ACT_HI_DECINST;
+
+drop table ACT_HI_DEC_IN;
+
+drop table ACT_HI_DEC_OUT;
+--
+-- Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+-- under one or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information regarding copyright
+-- ownership. Camunda licenses this file to you under the Apache License,
+-- Version 2.0; you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+drop index ACT_IDX_HI_CAS_I_CLOSE;
+drop index ACT_IDX_HI_CAS_I_BUSKEY;
+drop index ACT_IDX_HI_CAS_I_TENANT_ID;
+drop index ACT_IDX_HI_CAS_A_I_CREATE;
+drop index ACT_IDX_HI_CAS_A_I_END;
+drop index ACT_IDX_HI_CAS_A_I_COMP;
+drop index ACT_IDX_HI_CAS_A_I_TENANT_ID;
+
+drop table ACT_HI_CASEINST;
+drop table ACT_HI_CASEACTINST;
+--
+-- Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+-- under one or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information regarding copyright
+-- ownership. Camunda licenses this file to you under the Apache License,
+-- Version 2.0; you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+drop index ACT_IDX_HI_PRO_INST_END;
+drop index ACT_IDX_HI_PRO_I_BUSKEY;
+drop index ACT_IDX_HI_PRO_INST_TENANT_ID;
+drop index ACT_IDX_HI_PRO_INST_PROC_DEF_KEY;
+drop index ACT_IDX_HI_PRO_INST_PROC_TIME;
+drop index ACT_IDX_HI_PI_PDEFID_END_TIME;
+drop index ACT_IDX_HI_PRO_INST_ROOT_PI;
+drop index ACT_IDX_HI_PRO_INST_RM_TIME;
+
+drop index ACT_IDX_HI_ACTINST_ROOT_PI;
+drop index ACT_IDX_HI_ACT_INST_START_END;
+drop index ACT_IDX_HI_ACT_INST_END;
+drop index ACT_IDX_HI_ACT_INST_PROCINST;
+drop index ACT_IDX_HI_ACT_INST_COMP;
+drop index ACT_IDX_HI_ACT_INST_STATS;
+drop index ACT_IDX_HI_ACT_INST_TENANT_ID;
+drop index ACT_IDX_HI_ACT_INST_PROC_DEF_KEY;
+drop index ACT_IDX_HI_AI_PDEFID_END_TIME;
+drop index ACT_IDX_HI_ACT_INST_RM_TIME;
+
+drop index ACT_IDX_HI_TASKINST_ROOT_PI;
+drop index ACT_IDX_HI_TASK_INST_TENANT_ID;
+drop index ACT_IDX_HI_TASK_INST_PROC_DEF_KEY;
+drop index ACT_IDX_HI_TASKINST_PROCINST;
+drop index ACT_IDX_HI_TASKINSTID_PROCINST;
+drop index ACT_IDX_HI_TASK_INST_RM_TIME;
+drop index ACT_IDX_HI_TASK_INST_START;
+drop index ACT_IDX_HI_TASK_INST_END;
+
+drop index ACT_IDX_HI_IDENT_LNK_ROOT_PI;
+drop index ACT_IDX_HI_IDENT_LNK_USER;
+drop index ACT_IDX_HI_IDENT_LNK_GROUP;
+drop index ACT_IDX_HI_IDENT_LNK_TENANT_ID;
+drop index ACT_IDX_HI_IDENT_LNK_PROC_DEF_KEY;
+drop index ACT_IDX_HI_IDENT_LINK_TASK;
+drop index ACT_IDX_HI_IDENT_LINK_RM_TIME;
+drop index ACT_IDX_HI_IDENT_LNK_TIMESTAMP;
+
+drop index ACT_IDX_HI_DETAIL_ROOT_PI;
+drop index ACT_IDX_HI_DETAIL_PROC_INST;
+drop index ACT_IDX_HI_DETAIL_ACT_INST;
+drop index ACT_IDX_HI_DETAIL_CASE_INST;
+drop index ACT_IDX_HI_DETAIL_CASE_EXEC;
+drop index ACT_IDX_HI_DETAIL_TIME;
+drop index ACT_IDX_HI_DETAIL_NAME;
+drop index ACT_IDX_HI_DETAIL_TASK_ID;
+drop index ACT_IDX_HI_DETAIL_TENANT_ID;
+drop index ACT_IDX_HI_DETAIL_PROC_DEF_KEY;
+drop index ACT_IDX_HI_DETAIL_BYTEAR;
+drop index ACT_IDX_HI_DETAIL_RM_TIME;
+drop index ACT_IDX_HI_DETAIL_TASK_BYTEAR;
+drop index ACT_IDX_HI_DETAIL_VAR_INST_ID;
+
+drop index ACT_IDX_HI_VARINST_ROOT_PI;
+drop index ACT_IDX_HI_PROCVAR_PROC_INST;
+drop index ACT_IDX_HI_PROCVAR_NAME_TYPE;
+drop index ACT_IDX_HI_CASEVAR_CASE_INST;
+drop index ACT_IDX_HI_VAR_INST_TENANT_ID;
+drop index ACT_IDX_HI_VAR_INST_PROC_DEF_KEY;
+drop index ACT_IDX_HI_VARINST_BYTEAR;
+drop index ACT_IDX_HI_VARINST_RM_TIME;
+drop index ACT_IDX_HI_VAR_PI_NAME_TYPE;
+drop index ACT_IDX_HI_VARINST_NAME;
+drop index ACT_IDX_HI_VARINST_ACT_INST_ID;
+
+drop index ACT_IDX_HI_INCIDENT_TENANT_ID;
+drop index ACT_IDX_HI_INCIDENT_PROC_DEF_KEY;
+drop index ACT_IDX_HI_INCIDENT_ROOT_PI;
+drop index ACT_IDX_HI_INCIDENT_PROCINST;
+drop index ACT_IDX_HI_INCIDENT_RM_TIME;
+drop index ACT_IDX_HI_INCIDENT_CREATE_TIME;
+drop index ACT_IDX_HI_INCIDENT_END_TIME;
+
+drop index ACT_IDX_HI_JOB_LOG_ROOT_PI;
+drop index ACT_IDX_HI_JOB_LOG_PROCINST;
+drop index ACT_IDX_HI_JOB_LOG_PROCDEF;
+drop index ACT_IDX_HI_JOB_LOG_TENANT_ID;
+drop index ACT_IDX_HI_JOB_LOG_JOB_DEF_ID;
+drop index ACT_IDX_HI_JOB_LOG_PROC_DEF_KEY;
+drop index ACT_IDX_HI_JOB_LOG_EX_STACK;
+drop index ACT_IDX_HI_JOB_LOG_RM_TIME;
+drop index ACT_IDX_HI_JOB_LOG_JOB_CONF;
+
+drop index ACT_HI_EXT_TASK_LOG_ROOT_PI;
+drop index ACT_HI_EXT_TASK_LOG_PROCINST;
+drop index ACT_HI_EXT_TASK_LOG_PROCDEF;
+drop index ACT_HI_EXT_TASK_LOG_PROC_DEF_KEY;
+drop index ACT_HI_EXT_TASK_LOG_TENANT_ID;
+drop index ACT_IDX_HI_EXTTASKLOG_ERRORDET;
+drop index ACT_HI_EXT_TASK_LOG_RM_TIME;
+
+drop index ACT_HI_BAT_RM_TIME;
+
+drop index ACT_IDX_HI_OP_LOG_ROOT_PI;
+drop index ACT_IDX_HI_OP_LOG_PROCINST;
+drop index ACT_IDX_HI_OP_LOG_PROCDEF;
+drop index ACT_IDX_HI_OP_LOG_TASK;
+drop index ACT_IDX_HI_OP_LOG_RM_TIME;
+drop index ACT_IDX_HI_OP_LOG_TIMESTAMP;
+drop index ACT_IDX_HI_OP_LOG_USER_ID;
+drop index ACT_IDX_HI_OP_LOG_OP_TYPE;
+drop index ACT_IDX_HI_OP_LOG_ENTITY_TYPE;
+
+drop index ACT_IDX_HI_ATTACHMENT_CONTENT;
+drop index ACT_IDX_HI_ATTACHMENT_ROOT_PI;
+drop index ACT_IDX_HI_ATTACHMENT_PROCINST;
+drop index ACT_IDX_HI_ATTACHMENT_TASK;
+drop index ACT_IDX_HI_ATTACHMENT_RM_TIME;
+
+drop index ACT_IDX_HI_COMMENT_TASK;
+drop index ACT_IDX_HI_COMMENT_ROOT_PI;
+drop index ACT_IDX_HI_COMMENT_PROCINST;
+drop index ACT_IDX_HI_COMMENT_RM_TIME;
+
+drop table ACT_HI_PROCINST;
+drop table ACT_HI_ACTINST;
+drop table ACT_HI_VARINST;
+drop table ACT_HI_TASKINST;
+drop table ACT_HI_DETAIL;
+drop table ACT_HI_COMMENT;
+drop table ACT_HI_ATTACHMENT;
+drop table ACT_HI_OP_LOG;
+drop table ACT_HI_INCIDENT;
+drop table ACT_HI_JOB_LOG;
+drop table ACT_HI_BATCH;
+drop table ACT_HI_IDENTITYLINK;
+drop table ACT_HI_EXT_TASK_LOG;
+
+SET SCHEMA DB2ADMIN;
diff --git a/lis-db/migrations/scripts/007_camunda_identity.sql b/lis-db/migrations/scripts/007_camunda_identity.sql
new file mode 100644 (file)
index 0000000..7b03fe3
--- /dev/null
@@ -0,0 +1,122 @@
+-- // camunda identity
+-- Migration SQL that makes the change goes here.
+SET SCHEMA CAMUNDA;
+
+create table ACT_ID_GROUP (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    NAME_ varchar(255),
+    TYPE_ varchar(255),
+    primary key (ID_)
+);
+
+create table ACT_ID_MEMBERSHIP (
+    USER_ID_ varchar(64) not null,
+    GROUP_ID_ varchar(64) not null,
+    primary key (USER_ID_, GROUP_ID_)
+);
+
+create table ACT_ID_USER (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    FIRST_ varchar(255),
+    LAST_ varchar(255),
+    EMAIL_ varchar(255),
+    PWD_ varchar(255),
+    SALT_ varchar(255),
+    LOCK_EXP_TIME_ timestamp,
+    ATTEMPTS_ integer,
+    PICTURE_ID_ varchar(64),
+    primary key (ID_)
+);
+
+create table ACT_ID_INFO (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    USER_ID_ varchar(64),
+    TYPE_ varchar(64),
+    KEY_ varchar(255),
+    VALUE_ varchar(255),
+    PASSWORD_ BLOB,
+    PARENT_ID_ varchar(255),
+    primary key (ID_)
+);
+
+create table ACT_ID_TENANT (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    NAME_ varchar(255),
+    primary key (ID_)
+);
+
+create table ACT_ID_TENANT_MEMBER (
+    ID_ varchar(64) not null,
+    TENANT_ID_ varchar(64) not null,
+    USER_ID_ varchar(64),
+    GROUP_ID_ varchar(64),
+    primary key (ID_),
+    UNI_USER_ID_ varchar (255) not null generated always as (case when "USER_ID_" is null then "ID_" else "USER_ID_" end),
+    UNI_GROUP_ID_ varchar (255) not null generated always as (case when "GROUP_ID_" is null then "ID_" else "GROUP_ID_" end)
+);
+
+alter table ACT_ID_MEMBERSHIP
+    add constraint ACT_FK_MEMB_GROUP
+    foreign key (GROUP_ID_)
+    references ACT_ID_GROUP (ID_);
+
+alter table ACT_ID_MEMBERSHIP
+    add constraint ACT_FK_MEMB_USER
+    foreign key (USER_ID_)
+    references ACT_ID_USER (ID_);
+
+alter table ACT_ID_TENANT_MEMBER
+    add constraint ACT_FK_TENANT_MEMB
+    foreign key (TENANT_ID_)
+    references ACT_ID_TENANT (ID_);
+
+alter table ACT_ID_TENANT_MEMBER
+    add constraint ACT_FK_TENANT_MEMB_USER
+    foreign key (USER_ID_)
+    references ACT_ID_USER (ID_);
+
+alter table ACT_ID_TENANT_MEMBER
+    add constraint ACT_FK_TENANT_MEMB_GROUP
+    foreign key (GROUP_ID_)
+    references ACT_ID_GROUP (ID_);
+
+create unique index ACT_UNIQ_TENANT_MEMB_USER on ACT_ID_TENANT_MEMBER(TENANT_ID_,UNI_USER_ID_);
+create unique index ACT_UNIQ_TENANT_MEMB_GROUP on ACT_ID_TENANT_MEMBER(TENANT_ID_,UNI_GROUP_ID_);
+
+SET SCHEMA DB2ADMIN;
+
+-- //@UNDO
+-- SQL to undo the change goes here.
+SET SCHEMA CAMUNDA;
+
+drop index ACT_UNIQ_TENANT_MEMB_USER;
+drop index ACT_UNIQ_TENANT_MEMB_GROUP;
+
+alter table ACT_ID_MEMBERSHIP
+    drop foreign key ACT_FK_MEMB_GROUP;
+
+alter table ACT_ID_MEMBERSHIP
+    drop foreign key ACT_FK_MEMB_USER;
+
+alter table ACT_ID_TENANT_MEMBER
+    drop constraint ACT_FK_TENANT_MEMB;
+
+alter table ACT_ID_TENANT_MEMBER
+    drop constraint ACT_FK_TENANT_MEMB_USER;
+
+alter table ACT_ID_TENANT_MEMBER
+    drop constraint ACT_FK_TENANT_MEMB_GROUP;
+
+drop table ACT_ID_TENANT_MEMBER;
+drop table ACT_ID_TENANT;
+drop table ACT_ID_INFO;
+drop table ACT_ID_MEMBERSHIP;
+drop table ACT_ID_GROUP;
+drop table ACT_ID_USER;
+
+SET SCHEMA DB2ADMIN;
+
index 38d0bf15149e0cb26d61f945c519b7e21df74ee1..abfaf4629d8539113457485981831671f8ef111f 100644 (file)
@@ -38,8 +38,9 @@ public class Invoice implements Serializable {
     @JoinColumn(name = "partner_id")
     @JsonIncludeProperties({"id"})
     Partner partner;
-//    @ManyToOne(fetch = FetchType.LAZY)
-//    @JoinColumn(name = "project_id")
-//    @JsonIncludeProperties({"id"})
-//    Project project;
+
+    @ManyToOne
+    @JoinColumn(name = "project_id")
+    @JsonIncludeProperties({"id"})
+    Project project;
 }
index 3492c53fec1d8782c79026dff49423a98f7fe848..e02ac34af175a7098a261ed4839bc9c7c3b8ae96 100644 (file)
@@ -30,22 +30,22 @@ public class Project implements Serializable {
     @JsonIncludeProperties({"id"})
     Partner partner;
 
-    @OneToMany(targetEntity = IncomingInvoice.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
-    @JoinColumn(name = "projectId", referencedColumnName = "id")
+    @OneToMany(targetEntity = IncomingInvoice.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
+    @JoinColumn(name = "project_id", referencedColumnName = "id")
     @Where(clause = "income=1")
     @Fetch(FetchMode.JOIN)
     @JsonIncludeProperties({"id"})
     Set<IncomingInvoice> incomingInvoices;
 
-    @OneToMany(targetEntity = OutgoingInvoice.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
-    @JoinColumn(name = "projectId", referencedColumnName = "id")
+    @OneToMany(targetEntity = OutgoingInvoice.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
+    @JoinColumn(name = "project_id", referencedColumnName = "id")
     @Where(clause = "income=0")
     @Fetch(FetchMode.JOIN)
     @JsonIncludeProperties({"id"})
     Set<OutgoingInvoice> outgoingInvoices;
 
     @OneToMany(targetEntity = Treasury.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
-    @JoinColumn(name = "projectId", referencedColumnName = "id")
+    @JoinColumn(name = "project_id", referencedColumnName = "id")
     @Fetch(FetchMode.JOIN)
     @JsonIncludeProperties({"id"})
     Set<Treasury> treasuries;
index 3e5d23b108b3d4e948ca14f85fc526d94e81de99..4e8ef176adacc7a2c51a9c3c9ab0cb29c4a82e5a 100644 (file)
@@ -15,7 +15,7 @@ import java.util.stream.Collectors;
 @Log4j2
 @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
 public class IncomeMarginsDataModel extends ArrayList<IncomeMargin> {
-    public void recalculate(Project project) {
+    public void recalculate(Project project, ServiceRecordsDataModel serviceRecordsDataModel) {
         clear();
         Map<Currency, Double> balances = new HashMap<>();
         Set<OutgoingInvoice> outgoingInvoices = project.getOutgoingInvoices();
@@ -40,6 +40,12 @@ public class IncomeMarginsDataModel extends ArrayList<IncomeMargin> {
             }
         }
 
+
+        for (int i = 0; i < serviceRecordsDataModel.getSize(); i++) {
+            ServiceRecord serviceRecord = serviceRecordsDataModel.getElementAt(i);
+            substractBalance(balances, Currency.HUF, serviceRecord.getCost());
+        }
+
         balances.entrySet().stream()
                 .map(s -> IncomeMargin.builder().currency(s.getKey()).amount(s.getValue()).build())
                 .sorted(Comparator.comparing(IncomeMargin::getCurrency))
index a819a645666783fdc77df2db293432b4d9dbd5bc..155d20b9dc10bcf283d4b2f972969c074b045ee5 100644 (file)
@@ -86,4 +86,8 @@ public class PartnersDataModel extends CachedSpringDataModel<Partner> {
     public Partner save(Partner selectedEntity) {
         return partnerRepository.save(selectedEntity);
     }
+
+    public void delete(Partner selectedEntity) {
+        partnerRepository.delete(selectedEntity);
+    }
 }
index dd7fab79fe0b885a6cf78dd4e2377745210eda80..f6c5fa300b76162726908fabe7ff5436cf1f9f26 100644 (file)
@@ -59,4 +59,12 @@ public class ProjectAssociatesDataModel {
             projectAssociateRepository.saveAll(associates);
         }
     }
+
+    public void addProjectAssociate(Project project, Associate associate) {
+        ProjectAssociate projectAssociate = ProjectAssociate.builder()
+                .projectId(project.getId())
+                .associateId(associate.getId())
+                .build();
+        projectAssociateRepository.save(projectAssociate);
+    }
 }
index a7329c80434dcd88c8d292755b6d7166e47c56c3..c3b050bf111573d09c0abb65cf812981fcaf494a 100644 (file)
@@ -112,4 +112,8 @@ public class ProjectsDataModel extends CachedSpringDataModel<Project> {
     public Project clone(Project entity) {
         return projectDataService.clone(entity);
     }
+
+    public void delete(Project selectedEntity) {
+        projectRepository.delete(selectedEntity);
+    }
 }
index a80cd0630b0ee33d3f9ca94ac63ee84d9ceeda4f..8bad8a113c8740e149843baaae9ceb22c4796197 100644 (file)
@@ -10,11 +10,14 @@ import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.StringUtils;
 import org.zkoss.bind.BindContext;
 import org.zkoss.bind.BindUtils;
+import org.zkoss.bind.PropertyChangeEvent;
 import org.zkoss.bind.annotation.*;
 import org.zkoss.zk.ui.Component;
+import org.zkoss.zk.ui.event.Event;
 import org.zkoss.zk.ui.event.UploadEvent;
 import org.zkoss.zul.Messagebox;
 
+import java.util.Arrays;
 import java.util.Objects;
 
 @Log4j2
@@ -61,8 +64,8 @@ public class InvoiceEditorModel extends EntityEditorModel<Invoice> {
                 Objects.nonNull(entity.getCompletionDate()) &&
                 Objects.nonNull(entity.getCreateDate()) &&
                 Objects.nonNull(entity.getPaymentDeadline()) &&
-                entity.getCreateDate().before(entity.getCompletionDate()) &&
-                entity.getCompletionDate().before(entity.getPaymentDeadline());
+                (entity.getCreateDate().before(entity.getCompletionDate()) || entity.getCreateDate().equals(entity.getCompletionDate())) &&
+                (entity.getCompletionDate().before(entity.getPaymentDeadline()) || entity.getCompletionDate().equals(entity.getPaymentDeadline()));
     }
 
     @Command
@@ -83,4 +86,17 @@ public class InvoiceEditorModel extends EntityEditorModel<Invoice> {
         BindUtils.postNotifyChange(getFormDocument(), "file");
         validate();
     }
+
+    @Override
+    public void onEvent(Event evt) {
+        String[] dates = {"completionDate", "createDate", "paymentDeadline"};
+        if (isEventForCurrentDocument(evt)) {
+            PropertyChangeEvent propertyEvent = (PropertyChangeEvent) evt;
+            if (Arrays.asList(dates).contains(propertyEvent.getProperty())) {
+                log.info("");
+            }
+            validate();
+        }
+    }
+
 }
index 4382cef9ef007e9bef6eec3e6422bb8d10815849..8d1ce0e4c7a1fa2f015f4cd0a99027de1c63c366 100644 (file)
@@ -110,7 +110,7 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
         initAssociates();
         serviceRecordsDataModel.search(getFormDocument(), true);
         getEntitySelectorRouter().configureSelector(Partner.class, getFormDocument(), "partner");
-        incomeMarginsDataModel.recalculate(getFormDocument());
+        incomeMarginsDataModel.recalculate(getFormDocument(), serviceRecordsDataModel);
     }
 
 
@@ -350,4 +350,10 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
         validate();
     }
 
+    @Override
+    public void validate() {
+        super.validate();
+        incomeMarginsDataModel.recalculate(getFormDocument(), serviceRecordsDataModel);
+    }
+
 }
index c8d58ad06243f8380e7c1703ea71a5cda2dfef4b..b6b184b9681e7348afd1aa1adcb468a729883146 100644 (file)
@@ -14,11 +14,15 @@ import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.StringUtils;
 import org.zkoss.bind.BindContext;
 import org.zkoss.bind.BindUtils;
+import org.zkoss.bind.PropertyChangeEvent;
 import org.zkoss.bind.annotation.*;
 import org.zkoss.zk.ui.Component;
+import org.zkoss.zk.ui.event.Event;
+import org.zkoss.zk.ui.event.Events;
 import org.zkoss.zk.ui.event.UploadEvent;
 import org.zkoss.zk.ui.select.annotation.WireVariable;
 import org.zkoss.zul.Messagebox;
+import org.zkoss.zul.Window;
 
 import java.time.LocalDate;
 import java.time.ZoneId;
@@ -35,6 +39,9 @@ public class ServiceRecordEditorModel extends EntityEditorModel<ServiceRecord> {
     @WireVariable
     ProjectAssociatesDataModel projectAssociatesDataModel;
 
+    private EntitySelectorModel<?> projectEntitySelectorModel;
+
+
     @Init
     public void init() {
         super.init();
@@ -50,8 +57,12 @@ public class ServiceRecordEditorModel extends EntityEditorModel<ServiceRecord> {
 
     private void initEntitySelectors() {
         getEntitySelectorRouter().configureSelector(Associate.class, getFormDocument(), "associate");
-        EntitySelectorModel<?> projectEntitySelectorModel = getEntitySelectorRouter().configureSelector(Project.class, getFormDocument(), "project");
-        List<ProjectAssociate> projectAssociates = projectAssociatesDataModel.searchByAssociate(currentProfile.getAssociate().getId());
+        projectEntitySelectorModel = getEntitySelectorRouter().configureSelector(Project.class, getFormDocument(), "project");
+        initProjectSelector();
+    }
+
+    private void initProjectSelector() {
+        List<ProjectAssociate> projectAssociates = projectAssociatesDataModel.searchByAssociate(getFormDocument().getAssociate().getId());
         projectEntitySelectorModel.addStaticFilter("projects", getProjectIds(projectAssociates));
     }
 
@@ -60,22 +71,33 @@ public class ServiceRecordEditorModel extends EntityEditorModel<ServiceRecord> {
         getFormDocument().setWorkDay(Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant()));
     }
 
+    @Command
     @Override
-    protected boolean executePreSaveTask() {
-        boolean[] result = {true};
-        Optional<ProjectAssociate> opProjectAssociate = projectAssociatesDataModel.searchByAssociateAndProject(getFormDocument().getAssociate().getId(),
-                getFormDocument().getProject().getId());
-        if (!opProjectAssociate.isPresent()) {
-            Messagebox.show("A munkatárs a kiválasztott projekt résztvevője lesz.", "Megerősítés",
-                    Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION, e -> {
-                        if (e.getName().equals("onCancel")) {
-                            result[0] = false;
-                        } else {
-
-                        }
-                    });
+    public void onCloseWindow(@BindingParam("target") Window target, @BindingParam("save") boolean save) {
+        if (save) {
+
+            Optional<ProjectAssociate> opProjectAssociate = projectAssociatesDataModel.searchByAssociateAndProject(getFormDocument().getAssociate().getId(),
+                    getFormDocument().getProject().getId());
+            if (opProjectAssociate.isPresent()) {
+                doSave(target);
+            } else {
+                Messagebox.show("A munkatárs a kiválasztott projekt résztvevője lesz.", "Megerősítés",
+                        Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION, e -> {
+                            if (!e.getName().equals("onCancel")) {
+                                projectAssociatesDataModel.addProjectAssociate(getFormDocument().getProject(), getFormDocument().getAssociate());
+                                doSave(target);
+                            }
+                        });
+            }
+        } else {
+            Events.postEvent(new Event("onClose", target, null));
+        }
+    }
+
+    private void doSave(Window target) {
+        if (isSaveEnabled()) {
+            Events.postEvent(new Event("onClose", target, getFormDocument()));
         }
-        return result[0];
     }
 
     private List<Long> getProjectIds(List<ProjectAssociate> projectAssociates) {
@@ -114,4 +136,19 @@ public class ServiceRecordEditorModel extends EntityEditorModel<ServiceRecord> {
         BindUtils.postNotifyChange(getFormDocument(), "file");
         validate();
     }
+
+    @Override
+    public void onEvent(Event evt) {
+        if (isEventForCurrentDocument(evt)) {
+            PropertyChangeEvent propertyEvent = (PropertyChangeEvent) evt;
+            log.info("Property changed: {}", propertyEvent.getProperty());
+
+            if ("associate".equals(propertyEvent.getProperty())) {
+                initProjectSelector();
+            }
+
+            validate();
+        }
+    }
+
 }
index 62f055e5311c2b1f313a9e1cc08eb7d723302b87..3670d43af2a33d816b6aa2cea8e916066bd236b8 100644 (file)
@@ -55,7 +55,7 @@ public abstract class EntityEditorModel<T extends Serializable> extends Abstract
     @Command
     public void onCloseWindow(@BindingParam("target") Window target, @BindingParam("save") boolean save) {
         if (save) {
-            if (saveEnabled && executePreSaveTask()) {
+            if (saveEnabled) {
                 Events.postEvent(new Event("onClose", target, formDocument));
             }
         } else {
@@ -63,10 +63,6 @@ public abstract class EntityEditorModel<T extends Serializable> extends Abstract
         }
     }
 
-    protected boolean executePreSaveTask() {
-        return true;
-    }
-
     private void setSaveEnabled(boolean saveEnabled) {
         this.saveEnabled = saveEnabled;
         log.info("Document save enabled {}", saveEnabled);
@@ -111,13 +107,17 @@ public abstract class EntityEditorModel<T extends Serializable> extends Abstract
 
     @Override
     public void onEvent(Event evt) {
+        if (isEventForCurrentDocument(evt)) {
+            validate();
+        }
+    }
+
+    protected boolean isEventForCurrentDocument(Event evt) {
         if (evt instanceof PropertyChangeEvent) {
             PropertyChangeEvent propertyEvent = (PropertyChangeEvent) evt;
-            if (Objects.nonNull(propertyEvent.getBase()) && Objects.nonNull(formDocument) && propertyEvent.getBase().equals(formDocument)) {
-                log.info("Event {}", evt.getName());
-                validate();
-            }
+            return (Objects.nonNull(propertyEvent.getBase()) && Objects.nonNull(formDocument) && propertyEvent.getBase().equals(formDocument));
         }
+        return false;
     }
 
     @Destroy
index d2e51c3995f2a9beb5b89479413e7d92a26f8d31..5f84d128f3744be27ed9e700e670ccd84f8520ad 100644 (file)
@@ -12,6 +12,7 @@ import lombok.extern.log4j.Log4j2;
 import org.zkoss.bind.annotation.Command;
 import org.zkoss.bind.annotation.Init;
 import org.zkoss.zk.ui.select.annotation.WireVariable;
+import org.zkoss.zul.Messagebox;
 
 import static hu.user.lis.ui.data.CachedDataModel.ASCENDING;
 import static hu.user.lis.ui.data.CachedDataModel.NATURAL;
@@ -70,4 +71,16 @@ public class PartnersViewModel extends FilterActiveViewModel<Partner> {
             refresh();
         });
     }
+
+    @Command
+    public void onDelete() {
+        Messagebox.show("Biztosan törli a kijelölt elemet?", "Megerősítés",
+                Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION, e -> {
+                    if (!e.getName().equals("onCancel")) {
+                        partnersDataModel.delete(getSelectedEntity());
+                        refresh();
+                    }
+                });
+    }
+
 }
index 8e31c076c8783714995fea9e49944143261cb840..125b9009556c85c0959c429b3a5894333952ee97 100644 (file)
@@ -15,6 +15,7 @@ import org.zkoss.bind.annotation.Init;
 import org.zkoss.zk.ui.event.Event;
 import org.zkoss.zk.ui.event.EventListener;
 import org.zkoss.zk.ui.select.annotation.WireVariable;
+import org.zkoss.zul.Messagebox;
 
 import java.util.Map;
 import java.util.Objects;
@@ -94,4 +95,14 @@ public class ProjectsViewModel extends FilterActiveViewModel<Project> implements
         eventBus.unregister(this);
     }
 
+    @Command
+    public void onDelete() {
+        Messagebox.show("Biztosan törli a kijelölt elemet?", "Megerősítés",
+                Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION, e -> {
+                    if (!e.getName().equals("onCancel")) {
+                        projectsDataModel.delete(getSelectedEntity());
+                        refresh();
+                    }
+                });
+    }
 }
index 9f1207e68b7c1b2edde4c2ba27f213a2dd2dbffa..eb0ac5f274e07192ad8a80103099e94dd3ef74a4 100644 (file)
@@ -14,7 +14,7 @@
                     <toolbarbutton label="Hozzáadás" iconSclass="z-icon-plus" onClick="@command('onAdd')"/>
                     <toolbarbutton label="Szerkesztés" iconSclass="z-icon-edit" onClick="@command('onEdit')"
                                    disabled="@load(empty vm.selectedEntity)"/>
-                    <toolbarbutton label="Törlés" iconSclass="z-icon-minus" onClick="@command('onDelete')"
+                    <toolbarbutton label="Törlés" iconSclass="z-icon-remove" onClick="@command('onDelete')"
                                    disabled="@load(empty vm.selectedEntity)"/>
                     <separator orient="vertical"/>
                     <toolbarbutton mode="toggle" iconSclass="z-icon-check" label="Aktív"
index 755c8baa3d2ae3388f74ca82d283030130ce56fd..d6f1b756d9948fd0b83c5f8e51054acbe917492e 100644 (file)
@@ -8,7 +8,7 @@
                     <toolbarbutton label="Hozzáadás" iconSclass="z-icon-plus" onClick="@command('onAdd')"/>
                     <toolbarbutton label="Szerkesztés" iconSclass="z-icon-edit" onClick="@command('onEdit')"
                                    disabled="@load(empty vm.selectedEntity)"/>
-                    <toolbarbutton label="Törlés" iconSclass="z-icon-minus" onClick="@command('onDelete')"
+                    <toolbarbutton label="Törlés" iconSclass="z-icon-remove" onClick="@command('onDelete')"
                                    disabled="@load(empty vm.selectedEntity)"/>
                     <separator orient="vertical"/>
                     <toolbarbutton mode="toggle" iconSclass="z-icon-check" label="Aktív"
index 7a4e145a54aded5e8001b3df31d51f6705a26c35..86288d77b1f8ed5e3a95ac7af0ef5b1827e61b3a 100644 (file)
@@ -7,7 +7,7 @@
                     <toolbarbutton label="Hozzáadás" iconSclass="z-icon-plus" onClick="@command('onAdd')"/>
                     <toolbarbutton label="Szerkesztés" iconSclass="z-icon-edit" onClick="@command('onEdit')"
                                    disabled="@load(empty vm.selectedEntity)"/>
-                    <toolbarbutton label="Törlés" iconSclass="z-icon-minus" onClick="@command('onDelete')"
+                    <toolbarbutton label="Törlés" iconSclass="z-icon-remove" onClick="@command('onDelete')"
                                    disabled="@load(empty vm.selectedEntity)"/>
                     <separator orient="vertical"/>
                     <toolbarbutton mode="toggle" iconSclass="z-icon-check" label="Aktív"
index 096d0313d0fbfb17eb183e4d78de39163cda505e..9dc4a6acf4d918bce535acf376fde7571cc91779 100644 (file)
@@ -8,7 +8,7 @@
                     <toolbarbutton label="Hozzáadás" iconSclass="z-icon-plus" onClick="@command('onAdd')"/>
                     <toolbarbutton label="Szerkesztés" iconSclass="z-icon-edit" onClick="@command('onEdit')"
                                    disabled="@load(empty vm.selectedEntity)"/>
-                    <toolbarbutton label="Törlés" iconSclass="z-icon-minus" onClick="@command('onDelete')"
+                    <toolbarbutton label="Törlés" iconSclass="z-icon-remove" onClick="@command('onDelete')"
                                    disabled="@load(empty vm.selectedEntity)"/>
                     <separator orient="vertical"/>
                     <toolbarbutton label="Törlés" iconSclass="z-icon-minus" onClick="@command('onDelete')"
index 9c298a3b72dd24202848e72ac011075704db976f..9fb401042b12ce5929673bea72c8e3e9a42a7518 100644 (file)
@@ -18,7 +18,7 @@
                                            disabled="@load(empty vm.selectedProjectStatus)"/>
                             <separator orient="vertical"/>
                             <toolbarbutton label="Hozzáadás" iconSclass="z-icon-plus" onClick="@command('onCreate')"/>
-                            <toolbarbutton label="Törlés" iconSclass="z-icon-minus" onClick="@command('onDelete')"
+                            <toolbarbutton label="Törlés" iconSclass="z-icon-remove" onClick="@command('onDelete')"
                                            disabled="@load(empty vm.selectedProjectStatus)"/>
                         </toolbar>
                     </north>
diff --git a/lis-workflow/pom.xml b/lis-workflow/pom.xml
new file mode 100644 (file)
index 0000000..5ae50fa
--- /dev/null
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>lis-workflow</artifactId>
+    <parent>
+        <groupId>hu.user</groupId>
+        <artifactId>lis</artifactId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>hu.user</groupId>
+            <artifactId>lis-db</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>hu.user</groupId>
+            <artifactId>lis-services</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.camunda.bpm</groupId>
+            <artifactId>camunda-engine-spring</artifactId>
+            <version>${camunda.spring-boot.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.camunda.bpm.springboot</groupId>
+            <artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId>
+            <version>${camunda.spring-boot.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.tomcat.embed</groupId>
+                    <artifactId>tomcat-embed-websocket</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-tomcat</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.camunda.bpm.springboot</groupId>
+            <artifactId>camunda-bpm-spring-boot-starter-rest</artifactId>
+            <version>${camunda.spring-boot.version}</version>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/lis-workflow/src/main/java/hu/user/lis/workflow/invoice/DownloadInvoiceData.java b/lis-workflow/src/main/java/hu/user/lis/workflow/invoice/DownloadInvoiceData.java
new file mode 100644 (file)
index 0000000..b9e1730
--- /dev/null
@@ -0,0 +1,40 @@
+package hu.user.lis.workflow.invoice;
+
+import hu.user.lis.db.Invoice;
+import hu.user.lis.db.Partner;
+import hu.user.lis.db.repository.InvoiceRepository;
+import hu.user.lis.db.repository.PartnerRepository;
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.RandomUtils;
+import org.camunda.bpm.engine.delegate.DelegateExecution;
+import org.camunda.bpm.engine.delegate.JavaDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Log4j2
+@Component
+public class DownloadInvoiceData implements JavaDelegate {
+    @Autowired
+    InvoiceRepository invoiceRepository;
+    @Autowired
+    PartnerRepository partnerRepository;
+
+    @Override
+    public void execute(DelegateExecution delegateExecution) throws Exception {
+        String invoiceHumanId = (String) delegateExecution.getVariableLocal("invoice");
+        log.info("Processing incoice {}", invoiceHumanId);
+        Invoice invoice = Invoice.builder()
+                .humanId(invoiceHumanId)
+                .partner(getRandomPartner())
+                .build();
+        invoiceRepository.save(invoice);
+        log.info("Invoice {} processed", invoiceHumanId);
+    }
+
+    private Partner getRandomPartner() {
+        List<Partner> partners = partnerRepository.findAll();
+        return partners.get(RandomUtils.nextInt(0, partners.size()));
+    }
+}
diff --git a/lis-workflow/src/main/java/hu/user/lis/workflow/invoice/ListNewInvoices.java b/lis-workflow/src/main/java/hu/user/lis/workflow/invoice/ListNewInvoices.java
new file mode 100644 (file)
index 0000000..0f91876
--- /dev/null
@@ -0,0 +1,20 @@
+package hu.user.lis.workflow.invoice;
+
+import lombok.extern.log4j.Log4j2;
+import org.camunda.bpm.engine.delegate.DelegateExecution;
+import org.camunda.bpm.engine.delegate.JavaDelegate;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.List;
+
+@Log4j2
+@Component
+public class ListNewInvoices implements JavaDelegate {
+    @Override
+    public void execute(DelegateExecution delegateExecution) throws Exception {
+        log.info("Executing");
+        List<String> invoices = Arrays.asList("Invoice-test-1", "Invoice-test-2", "Invoice-test-3");
+        delegateExecution.setVariableLocal("invoices", invoices);
+    }
+}
diff --git a/lis-workflow/src/main/resources/import-incoming-invoices.bpmn b/lis-workflow/src/main/resources/import-incoming-invoices.bpmn
new file mode 100644 (file)
index 0000000..4c01002
--- /dev/null
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_07nj4df" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.14.0" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.15.0">
+  <bpmn:process id="importIncomingInvoices" name="Import Incoming Invoices" isExecutable="true" camunda:versionTag="0.1">
+    <bpmn:startEvent id="StartEvent_1" camunda:asyncBefore="true">
+      <bpmn:outgoing>Flow_1gzempz</bpmn:outgoing>
+    </bpmn:startEvent>
+    <bpmn:sequenceFlow id="Flow_1gzempz" sourceRef="StartEvent_1" targetRef="Activity_0q29ngn" />
+    <bpmn:serviceTask id="Activity_0q29ngn" name="List new invoices" camunda:asyncBefore="true" camunda:delegateExpression="${listNewInvoices}">
+      <bpmn:extensionElements />
+      <bpmn:incoming>Flow_1gzempz</bpmn:incoming>
+      <bpmn:outgoing>Flow_15jorzs</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:sequenceFlow id="Flow_15jorzs" sourceRef="Activity_0q29ngn" targetRef="Activity_02fjt6a" />
+    <bpmn:serviceTask id="Activity_02fjt6a" name="Download invoice datas" camunda:asyncBefore="true" camunda:delegateExpression="${downloadInvoiceData}">
+      <bpmn:extensionElements />
+      <bpmn:incoming>Flow_15jorzs</bpmn:incoming>
+      <bpmn:outgoing>Flow_1v1bne3</bpmn:outgoing>
+      <bpmn:multiInstanceLoopCharacteristics camunda:asyncBefore="true" camunda:collection="invoices" camunda:elementVariable="invoice" />
+    </bpmn:serviceTask>
+    <bpmn:endEvent id="Event_0ots211">
+      <bpmn:incoming>Flow_1v1bne3</bpmn:incoming>
+    </bpmn:endEvent>
+    <bpmn:sequenceFlow id="Flow_1v1bne3" sourceRef="Activity_02fjt6a" targetRef="Event_0ots211" />
+  </bpmn:process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="importIncomingInvoices">
+      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
+        <dc:Bounds x="179" y="99" width="36" height="36" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0hxl7uq_di" bpmnElement="Activity_0q29ngn">
+        <dc:Bounds x="270" y="77" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_035tjqs_di" bpmnElement="Activity_02fjt6a">
+        <dc:Bounds x="430" y="77" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_0ots211_di" bpmnElement="Event_0ots211">
+        <dc:Bounds x="592" y="99" width="36" height="36" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="Flow_1gzempz_di" bpmnElement="Flow_1gzempz">
+        <di:waypoint x="215" y="117" />
+        <di:waypoint x="270" y="117" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_15jorzs_di" bpmnElement="Flow_15jorzs">
+        <di:waypoint x="370" y="117" />
+        <di:waypoint x="430" y="117" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1v1bne3_di" bpmnElement="Flow_1v1bne3">
+        <di:waypoint x="530" y="117" />
+        <di:waypoint x="592" y="117" />
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</bpmn:definitions>
diff --git a/pom.xml b/pom.xml
index f5cc24834090d0643ef15bf4c64d9a2c60146703..2ce5709d5f04b36a03c426f651f8fe205c549f49 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -7,6 +7,7 @@
     <version>0.0.1-SNAPSHOT</version>
     <packaging>pom</packaging>
     <modules>
+        <module>lis-workflow</module>
         <module>lis-services</module>
         <module>lis-db</module>
         <module>lis-ui</module>
@@ -16,6 +17,7 @@
         <java.version>1.8</java.version>
         <maven.compiler.source>1.8</maven.compiler.source>
         <maven.compiler.target>1.8</maven.compiler.target>
+        <camunda.spring-boot.version>7.19.0</camunda.spring-boot.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>