1. Overview

  • Brief overview:

    • Document generation module based on templates, which

      • can handle templates in different formats and inject parameter lists into them, then generate the finished document.

      • The module is designed to generate output documents (PDF, XLSX, HTML, TXT, …​) from various template formats with identifiers (TXT, HTML, object, JRXML, …​) by inserting the received parameter(s) into the received template.

      • The solution is based on a microservice architecture.

  • Technologies:

    • Components and their versions:

      • Included local Postgres: 14.8-bullseye

      • Included local Oracle: 21.3.0-xe

      • Liquibase: 4.21

      • The latest final PGTools version: 0.10.0

2. Schemas

2.1. dookug

2.1.1. ERD:

Dookug schema ERD

2.1.2. Tables:

Table 1. document
Field Type Default Value Required? Description

x__id

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

Yes

PK → unique identifier

template_id

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

No

TEMPLATE identifier

status

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

Yes

Document status

format

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

Yes

Document format

filename

Oracle: VARCHAR2(100 CHAR)

Postgres: VARCHAR(100)

No

Document filename

error_message

Oracle: VARCHAR2(512 CHAR)

Postgres: VARCHAR(512)

No

Error message during process

storage_type

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

Yes

Storage type

storage_id

Oracle: VARCHAR2(128 CHAR)

Postgres: VARCHAR(128)

No

Unique invoice identifier in the calling system

parameters

Oracle: BLOB

Postgres: BYTEA

No

Parameter key-value pairs json

parameter_data

Oracle: BLOB

Postgres: BYTEA

No

Parameter data structure json

config

Oracle: CLOB

Postgres: TEXT

No

Configuration

x__insdate

TIMESTAMP(6)

Oracle: sysdate

Postgres: now()

Yes

Insertion timestamp

x__insuser

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

'0'

Yes

Not used, default value 0

x__moddate

TIMESTAMP(6)

No

Modification timestamp, null at insertion

x__moduser

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

'0'

No

Not used, default value 0

x__version

Oracle: NUMBER

Postgres: INT

0

Yes

Change versioning

Table 2. document constraints and indexes
Field Type Value Related Field Referenced Field

pk_document

primary key

x__id

pk_document

unique index

x__id

Table 3. document_content
Field Type Default Value Required? Description

x__id

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

Yes

Generated primary key (PK)

document_id

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

Yes

DOCUMENT unique identifier

content

Oracle: BLOB

Postgres: BYTEA

Yes

Document content (gzip)

expiry

Oracle: TIMESTAMP(6)

Postgres: TIMESTAMP(6)

No

Expiration date

x__insdate

timestamp(6)

Oracle: sysdate

Postgres: now()

Yes

Insertion timestamp

x__insuser

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

'0'

Yes

Not used, default value 0

x__moddate

timestamp(6)

No

Modification timestamp, null at insertion

x__moduser

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

'0'

No

Not used, default value 0

x__version

Oracle: number

Postgres: int

0

Yes

Change versioning

Table 4. document_content constraints and indexes
Field Type Value Related Field Referenced Field

pk_document_content

primary key

x__id

fk_document_content_document

foreign key constraint

document_id

document.x__id

ix_document_content_document_id

index

document_id

pk_document_content

unique index

x__id

Table 5. template
Field Type Default Value Required? Description

x__id

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

Yes

Generated primary key (PK)

name

Oracle: VARCHAR2(255 CHAR)

Postgres: VARCHAR(255)

Yes

Template name

description

Oracle: VARCHAR2(1024 CHAR)

Postgres: VARCHAR(1024)

Yes

Description

template_engine

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

Yes

Template engine. Possible values: HANDLEBARS, NONE

generator_engine

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

Yes

Document generation engine. Possible values: PDF_BOX, NONE

language

Oracle: VARCHAR2(30 CHAR)

Postgres: varchar(30)

No

Template language

validity_start

Oracle: TIMESTAMP(6)

Postgres: TIMESTAMP(6)

Oracle: sysdate

Postgres: now()

Yes

Validity start

validity_end

Oracle: TIMESTAMP(6)

Postgres: TIMESTAMP(6)

No

Validity end

x__insdate

timestamp(6)

Oracle: sysdate

Postgres: now()

Yes

Insertion timestamp

x__insuser

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

'0'

Yes

Not used, default value 0

x__moddate

timestamp(6)

No

Modification timestamp, null at insertion

x__moduser

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

'0'

No

Not used, default value 0

x__version

Oracle: number

Postgres: int

0

Yes

Change versioning

Table 6. template constraints and indexes
Field Type Value Related Field Referenced Field

ck_template_generator_engine

check constraint

PDF_BOX, NONE, SAXON

generator_engine

ck_template_template_engine

check constraint

HANDLEBARS, NONE

template_engine

pk_template

primary key

x__id

pk_template

unique index

x__id

Table 7. template_part
Field Type Default Value Required? Description

x__id

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

Yes

Generated primary key (PK)

key

Oracle: VARCHAR2(255 CHAR)

Postgres: VARCHAR(255)

Yes

Template key. For template engine.

description

Oracle: VARCHAR2(1024 CHAR)

Postgres: VARCHAR(1024)

Yes

Description

template_engine

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

Yes

Template engine. Possible values: HANDLEBARS, NONE

generator_engine

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

Yes

Document generation engine. Possible values: PDF_BOX, NONE

template_part_type

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

Yes

Template type. Possible values: HEADER, CONTENT, FOOTER, MAIN, OTHER

x__insdate

timestamp(6)

Oracle: sysdate

Postgres: now()

Yes

Insertion timestamp

x__insuser

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

'0'

Yes

Not used, default value 0

x__moddate

timestamp(6)

No

Modification timestamp, null at insertion

x__moduser

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

'0'

No

Not used, default value 0

x__version

Oracle: number

Postgres: int

0

Yes

Change versioning

Table 8. template_part constraints and indexes
Field Type Value Related Field Referenced Field

ck_template_part_generator_engine

check constraint

PDF_BOX, NONE

generator_engine

ck_template_part_template_engine

check constraint

HANDLEBARS, NONE

template_engine

ck_template_part_template_part_type

check constraint

HEADER, CONTENT, FOOTER, MAIN, OTHER

template_part_type

pk_template_part

primary key

x__id

pk_template_part

unique index

x__id

Table 9. template_part_content
Field Type Default Value Required? Description

x__id

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

Yes

Generated primary key (PK)

template_part_id

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

Yes

TEMPLATE unique identifier

content

Oracle: BLOB

Postgres: BYTEA

Yes

Template content

compressed

Oracle: NUMBER

Postgres: INT

Yes

Is template content compressed

x__insdate

timestamp(6)

Oracle: sysdate

Postgres: now()

Yes

Insertion timestamp

x__insuser

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

'0'

Yes

Not used, default value 0

x__moddate

timestamp(6)

No

Modification timestamp, null at insertion

x__moduser

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

'0'

No

Not used, default value 0

x__version

Oracle: number

Postgres: int

0

Yes

Change versioning

Table 10. template_part_content constraints and indexes
Field Type Value Related Field Referenced Field

pk_template_part_content

primary key

x__id

uk_template_part_content_template_part_id

unique index

template_part_id

fk_template_part_content_template_part

Foreign key constraint

template_part_id

template_part.x__id

pk_template_part_content

unique index

x__id

Table 11. template_template_part
Field Type Default Value Required? Description

x__id

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

Yes

Generated primary key (PK)

template_id

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

Yes

TEMPLATE unique identifier

template_part_id

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

Yes

TEMPLATE_PART unique identifier

x__insdate

timestamp(6)

Oracle: sysdate

Postgres: now()

Yes

Insertion timestamp

x__insuser

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

'0'

Yes

Not used, default value 0

x__moddate

timestamp(6)

No

Modification timestamp, null at insertion

x__moduser

Oracle: VARCHAR2(30 CHAR)

Postgres: VARCHAR(30)

'0'

No

Not used, default value 0

x__version

Oracle: number

Postgres: int

0

Yes

Change versioning

Table 12. template_template_part constraints and indexes

Field

Type

Value

Related Field

Referenced Field

pk_template_template_part

primary key

x__id

fk_template_template_part_template

foreign key constraint

template_id

template.x__id

fk_template_template_part_template_part

foreign key constraint

template_part_id

template_part.x__id

ix_template_template_part_template_id

index

template_id

ix_template_template_part_template_part_id

index

template_part_id

pk_template_template_part

unique index

x__id

2.1.3. Permissions

Table 13. Postgres permissions
Users Permissions

dookug

SELECT, INSERT, UPDATE, DELETE

dookug_del

DELETE, TRUNCATE

dookug_mod

INSERT, UPDATE

dookug_sel

SELECT

dookug_full

SELECT, INSERT, UPDATE, DELETE

dookug_service

SELECT, INSERT, UPDATE, DELETE

Table 14. Oracle permissions
Users Permissions

DOOKUG_WRITE

INSERT, UPDATE, DELETE

DOOKUG_READ

SELECT

DOOKUG_EXEC

NOTEEFLY_READ, NOTEEFLY_WRITE

3. Configurations

  • ENV variables:

    • DOCKER_REPOSITORY: Root location of images (default value: DOCKER_REPOSITORY_).

    • DOCKER_LIQUIBASE_DOOKUG: Indicates the image location (schema1 default value: ${DOCKER_REPOSITORY}/liquibase/modules/dookug_db).

    • DBDWH_IMAGE_VERSION: used version of liquibase, postgres, partman images (default value: 0.10.0)

    • VERSION: Project version, this is set automatically.

  • Compose variables:

    • LIQUIBASE_BASE_IMAGE: central, corporate base liquibase image with version, used by dockerfile (default value: DOCKER_REPOSITORY/db-base-liquibase:${DBDWH_IMAGE_VERSION}).

    • liquibase-release/LIQUIBASE_INSTALL_DIR: local liquibase directory, used by dockerfile (schema1 default value: ./liquibase/dookug).

    • LIQUIBASE_INSTALL_COMMON_DIR: local liquibase/common directory, used by dockerfile (default value: ./liquibase/common).

  • Before Liquibase variables:

    • S2_SCHEMA_NAME: Step 2 schema name, with default value, can be overridden externally (default value: dookug).

    • CREATE_DATABASE: PostgreSQL DB. If the current DB needs to be embedded in another DB (under a specific schema), this variable prevents an empty DB from being created. Default value is TRUE in the before-liquibase file, can be overridden externally.

  • Properties variables:

    • Properties file: File belonging to the given DB that provides data for local db access and maps the liquibase changelog file to the given step compose file.

    • URL: URL of the DB to be installed, by default local DB access is specified, can be overridden externally.

      • Oracle DB: (default value: jdbc:oracle:thin:@module-dookug-oracle:1521/xepdb1).

      • Postgres DB/step1: (default value: jdbc:postgresql://module-dookug-postgredb:5432/postgres).

      • Postgres DB/step2: (default value: _jdbc:postgresql://module-dookug-postgredb:5432/dookug_db).

      • Postgres DB/step3: (default value: jdbc:postgresql://module-dookug-postgredb:5432/postgres).

      • Postgres DB/step4: (default value: _jdbc:postgresql://module-dookug-postgredb:5432/dookug_db).

    • USERNAME: Username for the DB to be installed, by default local DB access is specified, can be overridden externally.

      • Oracle DB/step1: (default value: system).

      • Oracle DB/step2: (schema2 default value: dookug).

      • Oracle DB/step4: (schema4 default value: dookug).

      • Postgres DB: (default value: postgres).

    • PASSWORD: Password for the DB to be installed, by default local DB access is specified, can be overridden externally.

      • Oracle DB: (default value: developer).

      • Postgres DB: (default value: postgres).

    • CHANGELOGFILE: Name of the liquibase changelog file, by default local changelog file access for the given DB step is specified.

      • step1: DB installation, users, permissions, etc. (default value: liquibase-install-step-01.xml).

      • step2: Liquibase installation, DB objects (default value: liquibase-install-step-02.xml).

      • step3: ONLY PostgreSQL - CRON scheduler entry (default value: liquibase-install-step-03.xml).

      • step4: Optional! Default (test/dev) template loading (default value: liquibase-install-step-04.xml).

4. Installation, Release, Deployment

Local Postgres (click here)
#=====================
#Full install
#=====================
docker run -it --rm \
  --network=dookug-local-network \
  -e AUTO_INSTALL=postgresql \
  icellmobilsoft/dookug_db:1.1.0
#=====================
#Step by step:
#=====================
#---------------------
#STEP1 DB init
#---------------------
docker run -it --rm \
  --network=dookug-local-network \
  -e AUTO_INSTALL=postgresql \
  -e INSTALL_STEP=STEP_1 \
  icellmobilsoft/dookug_db:1.1.0 && \
#---------------------
#PG Tools (partman) install:
#---------------------
docker run -it --rm \
  --network dookug-local-network \
  -e AUTO_INSTALL=postgresql \
  -e INSTALL_URL_S1=jdbc:postgresql://module-dookug-postgredb:port_num/postgres \
  -e INSTALL_URL_S2=jdbc:postgresql://module-dookug-postgredb:port_num/dookug_db \
  --name module-dookug-pg_tools-step-01B \
  icellmobilsoft/pg_tools:0.10.0 && \
#---------------------
#STEP2 - Liqui install:
#---------------------
docker run -it --rm \
  --network=dookug-local-network \
  -e AUTO_INSTALL=postgresql \
  -e INSTALL_STEP=STEP_2 \
  icellmobilsoft/dookug_db:1.1.0 && \
#---------------------
#STEP3 - register in CRON scheduler:
#---------------------
docker run -it --rm \
  --network=dookug-local-network \
  -e AUTO_INSTALL=postgresql \
  -e INSTALL_STEP=STEP_3 \
  icellmobilsoft/dookug_db:1.1.0 && \
#---------------------
#STEP4 - Load default (test/dev) templates:
#---------------------
docker run -it --rm \
  --network=dookug-local-network \
  -e AUTO_INSTALL=postgresql \
  -e INSTALL_STEP=STEP_4 \
  icellmobilsoft/dookug_db:1.1.0
  • How "embed" Dookug DB into other "host" DB (install Dookug-db dookug schema into other DB):

Embed Postgres in to other DB locally (click here)
#---------------------
#Postgres and Linux:
#---------------------
# The Step4 in DookuG DB contains loading of default templates, therefore the "embedding" installer script format is different for this DB.
# For all host (parent) DBs, the corresponding environment variables need to be rewritten accordingly.
# If you don't need default templates, then STEP_4 can be omitted.
#---------------------
    docker run -it --rm \
      --network=host-local-network \
      -e AUTO_INSTALL=postgresql \
      -e DATABASE_NAME=host_db \
      -e INSTALL_URL_S1=jdbc:postgresql://local_host_db-postgredb:port_num/postgres \
      -e CREATE_DATABASE=false \
      -e INSTALL_STEP=STEP_1 \
      -e INSTALL_SCHEMA=dookug \
    icellmobilsoft/dookug_db:1.1.0 && \
    docker run -it --rm \
      --network=host-local-network \
      -e AUTO_INSTALL=postgresql \
      -e DATABASE_NAME=host_db \
      -e INSTALL_URL_S1=jdbc:postgresql://local_host_db-postgredb:port_num/postgres \
      -e CREATE_DATABASE=false \
      -e INSTALL_URL_S2=jdbc:postgresql://local_host_db-postgredb:port_num/host_db \
      -e INSTALL_SCHEMA=dookug \
      --name module-dookug-pg_tools-step-01B \
    icellmobilsoft/pg_tools:0.10.0 && \
    docker run -it --rm \
      --network=host-local-network \
      -e AUTO_INSTALL=postgresql \
      -e DATABASE_NAME=host_db \
      -e INSTALL_URL_S2=jdbc:postgresql://local_host_db-postgredb:port_num/host_db \
      -e CREATE_DATABASE=false \
      -e INSTALL_STEP=STEP_2 \
      -e INSTALL_SCHEMA=dookug \
      icellmobilsoft/dookug_db:1.1.0  && \
    docker run -it --rm \
      --network=host-local-network \
      -e AUTO_INSTALL=postgresql \
      -e DATABASE_NAME=host_db \
      -e INSTALL_URL_S3=jdbc:postgresql://local_host_db-postgredb:port_num/postgres \
      -e CREATE_DATABASE=false \
      -e INSTALL_STEP=STEP_3 \
      -e INSTALL_SCHEMA=dookug \
      icellmobilsoft/dookug_db:1.1.0
#--------------------------
#This 4th step is needed because the Step4 in Dookug DB contains loading of default templates.
#If you don't need default templates, then STEP_4 can be omitted.
#--------------------------
    docker run -it --rm \
      --network=host-local-network \
      -e AUTO_INSTALL=postgresql \
      -e DATABASE_NAME=host_db \
      -e INSTALL_URL_S4=jdbc:postgresql://local_host_db-postgredb:port_num/host_db \
      -e CREATE_DATABASE=false \
      -e INSTALL_STEP=STEP_4 \
      -e INSTALL_SCHEMA=dookug \
      icellmobilsoft/dookug_db:1.1.0
Local Oracle (click here)
  • Locale Oracle install:

    #=====================
    #Full local install
    #=====================
    docker run --rm \
      --network dookug-local-network \
      -e AUTO_INSTALL=oracle \
      icellmobilsoft/dookug_db:1.1.0
#=====================
#Step by step:
#=====================
#---------------------
#STEP1 DB init
#---------------------
docker run --rm \
  --network dookug-local-network \
  -e AUTO_INSTALL=oracle \
  -e INSTALL_STEP=STEP_1 \
  icellmobilsoft/dookug_db:1.1.0
#---------------------
#STEP2 - Liqui install:
#---------------------
docker run --rm \
  --network dookug-local-network \
  -e AUTO_INSTALL=oracle \
  -e INSTALL_STEP=STEP_2 \
  icellmobilsoft/dookug_db:1.1.0
#---------------------
#STEP4 - Load Default (test/dev) templates - optional:
#---------------------
docker run --rm \
  --network dookug-local-network \
  -e AUTO_INSTALL=oracle \
  -e INSTALL_STEP=STEP_4 \
  icellmobilsoft/dookug_db:1.1.0
Embed Oracle into other Oracle DB locally (click here)
#---------------------
#Oracle and Linux:
#---------------------
    docker run --rm \
      --network host-local-network \
      -e AUTO_INSTALL=oracle \
      -e INSTALL_URL=jdbc:oracle:thin:@local_host_db-oracle:port_num/xepdb1 \
      icellmobilsoft/dookug_db:1.1.0
Server install (click here)
  • The installation process is the same as the local one, however,

    • if the DB is already installed on the server, then STEP1 and/or pg_tools are probably not needed.

    • some environment variables need to be set with different values:

      • USERNAME=user_name

      • PASSWORD=passw

      • INSTALL_URL_S1=jdbc:postgresql://host:port_num/postgres

      • INSTALL_URL_S2=jdbc:postgresql://host:port_num/schema_name

      • INSTALL_URL_S3=jdbc:postgresql://host:port_num/postgres

      • INSTALL_URL_S4=jdbc:postgresql://host:port_num/schema_name

      • There is a possibility to change the password of the Service User from outside: e.g.: -e DB_SERVICE_USER_PASSWORD=new_service_passw, this can only be changed externally on the new installation, so it is only in step 1!

    • Other environment variables are explained in the Configuration section.

docker run -it --rm \
  -e AUTO_INSTALL=postgresql \
  -e INSTALL_URL_S1=jdbc:postgresql://host:port_num/postgres \
  -e INSTALL_STEP=STEP_1 \
  -e USERNAME=postgres \
  -e PASSWORD=postgres \
  icellmobilsoft/dookug_db:1.1.0 && \
docker run -it --rm \
  -e AUTO_INSTALL=postgresql \
  -e INSTALL_URL_S1=jdbc:postgresql://host:port_num/postgres \
  -e INSTALL_URL_S2=jdbc:postgresql://host:port_num/dookug_db \
  --name module-dookug-pg_tools-step-01B \
  icellmobilsoft/pg_tools:0.10.0 && \
docker run -it --rm \
  -e AUTO_INSTALL=postgresql \
  -e INSTALL_URL_S2=jdbc:postgresql://host:port_num/dookug_db \
  -e INSTALL_STEP=STEP_2 \
  icellmobilsoft/dookug_db:1.1.0
docker run -it --rm \
  -e AUTO_INSTALL=postgresql \
  -e INSTALL_URL_S3=jdbc:postgresql://host:port_num/postgres \
  -e INSTALL_STEP=STEP_3 \
  icellmobilsoft/dookug_db:1.1.0
docker run -it --rm \
  -e AUTO_INSTALL=postgresql \
  -e INSTALL_URL_S4=jdbc:postgresql://host:port_num/dookug_db \
  -e INSTALL_STEP=STEP_4 \
  icellmobilsoft/dookug_db:1.1.0
#---------------------
#ORACLE server run - in default schema:
#---------------------
docker run --rm \
  -e AUTO_INSTALL=oracle \
  -e INSTALL_URL_S2=jdbc:oracle:thin:@host:port_num/db_name \
  -e CREATE_DATABASE=false \
  -e INSTALL_STEP=STEP_2 \
  -e INSTALL_USERNAME=vdr_dookug \
  -e INSTALL_PASSWORD=passw \
  icellmobilsoft/dookug_db:1.1.0
#---------------------
#ORACLE server run - in NOT default schema:
#---------------------
docker run --rm \
  -e AUTO_INSTALL=oracle \
  -e INSTALL_URL_S2=jdbc:oracle:thin:@host:port_num/db_name \
  -e CREATE_DATABASE=false \
  -e INSTALL_SCHEMA=vdr_dookug \
  -e INSTALL_STEP=STEP_2 \
  -e INSTALL_USERNAME=vdr_dookug \
  -e INSTALL_PASSWORD=passw \
  icellmobilsoft/dookug_db:1.1.0
#---------------------
#If the DookuG DB is already installed on the server, then only the 2. step, liquibase install is needed.
#---------------------
  docker run --rm \
    -e AUTO_INSTALL=oracle \
    -e INSTALL_URL=jdbc:oracle:thin:@host:port/db_name \
    -e INSTALL_STEP=2 \
    icellmobilsoft/dookug_db:1.1.0

#on windows: the "\" needs to be changed to "`"!

DookuG is embedded in to Taxi DB
DookuG Service register in CRON
  • optional environment variable, only needed during password change:

      -e DB_SERVICE_USER_PASSWORD=<service user passw> \

5. Release notes

  • 0.1.0 Changes:

    • Dookug db install

    • Templates install

    • Documentation

  • 1.0.0 Changes:

    • DATE type has been replaced with Timestamp(6) in Common.dtd file.

    • DKG-228 - Insert a new flexible template into the boards.

    • DKG-217 - Replacing new date types in the boards.

    • DKG-233 - Hash Fix

    • DKG-231 - Convert documentation

    • DKG-238- Load default templates in Step 4.

    • DKG-245 - Improvement of Dookug Vader Installation Error

  • 1.0.3 Changes:

    • DKG-246 - Template Content Fix

    • DKG-261 - Repair of Readme adoc.

    • DKG-261 - Repair of Install.adoc.

  • 1.1.0 Changes:

    • DKG-265 - open source changes

    • DKG-297 - Drop validity_start, validity_end cols from template_part_content, drop template_part_content.template_part_id index, change template_part_content.template_part_id index to unique.