update / migration
This commit is contained in:
parent
4498f23458
commit
b5bb9ac635
152 changed files with 10725 additions and 76159 deletions
6
.env
Normal file
6
.env
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
# Docker Config
|
||||||
|
PROJECT_PREFIX=dynamixs-ai-super-office
|
||||||
|
|
||||||
|
# LLM Config
|
||||||
|
LLM_API_ENDPOINT=https://api.llama.cpp.imixs.com/
|
||||||
|
LLM_API_KEY=7fdb663fa87ea16731c1e0ece8ad3214e358423eabf2403188110c731ce07321
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
FROM imixs/imixs-office-workflow:5.1.6-SNAPSHOT-wildfly-29.0.1.Final-jdk17
|
FROM ghcr.io/dynamixs-ai/ai-platform:latest
|
||||||
|
|
||||||
# Deploy artefact
|
# Deploy artefact
|
||||||
RUN rm -r /opt/jboss/wildfly/standalone/deployments/*
|
RUN rm -r /opt/jboss/wildfly/standalone/deployments/*
|
||||||
# Deploy artefact
|
# Deploy artefact
|
||||||
COPY ./target/*.war /opt/jboss/wildfly/standalone/deployments/
|
COPY ./target/*.war /opt/jboss/wildfly/standalone/deployments/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
FROM imixs/imixs-office-workflow:5.1.6-SNAPSHOT-wildfly-29.0.1.Final-jdk17
|
FROM ghcr.io/dynamixs-ai/ai-platform:latest
|
||||||
|
|
||||||
# Deploy artefact
|
# Deploy artefact
|
||||||
RUN rm -r /opt/jboss/wildfly/standalone/deployments/*
|
RUN rm -r /opt/jboss/wildfly/standalone/deployments/*
|
||||||
# Deploy artefact
|
|
||||||
COPY ./target/*.war /opt/jboss/wildfly/standalone/deployments/
|
COPY ./target/*.war /opt/jboss/wildfly/standalone/deployments/
|
||||||
|
|
||||||
# Run in Debug Mode
|
# Run in Debug Mode
|
||||||
|
|
|
||||||
24
build.sh
Executable file
24
build.sh
Executable file
|
|
@ -0,0 +1,24 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
############################################################
|
||||||
|
# The Dynamixs.AI Developer Script
|
||||||
|
# start, build, hot, setup, deploy
|
||||||
|
#
|
||||||
|
############################################################
|
||||||
|
|
||||||
|
strip_dash() {
|
||||||
|
echo "$1" | sed 's/^-//'
|
||||||
|
}
|
||||||
|
|
||||||
|
echo " _ _ _ _ "
|
||||||
|
echo " __| | _____ _(_) | |__ ___| |_ __"
|
||||||
|
echo " / _\` |/ _ \\ \\ / / | | '_ \\ / _ \\ | \'_ \\"
|
||||||
|
echo "| (_| | __/\ V /| | | | | | __/ | |_) |"
|
||||||
|
echo " \__,_|\___| \_/ |_| |_| |_|\___|_| .__/ "
|
||||||
|
echo " |_| "
|
||||||
|
echo " Dynamixs.AI Build Script..."
|
||||||
|
echo "_________________________________________"
|
||||||
|
|
||||||
|
# Update git
|
||||||
|
git pull
|
||||||
|
mvn clean install -DskipTests -Pimixs-cloud
|
||||||
43
devi
43
devi
|
|
@ -1,12 +1,11 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
############################################################
|
############################################################
|
||||||
# The Imixs Developer Script
|
# The Dynamixs.AI Developer Script
|
||||||
# start, build, hot, setup, deploy
|
# start, build, hot, setup, deploy
|
||||||
#
|
#
|
||||||
############################################################
|
############################################################
|
||||||
|
|
||||||
# Funktion zum Entfernen des '-' Zeichens von einem Parameter
|
|
||||||
strip_dash() {
|
strip_dash() {
|
||||||
echo "$1" | sed 's/^-//'
|
echo "$1" | sed 's/^-//'
|
||||||
}
|
}
|
||||||
|
|
@ -24,35 +23,46 @@ strip_dash() {
|
||||||
if [[ "$(strip_dash $1)" == "setup" ]]; then
|
if [[ "$(strip_dash $1)" == "setup" ]]; then
|
||||||
echo " Dev Setup..."
|
echo " Dev Setup..."
|
||||||
sudo chmod -R 777 docker/deployments/
|
sudo chmod -R 777 docker/deployments/
|
||||||
echo " starting dev enrvionment..."
|
echo " starting dev environment..."
|
||||||
mvn clean install -Pdebug
|
mvn clean install -Pdebug
|
||||||
cp ./*-app/target/*.war ./docker/deployments/
|
cp ./*-app/target/*.war ./docker/deployments/
|
||||||
docker compose -f ./docker/docker-compose-dev.yaml up
|
docker compose -f ./docker-compose-dev.yaml up
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [[ "$(strip_dash $1)" == "start" ]]; then
|
if [[ "$(strip_dash $1)" == "start" ]]; then
|
||||||
echo " Start Dev Environment..."
|
echo " Start Dev Environment..."
|
||||||
docker compose -f ./docker/docker-compose-dev.yaml up
|
docker compose -f ./docker-compose.yaml up
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$(strip_dash $1)" == "dev" ]]; then
|
||||||
|
echo " Start Dev Environment..."
|
||||||
|
mvn clean install -DskipTests -Pdebug
|
||||||
|
docker compose -f ./docker-compose-dev.yaml up
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$(strip_dash $1)" == "docker" ]]; then
|
if [[ "$(strip_dash $1)" == "docker" ]]; then
|
||||||
echo " Buld Docker Image..."
|
echo " Build Docker image..."
|
||||||
mvn clean install -Pdebug
|
mvn clean install -DskipTests -Pdocker
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if [[ "$(strip_dash $1)" == "build" ]]; then
|
if [[ "$(strip_dash $1)" == "build" ]]; then
|
||||||
echo " Build app..."
|
echo " Build and Autodeploy..."
|
||||||
mvn clean install
|
mvn clean install -DskipTests
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ "$(strip_dash $1)" == "test" ]]; then
|
||||||
|
echo " Run JUnit Tests..."
|
||||||
|
mvn clean test
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$(strip_dash $1)" == "hot" ]]; then
|
||||||
if [[ "$(strip_dash $1)" == "deploy" ]]; then
|
echo "* Hotdeploy..."
|
||||||
echo " Deploy to Imixs-Cloud..."
|
cd *-app
|
||||||
mvn clean install -Pimixs-cloud -DskipTests
|
mvn manik-hotdeploy:hotdeploy
|
||||||
|
cd ..
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -62,9 +72,10 @@ if [[ $# -eq 0 ]]; then
|
||||||
echo " Run with ./dev.sh -XXX"
|
echo " Run with ./dev.sh -XXX"
|
||||||
echo " "
|
echo " "
|
||||||
echo " -start : start Docker Containers"
|
echo " -start : start Docker Containers"
|
||||||
echo " -build : build war file"
|
echo " -dev : start the Docker dev environment"
|
||||||
echo " -docker : build the Docker image for debugging"
|
echo " -build : build application and redeploy"
|
||||||
echo " -deploy: Imixs-Cloud Deployment starten "
|
echo " -hot : Manik Hotdeploy"
|
||||||
|
echo " -test : run tests"
|
||||||
echo " -setup : setup dev environment - rebuild docker containers "
|
echo " -setup : setup dev environment - rebuild docker containers "
|
||||||
echo "_________________________________________"
|
echo "_________________________________________"
|
||||||
echo " "
|
echo " "
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,12 @@ services:
|
||||||
# PostgreSQL
|
# PostgreSQL
|
||||||
#######################
|
#######################
|
||||||
db:
|
db:
|
||||||
image: postgres:9.6.1
|
image: postgres:17.4
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_PASSWORD: adminadmin
|
POSTGRES_PASSWORD: adminadmin
|
||||||
POSTGRES_DB: office
|
POSTGRES_DB: office
|
||||||
volumes:
|
volumes:
|
||||||
- dbdata-hai:/var/lib/postgresql/data
|
- dbdata:/var/lib/postgresql/data
|
||||||
|
|
||||||
#######################
|
#######################
|
||||||
# Dynamixs AI
|
# Dynamixs AI
|
||||||
|
|
@ -44,10 +44,8 @@ services:
|
||||||
WOPI_HOST_ENDPOINT: "http://app:8080/api/wopi/"
|
WOPI_HOST_ENDPOINT: "http://app:8080/api/wopi/"
|
||||||
COLLABORA_CONVERTER_URL: "http://collabora:9980/lool/convert-to/"
|
COLLABORA_CONVERTER_URL: "http://collabora:9980/lool/convert-to/"
|
||||||
|
|
||||||
# Imixs-AI
|
# LLM Integration
|
||||||
# Optional configured via imixs.properties
|
LLM_CONFIG_FILE: /opt/jboss/imixs-llm.xml
|
||||||
LLM_SERVICE_ENDPOINT: ${LLM_API_ENDPOINT}
|
|
||||||
LLM_SERVICE_ENDPOINT_APIKEY: ${LLM_API_KEY}
|
|
||||||
|
|
||||||
# Cassandra Embeddings
|
# Cassandra Embeddings
|
||||||
EMBEDDINGS_CLUSTER_CONTACTPOINTS: "cassandra"
|
EMBEDDINGS_CLUSTER_CONTACTPOINTS: "cassandra"
|
||||||
|
|
@ -58,21 +56,20 @@ services:
|
||||||
- "9990:9990"
|
- "9990:9990"
|
||||||
- "8787:8787"
|
- "8787:8787"
|
||||||
volumes:
|
volumes:
|
||||||
- ./deployments:/opt/jboss/wildfly/standalone/deployments/
|
- ./docker/deployments:/opt/jboss/wildfly/standalone/deployments/
|
||||||
- ./import_examples:/opt/jboss/import_examples/
|
- ./docker/keys/imixs-llm.xml:/opt/jboss/imixs-llm.xml
|
||||||
|
#- ./import_examples:/opt/jboss/import_examples/
|
||||||
|
|
||||||
# Mapping the host ip to the container
|
# Mapping the host ip to the container
|
||||||
# This setting is used for local testing only
|
# This setting is used for local testing only
|
||||||
# Wildfly can access the keycloak server via the external host address
|
# Wildfly can access the keycloak server via the external host address
|
||||||
extra_hosts:
|
# extra_hosts:
|
||||||
- "keycloak.imixs.local:host-gateway"
|
# - "keycloak.imixs.local:host-gateway"
|
||||||
|
|
||||||
#######################
|
#######################
|
||||||
# Tika OCR Service
|
# Tika OCR Service
|
||||||
#######################
|
#######################
|
||||||
tika:
|
tika:
|
||||||
#image: imixs/tika
|
|
||||||
#image: apache/tika:1.24.1-full
|
|
||||||
image: apache/tika:3.2.0.0-full
|
image: apache/tika:3.2.0.0-full
|
||||||
environment:
|
environment:
|
||||||
TZ: "Europe/Berlin"
|
TZ: "Europe/Berlin"
|
||||||
|
|
@ -105,15 +102,15 @@ services:
|
||||||
#######################
|
#######################
|
||||||
# collabora Office Online
|
# collabora Office Online
|
||||||
#######################
|
#######################
|
||||||
# collabora:
|
collabora:
|
||||||
# image: collabora/code:25.04.6.2.1
|
image: collabora/code:25.04.6.2.1
|
||||||
# ports:
|
ports:
|
||||||
# - "9980:9980"
|
- "9980:9980"
|
||||||
# environment:
|
environment:
|
||||||
# - username=admin
|
- username=admin
|
||||||
# - password=adminadmin
|
- password=adminadmin
|
||||||
# - extra_params=--o:ssl.enable=false
|
- extra_params=--o:ssl.enable=false
|
||||||
# - aliasgroup1=http://app:8080
|
- aliasgroup1=http://app:8080
|
||||||
|
|
||||||
#######################
|
#######################
|
||||||
# Imixs Admin Client
|
# Imixs Admin Client
|
||||||
|
|
@ -123,26 +120,8 @@ services:
|
||||||
# ports:
|
# ports:
|
||||||
# - "8888:8080"
|
# - "8888:8080"
|
||||||
|
|
||||||
# prometheus:
|
|
||||||
# image: prom/prometheus:latest
|
|
||||||
# ports:
|
|
||||||
# - "9090:9090"
|
|
||||||
# volumes:
|
|
||||||
# - ./configuration/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
|
||||||
# - prometheusdata:/prometheus/
|
|
||||||
|
|
||||||
# grafana:
|
|
||||||
# image: grafana/grafana:10.4.0 # Aktuelle stabile Version
|
|
||||||
# ports:
|
|
||||||
# - "3000:3000"
|
|
||||||
# environment:
|
|
||||||
# - GF_SECURITY_ADMIN_PASSWORD=admin # Standardpasswort setzen
|
|
||||||
# volumes:
|
|
||||||
# - grafana-storage:/var/lib/grafana # Persistente Daten
|
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
dbdata-hai:
|
dbdata:
|
||||||
dbkeycloak:
|
name: ${PROJECT_PREFIX}-dbdata
|
||||||
cassandra_data:
|
cassandra_data:
|
||||||
prometheusdata:
|
name: ${PROJECT_PREFIX}-cassandra_data
|
||||||
grafana-storage:
|
|
||||||
|
|
@ -1,172 +0,0 @@
|
||||||
services:
|
|
||||||
#######################
|
|
||||||
# PostgreSQL
|
|
||||||
#######################
|
|
||||||
db:
|
|
||||||
image: postgres:9.6.1
|
|
||||||
environment:
|
|
||||||
POSTGRES_PASSWORD: adminadmin
|
|
||||||
POSTGRES_DB: office
|
|
||||||
volumes:
|
|
||||||
- dbdata-hai:/var/lib/postgresql/data
|
|
||||||
|
|
||||||
#######################
|
|
||||||
# Dynamixs AI
|
|
||||||
#######################
|
|
||||||
app:
|
|
||||||
image: imixs/dynamixs-ai
|
|
||||||
depends_on:
|
|
||||||
- db
|
|
||||||
environment:
|
|
||||||
JAVA_OPTS: "-Dnashorn.args=--no-deprecation-warning"
|
|
||||||
POSTGRES_USER: "postgres"
|
|
||||||
POSTGRES_PASSWORD: "adminadmin"
|
|
||||||
POSTGRES_CONNECTION: "jdbc:postgresql://db/office"
|
|
||||||
TZ: "Europe/Berlin"
|
|
||||||
LANG: "en_US.UTF-8"
|
|
||||||
MAILGATEWAY: "localhost"
|
|
||||||
ASYNCEVENT_PROCESSOR_ENABLED: "true"
|
|
||||||
ASYNCEVENT_PROCESSOR_INITIALDELAY: "30000"
|
|
||||||
OCR_SERVICE_ENDPOINT: "http://tika:9998/tika"
|
|
||||||
OCR_SERVICE_MODE: "MODEL"
|
|
||||||
#OCR_STRATEGY: "NO_OCR, OCR_ONLY, OCR_AND_TEXT_EXTRACTION, AUTO (default)"
|
|
||||||
OCR_STRATEGY: "AUTO"
|
|
||||||
# Collabora integration
|
|
||||||
WOPI_PUBLIC_ENDPOINT: "http://localhost:9980"
|
|
||||||
WOPI_DISCOVERY_ENDPOINT: "http://collabora:9980/hosting/discovery"
|
|
||||||
WOPI_HOST_ENDPOINT: "http://imixs-documents:8080/api/wopi/"
|
|
||||||
COLLABORA_CONVERTER_URL: "http://collabora:9980/lool/convert-to/"
|
|
||||||
|
|
||||||
# Imixs-Archive
|
|
||||||
# ARCHIVE_SERVICE_ENDPOINT: "http://imixs-archive:8080/api"
|
|
||||||
|
|
||||||
# Imixs-AI
|
|
||||||
# Optional configured via imixs.properties
|
|
||||||
LLM_SERVICE_ENDPOINT: "https://llama.cpp.imixs.com/"
|
|
||||||
LLM_SERVICE_ENDPOINT_USER: "admin"
|
|
||||||
LLM_SERVICE_ENDPOINT_PASSWORD: "imixs4.null"
|
|
||||||
|
|
||||||
# Cassandra Embeddings
|
|
||||||
EMBEDDINGS_CLUSTER_CONTACTPOINTS: "cassandra"
|
|
||||||
EMBEDDINGS_CLUSTER_KEYSPACE: "embeddings"
|
|
||||||
|
|
||||||
# OIDC
|
|
||||||
OIDCCONFIG_PROVIDERURI: "http://keycloak.imixs.local:8084/realms/dynamixsai/.well-known/openid-configuration"
|
|
||||||
OIDCCONFIG_CLIENTID: "imixs"
|
|
||||||
OIDCCONFIG_CLIENTSECRET: "aSuEXUeD7bARAlX8o3fLagSYbIagBrrM"
|
|
||||||
OIDCCONFIG_REDIRECTURI: "http://localhost:8080/callback"
|
|
||||||
#OIDCCONFIG_SCOPE: "openid profile email"
|
|
||||||
#OIDCCONFIG_CLAIM_CALLERNAME: "preferred_username"
|
|
||||||
#OIDCCONFIG_CLAIM_ROLES: "groups"
|
|
||||||
|
|
||||||
ports:
|
|
||||||
- "8080:8080"
|
|
||||||
- "9990:9990"
|
|
||||||
- "8787:8787"
|
|
||||||
volumes:
|
|
||||||
- ./deployments:/opt/jboss/wildfly/standalone/deployments/
|
|
||||||
- ./import_examples:/opt/jboss/import_examples/
|
|
||||||
|
|
||||||
# Mapping the host ip to the container
|
|
||||||
# This setting is used for local testing only
|
|
||||||
# Wildfly can access the keycloak server via the external host address
|
|
||||||
extra_hosts:
|
|
||||||
- "keycloak.imixs.local:host-gateway"
|
|
||||||
|
|
||||||
#######################
|
|
||||||
# Tika OCR Service
|
|
||||||
#######################
|
|
||||||
tika:
|
|
||||||
#image: imixs/tika
|
|
||||||
image: apache/tika:1.24.1-full
|
|
||||||
environment:
|
|
||||||
TZ: "Europe/Berlin"
|
|
||||||
ports:
|
|
||||||
- "9998:9998"
|
|
||||||
|
|
||||||
#######################
|
|
||||||
# Cassandra
|
|
||||||
#######################
|
|
||||||
cassandra:
|
|
||||||
image: cassandra:5.0.4
|
|
||||||
container_name: cassandra
|
|
||||||
mem_limit: 2G # Mindestens 2 GB RAM für Cassandra 5.x
|
|
||||||
mem_reservation: 1G # Reserviert 1 GB
|
|
||||||
environment:
|
|
||||||
- TZ="Europe/Berlin"
|
|
||||||
- JVM_OPTS=-Xms1G -Xmx1G # Heap auf 1 GB begrenzen
|
|
||||||
- CASSANDRA_CLUSTER_NAME=dynamixsAiCluster
|
|
||||||
- CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch
|
|
||||||
- CASSANDRA_DC=datacenter1
|
|
||||||
- CASSANDRA_RACK=rack1
|
|
||||||
ports:
|
|
||||||
- "9042:9042" # CQL-Port
|
|
||||||
- "7000:7000" # Inter-Node-Kommunikation
|
|
||||||
- "7001:7001" # TLS-fähige Inter-Node-Kommunikation
|
|
||||||
- "7199:7199" # JMX-Port
|
|
||||||
volumes:
|
|
||||||
- cassandra_data:/var/lib/cassandra
|
|
||||||
|
|
||||||
#######################
|
|
||||||
# collabora Office Online
|
|
||||||
#######################
|
|
||||||
collabora:
|
|
||||||
image: collabora/code:23.05.0.5.1
|
|
||||||
#expose:
|
|
||||||
# - 9980
|
|
||||||
ports:
|
|
||||||
- "9980:9980"
|
|
||||||
environment:
|
|
||||||
- username=admin
|
|
||||||
- password=adminadmin
|
|
||||||
- extra_params=--o:ssl.enable=false
|
|
||||||
- aliasgroup1=http://app:8080
|
|
||||||
volumes:
|
|
||||||
- ./configuration/collabora/fonts:/usr/share/fonts/truetype/more/
|
|
||||||
- ./configuration/collabora/fonts:/opt/cool/systemplate/usr/share/fonts/truetype/more/
|
|
||||||
|
|
||||||
#######################
|
|
||||||
# Imixs Admin Client
|
|
||||||
#######################
|
|
||||||
# imixsadmin:
|
|
||||||
# image: imixs/imixs-admin
|
|
||||||
# ports:
|
|
||||||
# - "8888:8080"
|
|
||||||
|
|
||||||
##################################
|
|
||||||
# Keycloak SQL Server
|
|
||||||
##################################
|
|
||||||
dbkeycloak:
|
|
||||||
image: postgres:15
|
|
||||||
environment:
|
|
||||||
POSTGRES_PASSWORD: adminadmin
|
|
||||||
POSTGRES_USER: keycloak
|
|
||||||
POSTGRES_DB: keycloak
|
|
||||||
volumes:
|
|
||||||
- dbkeycloak:/var/lib/postgresql/data
|
|
||||||
|
|
||||||
##################################
|
|
||||||
# Keycloak Server
|
|
||||||
##################################
|
|
||||||
keycloak:
|
|
||||||
#image: quay.io/keycloak/keycloak:23.0.5
|
|
||||||
image: quay.io/keycloak/keycloak:26.2.4
|
|
||||||
command:
|
|
||||||
- start-dev
|
|
||||||
environment:
|
|
||||||
- KEYCLOAK_ADMIN=admin
|
|
||||||
- KEYCLOAK_ADMIN_PASSWORD=adminadmin
|
|
||||||
- KC_DB=postgres
|
|
||||||
- KC_DB_URL=jdbc:postgresql://dbkeycloak:5432/keycloak
|
|
||||||
- KC_DB_USER=keycloak
|
|
||||||
- KC_DB_PASSWORD=adminadmin
|
|
||||||
volumes:
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
- ./configuration/keycloak/themes/:/opt/keycloak/themes/
|
|
||||||
ports:
|
|
||||||
- "8084:8080"
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
dbdata-hai:
|
|
||||||
dbkeycloak:
|
|
||||||
cassandra_data:
|
|
||||||
|
|
@ -1,52 +0,0 @@
|
||||||
version: "3.1"
|
|
||||||
services:
|
|
||||||
|
|
||||||
db:
|
|
||||||
image: postgres:9.6.1
|
|
||||||
environment:
|
|
||||||
POSTGRES_PASSWORD: adminadmin
|
|
||||||
POSTGRES_DB: office
|
|
||||||
volumes:
|
|
||||||
- dbdata:/var/lib/postgresql/data
|
|
||||||
app:
|
|
||||||
image: imixs/imixs-office-workflow
|
|
||||||
depends_on:
|
|
||||||
- db
|
|
||||||
environment:
|
|
||||||
TZ: "Europe/Berlin"
|
|
||||||
JAVA_OPTS: "-Dnashorn.args=--no-deprecation-warning"
|
|
||||||
MAILGATEWAY: "localhost"
|
|
||||||
POSTGRES_USER: "postgres"
|
|
||||||
POSTGRES_PASSWORD: "adminadmin"
|
|
||||||
POSTGRES_CONNECTION: "jdbc:postgresql://db/office"
|
|
||||||
METRICS_ENABLED: "true"
|
|
||||||
ports:
|
|
||||||
- "8080:8080"
|
|
||||||
- "9990:9990"
|
|
||||||
- "8787:8787"
|
|
||||||
volumes:
|
|
||||||
- ./deployments:/opt/jboss/wildfly/standalone/deployments/
|
|
||||||
|
|
||||||
# imixsadmin:
|
|
||||||
# image: imixs/imixs-admin
|
|
||||||
# ports:
|
|
||||||
# - "8888:8080"
|
|
||||||
|
|
||||||
prometheus:
|
|
||||||
image: prom/prometheus:latest
|
|
||||||
ports:
|
|
||||||
- "9090:9090"
|
|
||||||
volumes:
|
|
||||||
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
|
||||||
- prometheusdata:/prometheus/
|
|
||||||
|
|
||||||
|
|
||||||
grafana:
|
|
||||||
image: grafana/grafana:7.1.0
|
|
||||||
ports:
|
|
||||||
- "3000:3000"
|
|
||||||
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
prometheusdata:
|
|
||||||
dbdata:
|
|
||||||
Binary file not shown.
|
|
@ -1,65 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Überprüfen, ob eine Eingabedatei angegeben wurde
|
|
||||||
if [ $# -ne 1 ]; then
|
|
||||||
echo "Verwendung: $0 input.csv"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
input_file="$1"
|
|
||||||
output_file="${input_file%.*}_clean.csv"
|
|
||||||
|
|
||||||
# Temporäre Datei für die Verarbeitung
|
|
||||||
temp_file=$(mktemp)
|
|
||||||
|
|
||||||
# Verarbeitung:
|
|
||||||
# 1. Zuerst alle echten Zeilenumbrüche (die nicht in Anführungszeichen sind) markieren
|
|
||||||
# 2. Dann Newlines innerhalb von Anführungszeichen durch Leerzeichen ersetzen
|
|
||||||
# 3. HTML-Tags entfernen
|
|
||||||
# 4. Markierte Zeilenumbrüche wiederherstellen
|
|
||||||
|
|
||||||
awk '
|
|
||||||
BEGIN { FPAT = "([^;]*)|(\"[^\"]+\")"; OFS=";"; in_quotes=0 }
|
|
||||||
{
|
|
||||||
# Zeilen zusammenfügen, wenn sie unvollständig sind (nur für Sicherheit)
|
|
||||||
if (NR == 1) {
|
|
||||||
full_line = $0
|
|
||||||
} else {
|
|
||||||
full_line = full_line " " $0
|
|
||||||
}
|
|
||||||
|
|
||||||
# Überprüfen, ob die Zeile vollständig ist (gleich viele öffnende und schließende Anführungszeichen)
|
|
||||||
quotes = gsub(/"/, "&", full_line)
|
|
||||||
if (quotes % 2 == 0) {
|
|
||||||
# Zeile ist vollständig, jetzt verarbeiten
|
|
||||||
$0 = full_line
|
|
||||||
|
|
||||||
# Newlines in jedem Feld durch Leerzeichen ersetzen
|
|
||||||
for (i=1; i<=NF; i++) {
|
|
||||||
# HTML-Tags entfernen
|
|
||||||
gsub(/<[^>]*>/, "", $i)
|
|
||||||
|
|
||||||
# Newlines und mehrfache Leerzeichen bereinigen
|
|
||||||
gsub(/\n/, " ", $i)
|
|
||||||
gsub(/ +/, " ", $i)
|
|
||||||
|
|
||||||
# Feld trimmen
|
|
||||||
sub(/^[ \t]+/, "", $i)
|
|
||||||
sub(/[ \t]+$/, "", $i)
|
|
||||||
|
|
||||||
# Feld wieder in Anführungszeichen setzen, wenn es Semikolons oder Anführungszeichen enthält
|
|
||||||
if (($i ~ /;/ || $i ~ /"/) && $i !~ /^".*"$/) {
|
|
||||||
gsub(/"/, "\"\"", $i) # Escape existing quotes
|
|
||||||
$i = "\"" $i "\""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print
|
|
||||||
full_line = ""
|
|
||||||
}
|
|
||||||
}' "$input_file" > "$temp_file"
|
|
||||||
|
|
||||||
# Endgültige Bereinigung
|
|
||||||
mv "$temp_file" "$output_file"
|
|
||||||
|
|
||||||
echo "Bereinigte Datei wurde erstellt: $output_file"
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
id;customer.name;customer.address;customer.zip;customer.city;customer.phone;customer.email;customer.web;customer.country
|
|
||||||
1;TechSolutions GmbH;Musterstraße 123;10115;Berlin;+49 30 12345678;info@techsolutions.de;www.techsolutions.de;DE
|
|
||||||
2;Innovate AG;Hauptstraße 45;80335;München;+49 89 87654321;contact@innovate-ag.com;www.innovate-ag.com;AU
|
|
||||||
3;DataSystems Ltd.;Industriestraße 78;20095;Hamburg;+49 40 5559876;office@datasystems.de;www.datasystems.de;JP
|
|
||||||
4;WebCraft GmbH;Am Bahnhof 5;50667;Köln;+49 221 9876543;info@webcraft.de;www.webcraft.de;DE
|
|
||||||
5;CloudExperts AG;TechPark 12;70173;Stuttgart;+49 711 123457;support@cloudexperts.de;www.cloudexperts.de;DE
|
|
||||||
6;SoftwareHub GmbH;Friedrichstraße 33;60323;Frankfurt;+49 69 5551234;info@softwarehub.de;www.softwarehub.de;DE
|
|
||||||
7;DigitalWorks Ltd.;Königsallee 1;40212;Düsseldorf;+49 211 8765432;contact@digitalworks.de;www.digitalworks.de;DE
|
|
||||||
8;NetSolutions GmbH;Hansastraße 62;04109;Leipzig;+49 341 2345678;office@netsolutions.de;www.netsolutions.com;DE
|
|
||||||
9;CodeMasters AG;Rathausplatz 8;86150;Augsburg;+49 821 9876543;info@codemasters.de;www.codemasters.de;DE
|
|
||||||
10;FutureTech GmbH;Am Markt 3;38100;Braunschweig;+49 531 5559876;contact@futuretech.de;www.futuretech.de;DE
|
|
||||||
11;SmartSystems Ltd.;Ludwigstraße 15;97070;Würzburg;+49 931 1234567;support@smartsystems.de;www.smartsystems.de;CN
|
|
||||||
12;AppFactory GmbH;Poststraße 23;14467;Potsdam;+49 331 8765432;info@appfactory.de;www.appfactory.de;CN
|
|
||||||
13;DataLabs AG;Goethestraße 98;99084;Erfurt;+49 361 9876543;office@datalabs.de;www.datalabs.de;CN
|
|
||||||
14;WebInnovate GmbH;Schillerstraße 44;30159;Hannover;+49 511 5551234;contact@webinnovate.de;www.webinnovate.de;CN
|
|
||||||
15;CloudSystems Ltd.;Bahnhofstraße 77;66111;Saarbrücken;+49 681 2345678;info@cloudsystems.de;www.cloudsystems.de;CN
|
|
||||||
21;GlobalTech Solutions;124 Oxford Street;W1D 2HQ;London;+44 20 7123 4567;info@globaltech.co.uk;www.globaltech.co.uk;CN
|
|
||||||
22;InnovateX Ltd;78 Canary Wharf;E14 5AB;London;+44 20 7987 6543;contact@innovatex.com;www.innovatex.com;CN
|
|
||||||
23;DataDynamics Inc;446 Silicon Roundabout;EC2A 4NE;London;+44 20 7555 12345;office@datadynamics.com;www.datadynamics.com;FR
|
|
||||||
24;CloudSphere GmbH;TechPark Berlin 15;10115;Berlin;+49 30 9876 15432;info@cloudsphere.de;www.cloudsphere.de;FR
|
|
||||||
25;WebCraft International;200 Madison Ave;10016;New York;+1 212 555 7890;support@webcraft.com;www.webcraft.com;FR
|
|
||||||
26;DigitalFrontiers Pte Ltd;1 Raffles Place;048616;Singapore;+65 6123 4567;info@digitalfrontiers.sg;www.digitalfrontiers.sg;FR
|
|
||||||
27;TechNova SAS;55 Praspiekt Pieramozcau;75008;Misnk; 1 42 86 53 09;contact@technova.by;www.technova.by;BY
|
|
||||||
28;AppFactory Ltd;88 Kingsway;WC2B 6AA;London;+44 20 7123 9876;office@appfactory.io;www.appfactory.io;FR
|
|
||||||
29;GlobalData Systems;Level 25 One Canada Square;E14 5AB;London;+44 20 7987 1234;info@globaldata.com;www.globaldata.com;FR
|
|
||||||
210;SmartSolutions AG;Bahnhofstrasse 45;8001;Zurich;+41 44 234 56 78;contact@smartsolutions.ch;www.smartsolutions.ch;FR
|
|
||||||
211;InnovationHub Ltd;22 Shoreditch High Street;E1 6PE;London;+44 20 7555 8765;support@innovationhub.co.uk;www.innovationhub.co.uk;UK
|
|
||||||
212;CyberSecure Inc;500 5th Avenue;10110;New York;+1 212 867 5309;security@cybersecure.com;www.cybersecure.com;FR
|
|
||||||
213;TechBridge Tokyo;Shinjuku Center Building 1-25-1;163-0650;Tokyo;+81 3 5321 7890;info@techbridge.jp;www.techbridge.jp;JP
|
|
||||||
214;LondonDigital Agency;15 Covent Garden;WC2E 8BE;London;+44 20 7123 5555;hello@londondigital.com;www.londondigital.com;FR
|
|
||||||
215;GlobalInnovate Group;Tower 42; 25 Old Broad Street;EC2N 1HQ;London;+44 20 7987 9999;info@globalinnovate.com;www.globalinnovate.com;FR
|
|
||||||
216;DataCraft Sydney;1 Macquarie Place;2000;Sydney;+61 2 9123 4567;au@datacraft.com;www.datacraft.com;FR
|
|
||||||
217;EuroTech Solutions;Amsterdam Towers;1011 PN;Amsterdam;+31 20 765 4321;info@eurotech.nl;www.eurotech.nl;NL
|
|
||||||
218;LondonFinTech Labs;Level 39; One Canada Square;E14 5AB;London;+44 20 7555 4321;finance@londonfintech.com;www.londonfintech.com;UK
|
|
||||||
219;CloudMasters Inc;221 Main Street;94105;San Francisco;+1 415 555 1234;support@cloudmasters.com;www.cloudmasters.com;FR
|
|
||||||
220;TechVenture Capital;8 St. James's Square;SW1Y 4JU;London;+44 20 7123 7777;invest@techventure.com;www.techventure.com;FR
|
|
||||||
|
Can't render this file because it has a wrong number of fields in line 31.
|
|
|
@ -1,90 +0,0 @@
|
||||||
ID;Name;Description;stock;price;category;subcategory;Lieferzeit;EAN
|
|
||||||
DEV001;Arduino Uno R3a;The Arduino Uno R3 is a foundational microcontroller board based on the ATmega328P. It features 14 digital I/O pins, 6 analog inputs, a 16 MHz quartz crystal, USB connectivity, and a power jack. Operating voltage is 5V. It is the ideal platform for beginners in electronics and coding, widely used for prototyping, DIY projects, automation, robotics, and educational purposes. It can be programmed using the Arduino IDE.;45;22.99;Microcontroller & Development Boards;Arduino Boards;2-3 Tage;7630049200016
|
|
||||||
DEV002;Raspberry Pi 4 Model B 4GB;The new high-performance single-board computer featuring a Broadcom BCM2711, quad-core Cortex-A72 (ARM v8) 64-bit SoC running at 1.5GHz and 4GB of LPDDR4-3200 SDRAM. Connectivity includes dual-band 2.4/5.0 GHz Wi-Fi, Bluetooth 5.0, Gigabit Ethernet, two USB 3.0 ports, and two micro-HDMI ports supporting dual 4K displays. Its primary use is as a low-cost desktop computer, network-attached storage (NAS) device, media center, or embedded system for industrial applications.;28;75.50;Microcontroller & Development Boards;Raspberry Pi Boards;5-7 Tage;1931000001047
|
|
||||||
DEV003;ESP32-WROOM-312 Development Board;A powerful Wi-Fi and Bluetooth-enabled microcontroller board with dual-core Xtensa LX6 processor. Features 4MB flash memory, 520KB SRAM, 34 GPIO pins, and supports various communication protocols like I2C, I2S, SPI, and UART. Ideal for IoT projects, smart home devices, and wireless applications requiring robust connectivity and processing power.;67;12.95;Microcontroller & Development Boards;ESP32/8266 Boards;3-5 Tage;8717478034021
|
|
||||||
DEV004;STM32F407VET6 Development Board;High-performance ARM Cortex-M4 based board with DSP and FPU instructions. Features 512KB flash, 192KB RAM, USB OTG, Ethernet, and multiple timers. Operating frequency up to 168MHz. Suitable for industrial control, motor control, audio processing, and advanced embedded applications requiring high computational power.;23;35.80;Microcontroller & Development Boards;Other Microcontrollers;7-10 Tage;6940541880018
|
|
||||||
DEV005;Arduino Motor Shield Rev3;Add-on shield designed to drive inductive loads such as relays, solenoids, DC and stepper motors. Features two channels that support 2A continuous current, screw terminals for easy connection, and built-in protection diodes. Perfect for robotics projects and automation systems when used with Arduino boards.;89;24.50;Microcontroller & Development Boards;Accessories;1-2 Tage;7630049200023
|
|
||||||
DEV006;Raspberry Pi 4 Official Case;Official protective case for Raspberry Pi 4 Model B with integrated GPIO access and dedicated slots for camera and display cables. Features a modular design with three plates for easy access to ports and components. Made from high-quality white plastic with colored accents.;156;8.99;Microcontroller & Development Boards;Accessories;1-2 Tage;1931000001054
|
|
||||||
DEV007;DHT22 AM2302 Digital Sensor;A pre-calibrated digital temperature and humidity sensor module. It provides a digital signal output and features a dedicated NTC for temperature measurement and a resistive humidity sensing element. Operating voltage: 3.3V - 6V. Measurement range: Humidity 0-100% RH, Temperature -40 to 80°C. Accuracy: ±2% RH and ±0.5°C. Typical applications include HVAC systems, weather stations, environmental monitoring, home automation, and data logging projects. It is easy to interface with Arduino, Raspberry Pi, and other microcontrollers.;120;9.95;Sensors & Modules;Temperature & Humidity Sensors;1-2 Tage;8591854063228
|
|
||||||
DEV008;HC-SR05 Ultrasonic Sensor;Ultrasonic distance measurement module with 2cm to 400cm non-contact range. Operating voltage: 5V DC. Provides excellent ranging accuracy with stable readings. Uses sonar principles to determine distance to objects. Ideal for obstacle avoidance robots, parking assistance systems, and liquid level measurement.;204;3.50;Sensors & Modules;Motion & Proximity Sensors;1-2 Tage;6943185501012
|
|
||||||
DEV009;PIR Motion Sensor HC-SR501;Passive infrared motion detection sensor with adjustable sensitivity and delay time. Detection range up to 7 meters with 120-degree detection angle. Operating voltage: 4.5-20V DC. Features low power consumption and reliable performance. Perfect for security systems, automatic lighting control, and energy-saving applications.;178;4.25;Sensors & Modules;Motion & Proximity Sensors;1-2 Tage;6943185501029
|
|
||||||
DEV010;BH1750 Digital Light Sensor;Digital ambient light sensor with I2C interface and 16-bit resolution. Measurement range: 1-65535 lux. Features low power consumption and high precision. No need for external components. Ideal for display backlight control in mobile devices, automatic brightness adjustment systems, and environmental light monitoring.;95;6.80;Sensors & Modules;Light, Color & Gesture Sensors;2-3 Tage;8591854063235
|
|
||||||
DEV011;APDS-9960 Gesture Sensor;Advanced gesture detection, proximity sensing, and ambient light sensor in one module. Features I2C interface with interrupt output. Can detect simple gestures (up, down, left, right) and measure proximity up to 20cm. Perfect for touchless interfaces, interactive displays, and smart home control.;63;15.75;Sensors & Modules;Light, Color & Gesture Sensors;3-5 Tage;8717478034038
|
|
||||||
DEV012;MQ-2 Gas Sensor Module;Semiconductor gas sensor for detecting LPG, propane, hydrogen, methane, alcohol, and smoke. Analog and digital output with adjustable sensitivity. Heating voltage: 5V±0.2V. Fast response and recovery time. Suitable for gas leak detection in home and industry, air quality monitoring, and safety systems.;112;8.45;Sensors & Modules;Gas, Air Quality & Pressure Sensors;2-3 Tage;6943185501036
|
|
||||||
DEV013;BMP2810 Barometric Pressure Sensor;High-precision digital barometric pressure and temperature sensor with I2C and SPI interfaces. Pressure range: 300-1100 hPa with ±1 hPa absolute accuracy. Temperature measurement with ±1.0°C accuracy. Low power consumption. Ideal for weather stations, altitude tracking, and indoor navigation.;87;9.20;Sensors & Modules;Gas, Air Quality & Pressure Sensors;2-3 Tage;8591854063242
|
|
||||||
DEV014;NEO-6M GPS Module;GPS receiver module with built-in EEPROM and ceramic antenna. Provides accurate positioning with 2.5m accuracy. Supports up to 5Hz update rate with NMEA protocol. Operating voltage: 3.3-5V. Features low power consumption and hot start capability. Perfect for navigation systems, tracking devices, and drones.;134;18.90;Sensors & Modules;GPS & Location Modules;3-5 Tage;8717478034045
|
|
||||||
DEV015;RC522 RFID Reader Module;RFID reader/writer operating at 13.56MHz with SPI interface. Reading distance up to 5cm. Supports ISO 14443A standard tags. Operating voltage: 2.5-3.3V. Ideal for access control systems, attendance tracking, payment systems, and interactive applications.;198;7.85;Sensors & Modules;RFID & NFC Modules;1-2 Tage;6943185501043
|
|
||||||
DEV016;37-in-1 Sensor Module Kit;Comprehensive sensor kit containing 37 most popular modules including temperature, humidity, motion, light, sound, and gas sensors. Comes with tutorial CD and connection diagrams. Perfect for beginners learning electronics and IoT programming. All modules are compatible with Arduino and Raspberry Pi.;45;89.99;Sensors & Modules;Sensor Kits;5-7 Tage;7630049200030
|
|
||||||
DEV017;SG90 Micro Servo Motor;TowerPro SG90 mini servo motor with 180-degree rotation range. Operating voltage: 4.8V. Stall torque: 1.8kg/cm. Comes with plastic gears and three-wire interface (power, ground, signal). Ideal for robotics, RC models, camera positioning, and small automation projects.;312;4.75;Actuators & Output;Motors;1-2 Tage;6940541880025
|
|
||||||
DEV018;28BYJ-48 Stepper Motor with Driver;Unipolar stepper motor with ULN2003 driver board. Step angle: 5.625° x 1/64 reduction ratio. Operating voltage: 5-12V DC. Provides precise position control without feedback. Perfect for 3D printers, CNC machines, automated curtains, and precision positioning systems.;167;12.50;Actuators & Output;Motors;2-3 Tage;8591854063259
|
|
||||||
DEV019;L298N Motor Driver Module;Dual H-bridge motor driver capable of driving two DC motors or one stepper motor. Operating voltage: 5-35V. Maximum current: 2A per channel. Features logic level conversion and heat sink. Ideal for robotics projects, motor control applications, and high-power driving needs.;98;8.95;Actuators & Output;Motor Drivers & Controllers;2-3 Tage;8717478034052
|
|
||||||
DEV020;5V Relay Module;Single channel relay module with optocoupler isolation. Operating voltage: 5V. Switching capacity: 10A 250V AC or 30V DC. Features status LED and standard interface for easy connection to microcontrollers. Perfect for controlling high-voltage appliances with low-voltage circuits.;245;3.25;Actuators & Output;Relays & Switches;1-2 Tage;6943185501050
|
|
||||||
DEV021;16x2 LCD Display with I2C;Blue backlight LCD display with 16 characters x 2 lines and I2C interface module. Operating voltage: 5V. Contrast adjustable. The I2C interface reduces required GPIO pins from 6 to 2. Ideal for displaying system status, sensor readings, and user interface information.;143;14.99;Actuators & Output;Displays;2-3 Tage;7630049200047
|
|
||||||
DEV022;0.96 inch OLED Display;128x64 pixel OLED display with SSD1306 driver and I2C/SPI interface. Features high contrast, wide viewing angle, and low power consumption. Operating voltage: 3.3-5V. Perfect for projects requiring compact, high-quality graphics display.;189;10.45;Actuators & Output;Displays;2-3 Tage;1931000001061
|
|
||||||
DEV023;5mm RGB LED Common Cathode;Diffused RGB LED with common cathode configuration. Operating voltage: 2.0-2.5V (Red), 3.0-3.4V (Green/Blue). Maximum current: 20mA per color. Provides full color spectrum mixing. Ideal for status indicators, mood lighting, and visual feedback in projects.;500;0.75;Actuators & Output;LEDs & Lighting;1-2 Tage;8591854063266
|
|
||||||
DEV024;Active Buzzer Module;5V active buzzer with built-in oscillator that produces continuous sound when powered. Operating voltage: 3.3-5V. Sound output: approximately 85dB. Easy to drive with microcontroller digital pin. Perfect for alarm systems, timers, and user notification applications.;287;2.10;Actuators & Output;Buzzers & Speakers;1-2 Tage;6943185501067
|
|
||||||
DEV025;1K Ohm Resistor Pack;Assortment of 100 pieces 1K ohm 1/4W metal film resistors with 1% tolerance. Temperature coefficient: 50ppm/°C. Perfect for pull-up/pull-down resistors, voltage dividers, and current limiting in various electronic circuits.;15;4.99;Components & Parts;Resistors, Capacitors, Potentiometers;1-2 Tage;8717478034069
|
|
||||||
DEV026;100uF Electrolytic Capacitor;Radial lead electrolytic capacitor with 25V voltage rating. Operating temperature: -40°C to +85°C. Low ESR and high ripple current capability. Ideal for power supply filtering, audio circuits, and general decoupling applications.;420;0.25;Components & Parts;Resistors, Capacitors, Potentiometers;1-2 Tage;6940541880032
|
|
||||||
DEV027;10K Ohm Linear Potentiometer;Rotary potentiometer with 10K ohm resistance and linear taper. Shaft length: 15mm. Power rating: 0.5W. Features smooth rotation and reliable performance. Perfect for volume control, brightness adjustment, and parameter tuning.;195;1.20;Components & Parts;Resistors, Capacitors, Potentiometers;1-2 Tage;8591854063273
|
|
||||||
DEV028;2N2222A NPN Transistor;General purpose NPN bipolar junction transistor in TO-92 package. Collector current: 800mA max. Collector-emitter voltage: 40V max. Gain bandwidth: 250MHz. Ideal for switching and amplification applications in various electronic circuits.;876;0.35;Components & Parts;Transistors & MOSFETs;1-2 Tage;7630049200054
|
|
||||||
DEV029;IRFZ44N N-Channel MOSFET;Power MOSFET with low on-resistance and fast switching speed. Drain-source voltage: 55V. Continuous drain current: 49A. TO-220 package. Perfect for motor control, power switching, and high-current applications.;321;2.15;Components & Parts;Transistors & MOSFETs;1-2 Tage;1931000001078
|
|
||||||
DEV030;1N4007 Rectifier Diode;General purpose rectifier diode with 1000V maximum repetitive reverse voltage and 1A average forward current. DO-41 package. Ideal for power supply rectification, reverse polarity protection, and general purpose switching.;650;0.15;Components & Parts;Diodes & LEDs;1-2 Tage;8717478034076
|
|
||||||
DEV031;5mm Green LED;Diffused green LED with 20mA forward current and 2.1V forward voltage. Viewing angle: 30 degrees. Luminous intensity: 5000-8000 mcd. Perfect for status indicators, panel lights, and visual feedback in electronic projects.;1200;0.20;Components & Parts;Diodes & LEDs;1-2 Tage;6943185501074
|
|
||||||
DEV032;6x6mm Tactile Switch;Momentary push button switch with through-hole mounting. Operating force: 160±50gf. Contact resistance: <50mΩ. Life expectancy: 100,000 cycles. Ideal for user input, reset buttons, and control interfaces.;890;0.10;Components & Parts;Buttons & Switches;1-2 Tage;8591854063280
|
|
||||||
DEV033;Toggle Switch SPDT;Single pole double throw toggle switch with on-on configuration. Rating: 6A 125V AC / 3A 250V AC. Panel mount design with nut and washer. Perfect for power switching, mode selection, and circuit configuration.;134;2.95;Components & Parts;Buttons & Switches;2-3 Tage;6940541880049
|
|
||||||
DEV034;Jumper Wires Male-to-Male;Bundle of 120 pieces 20cm male-to-male jumper wires in multiple colors. 0.1 pitch. Made with high-quality Dupont connectors. Perfect for breadboard connections, prototyping, and wiring Arduino projects.;45;6.99;Components & Parts;Wires, Cables & Connectors;1-2 Tage;7630049200061
|
|
||||||
DEV035;USB Type B Cable;1.5 meter USB 2.0 Type A to Type B cable with gold-plated connectors. Data transfer speed up to 480Mbps. 28AWG power conductors. Perfect for connecting Arduino boards, printers, and other devices with Type B接口.;178;7.50;Components & Parts;Wires, Cables & Connectors;1-2 Tage;1931000001085
|
|
||||||
DEV036;400-Point Solderless Breadboard;High-quality solderless breadboard with 400 tie points. Features two power rails and 63 rows of interconnected terminals. Adhesive backing for secure mounting. Maximum voltage: 300V. Ideal for circuit prototyping and testing.;67;8.25;Components & Parts;Breadboards & Prototyping;1-2 Tage;8717478034083
|
|
||||||
DEV037;Breadboard Jumper Wire Kit;Kit containing 140 pieces of pre-cut and stripped jumper wires in various lengths and colors. Includes male-to-male, male-to-female, and female-to-female types. Organized in convenient storage box. Perfect for breadboard prototyping.;92;12.99;Components & Parts;Breadboards & Prototyping;1-2 Tage;6943185501081
|
|
||||||
DEV038;12V 2A Power Supply;Switching power adapter with 12V DC output and 2A maximum current. Input: 100-240V AC. Comes with 5.5mm x 2.1mm barrel jack connector. Short circuit and overvoltage protection. Ideal for powering Arduino projects, LED strips, and various electronics.;58;14.95;Power & Battery;Power Supplies;3-5 Tage;8591854063297
|
|
||||||
DEV039;5V 3A USB Power Supply;High-current USB power supply with 5V 3A output. Features built-in USB Type-A port and overcurrent protection. Input: 100-240V AC. Perfect for powering Raspberry Pi, high-power USB devices, and charging applications.;47;11.50;Power & Battery;Power Supplies;2-3 Tage;6940541880056
|
|
||||||
DEV040;4xAA Battery Holder;Plastic battery holder for 4 AA batteries with series connection providing 6V output. Features wire leads with stripped ends and on/off switch. Secure battery closure. Perfect for portable projects and backup power.;124;3.75;Power & Battery;Battery Holders;1-2 Tage;7630049200078
|
|
||||||
DEV041;TP4056 Lithium Charger Module;Single cell lithium battery charging module with 1A maximum charge current. Features charging status indicators and protection circuits. Input: 5V USB. Supports 3.7V Li-ion and LiPo batteries. Perfect for portable projects.;216;4.25;Power & Battery;Charging Circuits;2-3 Tage;1931000001092
|
|
||||||
DEV042;LM2596 DC-DC Buck Converter;Adjustable step-down voltage regulator module with 3A maximum output current. Input voltage: 4.5-40V. Output voltage: 1.5-35V adjustable. Efficiency up to 92%. Features overheat and short circuit protection.;189;5.95;Power & Battery;Voltage Regulators & Converters;2-3 Tage;8717478034090
|
|
||||||
DEV043;60W Soldering Station;Temperature controlled soldering station with 60W power and adjustable temperature range 200-480°C. Features ceramic heating element, sleep mode, and digital display. Comes with soldering iron stand and sponge. Perfect for electronics repair and prototyping.;34;49.99;Tools & Equipment;Soldering Equipment;5-7 Tage;6943185501098
|
|
||||||
DEV044;Digital Multimeter DT9205A;3-1/2 digit digital multimeter with LCD display. Measures AC/DC voltage, current, resistance, capacitance, frequency, and temperature. Features diode test, continuity buzzer, and data hold. Comes with test leads and carrying case.;29;38.50;Tools & Equipment;Multimeters & Test Equipment;3-5 Tage;8591854063303
|
|
||||||
DEV045;65-Piece Screwdriver Set;Precision screwdriver set with 65 pieces including various Phillips, flat, Torx, and hex bits. Magnetic tips and comfortable handle. Organized in durable carrying case. Perfect for electronics repair, smartphone disassembly, and精密 work.;56;24.95;Tools & Equipment;Tool Kits;2-3 Tage;6940541880063
|
|
||||||
DEV046;Plastic Project Enclosure 160x100x60mm;Plastic electronic project box with dimensions 160x100x60mm. Features mounting posts for PCBs, ventilation slots, and removable lid. Material: ABS plastic. Perfect for housing electronic projects and prototypes.;78;9.75;Tools & Equipment;Enclosures & Boxes;3-5 Tage;7630049200085
|
|
||||||
DEV047;Arduino Nano Every;Compact board based on the ATMega4809 with 20MHz operating frequency. Features 48KB flash, 6KB SRAM, and 22 GPIO pins. Compatible with Arduino Nano footprint. Perfect for space-constrained projects requiring Arduino compatibility.;91;18.50;Microcontroller & Development Boards;Arduino Boards;3-5 Tage;7630049200092
|
|
||||||
DEV048;Raspberry Pi Pico W;Microcontroller board with RP2040 chip and wireless connectivity. Features 264KB SRAM, 2MB flash, and 30 GPIO pins. Supports MicroPython and C/C++. Built-in Wi-Fi and Bluetooth. Ideal for IoT projects and wireless applications.;167;9.95;Microcontroller & Development Boards;Raspberry Pi Boards;2-3 Tage;1931000001108
|
|
||||||
DEV049;ESP32-CAM Development Board;ESP32 module with OV2640 camera and microSD card slot. Features 4MB flash, 520KB SRAM, and supports Wi-Fi and Bluetooth. Provides video streaming and image capture capabilities. Perfect for security cameras and IoT vision applications.;124;15.75;Microcontroller & Development Boards;ESP32/8266 Boards;3-5 Tage;8717478034106
|
|
||||||
DEV050;ATtiny85 Development Board;Compact development board based on ATtiny85 microcontroller. Features 8KB flash, 512B SRAM, and 6 GPIO pins. Operating voltage: 5V. Perfect for simple projects requiring minimal I/O and small form factor.;205;6.25;Microcontroller & Development Boards;Other Microcontrollers;2-3 Tage;6943185501104
|
|
||||||
DEV051;Arduino Ethernet Shield;Network connectivity shield for Arduino with W5500 Ethernet controller. Supports TCP/IP protocols and provides SD card slot. Operating voltage: 5V. Perfect for network-connected projects and data logging.;76;32.99;Microcontroller & Development Boards;Accessories;4-6 Tage;8591854063310
|
|
||||||
DEV052;Raspberry Pi Official Power Supply;Official 15.3W USB-C power supply for Raspberry Pi 4. Output: 5.1V DC, 3A. Features noise filtering and overcurrent protection. Includes 1.5m USB-C cable. Ensures stable power for Raspberry Pi operation.;142;11.99;Microcontroller & Development Boards;Accessories;2-3 Tage;6940541880070
|
|
||||||
DEV053;DS18B20 Waterproof Temperature Sensor;Digital temperature sensor with 1-wire interface and waterproof stainless steel probe. Measurement range: -55°C to +125°C with ±0.5°C accuracy. 1-meter cable length. Perfect for liquid temperature measurement, environmental monitoring, and industrial applications.;188;8.95;Sensors & Modules;Temperature & Humidity Sensors;2-3 Tage;7630049200108
|
|
||||||
DEV054;HC-SR501 PIR Motion Sensor;Passive infrared motion detector with adjustable time and sensitivity. Detection range: 7 meters with 120° angle. Operating voltage: 4.5-20V DC. Features low power consumption. Ideal for security systems and automatic lighting.;156;4.50;Sensors & Modules;Motion & Proximity Sensors;1-2 Tage;1931000001115
|
|
||||||
DEV055;VL53L0X Laser Distance Sensor;Time-of-flight laser ranging sensor with 2m measurement range and 1mm resolution. I2C interface. Operating voltage: 2.6-3.5V. Features high accuracy and immune to ambient light. Perfect for gesture recognition and proximity sensing.;97;14.25;Sensors & Modules;Motion & Proximity Sensors;3-5 Tage;8717478034113
|
|
||||||
DEV056;TCS34725 Color Sensor;RGB color light sensor with IR filter and white LED. I2C interface with interrupt output. Provides clear, red, green, blue, and lux measurements. Perfect for color sorting, ambient light sensing, and display calibration.;84;13.75;Sensors & Modules;Light, Color & Gesture Sensors;2-3 Tage;6943185501111
|
|
||||||
DEV057;VCNL4040 Proximity Sensor;Integrated proximity and ambient light sensor with I2C interface. Proximity range: 0-200mm. Features interrupt function and low power consumption. Perfect for touchless interfaces and presence detection.;119;9.80;Sensors & Modules;Light, Color & Gesture Sensors;2-3 Tage;8591854063327
|
|
||||||
DEV058;MQ-135 Air Quality Sensor;Semiconductor sensor for detecting harmful gases like NH3, NOx, alcohol, benzene, and CO2. Analog output with adjustable sensitivity. Heating voltage: 5V±0.1V. Suitable for air quality monitoring and environmental detection.;145;7.25;Sensors & Modules;Gas, Air Quality & Pressure Sensors;2-3 Tage;6940541880087
|
|
||||||
DEV059;BME280 Environmental Sensor;Integrated environmental sensor measuring temperature, humidity, and barometric pressure. I2C/SPI interfaces. Operating voltage: 1.8-3.6V. Low power consumption. Ideal for weather stations and environmental monitoring.;132;14.50;Sensors & Modules;Gas, Air Quality & Pressure Sensors;3-5 Tage;7630049200115
|
|
||||||
DEV060;U-blox NEO-M8N GPS Module;High-performance GPS module with 72 channels and 2.5m accuracy. Supports GPS, GLONASS, and BeiDou systems. Update rate: up to 10Hz. Perfect for drones, navigation systems, and precision tracking.;89;26.95;Sensors & Modules;GPS & Location Modules;4-6 Tage;1931000001122
|
|
||||||
DEV061;PN532 NFC RFID Module;NFC/RFID reader/writer supporting ISO 14443A/B, ISO 18092, and FeliCa protocols. Operating frequency: 13.56MHz. Interfaces: I2C, SPI, HSU. Reading distance: up to 5cm. Ideal for contactless payment and access control.;107;18.75;Sensors & Modules;RFID & NFC Modules;3-5 Tage;8717478034120
|
|
||||||
DEV062;Arduino Sensor Kit;Complete sensor kit containing 37 modules compatible with Arduino. Includes tutorials and code examples. Covers basic to advanced sensors. Perfect for educational purposes and learning electronics.;68;79.99;Sensors & Modules;Sensor Kits;5-7 Tage;6943185501128
|
|
||||||
DEV063;NEMA 17 Stepper Motor;Bipolar stepper motor with 1.8° step angle and 42mm frame size. Holding torque: 40Ncm. Current: 1.2A per phase. 4-wire connection. Perfect for 3D printers, CNC machines, and precision positioning systems.;45;28.95;Actuators & Output;Motors;4-6 Tage;8591854063334
|
|
||||||
DEV064;L293D Motor Driver IC;Quadruple half-H driver for bidirectional DC motor control. Operating voltage: 4.5-36V. Output current: 600mA per channel. DIP-16 package. Perfect for controlling small motors and solenoids.;213;3.45;Actuators & Output;Motor Drivers & Controllers;1-2 Tage;6940541880094
|
|
||||||
DEV065;5V 4-Channel Relay Module;4-channel relay module with optocoupler isolation and status LEDs. Operating voltage: 5V. Switching capacity: 10A 250V AC per channel. Features screw terminals and standard control interface.;124;15.50;Actuators & Output;Relays & Switches;2-3 Tage;7630049200122
|
|
||||||
DEV066;20x4 LCD Display with I2C;Large LCD display with 20 characters x 4 lines and I2C interface. Blue backlight with adjustable contrast. Operating voltage: 5V. Perfect for projects requiring extensive text display.;87;19.95;Actuators & Output;Displays;3-5 Tage;1931000001139
|
|
||||||
DEV067;1.3 inch IPS LCD Display;1.3 inch IPS display with 240x240 resolution and ST7789 driver. SPI interface with 65K colors. Operating voltage: 3.3V. Features high brightness and wide viewing angle. Perfect for graphics and GUI applications.;134;16.75;Actuators & Output;Displays;3-5 Tage;8717478034137
|
|
||||||
DEV068;WS2812B RGB LED Strip;Addressable RGB LED strip with 30 LEDs per meter. Each LED individually controllable via single-wire protocol. Operating voltage: 5V. Perfect for decorative lighting, art installations, and visual effects.;78;18.50;Actuators & Output;LEDs & Lighting;2-3 Tage;6943185501135
|
|
||||||
DEV069;Piezo Buzzer Element;Passive piezo buzzer without internal oscillator. Requires external driver circuit. Operating voltage: 3-20V. Resonant frequency: 4kHz. Compact size. Ideal for custom tone generation and audio projects.;345;1.25;Actuators & Output;Buzzers & Speakers;1-2 Tage;8591854063341
|
|
||||||
DEV070;Assorted Resistor Kit;Comprehensive resistor kit with 1000 pieces covering values from 10 ohm to 1M ohm. 1/4W metal film with 1% tolerance. Organized in storage box with value labels. Perfect for electronics projects and repairs.;28;29.99;Components & Parts;Resistors, Capacitors, Potentiometers;2-3 Tage;6940541880100
|
|
||||||
DEV071;100nF Ceramic Capacitor;Multilayer ceramic capacitor with 100nF capacitance and 50V rating. X7R dielectric material. Through-hole design. Ideal for decoupling, filtering, and timing applications.;1200;0.15;Components & Parts;Resistors, Capacitors, Potentiometers;1-2 Tage;7630049200139
|
|
||||||
DEV072;200K Logarithmic Potentiometer;Audio taper potentiometer with 100K ohm resistance. Shaft length: 20mm. Power rating: 0.5W. Smooth rotation with logarithmic response. Perfect for volume controls and audio applications.;167;2.25;Components & Parts;Resistors, Capacitors, Potentiometers;1-2 Tage;1931000001146
|
|
||||||
DEV073;BC547 NPN Transistor;General purpose NPN transistor in TO-92 package. Collector current: 100mA max. Collector-emitter voltage: 45V. DC current gain: 110-800. Ideal for amplification and switching applications.;954;0.25;Components & Parts;Transistors & MOSFETs;1-2 Tage;8717478034144
|
|
||||||
DEV074;IRF540N N-Channel MOSFET;Power MOSFET with 100V drain-source voltage and 33A continuous drain current. Low on-resistance: 44mΩ. TO-220 package. Perfect for high-power switching and motor control applications.;189;3.75;Components & Parts;Transistors & MOSFETs;1-2 Tage;6943185501142
|
|
||||||
DEV075;1N4148 Switching Diode;Fast switching diode with 100V reverse voltage and 200mA forward current. Switching speed: 4ns. DO-35 package. Ideal for high-speed switching, protection circuits, and signal processing.;875;0.12;Components & Parts;Diodes & LEDs;1-2 Tage;8591854063358
|
|
||||||
DEV076;5mm Red LED;Standard red LED with 20mA forward current and 2.0V forward voltage. Viewing angle: 30 degrees. Luminous intensity: 2000-4000 mcd. Perfect for indicators and visual feedback.;1500;0.18;Components & Parts;Diodes & LEDs;1-2 Tage;6940541880117
|
|
||||||
DEV077;12mm Push Button Switch;Momentary push button switch with LED illumination. Operating voltage: 12V DC. Contact rating: 3A 125V AC. Panel mount design. Available in multiple colors. Perfect for control panels and user interfaces.;234;2.95;Components & Parts;Buttons & Switches;2-3 Tage;7630049200146
|
|
||||||
DEV078;DIP Switch 8 Position;8-position dual in-line package switch with through-hole mounting. Rating: 50mA 24V DC. Compact size. Ideal for configuration settings and mode selection in electronic circuits.;187;1.85;Components & Parts;Buttons & Switches;1-2 Tage;1931000001153
|
|
||||||
DEV079;Jumper Wires Female-to-Female;Bundle of 120 pieces 20cm female-to-female jumper wires in multiple colors. 0.1 pitch. High-quality Dupont connectors. Perfect for connecting modules and sensors to development boards.;67;6.99;Components & Parts;Wires, Cables & Connectors;1-2 Tage;8717478034151
|
|
||||||
DEV080;Micro USB Cable;1-meter Micro USB to USB Type-A cable with gold-plated connectors. Data transfer and charging capable. 28AWG power conductors. Perfect for connecting various electronic devices and charging.;245;5.50;Components & Parts;Wires, Cables & Connectors;1-2 Tage;6943185501159
|
|
||||||
DEV081;830-Point Breadboard;Large solderless breadboard with 830 tie points. Features four power rails and 63 rows of terminals. Adhesive backing. Maximum voltage: 300V. Ideal for complex circuit prototyping.;54;12.95;Components & Parts;Breadboards & Prototyping;2-3 Tage;8591854063365
|
|
||||||
DEV082;Breadboard Power Supply Module;3.3V/5V breadboard power supply module with USB input. Maximum output current: 700mA. Features LED indicators and on/off switch. Perfect for providing stable power to breadboard projects.;138;8.45;Components & Parts;Breadboards & Prototyping;2-3 Tage;6940541880124
|
|
||||||
DEV083;9V 1A Power Supply;Wall adapter with 9V DC output and 1A maximum current. Input: 100-240V AC. 5.5mm x 2.1mm barrel jack. Short circuit protection. Ideal for powering effects pedals and various electronics.;89;9.99;Power & Battery;Power Supplies;2-3 Tage;7630049200153
|
|
||||||
DEV084;USB-C Power Delivery Module;USB-C power delivery module with adjustable voltage output (5V, 9V, 12V, 15V, 20V). Maximum power: 100W. Features digital display and multiple protection circuits. Perfect for modern power requirements.;76;22.50;Power & Battery;Power Supplies;3-5 Tage;1931000001160
|
|
||||||
DEV085;18650 Battery Holder;Dual 18650 battery holder with series/parallel switch. Provides 3.7V (parallel) or 7.4V (series) output. Features built-in protection circuit and power switch. Perfect for lithium battery projects.;112;6.95;Power & Battery;Battery Holders;2-3 Tage;8717478034168
|
|
||||||
DEV086;TP5100 2A Lithium Charger;Dual lithium battery charger module with 2A maximum charge current. Supports 3.7V Li-ion and LiPo batteries. Input: 5-12V. Features charging status indicators. Perfect for high-capacity battery charging.;98;7.25;Power & Battery;Charging Circuits;2-3 Tage;6943185501166
|
|
||||||
DEV087;LM317 Adjustable Voltage Regulator;Adjustable linear voltage regulator with 1.5A output current. Output voltage: 1.25-37V. Features overcurrent and thermal protection. TO-220 package. Perfect for custom power supply designs.;167;2.95;Power & Battery;Voltage Regulators & Converters;1-2 Tage;8591854063372
|
|
||||||
DEV088;Temperature Controlled Soldering Iron;60W temperature controlled soldering iron with adjustable temperature 200-450°C. Features ceramic heater and quick heat-up time. Includes stand and spare tips. Perfect for basic soldering tasks.;45;35.99;Tools & Equipment;Soldering Equipment;3-5 Tage;6940541880131
|
|
||||||
DEV089;Auto-Ranging Multimeter;True RMS auto-ranging digital multimeter with 6000 counts. Measures AC/DC voltage, current, resistance, capacitance, frequency, and temperature. Features backlit display and data hold.;38;59.95;Tools & Equipment;Multimeters & Test Equipment;4-6 Tage;7630049200160
|
|
||||||
|
File diff suppressed because it is too large
Load diff
13
imixs-cloud.sh
Executable file
13
imixs-cloud.sh
Executable file
|
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
############################################################
|
||||||
|
# Push build into imixs-cloud repo
|
||||||
|
#
|
||||||
|
############################################################
|
||||||
|
|
||||||
|
# build
|
||||||
|
./build.sh
|
||||||
|
|
||||||
|
# push
|
||||||
|
docker tag imixs/dynamixs-super-office:latest registry.tikal.imixs.com/imixs/dynamixs-super-office:latest
|
||||||
|
docker push registry.tikal.imixs.com/imixs/dynamixs-super-office:latest
|
||||||
413
pom.xml
413
pom.xml
|
|
@ -26,41 +26,30 @@
|
||||||
<custom.webResources>src/main/webapp</custom.webResources>
|
<custom.webResources>src/main/webapp</custom.webResources>
|
||||||
<custom.unpackTypes>war</custom.unpackTypes>
|
<custom.unpackTypes>war</custom.unpackTypes>
|
||||||
|
|
||||||
<!-- Build Time -->
|
<!-- =========================================================
|
||||||
<org.imixs.build.timestamp>${maven.build.timestamp}</org.imixs.build.timestamp>
|
STEP 2: Set the Dynamixs.AI platform version you target.
|
||||||
<maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
|
Ask your Dynamixs.AI partner contact for the current version.
|
||||||
<jakarta.faces.project_stage>Production</jakarta.faces.project_stage>
|
========================================================= -->
|
||||||
|
<ai.dynamixs.version>1.0.4-SNAPSHOT</ai.dynamixs.version>
|
||||||
|
<org.imixs.workflow.version>6.2.10-SNAPSHOT</org.imixs.workflow.version>
|
||||||
|
<org.imixs.office.version>5.1.12-SNAPSHOT</org.imixs.office.version>
|
||||||
|
<org.imixs.data.version>1.0.5-SNAPSHOT</org.imixs.data.version>
|
||||||
|
<org.imixs.adapter.version>3.2.5</org.imixs.adapter.version>
|
||||||
|
<org.imixs.security.version>3.0.2</org.imixs.security.version>
|
||||||
|
|
||||||
<!-- Dependency Versions -->
|
<!-- Jakarta EE -->
|
||||||
<jakarta.version>10.0.0</jakarta.version>
|
<jakarta.version>10.0.0</jakarta.version>
|
||||||
<microprofile.version>6.0</microprofile.version>
|
<microprofile.version>6.0</microprofile.version>
|
||||||
<ai.dynamixs.version>1.0.2-SNAPSHOT</ai.dynamixs.version>
|
|
||||||
<org.imixs.office.version>5.1.9-SNAPSHOT</org.imixs.office.version>
|
|
||||||
<org.imixs.marty.version>5.2.0</org.imixs.marty.version>
|
|
||||||
<org.imixs.workflow.version>6.2.8-SNAPSHOT</org.imixs.workflow.version>
|
|
||||||
<org.imixs.security.version>3.0.2</org.imixs.security.version>
|
|
||||||
<org.imixs.archive.version>3.1.3</org.imixs.archive.version>
|
|
||||||
<org.imixs.adapter.version>3.2.2</org.imixs.adapter.version>
|
|
||||||
<org.imixs.data.version>1.0.2</org.imixs.data.version>
|
|
||||||
<org.imixs.ai.version>1.1.9-SNAPSHOT</org.imixs.ai.version>
|
|
||||||
<apache.pdfbox.version>2.0.24</apache.pdfbox.version>
|
|
||||||
|
|
||||||
<!-- Wildfly unpack war -->
|
|
||||||
<custom.unpackTypes>war</custom.unpackTypes>
|
|
||||||
<jakarta.faces.project_stage>Production</jakarta.faces.project_stage>
|
|
||||||
<imixs-office.applicationname>dynamixs-super-office</imixs-office.applicationname>
|
|
||||||
<org.imixs.docker.registry>registry.tikal.imixs.com</org.imixs.docker.registry>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Environment Settings -->
|
|
||||||
<imixs-office.contextroot>/</imixs-office.contextroot>
|
|
||||||
<imixs-office.realm>imixsrealm</imixs-office.realm>
|
|
||||||
<imixs-office.jta-data-source>jdbc/office</imixs-office.jta-data-source>
|
|
||||||
<imixs-office.IndexDir>lucene/office-workflow-index</imixs-office.IndexDir>
|
|
||||||
<imixs-mail-res-ref-name>java:/mail/org.imixs.workflow.mail</imixs-mail-res-ref-name>
|
|
||||||
|
|
||||||
|
<!-- The final WAR name - this will be the context root on Wildfly -->
|
||||||
|
<custom.applicationname>dynamixs-super-office</custom.applicationname>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
<!-- =========================================================
|
||||||
|
Repositories
|
||||||
|
- Imixs SNAPSHOT artifacts are on Sonatype (public)
|
||||||
|
- Dynamixs.AI artifacts are on GitHub Packages (partner access required)
|
||||||
|
========================================================= -->
|
||||||
<repositories>
|
<repositories>
|
||||||
<repository>
|
<repository>
|
||||||
<id>oss-snapshots</id>
|
<id>oss-snapshots</id>
|
||||||
|
|
@ -68,11 +57,56 @@
|
||||||
<snapshots>
|
<snapshots>
|
||||||
<enabled>true</enabled>
|
<enabled>true</enabled>
|
||||||
</snapshots>
|
</snapshots>
|
||||||
|
<releases>
|
||||||
|
<enabled>false</enabled>
|
||||||
|
</releases>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>github-dynamixs</id>
|
||||||
|
<name>Dynamixs.AI GitHub Packages</name>
|
||||||
|
<url>https://maven.pkg.github.com/dynamixs-ai/dynamixs-platform-repo</url>
|
||||||
|
<snapshots>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</snapshots>
|
||||||
|
<releases>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</releases>
|
||||||
</repository>
|
</repository>
|
||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
|
|
||||||
<profiles>
|
<profiles>
|
||||||
|
<profile>
|
||||||
|
<id>docker</id>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-antrun-plugin</artifactId>
|
||||||
|
<version>1.8</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>install</phase>
|
||||||
|
<configuration>
|
||||||
|
<target>
|
||||||
|
<exec executable="docker">
|
||||||
|
<arg value="build" />
|
||||||
|
<arg value="-t" />
|
||||||
|
<arg value="imixs/${custom.applicationname}" />
|
||||||
|
<arg value="./" />
|
||||||
|
</exec>
|
||||||
|
</target>
|
||||||
|
</configuration>
|
||||||
|
<goals>
|
||||||
|
<goal>run</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</profile>
|
||||||
|
|
||||||
<profile>
|
<profile>
|
||||||
<id>debug</id>
|
<id>debug</id>
|
||||||
<build>
|
<build>
|
||||||
|
|
@ -91,7 +125,7 @@
|
||||||
<arg value="-f" />
|
<arg value="-f" />
|
||||||
<arg value="./Dockerfile-debug" />
|
<arg value="./Dockerfile-debug" />
|
||||||
<arg value="-t" />
|
<arg value="-t" />
|
||||||
<arg value="imixs/${imixs-office.applicationname}" />
|
<arg value="imixs/${custom.applicationname}" />
|
||||||
<arg value="./." />
|
<arg value="./." />
|
||||||
</exec>
|
</exec>
|
||||||
</target>
|
</target>
|
||||||
|
|
@ -141,21 +175,8 @@
|
||||||
<exec executable="docker">
|
<exec executable="docker">
|
||||||
<arg value="build" />
|
<arg value="build" />
|
||||||
<arg value="-t" />
|
<arg value="-t" />
|
||||||
<arg
|
<arg value="imixs/${custom.applicationname}" />
|
||||||
value="imixs/${imixs-office.applicationname}:${project.version}" />
|
<arg value="./" />
|
||||||
<arg value="./." />
|
|
||||||
</exec>
|
|
||||||
<exec executable="docker">
|
|
||||||
<arg value="tag" />
|
|
||||||
<arg
|
|
||||||
value="imixs/${imixs-office.applicationname}:${project.version}" />
|
|
||||||
<arg
|
|
||||||
value="${org.imixs.docker.registry}/imixs/${imixs-office.applicationname}:${project.version}" />
|
|
||||||
</exec>
|
|
||||||
<exec executable="docker">
|
|
||||||
<arg value="push" />
|
|
||||||
<arg
|
|
||||||
value="${org.imixs.docker.registry}/imixs/${imixs-office.applicationname}:${project.version}" />
|
|
||||||
</exec>
|
</exec>
|
||||||
</target>
|
</target>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
@ -169,113 +190,57 @@
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
</profile>
|
</profile>
|
||||||
|
|
||||||
</profiles>
|
</profiles>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
<build>
|
<!-- =========================================================
|
||||||
<resources>
|
Dynamixs.AI Platform Core
|
||||||
<!-- enable resource filtering for multi language version -->
|
Contains all platform services, CDI beans, REST endpoints,
|
||||||
<resource>
|
AI integration and workflow engine extensions.
|
||||||
<directory>src/main/resources</directory>
|
========================================================= -->
|
||||||
<filtering>true</filtering>
|
<dependency>
|
||||||
</resource>
|
<groupId>ai.dynamixs</groupId>
|
||||||
</resources>
|
<artifactId>dynamixs-platform-core</artifactId>
|
||||||
<plugins>
|
<version>${ai.dynamixs.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- use JDK settings for compiling -->
|
<!-- =========================================================
|
||||||
<plugin>
|
Dynamixs.AI Platform UI - WAR Overlay Base
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
This is the base web application. Your files in
|
||||||
<version>3.8.1</version>
|
src/main/webapp/ will override files from this WAR.
|
||||||
<configuration>
|
========================================================= -->
|
||||||
<source>${java.source}</source>
|
<dependency>
|
||||||
<target>${java.target}</target>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-war-plugin</artifactId>
|
|
||||||
<version>3.3.1</version>
|
|
||||||
<configuration>
|
|
||||||
<failOnMissingWebXml>false</failOnMissingWebXml>
|
|
||||||
<webResources>
|
|
||||||
<resource>
|
|
||||||
<filtering>true</filtering>
|
|
||||||
<!-- this is relative to the pom.xml directory -->
|
|
||||||
<directory>${custom.webResources}</directory>
|
|
||||||
<includes>
|
|
||||||
<include>**/WEB-INF/*</include>
|
|
||||||
<!-- include any other file types you want to filter -->
|
|
||||||
</includes>
|
|
||||||
</resource>
|
|
||||||
</webResources>
|
|
||||||
<overlays>
|
|
||||||
<!-- Exclude libs from overlay project -->
|
|
||||||
<overlay>
|
|
||||||
<groupId>ai.dynamixs</groupId>
|
<groupId>ai.dynamixs</groupId>
|
||||||
<artifactId>dynamixs-platform-ui</artifactId>
|
<artifactId>dynamixs-platform-ui</artifactId>
|
||||||
<excludes>
|
<version>${ai.dynamixs.version}</version>
|
||||||
<exclude>WEB-INF/lib/*.jar</exclude>
|
<type>war</type>
|
||||||
</excludes>
|
<scope>runtime</scope>
|
||||||
</overlay>
|
</dependency>
|
||||||
</overlays>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
<plugin>
|
<!-- =========================================================
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
STEP 3: Add your customer-specific dependencies here.
|
||||||
<artifactId>maven-resources-plugin</artifactId>
|
Examples: ERP connectors, custom REST clients, etc.
|
||||||
<version>2.6</version>
|
This code is owned by your customer - not by Dynamixs.AI.
|
||||||
<configuration>
|
========================================================= -->
|
||||||
<encoding>${project.build.sourceEncoding}</encoding>
|
<!--
|
||||||
</configuration>
|
<dependency>
|
||||||
</plugin>
|
<groupId>com.acme</groupId>
|
||||||
|
<artifactId>sap-connector</artifactId>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
</dependency>
|
||||||
|
-->
|
||||||
|
|
||||||
<plugin>
|
<!-- Jakarta EE API - provided by Wildfly at runtime -->
|
||||||
<groupId>org.imixs.maven</groupId>
|
|
||||||
<artifactId>manik-hotdeploy-maven-plugin</artifactId>
|
|
||||||
<version>2.0.0</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<phase>install</phase>
|
|
||||||
<goals>
|
|
||||||
<goal>deploy</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
<configuration>
|
|
||||||
<!-- List Source and Target folders for Autodeploy and Hotdeploy -->
|
|
||||||
<autodeployments>
|
|
||||||
<deployment>
|
|
||||||
<!-- wildcard deployment -->
|
|
||||||
<source>target/*.{war,ear,jar}</source>
|
|
||||||
<target>./docker/deployments/</target>
|
|
||||||
<unpack>true</unpack>
|
|
||||||
</deployment>
|
|
||||||
</autodeployments>
|
|
||||||
<hotdeployments>
|
|
||||||
<deployment>
|
|
||||||
<source>src/main/webapp</source>
|
|
||||||
<target>./docker/deployments/${imixs-office.applicationname}.war</target>
|
|
||||||
</deployment>
|
|
||||||
</hotdeployments>
|
|
||||||
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
|
|
||||||
<finalName>${imixs-office.applicationname}</finalName>
|
|
||||||
</build>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<!-- Jakarta EE -->
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>jakarta.platform</groupId>
|
<groupId>jakarta.platform</groupId>
|
||||||
<artifactId>jakarta.jakartaee-api</artifactId>
|
<artifactId>jakarta.jakartaee-api</artifactId>
|
||||||
<version>${jakarta.version}</version>
|
<version>${jakarta.version}</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- Microprofile -->
|
|
||||||
|
<!-- Microprofile - provided by Wildfly at runtime -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.microprofile</groupId>
|
<groupId>org.eclipse.microprofile</groupId>
|
||||||
<artifactId>microprofile</artifactId>
|
<artifactId>microprofile</artifactId>
|
||||||
|
|
@ -285,90 +250,43 @@
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
<!-- Imixs-Office-Workflow -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-office-workflow-app</artifactId>
|
|
||||||
<type>war</type>
|
|
||||||
<version>${org.imixs.office.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-office-workflow-util</artifactId>
|
|
||||||
<version>${org.imixs.office.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- Dynamixs.AI Plattform Overlay -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>ai.dynamixs</groupId>
|
|
||||||
<artifactId>dynamixs-platform-ui</artifactId>
|
|
||||||
<type>war</type>
|
|
||||||
<version>${ai.dynamixs.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Imixs Workflow -->
|
<!-- Imixs Workflow -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.imixs.workflow</groupId>
|
<groupId>org.imixs.workflow</groupId>
|
||||||
<artifactId>imixs-workflow-core</artifactId>
|
<artifactId>imixs-workflow-core</artifactId>
|
||||||
<type>jar</type>
|
<type>jar</type>
|
||||||
<version>${org.imixs.workflow.version}</version>
|
<version>${org.imixs.workflow.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.imixs.workflow</groupId>
|
<groupId>org.imixs.workflow</groupId>
|
||||||
<artifactId>imixs-workflow-engine</artifactId>
|
<artifactId>imixs-workflow-engine</artifactId>
|
||||||
<type>jar</type>
|
<type>jar</type>
|
||||||
<version>${org.imixs.workflow.version}</version>
|
<version>${org.imixs.workflow.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.imixs.workflow</groupId>
|
<groupId>org.imixs.workflow</groupId>
|
||||||
<artifactId>imixs-workflow-jax-rs</artifactId>
|
<artifactId>imixs-workflow-jax-rs</artifactId>
|
||||||
<type>jar</type>
|
<type>jar</type>
|
||||||
<version>${org.imixs.workflow.version}</version>
|
<version>${org.imixs.workflow.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.imixs.workflow</groupId>
|
<groupId>org.imixs.workflow</groupId>
|
||||||
<artifactId>imixs-workflow-faces</artifactId>
|
<artifactId>imixs-workflow-faces</artifactId>
|
||||||
<type>jar</type>
|
<type>jar</type>
|
||||||
<version>${org.imixs.workflow.version}</version>
|
<version>${org.imixs.workflow.version}</version>
|
||||||
</dependency>
|
<scope>provided</scope>
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-workflow-index-lucene</artifactId>
|
|
||||||
<version>${org.imixs.workflow.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- Imixs-Archive -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-archive-api</artifactId>
|
|
||||||
<version>${org.imixs.archive.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<!-- Marty -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-marty</artifactId>
|
|
||||||
<version>${org.imixs.marty.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.pdfbox</groupId>
|
|
||||||
<artifactId>pdfbox</artifactId>
|
|
||||||
<version>${apache.pdfbox.version}</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
<!-- Imixs-Wopi -->
|
<!-- Imixs-Office-Workflow Overlay -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.imixs.workflow</groupId>
|
<groupId>org.imixs.workflow</groupId>
|
||||||
<artifactId>imixs-adapters-wopi</artifactId>
|
<artifactId>imixs-office-workflow-util</artifactId>
|
||||||
<version>${org.imixs.adapter.version}</version>
|
<version>${org.imixs.office.version}</version>
|
||||||
</dependency>
|
<scope>provided</scope>
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-adapters-odf</artifactId>
|
|
||||||
<version>${org.imixs.adapter.version}</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -393,42 +311,123 @@
|
||||||
<groupId>org.imixs.workflow</groupId>
|
<groupId>org.imixs.workflow</groupId>
|
||||||
<artifactId>imixs-adapters-poi</artifactId>
|
<artifactId>imixs-adapters-poi</artifactId>
|
||||||
<version>${org.imixs.adapter.version}</version>
|
<version>${org.imixs.adapter.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.imixs.workflow</groupId>
|
||||||
|
<artifactId>imixs-adapters-odf</artifactId>
|
||||||
|
<version>${org.imixs.adapter.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
<!-- Imixs Data -->
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.imixs.workflow</groupId>
|
<groupId>org.imixs.workflow</groupId>
|
||||||
<artifactId>imixs-data-groups</artifactId>
|
<artifactId>imixs-data-groups</artifactId>
|
||||||
<version>${org.imixs.data.version}</version>
|
<version>${org.imixs.data.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.imixs.workflow</groupId>
|
<groupId>org.imixs.workflow</groupId>
|
||||||
<artifactId>imixs-data-views</artifactId>
|
<artifactId>imixs-data-views</artifactId>
|
||||||
<version>${org.imixs.data.version}</version>
|
<version>${org.imixs.data.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.imixs.workflow</groupId>
|
<groupId>org.imixs.workflow</groupId>
|
||||||
<artifactId>imixs-data-documents</artifactId>
|
<artifactId>imixs-data-documents</artifactId>
|
||||||
<version>${org.imixs.data.version}</version>
|
<version>${org.imixs.data.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.imixs.workflow</groupId>
|
<groupId>org.imixs.workflow</groupId>
|
||||||
<artifactId>imixs-data-importer</artifactId>
|
<artifactId>imixs-data-importer</artifactId>
|
||||||
<version>${org.imixs.data.version}</version>
|
<version>${org.imixs.data.version}</version>
|
||||||
</dependency>
|
<scope>provided</scope>
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.pdfbox</groupId>
|
|
||||||
<artifactId>pdfbox</artifactId>
|
|
||||||
<version>${apache.pdfbox.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- Imixs-AI -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-ai-workflow</artifactId>
|
|
||||||
<version>${org.imixs.ai.version}</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<finalName>${custom.applicationname}</finalName>
|
||||||
|
|
||||||
|
<plugins>
|
||||||
|
<!-- Use JDK settings for compiling -->
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.8.1</version>
|
||||||
|
<configuration>
|
||||||
|
<source>${java.source}</source>
|
||||||
|
<target>${java.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<!-- WAR Overlay: dynamixs-platform-ui is the base layer.
|
||||||
|
Files in src/main/webapp/ take precedence and override
|
||||||
|
anything from the base WAR. -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-war-plugin</artifactId>
|
||||||
|
<version>3.3.1</version>
|
||||||
|
<configuration>
|
||||||
|
<failOnMissingWebXml>false</failOnMissingWebXml>
|
||||||
|
<webResources>
|
||||||
|
<resource>
|
||||||
|
<filtering>true</filtering>
|
||||||
|
<!-- this is relative to the pom.xml directory -->
|
||||||
|
<directory>${custom.webResources}</directory>
|
||||||
|
<includes>
|
||||||
|
<include>**/WEB-INF/*</include>
|
||||||
|
<!-- include any other file types you want to filter -->
|
||||||
|
</includes>
|
||||||
|
</resource>
|
||||||
|
</webResources>
|
||||||
|
|
||||||
|
<!-- We exclude libs form the parent WAR artifact
|
||||||
|
<workDirectory>target/overlay-war-folder</workDirectory>
|
||||||
|
<overlays>
|
||||||
|
<overlay>
|
||||||
|
<groupId>ai.dynamixs</groupId>
|
||||||
|
<artifactId>dynamixs-platform-ui</artifactId>
|
||||||
|
<excludes>
|
||||||
|
<exclude>WEB-INF/lib/*.jar</exclude>
|
||||||
|
</excludes>
|
||||||
|
</overlay>
|
||||||
|
</overlays>
|
||||||
|
-->
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<!-- Hot deployment to local Wildfly Docker instance -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.imixs.maven</groupId>
|
||||||
|
<artifactId>manik-hotdeploy-maven-plugin</artifactId>
|
||||||
|
<version>2.0.0</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>install</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>deploy</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<autodeployments>
|
||||||
|
<deployment>
|
||||||
|
<source>target/*.{war,ear,jar}</source>
|
||||||
|
<target>docker/deployments/</target>
|
||||||
|
<unpack>true</unpack>
|
||||||
|
</deployment>
|
||||||
|
</autodeployments>
|
||||||
|
<hotdeployments>
|
||||||
|
<deployment>
|
||||||
|
<source>src/main/webapp</source>
|
||||||
|
<target>docker/deployments/${custom.applicationname}.war</target>
|
||||||
|
</deployment>
|
||||||
|
</hotdeployments>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
7
reports/requirements-accounting.imixs-report
Normal file
7
reports/requirements-accounting.imixs-report
Normal file
File diff suppressed because one or more lines are too long
130
reports/requirements-accounting.xsl
Normal file
130
reports/requirements-accounting.xsl
Normal file
|
|
@ -0,0 +1,130 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE xsl:stylesheet [
|
||||||
|
<!ENTITY bdquo "" ><!ENTITY quot "" ><!ENTITY uuml "ü" ><!ENTITY auml "ä" ><!ENTITY ouml "ö" ><!ENTITY Uuml "Ü" ><!ENTITY Auml "Ä" ><!ENTITY Ouml "Ö" ><!ENTITY szlig "ß" ><!ENTITY nbsp " " ><!ENTITY lt "" >
|
||||||
|
<!ENTITY gt "" >]><xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
|
||||||
|
<xsl:output method="html" media-type="text/html" indent="no"
|
||||||
|
encoding="UTF-8" /> <xsl:decimal-format
|
||||||
|
name="euro" decimal-separator="," grouping-separator="." /> <xsl:variable
|
||||||
|
name="currenttime" select="current-dateTime()" /> <xsl:template
|
||||||
|
match="/"> <html> <head> <meta name="viewport"
|
||||||
|
content="width=device-width" /> <meta
|
||||||
|
http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Imixs
|
||||||
|
Software Solutions GmbH</title> <link
|
||||||
|
href="../../layout/css/imixs-basic.css" charset="UTF-8" type="text/css" rel="stylesheet" /> <link
|
||||||
|
href="../../layout/css/imixs-layout.css" charset="UTF-8" type="text/css" rel="stylesheet" /> <link
|
||||||
|
href="../../layout/css/office-theme-print.css" charset="UTF-8" type="text/css" rel="stylesheet"
|
||||||
|
/> <link
|
||||||
|
href="../../layout/css/custom.css" charset="UTF-8" type="text/css" rel="stylesheet" /> <link
|
||||||
|
href="../../custom-print.css" charset="UTF-8" type="text/css" rel="stylesheet" /> <style>
|
||||||
|
.toolbar.branding { font-size:1.75rem; } h2 { font-size:1.7em; } .small { font-size:65%; }
|
||||||
|
#imixs-content { padding:10px; } #header { background-color: #FFF; color: #333; border-bottom:
|
||||||
|
1px solid #333; padding:0; } .imixs-requirement { margin-top:20px; margin-bottom:40px; }
|
||||||
|
.imixs-requirement h4 { border-bottom: 1px solid #333; } .imixs-table { width: 100%;
|
||||||
|
margin-bottom:4em; } @media print { body {font-size:0.66em;} } </style> </head> <body> <!--
|
||||||
|
content --> <div
|
||||||
|
id="container"> <div id="imixs-content"> <!-- generate
|
||||||
|
Header --> <xsl:apply-templates
|
||||||
|
select="/data/document[normalize-space(item[@name = '$workflowgroup'
|
||||||
|
] /value) = 'Auftrag']" /> <!-- body -->
|
||||||
|
<xsl:apply-templates
|
||||||
|
select="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'Requirement']" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</xsl:template> <!--
|
||||||
|
Header Template -->
|
||||||
|
<xsl:template
|
||||||
|
match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'Auftrag']">
|
||||||
|
<div id="header">
|
||||||
|
<div id="imixs-servicenav">
|
||||||
|
<div class="toolbar branding" style="float:left;">
|
||||||
|
<span> Auftrag - <xsl:value-of select="item[@name='numsequencenumber']/value" />
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div style="font-size:12px;float:right"> DYNAMIXS.AI GmbH - <br /> Frei-Otto-Str. 4 -
|
||||||
|
80797 München <br /> Tel.: +49 (0)89 / 45 21 36-0 </div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h2>
|
||||||
|
<xsl:value-of select="item[@name='_subject']/value" />
|
||||||
|
</h2>
|
||||||
|
<h3>Requirements Completed: <xsl:value-of
|
||||||
|
select="format-dateTime($currenttime, '[D01].[M01].[Y0001]')"></xsl:value-of></h3>
|
||||||
|
</div>
|
||||||
|
</xsl:template> <!--
|
||||||
|
Body Template -->
|
||||||
|
<xsl:template
|
||||||
|
match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'Requirement']">
|
||||||
|
<xsl:variable name="eventDate" select="item[@name='$lasteventdate']/value" />
|
||||||
|
<xsl:variable name="effortPlaned" select="item[@name='_effort_planed']/value" />
|
||||||
|
<xsl:variable name="capacity" select="item[@name='_capacity']/value" />
|
||||||
|
<div class="imixs-requirement">
|
||||||
|
<h4>
|
||||||
|
<xsl:value-of select="item[@name='_subject']/value" />
|
||||||
|
<span class="small" style="float:right;"> Stand: <xsl:value-of
|
||||||
|
select="format-dateTime($eventDate, '[D01].[M01].[Y0001]')"></xsl:value-of>
|
||||||
|
</span>
|
||||||
|
</h4>
|
||||||
|
<p>
|
||||||
|
<xsl:value-of select="item[@name='_description']/value" disable-output-escaping="yes" />
|
||||||
|
</p>
|
||||||
|
</div> <!--
|
||||||
|
efforts -->
|
||||||
|
<table class="imixs-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="width:10px;">Datum</th>
|
||||||
|
<th>Leistungsbezeichnung</th>
|
||||||
|
<th style="width:80px;">Stunden</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<xsl:for-each select="item[@name='_childitems']/value">
|
||||||
|
<tr>
|
||||||
|
<td style="text-align: center;">
|
||||||
|
<xsl:value-of
|
||||||
|
select="format-dateTime(item[@name='datdate']/value, '[D01].[M01].[Y0001]')" />
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<xsl:value-of select="item[@name='name']/value" />
|
||||||
|
</td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
<xsl:value-of select="item[@name='amount']/value" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</xsl:for-each> <!--
|
||||||
|
Summe -->
|
||||||
|
</tbody>
|
||||||
|
<tfoot>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
<strong>Summe:</strong>
|
||||||
|
</td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
<xsl:value-of select="item[@name='_capacity']/value" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
<strong>Plan:</strong>
|
||||||
|
</td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
<xsl:value-of select="item[@name='_effort_planed']/value" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
<strong>Prozent:</strong>
|
||||||
|
</td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
<xsl:value-of select="item[@name='_effort_div']/value" /> % </td>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
</table>
|
||||||
|
</xsl:template>
|
||||||
|
</xsl:stylesheet>
|
||||||
7
reports/requirements-implementation.imixs-report
Normal file
7
reports/requirements-implementation.imixs-report
Normal file
File diff suppressed because one or more lines are too long
133
reports/requirements-implementation.xsl
Normal file
133
reports/requirements-implementation.xsl
Normal file
|
|
@ -0,0 +1,133 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE xsl:stylesheet [
|
||||||
|
<!ENTITY bdquo "" ><!ENTITY quot "" ><!ENTITY uuml "ü" ><!ENTITY auml "ä" ><!ENTITY ouml "ö" ><!ENTITY Uuml "Ü" ><!ENTITY Auml "Ä" >
|
||||||
|
<!ENTITY Ouml "Ö" ><!ENTITY szlig "ß" ><!ENTITY nbsp " " ><!ENTITY lt "" ><!ENTITY gt "" >
|
||||||
|
]>
|
||||||
|
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
|
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
|
||||||
|
<xsl:output method="html" media-type="text/html" indent="no" encoding="UTF-8" />
|
||||||
|
<xsl:decimal-format name="euro" decimal-separator="," grouping-separator="." />
|
||||||
|
<xsl:variable name="currenttime" select="current-dateTime()" />
|
||||||
|
<xsl:template match="/">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta name="viewport" content="width=device-width" />
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
|
<title>Imixs Software Solutions GmbH</title>
|
||||||
|
<link href="../../layout/css/imixs-basic.css" charset="UTF-8" type="text/css"
|
||||||
|
rel="stylesheet" />
|
||||||
|
<link href="../../layout/css/imixs-layout.css" charset="UTF-8" type="text/css"
|
||||||
|
rel="stylesheet" />
|
||||||
|
<link href="../../layout/css/office-theme-print.css" charset="UTF-8" type="text/css"
|
||||||
|
rel="stylesheet" />
|
||||||
|
<link href="../../layout/css/custom.css" charset="UTF-8" type="text/css"
|
||||||
|
rel="stylesheet" />
|
||||||
|
<link href="../../custom-print.css" charset="UTF-8" type="text/css" rel="stylesheet" />
|
||||||
|
<style> .toolbar.branding { font-size:1.75rem; } h2 { font-size:1.7em; } .small { font-size:65%; } #imixs-content { padding:10px; } #header { background-color: #FFF; color: #333; border-bottom: 1px solid #333; padding:0; } .imixs-requirement { margin-top:20px; margin-bottom:40px; } .imixs-requirement h4 { border-bottom: 1px solid #333; } .imixs-table { width: 100%; margin-bottom:4em; } @media print { body {font-size:0.66em;} } </style>
|
||||||
|
</head>
|
||||||
|
<body> <!-- content -->
|
||||||
|
<div id="container">
|
||||||
|
<div id="imixs-content"> <!-- generate Header -->
|
||||||
|
<xsl:apply-templates
|
||||||
|
select="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'Auftrag']" /> <!--
|
||||||
|
body -->
|
||||||
|
<xsl:apply-templates
|
||||||
|
select="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'Requirement']" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</xsl:template> <!--
|
||||||
|
Header Template -->
|
||||||
|
<xsl:template
|
||||||
|
match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'Auftrag']">
|
||||||
|
<div id="header">
|
||||||
|
<div id="imixs-servicenav">
|
||||||
|
<div class="toolbar branding" style="float:left;">
|
||||||
|
<span> Auftrag - <xsl:value-of select="item[@name='numsequencenumber']/value" />
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div style="font-size:12px;float:right"> DYNAMIXS.AI GmbH - <br /> Frei-Otto-Str. 4
|
||||||
|
- 80797 München <br /> Tel.: +49 (0)89 / 45 21 36-0 </div>
|
||||||
|
</div>
|
||||||
|
</div> <div>
|
||||||
|
<h2>
|
||||||
|
<xsl:value-of select="item[@name='_subject']/value" />
|
||||||
|
</h2>
|
||||||
|
<h3>Requirements in Umsetzung: <xsl:value-of
|
||||||
|
select="format-dateTime($currenttime, '[D01].[M01].[Y0001]')"></xsl:value-of></h3>
|
||||||
|
</div>
|
||||||
|
</xsl:template> <!--
|
||||||
|
Body Template -->
|
||||||
|
<xsl:template
|
||||||
|
match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'Requirement']">
|
||||||
|
<xsl:variable name="eventDate" select="item[@name='$lasteventdate']/value" /> <xsl:variable
|
||||||
|
name="effortPlaned" select="item[@name='_effort_planed']/value" /> <xsl:variable
|
||||||
|
name="capacity" select="item[@name='_capacity']/value" /> <div class="imixs-requirement">
|
||||||
|
<h4>
|
||||||
|
<xsl:value-of select="item[@name='_subject']/value" />
|
||||||
|
<span class="small" style="float:right;"> Stand: <xsl:value-of
|
||||||
|
select="format-dateTime($eventDate, '[D01].[M01].[Y0001]')"></xsl:value-of>
|
||||||
|
</span>
|
||||||
|
</h4>
|
||||||
|
<p>
|
||||||
|
<xsl:value-of select="item[@name='_description']/value"
|
||||||
|
disable-output-escaping="yes" />
|
||||||
|
</p>
|
||||||
|
</div> <!-- efforts --> <table
|
||||||
|
class="imixs-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="width:120px;">Datum</th>
|
||||||
|
<th>Leistungsbezeichnung</th>
|
||||||
|
<th style="width:120px;">Stunden</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<xsl:for-each select="item[@name='_childitems']/value">
|
||||||
|
<tr>
|
||||||
|
<td style="text-align: center;">
|
||||||
|
<xsl:value-of
|
||||||
|
select="format-dateTime(item[@name='datdate']/value, '[D01].[M01].[Y0001]')" />
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<xsl:value-of select="item[@name='name']/value" />
|
||||||
|
</td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
<xsl:value-of select="item[@name='amount']/value" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</xsl:for-each> <!--
|
||||||
|
Summe -->
|
||||||
|
</tbody>
|
||||||
|
<tfoot>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
<strong>Summe:</strong>
|
||||||
|
</td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
<xsl:value-of select="item[@name='_capacity']/value" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
<strong>Plan:</strong>
|
||||||
|
</td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
<xsl:value-of select="item[@name='_effort_planed']/value" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
<strong>Prozent:</strong>
|
||||||
|
</td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
<xsl:value-of select="item[@name='_effort_div']/value" /> % </td>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
</table>
|
||||||
|
</xsl:template>
|
||||||
|
</xsl:stylesheet>
|
||||||
7
reports/requirements-planning.imixs-report
Normal file
7
reports/requirements-planning.imixs-report
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><document xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><item name="attributes"><value xsi:nil="true"/></item><item name="encoding"><value xsi:type="xs:string"></value></item><item name="txtname"><value xsi:type="xs:string">requirements-planning</value></item><item name="txtquery"><value xsi:type="xs:string">($uniqueid:"{id}")
|
||||||
|
OR
|
||||||
|
($workflowgroup:"Requirement"
|
||||||
|
AND ($workitemref:"{id}" OR txtworkitemref:"{id}")
|
||||||
|
AND $taskid:2010
|
||||||
|
)
|
||||||
|
</value></item><item name="xsl"><value xsi:type="xs:string"><?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE xsl:stylesheet [<!ENTITY bdquo "" ><!ENTITY quot "" ><!ENTITY uuml "ü" ><!ENTITY auml "ä" ><!ENTITY ouml "ö" ><!ENTITY Uuml "Ü" ><!ENTITY Auml "Ä" ><!ENTITY Ouml "Ö" ><!ENTITY szlig "ß" ><!ENTITY nbsp " " ><!ENTITY lt "" ><!ENTITY gt "" >]><xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"> <xsl:output method="html" media-type="text/html" indent="no" encoding="UTF-8" /> <xsl:decimal-format name="euro" decimal-separator="," grouping-separator="." /> <xsl:variable name="currenttime" select="current-dateTime()" /> <xsl:template match="/"> <html> <head> <meta name="viewport" content="width=device-width" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Imixs Software Solutions GmbH</title> <link href="../../layout/css/imixs-basic.css" charset="UTF-8" type="text/css" rel="stylesheet" /> <link href="../../layout/css/imixs-layout.css" charset="UTF-8" type="text/css" rel="stylesheet" /> <link href="../../layout/css/office-theme-print.css" charset="UTF-8" type="text/css" rel="stylesheet" /> <link href="../../layout/css/custom.css" charset="UTF-8" type="text/css" rel="stylesheet" /> <link href="../../custom-print.css" charset="UTF-8" type="text/css" rel="stylesheet" /> <style> .toolbar.branding { font-size:1.75rem; } h2 { font-size:1.7em; } .small { font-size:65%; } #imixs-content { padding:10px; } #header { background-color: #FFF; color: #333; border-bottom: 1px solid #333; padding:0; } .imixs-requirement { margin-top:20px; margin-bottom:40px; } .imixs-requirement h4 { border-bottom: 1px solid #333; } .imixs-table { width: 100%; margin-bottom:4em; } @media print { body {font-size:0.66em;} } </style> </head> <body> <!-- content --> <div id="container"> <div id="imixs-content"> <!-- generate Header --> <xsl:apply-templates select="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'Auftrag']" /> <!-- body --> <xsl:apply-templates select="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'Requirement']" /> </div> </div> </body> </html> </xsl:template> <!-- Header Template --> <xsl:template match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'Auftrag']"> <div id="header"> <div id="imixs-servicenav"> <div class="toolbar branding" style="float:left;"> <span> Auftrag - <xsl:value-of select="item[@name='numsequencenumber']/value" /> </span> </div> <div style="font-size:12px;float:right"> Imixs Software Solutions GmbH - <br /> Agnes-Pockels-Bogen 1 - 80992 München <br /> Tel.: +49 (0)89 / 45 21 36-0 </div> </div> </div> <div> <h2> <xsl:value-of select="item[@name='_subject']/value" /> </h2> <h3>Requirements in Planung: <xsl:value-of select="format-dateTime($currenttime, '[D01].[M01].[Y0001]')"></xsl:value-of></h3> </div> </xsl:template> <!-- Body Template --> <xsl:template match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'Requirement']"> <xsl:variable name="eventDate" select="item[@name='$lasteventdate']/value" /> <div class="imixs-requirement"> <h4> <xsl:value-of select="item[@name='_subject']/value" /> <span class="small" style="float:right;"> Stand: <xsl:value-of select="format-dateTime($eventDate, '[D01].[M01].[Y0001]')"></xsl:value-of> </span> </h4> <p> <xsl:value-of select="item[@name='_description']/value" disable-output-escaping="yes" /> </p> <p> <strong>Aufwand geplant: </strong><xsl:value-of select="item[@name='_effort_planed']/value" /> Stunden </p> </div> </xsl:template></xsl:stylesheet></value></item><item name="xslresource"><value xsi:type="xs:string">/imixs-super-office/src/reports/requirements-planning.xsl</value></item></document>
|
||||||
42
src/main/java/ai/dynamixs/InvoicePOIAdapter.java
Normal file
42
src/main/java/ai/dynamixs/InvoicePOIAdapter.java
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
package com.imixs.intern;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
|
import org.imixs.archive.core.SnapshotService;
|
||||||
|
import org.imixs.workflow.ItemCollection;
|
||||||
|
import org.imixs.workflow.engine.DocumentService;
|
||||||
|
import org.imixs.workflow.engine.WorkflowService;
|
||||||
|
import org.imixs.workflow.exceptions.PluginException;
|
||||||
|
import org.imixs.workflow.poi.POIFindReplaceAdapter;
|
||||||
|
|
||||||
|
import jakarta.inject.Inject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dieser Adapter erweitert den POIFindReplaceAdapter und fügt in das
|
||||||
|
* Rechnungsformular zusätzliche Zeilen ein
|
||||||
|
*/
|
||||||
|
public class InvoicePOIAdapter extends POIFindReplaceAdapter {
|
||||||
|
|
||||||
|
private static Logger logger = Logger.getLogger(InvoicePOIAdapter.class.getName());
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
WorkflowService workflowService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
DocumentService documentService;
|
||||||
|
|
||||||
|
public static final String ERROR_CONFIG = "CONFIG_ERROR";
|
||||||
|
final String TYPE_TEXTBLOCK = "textblock";
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
SnapshotService snapshotService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateXSSFWorkbook(XSSFWorkbook workbook, ItemCollection document, List<String> replaceDevList,
|
||||||
|
String eval) throws PluginException {
|
||||||
|
super.updateXSSFWorkbook(workbook, document, replaceDevList, eval);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
74
src/main/java/com/imixs/intern/AuftragController.java
Normal file
74
src/main/java/com/imixs/intern/AuftragController.java
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
package com.imixs.intern;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import org.imixs.workflow.ItemCollection;
|
||||||
|
import org.imixs.workflow.exceptions.AccessDeniedException;
|
||||||
|
import org.imixs.workflow.faces.data.ViewController;
|
||||||
|
import org.imixs.workflow.faces.data.WorkflowController;
|
||||||
|
import org.imixs.workflow.faces.data.WorkflowEvent;
|
||||||
|
import org.imixs.workflow.faces.util.LoginController;
|
||||||
|
import org.imixs.workflow.office.forms.WorkitemLinkController;
|
||||||
|
|
||||||
|
import jakarta.annotation.Priority;
|
||||||
|
import jakarta.enterprise.context.RequestScoped;
|
||||||
|
import jakarta.enterprise.event.Observes;
|
||||||
|
import jakarta.inject.Inject;
|
||||||
|
import jakarta.inject.Named;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dieser AuftragController hat nur den Zweck eine MIgration des neuen feldes
|
||||||
|
* contact.ref durchzuführen
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Named
|
||||||
|
@RequestScoped
|
||||||
|
public class AuftragController extends ViewController {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private static Logger logger = Logger.getLogger(AuftragController.class.getName());
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
LoginController loginController;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
WorkflowController workflowController;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
WorkitemLinkController workitemLinkController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Diese Hilfsmethode sortiert die Requirements nach Datum.
|
||||||
|
*
|
||||||
|
* @param workflowEvent
|
||||||
|
* @throws AccessDeniedException
|
||||||
|
*/
|
||||||
|
public void onWorkflowEvent(@Observes @Priority(value = 1) WorkflowEvent workflowEvent)
|
||||||
|
throws AccessDeniedException {
|
||||||
|
|
||||||
|
ItemCollection workitem = workflowEvent.getWorkitem();
|
||||||
|
if (workitem == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (workflowEvent.getEventType() == WorkflowEvent.WORKITEM_CHANGED) {
|
||||||
|
// skip if already defined
|
||||||
|
if (!workitem.getItemValueString("contact.ref").isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check all refs...
|
||||||
|
List<ItemCollection> references = workitemLinkController.getReferences();
|
||||||
|
for (ItemCollection reference : references) {
|
||||||
|
if ("Kontakt".equals(reference.getWorkflowGroup())) {
|
||||||
|
workitem.setItemValue("contact.ref", reference.getUniqueID());
|
||||||
|
// Erledigt! :-)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
62
src/main/java/com/imixs/intern/RechnungsAdapterFinish.java
Normal file
62
src/main/java/com/imixs/intern/RechnungsAdapterFinish.java
Normal file
|
|
@ -0,0 +1,62 @@
|
||||||
|
package com.imixs.intern;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import org.imixs.workflow.ItemCollection;
|
||||||
|
import org.imixs.workflow.SignalAdapter;
|
||||||
|
import org.imixs.workflow.engine.WorkflowService;
|
||||||
|
import org.imixs.workflow.exceptions.AccessDeniedException;
|
||||||
|
import org.imixs.workflow.exceptions.AdapterException;
|
||||||
|
import org.imixs.workflow.exceptions.ModelException;
|
||||||
|
import org.imixs.workflow.exceptions.PluginException;
|
||||||
|
import org.imixs.workflow.exceptions.ProcessingErrorException;
|
||||||
|
import org.imixs.workflow.odf.ODFDOMFindReplaceAdapter;
|
||||||
|
|
||||||
|
import jakarta.inject.Inject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Der RechnungsAdapterComplete wird eingesetzt wenn eine Rechnung geprüft
|
||||||
|
* wurde. Dann werden alle Requirement Positionen auf 'Invoiced' gesetzt.
|
||||||
|
*
|
||||||
|
* Zusätzlich erzeugt der Adapter die Child Item Buchungszeile
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class RechnungsAdapterFinish implements SignalAdapter {
|
||||||
|
|
||||||
|
private static Logger logger = Logger.getLogger(RechnungsAdapterFinish.class.getName());
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
WorkflowService workflowService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes all
|
||||||
|
* requriements with 2300.20**@throws PluginException
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemCollection execute(ItemCollection workitem, ItemCollection event)
|
||||||
|
throws AdapterException, PluginException {
|
||||||
|
|
||||||
|
logger.info("Finish Imixs Rechnung....");
|
||||||
|
List<String> refs = workitem.getItemValueList("_requirements", String.class);
|
||||||
|
for (String _id : refs) {
|
||||||
|
try {
|
||||||
|
ItemCollection _requirement = workflowService.getDocumentService().load(_id);
|
||||||
|
if (_requirement.getTaskID() == 2300) {
|
||||||
|
workflowService.processWorkItem(_requirement, 20);
|
||||||
|
}
|
||||||
|
} catch (AccessDeniedException | ProcessingErrorException | ModelException e) {
|
||||||
|
throw new PluginException(ODFDOMFindReplaceAdapter.class.getSimpleName(), "UPDATE_ERROR",
|
||||||
|
"Failed to update Requirements : " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// copyRechnungssumme();
|
||||||
|
return workitem;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void copyRechnungssumme() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
129
src/main/java/com/imixs/intern/RechnungsAdapterODF.java
Normal file
129
src/main/java/com/imixs/intern/RechnungsAdapterODF.java
Normal file
|
|
@ -0,0 +1,129 @@
|
||||||
|
package com.imixs.intern;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import org.imixs.workflow.ItemCollection;
|
||||||
|
import org.imixs.workflow.engine.DocumentService;
|
||||||
|
import org.imixs.workflow.engine.WorkflowService;
|
||||||
|
import org.imixs.workflow.exceptions.PluginException;
|
||||||
|
import org.imixs.workflow.odf.ODFDOMFindReplaceAdapter;
|
||||||
|
import org.odftoolkit.odfdom.doc.OdfDocument;
|
||||||
|
import org.odftoolkit.odfdom.doc.table.OdfTable;
|
||||||
|
import org.odftoolkit.odfdom.doc.table.OdfTableRow;
|
||||||
|
import org.odftoolkit.odfdom.incubator.search.InvalidNavigationException;
|
||||||
|
|
||||||
|
import jakarta.inject.Inject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dieser Adapter erweitert den ODFDOMFindReplaceAdapter und fügt in das
|
||||||
|
* Rechnungsformular zusätzliche Zeilen ein
|
||||||
|
*/
|
||||||
|
public class RechnungsAdapterODF extends ODFDOMFindReplaceAdapter {
|
||||||
|
|
||||||
|
private static Logger logger = Logger.getLogger(ODFDOMFindReplaceAdapter.class.getName());
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
WorkflowService workflowService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
DocumentService documentService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates a SpreadSheet Document
|
||||||
|
*
|
||||||
|
* Load all needed workitems....
|
||||||
|
*
|
||||||
|
* @param odfDoc
|
||||||
|
* @param workitem
|
||||||
|
* @param replaceDevList
|
||||||
|
* @throws PluginException
|
||||||
|
* @throws InvalidNavigationException
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void updateODFDocument(OdfDocument odfDoc, ItemCollection workitem, List<String> replaceDevList)
|
||||||
|
throws PluginException, InvalidNavigationException {
|
||||||
|
String subject;
|
||||||
|
|
||||||
|
super.updateODFDocument(odfDoc, workitem, replaceDevList);
|
||||||
|
logger.info("Update Imixs Rechnung....");
|
||||||
|
|
||||||
|
// Load all needed workitems....
|
||||||
|
ItemCollection auftrag = documentService.load(workitem.getItemValueString("$workitemref"));
|
||||||
|
subject = auftrag.getItemValueString("_subject");
|
||||||
|
List<ItemCollection> requirements = new ArrayList<ItemCollection>();
|
||||||
|
List<String> refs = workitem.getItemValueList("_requirements", String.class);
|
||||||
|
for (String _id : refs) {
|
||||||
|
requirements.add(documentService.load(_id));
|
||||||
|
}
|
||||||
|
// find Kontakt
|
||||||
|
ItemCollection kontakt = null;
|
||||||
|
refs = auftrag.getItemValueList("$workitemref", String.class);
|
||||||
|
for (String _id : refs) {
|
||||||
|
ItemCollection _workitem = documentService.load(_id);
|
||||||
|
if (_workitem != null && "Kontakt".equals(_workitem.getItemValueString("$workflowgroup"))) {
|
||||||
|
kontakt = _workitem;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// find row..
|
||||||
|
OdfTable tbl = odfDoc.getTableList().get(0);
|
||||||
|
|
||||||
|
// Update Address
|
||||||
|
if (kontakt != null) {
|
||||||
|
tbl.getCellByPosition("A7").setStringValue(kontakt.getItemValueString("_subject"));
|
||||||
|
tbl.getCellByPosition("A8").setStringValue(kontakt.getItemValueString("_address"));
|
||||||
|
|
||||||
|
tbl.getCellByPosition("A10")
|
||||||
|
.setStringValue(kontakt.getItemValueString("_zip") + " " + kontakt.getItemValueString("_city"));
|
||||||
|
tbl.getCellByPosition("A11").setStringValue(kontakt.getItemValueString("_country"));
|
||||||
|
}
|
||||||
|
// Update Auftrag
|
||||||
|
if (auftrag != null) {
|
||||||
|
tbl.getCellByPosition("G21").setStringValue(auftrag.getItemValueString("numsequencenumber"));
|
||||||
|
tbl.getCellByPosition("C21").setStringValue(auftrag.getItemValueString("_ordernumber"));
|
||||||
|
|
||||||
|
// update email if not defined
|
||||||
|
if (workitem.getItemValueString("invoice.email").isEmpty()) {
|
||||||
|
workitem.cloneItem("invoice.email", auftrag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Requirements
|
||||||
|
List<OdfTableRow> newRows = tbl.insertRowsBefore(24, requirements.size() - 1);
|
||||||
|
int pos = 1;
|
||||||
|
int line = 0;
|
||||||
|
for (ItemCollection _requirement : requirements) {
|
||||||
|
OdfTableRow newRow = tbl.getRowByIndex(22 + pos);
|
||||||
|
line = pos + 23;
|
||||||
|
|
||||||
|
newRow.getCellByIndex(0).setStringValue(pos + "");
|
||||||
|
newRow.getCellByIndex(1).setStringValue(_requirement.getItemValueString("_subject"));
|
||||||
|
newRow.getCellByIndex(4).setDoubleValue(auftrag.getItemValueDouble("_rate"));
|
||||||
|
newRow.getCellByIndex(5).setDoubleValue(_requirement.getItemValueDouble("_capacity"));
|
||||||
|
// set formular
|
||||||
|
newRow.getCellByIndex(6).setFormula("=E" + (line) + "*F" + (line));
|
||||||
|
pos++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update Summary Formulars....
|
||||||
|
// line = 24;
|
||||||
|
// String formel = "=";
|
||||||
|
// for (ItemCollection _requirement : requirements) {
|
||||||
|
// formel = formel + "G" + line + "+";
|
||||||
|
// line++;
|
||||||
|
// }
|
||||||
|
// formel = formel.substring(0, formel.length() - 1);
|
||||||
|
// line = 25 + requirements.size();
|
||||||
|
// tbl.getCellByPosition("G" + (line)).setFormula(formel);
|
||||||
|
// line++;
|
||||||
|
|
||||||
|
// line++;
|
||||||
|
// tbl.getCellByPosition("G" + (line)).setFormula("=G" + (line - 2) + "+G" +
|
||||||
|
// (line - 1));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
119
src/main/java/com/imixs/intern/RequirementsViewController.java
Normal file
119
src/main/java/com/imixs/intern/RequirementsViewController.java
Normal file
|
|
@ -0,0 +1,119 @@
|
||||||
|
package com.imixs.intern;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import org.imixs.workflow.ItemCollection;
|
||||||
|
import org.imixs.workflow.ItemCollectionComparator;
|
||||||
|
import org.imixs.workflow.exceptions.AccessDeniedException;
|
||||||
|
import org.imixs.workflow.exceptions.QueryException;
|
||||||
|
import org.imixs.workflow.faces.data.ViewController;
|
||||||
|
import org.imixs.workflow.faces.data.WorkflowController;
|
||||||
|
import org.imixs.workflow.faces.data.WorkflowEvent;
|
||||||
|
import org.imixs.workflow.faces.util.LoginController;
|
||||||
|
import org.imixs.workflow.office.forms.ChildItemController;
|
||||||
|
|
||||||
|
import jakarta.annotation.PostConstruct;
|
||||||
|
import jakarta.annotation.Priority;
|
||||||
|
import jakarta.enterprise.event.Observes;
|
||||||
|
import jakarta.faces.view.ViewScoped;
|
||||||
|
import jakarta.inject.Inject;
|
||||||
|
import jakarta.inject.Named;
|
||||||
|
|
||||||
|
@Named
|
||||||
|
@ViewScoped
|
||||||
|
public class RequirementsViewController extends ViewController {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private static Logger logger = Logger.getLogger(RequirementsViewController.class.getName());
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
LoginController loginController;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
WorkflowController workflowController;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ChildItemController childItemController;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
super.init();
|
||||||
|
String id = "-1";
|
||||||
|
if (workflowController.getWorkitem() != null) {
|
||||||
|
id = workflowController.getWorkitem().getUniqueID();
|
||||||
|
}
|
||||||
|
this.setQuery(
|
||||||
|
"($workflowgroup:\"Requirement\") AND (type:\"workitem\" OR type:\"workitemarchive\") AND ($workitemref:\""
|
||||||
|
+ id + "\" OR txtworkitemref:\"" + id + "\")");
|
||||||
|
this.setSortBy("$taskid");
|
||||||
|
this.setSortReverse(false);
|
||||||
|
this.setPageSize(999);
|
||||||
|
this.setLoadStubs(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compute summary....
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<ItemCollection> loadData() throws QueryException {
|
||||||
|
List<ItemCollection> result = super.loadData();
|
||||||
|
|
||||||
|
float capa = 0;
|
||||||
|
float plan = 0;
|
||||||
|
for (ItemCollection orderitem : result) {
|
||||||
|
|
||||||
|
// skip canceled entries
|
||||||
|
if (2900 == orderitem.getTaskID()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
capa = capa + orderitem.getItemValueFloat("_capacity");
|
||||||
|
plan = plan + orderitem.getItemValueFloat("_effort_planed");
|
||||||
|
}
|
||||||
|
|
||||||
|
workflowController.getWorkitem().replaceItemValue("_capacity", capa);
|
||||||
|
workflowController.getWorkitem().replaceItemValue("_effort_planed", plan);
|
||||||
|
workflowController.getWorkitem().replaceItemValue("_effort_div", Float.valueOf((capa / plan) * 100));
|
||||||
|
// sort result by task and creation date
|
||||||
|
result.sort(Comparator
|
||||||
|
.comparingInt((ItemCollection item) -> item.getItemValueInteger("$taskid"))
|
||||||
|
.thenComparing(item -> item.getItemValueDate("$created"), Comparator.reverseOrder()));
|
||||||
|
|
||||||
|
return result;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Diese Hilfsmethode sortiert die Requirements nach Datum.
|
||||||
|
*
|
||||||
|
* @param workflowEvent
|
||||||
|
* @throws AccessDeniedException
|
||||||
|
*/
|
||||||
|
public void onWorkflowEvent(@Observes @Priority(value = 1) WorkflowEvent workflowEvent)
|
||||||
|
throws AccessDeniedException {
|
||||||
|
|
||||||
|
int eventType = workflowEvent.getEventType();
|
||||||
|
ItemCollection workitem = workflowEvent.getWorkitem();
|
||||||
|
if (workitem == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// nur reagieren wenn wir in einem Requirement oder bei Werksstudenten sind!
|
||||||
|
if ("Requirement".equals(workitem.getWorkflowGroup()) || "Werksstudent".equals(workitem.getWorkflowGroup())) {
|
||||||
|
|
||||||
|
// before the workitem is saved we sort the list by date
|
||||||
|
if (WorkflowEvent.WORKITEM_BEFORE_PROCESS == eventType
|
||||||
|
&& childItemController.getChildItems() != null) {
|
||||||
|
logger.info("...sorting requirement/effort list...");
|
||||||
|
Collections.sort(childItemController.getChildItems(), new ItemCollectionComparator("datdate", false));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
175
src/main/java/com/imixs/intern/StatistikPlugin.java
Normal file
175
src/main/java/com/imixs/intern/StatistikPlugin.java
Normal file
|
|
@ -0,0 +1,175 @@
|
||||||
|
package com.imixs.intern;
|
||||||
|
|
||||||
|
import java.text.DateFormat;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import org.imixs.workflow.ItemCollection;
|
||||||
|
import org.imixs.workflow.engine.plugins.AbstractPlugin;
|
||||||
|
import org.imixs.workflow.exceptions.PluginException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dieses Plugin berechnet die gebuchten Stunden pro tag und woche
|
||||||
|
*
|
||||||
|
* @author rsoika
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class StatistikPlugin extends AbstractPlugin {
|
||||||
|
|
||||||
|
private String[] ignoreList = { "administration-np" };
|
||||||
|
private static Logger logger = Logger.getLogger(StatistikPlugin.class
|
||||||
|
.getName());
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Skip if not a workitem and only run once a day!
|
||||||
|
*
|
||||||
|
* @throws PluginException
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public ItemCollection run(ItemCollection workitem, ItemCollection documentActivity) throws PluginException {
|
||||||
|
|
||||||
|
List<String> ignoreArrayList = Arrays.asList(ignoreList);
|
||||||
|
|
||||||
|
// skip if the workitem is from a different type (for example Teams
|
||||||
|
// may not be processed by this plugin)
|
||||||
|
String type = workitem.getItemValueString("type");
|
||||||
|
|
||||||
|
if (!type.equals("workitem"))
|
||||||
|
return workitem;
|
||||||
|
|
||||||
|
// lauf nur in workflow modell imixs-de
|
||||||
|
// und nur 9000.100
|
||||||
|
int processID = workitem.getItemValueInteger("$Processid");
|
||||||
|
int activityID = documentActivity.getItemValueInteger("numActivityID");
|
||||||
|
String model = workitem.getItemValueString("$ModelVersion");
|
||||||
|
|
||||||
|
if (!(processID == 9000 && activityID == 100 && model.startsWith("imixs-de")))
|
||||||
|
return workitem;
|
||||||
|
|
||||||
|
// sind wir heute schon gelaufen?
|
||||||
|
Calendar calToday = Calendar.getInstance();
|
||||||
|
calToday.setTime(new Date());
|
||||||
|
|
||||||
|
Calendar calLast = Calendar.getInstance();
|
||||||
|
Date datLast = workitem.getItemValueDate("datLetzteStatistik");
|
||||||
|
if (datLast != null)
|
||||||
|
calLast.setTime(datLast);
|
||||||
|
|
||||||
|
int dayOfYear = calLast.get(Calendar.DAY_OF_YEAR);
|
||||||
|
|
||||||
|
if (datLast != null
|
||||||
|
&& calLast.get(Calendar.DAY_OF_YEAR) == calToday
|
||||||
|
.get(Calendar.DAY_OF_YEAR)) {
|
||||||
|
logger.info("[Imixs StatistikPlugin] skipped");
|
||||||
|
// ganzen vorgang abbrechen, da sonst wieder eine Email gesendet wird
|
||||||
|
throw new PluginException("StatistikPlugin", "wrong date", "wrong date");
|
||||||
|
// return Plugin.PLUGIN_ERROR;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// ok wir starten die Auswertung!
|
||||||
|
logger.info("[Imixs StatistikPlugin] Starte Auswertung....");
|
||||||
|
|
||||||
|
workitem.replaceItemValue("datLetzteStatistik", calToday.getTime());
|
||||||
|
|
||||||
|
// jetzt brauchen wir die Werte von gestern!
|
||||||
|
calToday.add(Calendar.DATE, -1);
|
||||||
|
List<ItemCollection> aktuell = getStunden(calToday, calToday);
|
||||||
|
int stundenHeute = 0;
|
||||||
|
for (ItemCollection abr : aktuell) {
|
||||||
|
// prüfe ob categorie in ignore liste ist
|
||||||
|
String sKategorie = abr.getItemValueString("_category")
|
||||||
|
.toLowerCase();
|
||||||
|
if (Arrays.asList(ignoreList).contains(sKategorie))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
stundenHeute += abr.getItemValueInteger("_duration");
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info("[Imixs StatistikPlugin] Stunden heute=" + stundenHeute);
|
||||||
|
workitem.replaceItemValue("numStundenHeute", stundenHeute);
|
||||||
|
|
||||||
|
// vorherige Woche berechnen
|
||||||
|
Date date = new Date();
|
||||||
|
|
||||||
|
int i = calToday.get(Calendar.DAY_OF_WEEK)
|
||||||
|
- calToday.getFirstDayOfWeek();
|
||||||
|
calToday.add(Calendar.DATE, -i - 7);
|
||||||
|
Date start = calToday.getTime();
|
||||||
|
calToday.add(Calendar.DATE, 6);
|
||||||
|
Date end = calToday.getTime();
|
||||||
|
logger.info("[Imixs StatistikPlugin] Vorwoche=" + start + " - " + end);
|
||||||
|
|
||||||
|
Calendar calStart = Calendar.getInstance();
|
||||||
|
calStart.setTime(start);
|
||||||
|
Calendar calEnd = Calendar.getInstance();
|
||||||
|
calEnd.setTime(end);
|
||||||
|
|
||||||
|
List<ItemCollection> vorwoche = getStunden(calStart, calEnd);
|
||||||
|
int stundenLetzeWoche = 0;
|
||||||
|
for (ItemCollection abr : vorwoche) {
|
||||||
|
|
||||||
|
// prüfe ob categorie in ignore liste ist
|
||||||
|
String sKategorie = abr.getItemValueString("_category")
|
||||||
|
.toLowerCase();
|
||||||
|
if (Arrays.asList(ignoreList).contains(sKategorie))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
stundenLetzeWoche += abr.getItemValueInteger("_duration");
|
||||||
|
}
|
||||||
|
workitem.replaceItemValue("numStundenLetzeWoche", stundenLetzeWoche);
|
||||||
|
|
||||||
|
logger.info("[Imixs StatistikPlugin] Stunden Letze Woche="
|
||||||
|
+ stundenLetzeWoche);
|
||||||
|
|
||||||
|
return workitem;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void close(int arg0) {
|
||||||
|
// no op
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getIgnoreList() {
|
||||||
|
return ignoreList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIgnoreList(String[] ignoreList) {
|
||||||
|
this.ignoreList = ignoreList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<ItemCollection> getStunden(Calendar dayFrom, Calendar dayTo) {
|
||||||
|
|
||||||
|
// dayformat 2014-12-31
|
||||||
|
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
String sDateFrom = df.format(dayFrom.getTime());
|
||||||
|
String sDateTo = df.format(dayTo.getTime());
|
||||||
|
|
||||||
|
String sQuery = " SELECT workitem FROM Entity AS workitem"
|
||||||
|
+ " JOIN workitem.textItems AS type2"
|
||||||
|
+ " JOIN workitem.calendarItems AS type3"
|
||||||
|
+ " WHERE workitem.type IN ('childworkitem')"
|
||||||
|
+ " AND type3.itemName = 'datdate' "
|
||||||
|
+ " AND type3.itemValue BETWEEN '" + sDateFrom + " 00:00:00' AND '"
|
||||||
|
+ sDateTo + " 23:59:59'"
|
||||||
|
+ " AND type2.itemName = 'txtworkflowgroup' "
|
||||||
|
+ " AND type2.itemValue = 'Zeiterfassung'"
|
||||||
|
+ " ORDER BY type3.itemValue DESC ";
|
||||||
|
|
||||||
|
logger.fine("[Imixs StatistikPlugin] " + sQuery);
|
||||||
|
|
||||||
|
logger.warning("Imixs Statistik Collector is not implemented");
|
||||||
|
// return documentService.findAllEntities(sQuery, 0, -1);
|
||||||
|
return new ArrayList<ItemCollection>();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,491 @@
|
||||||
|
package com.imixs.intern;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
|
import java.text.NumberFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import org.imixs.marty.team.TeamService;
|
||||||
|
import org.imixs.workflow.ItemCollection;
|
||||||
|
import org.imixs.workflow.engine.DocumentService;
|
||||||
|
import org.imixs.workflow.exceptions.QueryException;
|
||||||
|
import org.imixs.workflow.office.forms.AnalyticController;
|
||||||
|
import org.imixs.workflow.office.forms.AnalyticEvent;
|
||||||
|
|
||||||
|
import jakarta.enterprise.context.RequestScoped;
|
||||||
|
import jakarta.enterprise.event.Observes;
|
||||||
|
import jakarta.inject.Inject;
|
||||||
|
import jakarta.inject.Named;
|
||||||
|
import jakarta.json.Json;
|
||||||
|
import jakarta.json.JsonArrayBuilder;
|
||||||
|
import jakarta.json.JsonObject;
|
||||||
|
import jakarta.json.JsonObjectBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Der SuperOfficeAnalyticController berechnet verschiedene Analyse Daten
|
||||||
|
*
|
||||||
|
* @author rsoika
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Named
|
||||||
|
@RequestScoped
|
||||||
|
public class SuperOfficeAnalyticController implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
private static Logger logger = Logger.getLogger(AnalyticController.class.getName());
|
||||||
|
public static final String CHILD_ITEM_PROPERTY = "_ChildItems";
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
protected DocumentService documentService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
TeamService teamService;
|
||||||
|
|
||||||
|
List<ItemCollection> auftraege = null;
|
||||||
|
List<ItemCollection> rechnungen = null;
|
||||||
|
Map<String, List<ItemCollection>> requirementsCache = null;
|
||||||
|
Map<Integer, RequirementData> hoursByWeek = null;
|
||||||
|
int earliestWeek = Integer.MAX_VALUE;
|
||||||
|
int latestWeek = Integer.MIN_VALUE;
|
||||||
|
|
||||||
|
public void onEvent(@Observes AnalyticEvent event) {
|
||||||
|
|
||||||
|
if (!event.getKey().startsWith("superoffice.stats.")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(Locale.GERMANY);
|
||||||
|
|
||||||
|
ItemCollection processRequirements = teamService.getProcessByName("Sales");
|
||||||
|
if (processRequirements == null) {
|
||||||
|
logger.severe("Process 'Sales' not found!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ItemCollection processBuchhaltung = teamService.getProcessByName("Finance");
|
||||||
|
if (processBuchhaltung == null) {
|
||||||
|
logger.severe("Process 'Finance' not found!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String linkRequirements = "/pages/workitems/worklist.xhtml?processref=" + processRequirements.getUniqueID()
|
||||||
|
+ "&workflowgroup=Requirement";
|
||||||
|
String linkInvoices = "/pages/workitems/worklist.xhtml?processref=" + processBuchhaltung.getUniqueID()
|
||||||
|
+ "&workflowgroup=Rechnungsausgang";
|
||||||
|
|
||||||
|
if ("superoffice.stats.hours.total".equals(event.getKey())) {
|
||||||
|
event.setData(new ItemCollection());
|
||||||
|
event.getData().setItemValue("value", computeHoursTotal());
|
||||||
|
event.getData().setItemValue("label", "Stunden");
|
||||||
|
event.getData().setItemValue("description", "Noch nicht abgerechnete Stunden");
|
||||||
|
event.getData().setItemValue("link", linkRequirements);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("superoffice.stats.invoices.total".equals(event.getKey())) {
|
||||||
|
event.setData(new ItemCollection());
|
||||||
|
event.getData().setItemValue("Value", currencyFormat.format(computeOffeneRechnungen()));
|
||||||
|
event.getData().setItemValue("Label", "EUR");
|
||||||
|
event.getData().setItemValue("Description", "Offene Rechnungen");
|
||||||
|
event.getData().setItemValue("Link", linkInvoices);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Charts
|
||||||
|
if ("superoffice.stats.hours.currentWeek".equals(event.getKey())) {
|
||||||
|
accumulateHoursByWeek();
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
calendar.setTime(new Date());
|
||||||
|
int weekNumber = calendar.get(Calendar.WEEK_OF_YEAR);
|
||||||
|
int year = calendar.get(Calendar.YEAR);
|
||||||
|
int yearWeek = year * 100 + weekNumber; // Unique key for each year + week combination
|
||||||
|
RequirementData weekData = hoursByWeek.getOrDefault(yearWeek, new RequirementData());
|
||||||
|
event.setData(new ItemCollection());
|
||||||
|
event.getData().setItemValue("Value", weekData.total);
|
||||||
|
event.getData().setItemValue("Label", "Stunden");
|
||||||
|
event.getData().setItemValue("Description", "Stunden gesamt in dieser Woche - KW " + weekNumber);
|
||||||
|
event.getData().setItemValue("Link", linkRequirements);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("superoffice.stats.hours.trend".equals(event.getKey())) {
|
||||||
|
accumulateHoursByWeek();
|
||||||
|
event.setData(new ItemCollection());
|
||||||
|
event.getData().setItemValue("Value", buildHoursChart());
|
||||||
|
event.getData().setItemValue("Label", "Stunden");
|
||||||
|
event.getData().setItemValue("Description", "Stunden nach KW");
|
||||||
|
}
|
||||||
|
|
||||||
|
// computeKIPrompt(event.getWorkitem());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Berechnet die Summe aller offenen stunden
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private double computeHoursTotal() {
|
||||||
|
logger.fine("compute hours...");
|
||||||
|
List<ItemCollection> list = getAufträge();
|
||||||
|
double result = 0;
|
||||||
|
|
||||||
|
for (ItemCollection steuerItemCol : list) {
|
||||||
|
result = result + getStundenByAuftrag(steuerItemCol);
|
||||||
|
|
||||||
|
}
|
||||||
|
return round(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Berechnet die Summe aller offenen Rechnungen
|
||||||
|
*
|
||||||
|
* _amount
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private double computeOffeneRechnungen() {
|
||||||
|
logger.fine("compute offene Rechnungen...");
|
||||||
|
List<ItemCollection> list = getOffeneRechnungen();
|
||||||
|
double result = 0;
|
||||||
|
|
||||||
|
for (ItemCollection workitem : list) {
|
||||||
|
result = result + workitem.getItemValueDouble("_amount");
|
||||||
|
|
||||||
|
}
|
||||||
|
return round(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Berechnet die stunden pro auftrag (_capacity) Achtung: ist ein string der in
|
||||||
|
* double convertiert werden muss
|
||||||
|
*
|
||||||
|
* @param auftrag
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private double getStundenByAuftrag(ItemCollection auftrag) {
|
||||||
|
double result = 0;
|
||||||
|
|
||||||
|
List<ItemCollection> requirements = getRequirementsByAuftrag(auftrag);
|
||||||
|
for (ItemCollection requirement : requirements) {
|
||||||
|
result = result + requirement.getItemValueDouble("_capacity");
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void computeKIPrompt(ItemCollection workitem) {
|
||||||
|
|
||||||
|
String prompt = "Erstelle eine sehr kurze Geschäftsprognose über die Auftragslage auf Basis folgender Daten: \n";
|
||||||
|
prompt += "Wir haben aktuell offene Rechnungen in Höhe von " + workitem.getItemValueDouble("invoices.total")
|
||||||
|
+ " EUR .";
|
||||||
|
prompt += "Unser Stundensatz beträgt 150,- EUR .";
|
||||||
|
|
||||||
|
prompt += "In der aktuellen Woche haben wir bereits " + workitem.getItemValueInteger("stunden.total.week")
|
||||||
|
+ " Stunden gearbeitet. ";
|
||||||
|
|
||||||
|
prompt += "Insgesamt haben wir " + workitem.getItemValueInteger("stunden.total")
|
||||||
|
+ " Stunden gearbeitet die noch nicht in Rechnung gestellt sind. \n";
|
||||||
|
|
||||||
|
prompt += "Hier kommt eine übersicht der geleisteten Stunden die noch nicht abgerechnet wurden nach Kalenderwoche: \n";
|
||||||
|
|
||||||
|
Set<Integer> weekNumbers = hoursByWeek.keySet();
|
||||||
|
for (int kw : weekNumbers) {
|
||||||
|
String year = ("" + kw).substring(0, 4);
|
||||||
|
String weekNumber = ("" + kw).substring(4);
|
||||||
|
// Add the saldo for the week or 0.0 if no data
|
||||||
|
RequirementData requirementData = hoursByWeek.getOrDefault(kw, new RequirementData());
|
||||||
|
|
||||||
|
prompt += " - " + weekNumber + "/" + year + " = " + requirementData.total + "\n";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info(prompt);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lädt alle Aufträge
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private List<ItemCollection> getAufträge() {
|
||||||
|
if (auftraege != null) {
|
||||||
|
return auftraege;
|
||||||
|
}
|
||||||
|
logger.info("Load Aufträge for analytics....");
|
||||||
|
String query = "(type:workitem ) AND ($workflowgroup:\"Auftrag\")";
|
||||||
|
try {
|
||||||
|
auftraege = documentService.find(query, 999, 0, "$created", false);
|
||||||
|
return auftraege;
|
||||||
|
} catch (QueryException e) {
|
||||||
|
logger.severe("Failed to get invoices: " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lädt alle offenen Rechnungen
|
||||||
|
*
|
||||||
|
* _amount
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private List<ItemCollection> getOffeneRechnungen() {
|
||||||
|
if (rechnungen != null) {
|
||||||
|
return rechnungen;
|
||||||
|
}
|
||||||
|
logger.info("Load Rechnung for analytics....");
|
||||||
|
String query = "(type:workitem ) AND ($workflowgroup:\"Rechnungsausgang\")";
|
||||||
|
try {
|
||||||
|
rechnungen = documentService.find(query, 999, 0, "$created", false);
|
||||||
|
return rechnungen;
|
||||||
|
} catch (QueryException e) {
|
||||||
|
logger.severe("Failed to get invoices: " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lädt alle Requirements zu einem Auftrag
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private List<ItemCollection> getRequirementsByAuftrag(ItemCollection auftrag) {
|
||||||
|
if (requirementsCache == null) {
|
||||||
|
requirementsCache = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ItemCollection> result = requirementsCache.get(auftrag.getUniqueID());
|
||||||
|
if (result != null) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
// compute requirements....
|
||||||
|
logger.info("Load Requirements by Auftrag for analytics (" + auftrag.getUniqueID() + ")...");
|
||||||
|
String query = "($workflowgroup:\"Requirement\") AND (type:\"workitem\") AND ($taskid:[2100 TO 2300]) AND ($workitemref:\""
|
||||||
|
+ auftrag.getUniqueID() + "\")";
|
||||||
|
try {
|
||||||
|
result = documentService.find(query, 999, 0, "$created", false);
|
||||||
|
requirementsCache.put(auftrag.getUniqueID(), result);
|
||||||
|
return result;
|
||||||
|
} catch (QueryException e) {
|
||||||
|
logger.severe("Failed to get invoices: " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Akkumuliert alle Stunden nach KW. Die Methode nutzt einen Cache
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private void accumulateHoursByWeek() {
|
||||||
|
if (hoursByWeek != null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info("accumulate hours by week...");
|
||||||
|
hoursByWeek = new HashMap<>();
|
||||||
|
List<ItemCollection> list = getAufträge();
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
|
||||||
|
// Step 1: Group saldo by week
|
||||||
|
for (ItemCollection auftrag : list) {
|
||||||
|
|
||||||
|
List<ItemCollection> requirements = getRequirementsByAuftrag(auftrag);
|
||||||
|
for (ItemCollection requirement : requirements) {
|
||||||
|
|
||||||
|
// dive into the stunden....
|
||||||
|
List<ItemCollection> stundenListe = explodeChildList(requirement);
|
||||||
|
|
||||||
|
for (ItemCollection stunden : stundenListe) {
|
||||||
|
|
||||||
|
double total = stunden.getItemValueDouble("amount");
|
||||||
|
Date date = stunden.getItemValueDate("datdate");
|
||||||
|
if (date == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// Get the week number and year from the date
|
||||||
|
calendar.setTime(date);
|
||||||
|
int weekNumber = calendar.get(Calendar.WEEK_OF_YEAR);
|
||||||
|
int year = calendar.get(Calendar.YEAR);
|
||||||
|
int yearWeek = year * 100 + weekNumber; // Unique key for each year + week combination
|
||||||
|
|
||||||
|
if (year < 2024) {
|
||||||
|
logger.warning("Old Requirement in Auftrag " + auftrag.getUniqueID());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Accumulate the hours per week
|
||||||
|
RequirementData steuerDataByWeek = hoursByWeek.getOrDefault(yearWeek, new RequirementData());
|
||||||
|
steuerDataByWeek.add(total, "");
|
||||||
|
hoursByWeek.put(yearWeek, steuerDataByWeek);
|
||||||
|
|
||||||
|
// Track the earliest and latest weeks
|
||||||
|
earliestWeek = Math.min(earliestWeek, yearWeek);
|
||||||
|
latestWeek = Math.max(latestWeek, yearWeek);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Berechnet das Chart zu den aktuell ermittelten Stunden
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
chartCfg = {
|
||||||
|
type: 'bar',
|
||||||
|
data: {
|
||||||
|
datasets: [{
|
||||||
|
data: [20, 10],
|
||||||
|
}],
|
||||||
|
labels: ['1', '2']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private String buildHoursChart() {
|
||||||
|
|
||||||
|
accumulateHoursByWeek();
|
||||||
|
|
||||||
|
// Step 2: Prepare the JSON structure and ensure we have all weeks from earliest
|
||||||
|
// to latest
|
||||||
|
JsonArrayBuilder dataBuilderTotal = Json.createArrayBuilder();
|
||||||
|
JsonArrayBuilder labelsBuilder = Json.createArrayBuilder();
|
||||||
|
|
||||||
|
Calendar startCal = Calendar.getInstance();
|
||||||
|
startCal.set(Calendar.YEAR, earliestWeek / 100);
|
||||||
|
startCal.set(Calendar.WEEK_OF_YEAR, earliestWeek % 100);
|
||||||
|
|
||||||
|
Calendar endCal = Calendar.getInstance();
|
||||||
|
endCal.set(Calendar.YEAR, latestWeek / 100);
|
||||||
|
endCal.set(Calendar.WEEK_OF_YEAR, latestWeek % 100);
|
||||||
|
|
||||||
|
while (!startCal.after(endCal)) {
|
||||||
|
int weekNumber = startCal.get(Calendar.WEEK_OF_YEAR);
|
||||||
|
int year = startCal.get(Calendar.YEAR);
|
||||||
|
int yearWeek = year * 100 + weekNumber;
|
||||||
|
|
||||||
|
// Add the saldo for the week or 0.0 if no data
|
||||||
|
RequirementData requirementData = hoursByWeek.getOrDefault(yearWeek, new RequirementData());
|
||||||
|
dataBuilderTotal.add(requirementData.total);
|
||||||
|
|
||||||
|
labelsBuilder.add(weekNumber + "/" + year); // Label as 'week/year'
|
||||||
|
|
||||||
|
// Move to the next week
|
||||||
|
startCal.add(Calendar.WEEK_OF_YEAR, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 3: Prepare the JSON structure
|
||||||
|
JsonObjectBuilder jsonBuilder = Json.createObjectBuilder()
|
||||||
|
.add("type", "bar")
|
||||||
|
.add("data", Json.createObjectBuilder()
|
||||||
|
.add("datasets", Json.createArrayBuilder()
|
||||||
|
|
||||||
|
.add(Json.createObjectBuilder() // Third dataset for 'total'
|
||||||
|
.add("label", "Total")
|
||||||
|
.add("backgroundColor", "#4bc0c0")
|
||||||
|
.add("borderWidth", 1)
|
||||||
|
.add("data", dataBuilderTotal)))
|
||||||
|
|
||||||
|
.add("labels", labelsBuilder));
|
||||||
|
|
||||||
|
// Step 4: Return the JSON structure as a string
|
||||||
|
JsonObject chartCfg = jsonBuilder.build();
|
||||||
|
return chartCfg.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper method to hold zoll and eust totals in an object. Needed to build
|
||||||
|
* totals per week.
|
||||||
|
*/
|
||||||
|
class RequirementData {
|
||||||
|
double total = 0.0;
|
||||||
|
String status = "";
|
||||||
|
|
||||||
|
public RequirementData() {
|
||||||
|
// default constructor
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds new stunden
|
||||||
|
*
|
||||||
|
* @param totalNew
|
||||||
|
* @param statusNew
|
||||||
|
*/
|
||||||
|
public void add(double totalNew, String statusNew) {
|
||||||
|
|
||||||
|
total = total + totalNew;
|
||||||
|
status = statusNew;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double round(double value) {
|
||||||
|
BigDecimal bd = BigDecimal.valueOf(value);
|
||||||
|
bd = bd.setScale(2, RoundingMode.HALF_UP);
|
||||||
|
return bd.doubleValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* converts the Map List of a workitem into a List of ItemCollectons
|
||||||
|
*/
|
||||||
|
public static List<ItemCollection> explodeChildList(ItemCollection workitem) {
|
||||||
|
return explodeChildList(workitem, CHILD_ITEM_PROPERTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* converts the Map List of a workitem into a List of ItemCollectons
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||||
|
public static List<ItemCollection> explodeChildList(ItemCollection workitem, String childItemName) {
|
||||||
|
// convert current list of childItems into ItemCollection elements
|
||||||
|
ArrayList<ItemCollection> childItems = new ArrayList<ItemCollection>();
|
||||||
|
|
||||||
|
List<Object> mapOrderItems = workitem.getItemValue(childItemName);
|
||||||
|
for (Object mapOderItem : mapOrderItems) {
|
||||||
|
if (mapOderItem instanceof Map) {
|
||||||
|
ItemCollection itemCol = new ItemCollection((Map) mapOderItem);
|
||||||
|
childItems.add(itemCol);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return childItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert the List of ItemCollections back into a List of Map elements
|
||||||
|
*
|
||||||
|
* @param workitem
|
||||||
|
*/
|
||||||
|
public static void implodeChildList(ItemCollection workitem, List<ItemCollection> childItems) {
|
||||||
|
implodeChildList(workitem, childItems, CHILD_ITEM_PROPERTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert the List of ItemCollections back into a List of Map elements
|
||||||
|
*
|
||||||
|
* @param workitem
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({ "rawtypes" })
|
||||||
|
public static void implodeChildList(ItemCollection workitem, List<ItemCollection> childItems,
|
||||||
|
String childItemName) {
|
||||||
|
List<Map> mapOrderItems = new ArrayList<Map>();
|
||||||
|
// convert the child ItemCollection elements into a List of Map
|
||||||
|
if (childItems != null) {
|
||||||
|
// iterate over all order items..
|
||||||
|
for (ItemCollection orderItem : childItems) {
|
||||||
|
mapOrderItems.add(orderItem.getAllItems());
|
||||||
|
}
|
||||||
|
workitem.replaceItemValue(childItemName, mapOrderItems);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
112
src/main/java/com/imixs/intern/SuperOfficeDatevService.java
Normal file
112
src/main/java/com/imixs/intern/SuperOfficeDatevService.java
Normal file
|
|
@ -0,0 +1,112 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Imixs Workflow
|
||||||
|
* Copyright (C) 2001, 2011 Imixs Software Solutions GmbH,
|
||||||
|
* http://www.imixs.com
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You can receive a copy of the GNU General Public
|
||||||
|
* License at http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* Project:
|
||||||
|
* http://www.imixs.org
|
||||||
|
* http://java.net/projects/imixs-workflow
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Imixs Software Solutions GmbH - initial API and implementation
|
||||||
|
* Ralph Soika - Software Developer
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package com.imixs.intern;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import org.imixs.workflow.FileData;
|
||||||
|
import org.imixs.workflow.ItemCollection;
|
||||||
|
import org.imixs.workflow.datev.export.DatevEvent;
|
||||||
|
|
||||||
|
import jakarta.annotation.Priority;
|
||||||
|
import jakarta.annotation.security.DeclareRoles;
|
||||||
|
import jakarta.annotation.security.RunAs;
|
||||||
|
import jakarta.ejb.LocalBean;
|
||||||
|
import jakarta.ejb.Stateless;
|
||||||
|
import jakarta.enterprise.event.Observes;
|
||||||
|
import jakarta.interceptor.Interceptor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Der DatevService entscheidet welches File Exportiert werden soll.
|
||||||
|
*
|
||||||
|
* @author rsoika
|
||||||
|
*/
|
||||||
|
|
||||||
|
@DeclareRoles({ "org.imixs.ACCESSLEVEL.MANAGERACCESS" })
|
||||||
|
@RunAs("org.imixs.ACCESSLEVEL.MANAGERACCESS")
|
||||||
|
@Stateless
|
||||||
|
@LocalBean
|
||||||
|
public class SuperOfficeDatevService {
|
||||||
|
|
||||||
|
private static Logger logger = Logger.getLogger(SuperOfficeDatevService.class.getName());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method reacts on CDI events of the type DatevEvent und gibt das richtige
|
||||||
|
* PDF zurück.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void onDatevEvent(@Observes @Priority(Interceptor.Priority.APPLICATION + 600) DatevEvent event) {
|
||||||
|
ItemCollection invoice = event.getWorkitem();
|
||||||
|
|
||||||
|
if (event.getEventType() == DatevEvent.ON_EXPORT_FILE) {
|
||||||
|
|
||||||
|
// nur für Ausgangsrechnungen interessant - ansonsten default verhalten nutzen
|
||||||
|
if (invoice.getModelVersion().startsWith("rechnungsausgang")) {
|
||||||
|
// wir nehmen das erste PDF das mir "R" beginnt.
|
||||||
|
|
||||||
|
FileData lastFileData = null;
|
||||||
|
List<FileData> fileDataList = invoice.getFileData();
|
||||||
|
for (FileData fileData : fileDataList) {
|
||||||
|
// we are only interested in files with sufix .pdf
|
||||||
|
// and start with "R"
|
||||||
|
if (!fileData.getName().toLowerCase().endsWith(".pdf")) {
|
||||||
|
// not a PDF file...
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!fileData.getName().toLowerCase().startsWith("r")) {
|
||||||
|
// ist keine Rechnung
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lastFileData == null) {
|
||||||
|
lastFileData = fileData;
|
||||||
|
} else {
|
||||||
|
// compare the $creation date....
|
||||||
|
ItemCollection attributes = new ItemCollection(fileData.getAttributes());
|
||||||
|
ItemCollection lastAttributes = new ItemCollection(lastFileData.getAttributes());
|
||||||
|
|
||||||
|
Date date = attributes.getItemValueDate("$created");
|
||||||
|
Date lastDate = lastAttributes.getItemValueDate("$created");
|
||||||
|
if (date != null && lastDate != null && (date.compareTo(lastDate) > 0)) {
|
||||||
|
// this is a newer fileData!
|
||||||
|
lastFileData = fileData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lastFileData != null) {
|
||||||
|
event.setFileData(lastFileData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
98
src/main/java/com/imixs/intern/SuperOfficePlugin.java
Normal file
98
src/main/java/com/imixs/intern/SuperOfficePlugin.java
Normal file
|
|
@ -0,0 +1,98 @@
|
||||||
|
package com.imixs.intern;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import org.imixs.workflow.ItemCollection;
|
||||||
|
import org.imixs.workflow.engine.DocumentService;
|
||||||
|
import org.imixs.workflow.engine.plugins.AbstractPlugin;
|
||||||
|
import org.imixs.workflow.exceptions.PluginException;
|
||||||
|
|
||||||
|
import jakarta.inject.Inject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dieses Plugin berechnet die bezeihung Kunde->Auftrag->Requreimeent, usw....
|
||||||
|
*
|
||||||
|
* @author rsoika
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class SuperOfficePlugin extends AbstractPlugin {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
DocumentService documentService;
|
||||||
|
|
||||||
|
private static Logger logger = Logger.getLogger(StatistikPlugin.class
|
||||||
|
.getName());
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Skip if not a workitem and only run once a day!
|
||||||
|
*
|
||||||
|
* @throws PluginException
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
@Override
|
||||||
|
public ItemCollection run(ItemCollection workitem, ItemCollection documentActivity) throws PluginException {
|
||||||
|
|
||||||
|
ItemCollection kontakt = null;
|
||||||
|
ItemCollection auftrag = null;
|
||||||
|
List<String> refs = workitem.getItemValueList("$workitemref", String.class);
|
||||||
|
|
||||||
|
if ("Auftrag".equals(workitem.getWorkflowGroup())) {
|
||||||
|
// find Kontakt
|
||||||
|
kontakt = findKontakt(workitem);
|
||||||
|
if (kontakt != null) {
|
||||||
|
// update kontakt info.....
|
||||||
|
workitem.setItemValue("contact.name", kontakt.getItemValueString("_subject"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("Requirement".equals(workitem.getWorkflowGroup())) {
|
||||||
|
// find Auftrag
|
||||||
|
auftrag = findAuftrag(workitem);
|
||||||
|
|
||||||
|
if (auftrag != null) {
|
||||||
|
// kontakt = findKontakt(auftrag);
|
||||||
|
// update kontakt info.....
|
||||||
|
workitem.setItemValue("order.name", auftrag.getItemValueString("_subject"));
|
||||||
|
workitem.setItemValue("contact.name", auftrag.getItemValueString("contact.name"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// convert efforts into a number
|
||||||
|
String ef = workitem.getItemValueString("_effort_planed");
|
||||||
|
ef = ef.replace(",", ".");
|
||||||
|
workitem.setItemValue("_effort_planed", Double.parseDouble(ef));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return workitem;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ItemCollection findKontakt(ItemCollection workitem) {
|
||||||
|
ItemCollection result = null;
|
||||||
|
List<String> refs = workitem.getItemValueList("$workitemref", String.class);
|
||||||
|
for (String _id : refs) {
|
||||||
|
ItemCollection _workitem = documentService.load(_id);
|
||||||
|
if (_workitem != null && "Kontakt".equals(_workitem.getItemValueString("$workflowgroup"))) {
|
||||||
|
result = _workitem;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ItemCollection findAuftrag(ItemCollection workitem) {
|
||||||
|
ItemCollection result = null;
|
||||||
|
List<String> refs = workitem.getItemValueList("$workitemref", String.class);
|
||||||
|
for (String _id : refs) {
|
||||||
|
ItemCollection _workitem = documentService.load(_id);
|
||||||
|
if (_workitem != null && "Auftrag".equals(_workitem.getItemValueString("$workflowgroup"))) {
|
||||||
|
result = _workitem;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
Manifest-Version: 1.0
|
|
||||||
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
|
|
||||||
version="2.1">
|
|
||||||
<!--
|
|
||||||
Imixs JPA definition Make sure that the imixs-workflow-jee library
|
|
||||||
version maches the version provided by the EAR/EJB
|
|
||||||
-->
|
|
||||||
<!-- eclipselink -->
|
|
||||||
<persistence-unit name="org.imixs.workflow.jpa" transaction-type="JTA">
|
|
||||||
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
|
|
||||||
<jta-data-source>${imixs-office.jta-data-source}</jta-data-source>
|
|
||||||
<jar-file>lib/imixs-workflow-engine-${org.imixs.workflow.version}.jar</jar-file>
|
|
||||||
<jar-file>lib/imixs-marty-${org.imixs.marty.version}.jar</jar-file>
|
|
||||||
<properties>
|
|
||||||
<!-- target-database Auto MySQL PostgreSQL -->
|
|
||||||
<property name="eclipselink.target-database" value="Auto" />
|
|
||||||
|
|
||||||
<!-- <property name="eclipselink.ddl-generation" value="create-tables" /> -->
|
|
||||||
<!-- optional extend schema... -->
|
|
||||||
<property name="eclipselink.ddl-generation" value="create-or-extend-tables" />
|
|
||||||
<property name="eclipselink.deploy-on-startup" value="true" />
|
|
||||||
<property name="eclipselink.logging.level" value="INFO" />
|
|
||||||
|
|
||||||
</properties>
|
|
||||||
</persistence-unit>
|
|
||||||
|
|
||||||
</persistence>
|
|
||||||
15
src/main/webapp/layout/commandbox_admin_custom.xhtml
Normal file
15
src/main/webapp/layout/commandbox_admin_custom.xhtml
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
<f:subview xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:f="http://java.sun.com/jsf/core"
|
||||||
|
xmlns:h="http://java.sun.com/jsf/html"
|
||||||
|
xmlns:ui="http://java.sun.com/jsf/facelets">
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><h:link outcome="/pages/admin/document_import">Dokument Import</h:link></li>
|
||||||
|
<!-- SEPA -->
|
||||||
|
<li><h:link outcome="/pages/admin/sepa_config">SEPA</h:link></li>
|
||||||
|
<li><h:link outcome="/pages/admin/datev_config">DATEV</h:link></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</f:subview>
|
||||||
|
|
||||||
|
|
||||||
791
src/main/webapp/layout/js/imixs-script-1.0.1.js
Normal file
791
src/main/webapp/layout/js/imixs-script-1.0.1.js
Normal file
|
|
@ -0,0 +1,791 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Imixs Workflow - jQUery API Copyright (C) 2012 Imixs Software Solutions GmbH,
|
||||||
|
* http://www.imixs.com
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License as published by the Free Software
|
||||||
|
* Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* You can receive a copy of the GNU General Public License at
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* Project: http://www.imixs.org
|
||||||
|
*
|
||||||
|
* Contributors: Imixs Software Solutions GmbH - initial API and implementation
|
||||||
|
* Ralph Soika - Software Developer
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
var imixsServiceLocationURI = null;
|
||||||
|
var defaultModelVersion = null;
|
||||||
|
var defaultProcessID = null;
|
||||||
|
var requestLocale = null;
|
||||||
|
var defaultActionClass = null;
|
||||||
|
var cancelActionLabel = "Cancel";
|
||||||
|
var defaultImage = "images/default.gif";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper method to test for HTML 5 localStorage...
|
||||||
|
*
|
||||||
|
* @returns {Boolean}
|
||||||
|
*/
|
||||||
|
function hasLocalStorage() {
|
||||||
|
try {
|
||||||
|
return 'localStorage' in window && window['localStorage'] !== null;
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is used to setup the workflow service
|
||||||
|
*
|
||||||
|
* @param aLocation -
|
||||||
|
* prafix for RESTService URI
|
||||||
|
* @param aDefaultModel -
|
||||||
|
* default model version
|
||||||
|
* @param aDefaultProcess -
|
||||||
|
* default ProcessID
|
||||||
|
*/
|
||||||
|
function setupWorkflowService(aLocation, aDefaultModel, aDefaultProcessID) {
|
||||||
|
imixsServiceLocationURI = aLocation;
|
||||||
|
defaultModelVersion = aDefaultModel;
|
||||||
|
defaultProcessID = aDefaultProcessID;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method set the default action class for workflow action buttons. If no
|
||||||
|
* class is specified all action buttons will be styled as jQuery-UI button
|
||||||
|
* classes.
|
||||||
|
*
|
||||||
|
* @param aClass
|
||||||
|
*/
|
||||||
|
function setDefaultActionClass(aClass) {
|
||||||
|
defaultActionClass = aClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overrides the default cancel button label.
|
||||||
|
*
|
||||||
|
* @param aLabel
|
||||||
|
*/
|
||||||
|
function setCancelActionLabel(aLabel) {
|
||||||
|
cancelActionLabel = aLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* this method clears the stored elements from the local cache
|
||||||
|
*
|
||||||
|
* @param identifier
|
||||||
|
*/
|
||||||
|
function clearWorkflowElement(identifier) {
|
||||||
|
// return if not html5 (IE7/8)
|
||||||
|
if (!hasLocalStorage())
|
||||||
|
return;
|
||||||
|
// alert('clearView....');
|
||||||
|
localStorage.removeItem("org.imixs.workflow." + identifier);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method load a collection of workItems defined by a REST service URI.
|
||||||
|
* After the Ajax request is finished successful the method calls
|
||||||
|
* refreshWorklistView() to print the result into a page element.
|
||||||
|
*
|
||||||
|
* The result is stored into the clients localStorage.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param service -
|
||||||
|
* rest uri to be called ( workflow/worklistbyowner/null.json)
|
||||||
|
* @param selector -
|
||||||
|
* jquery selector for result list output
|
||||||
|
*/
|
||||||
|
function loadWorkitems(service, selector) {
|
||||||
|
|
||||||
|
// we first test if we still have the workflow groups in the local storage
|
||||||
|
var data = null;
|
||||||
|
if (hasLocalStorage())
|
||||||
|
data = localStorage.getItem("org.imixs.workflow." + service);
|
||||||
|
if (data == null) {
|
||||||
|
// create the list of workitems using the RESTful service interface
|
||||||
|
var serviceURL = imixsServiceLocationURI + service;
|
||||||
|
if (serviceURL.indexOf('?') > -1)
|
||||||
|
serviceURL = serviceURL + "&";
|
||||||
|
else
|
||||||
|
serviceURL = serviceURL + "?";
|
||||||
|
$
|
||||||
|
.getJSON(
|
||||||
|
serviceURL,
|
||||||
|
{
|
||||||
|
count : "30",
|
||||||
|
start : "0",
|
||||||
|
items : "$uniqueid,txtworkflowgroup,txtworkflowstatus,txtworkflowsummary,txtworkflowimageurl,namcurrenteditor,$modified"
|
||||||
|
}, function(data) {
|
||||||
|
// json request finished store the worklist.....
|
||||||
|
if (hasLocalStorage())
|
||||||
|
localStorage.setItem("org.imixs.workflow."
|
||||||
|
+ service, JSON.stringify(data));
|
||||||
|
refreshWorklistView(service, selector);
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// use workflow groups from cache
|
||||||
|
refreshWorklistView(service, selector);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
jQuery.events = function(expr) {
|
||||||
|
|
||||||
|
var rez = [], evo;
|
||||||
|
jQuery(expr).each(function() {
|
||||||
|
if (evo = jQuery._data(this, "events"))
|
||||||
|
rez.push({
|
||||||
|
element : this,
|
||||||
|
events : evo
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return rez.length > 0 ? rez : null;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method fills the page element ID=worklist_view with the selected
|
||||||
|
* workitems in a default layout.
|
||||||
|
*
|
||||||
|
* The method can be overwritten by binding a event listener
|
||||||
|
*
|
||||||
|
* <code>
|
||||||
|
* $(document).on( "refreshWorklist", function(e, data,service) {
|
||||||
|
....
|
||||||
|
});
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* If no refreshWorklist event is bound the method prints the worklist in a
|
||||||
|
* default layout. A refreshWorlist handler can be bound to the global document
|
||||||
|
* or to a specific selector
|
||||||
|
*
|
||||||
|
* <code>
|
||||||
|
* $(document).on( "refreshWorklist", "#worklist", function(e, data,service) {
|
||||||
|
....
|
||||||
|
});
|
||||||
|
* </code>
|
||||||
|
*/
|
||||||
|
function refreshWorklistView(service, selector) {
|
||||||
|
|
||||||
|
var dataString = null;
|
||||||
|
var data = null;
|
||||||
|
if (hasLocalStorage()) {
|
||||||
|
dataString = localStorage.getItem("org.imixs.workflow." + service);
|
||||||
|
data = JSON.parse(dataString);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (data != null) {
|
||||||
|
// test if data.entity is an array....
|
||||||
|
if (!$.isArray(data.entity)) {
|
||||||
|
data.entity = jQuery.makeArray(data.entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// checking if an external general refreshWorklist method was bound
|
||||||
|
// there for we check the _data object for bound events....
|
||||||
|
var handlerFound = false;
|
||||||
|
var $ve = $._data(document, 'events');
|
||||||
|
if ($ve != null && typeof ($ve.refreshWorklist) != 'undefined') {
|
||||||
|
// the refreshWorklist method was bound! so now
|
||||||
|
// test if a binding for the current selector exists...
|
||||||
|
var handlerList = $ve.refreshWorklist;
|
||||||
|
$(handlerList).each(function(index) {
|
||||||
|
if (selector != null && selector == $(this).selector) {
|
||||||
|
// yes! we have a specific handler!
|
||||||
|
handlerFound = true;
|
||||||
|
// trigger handler
|
||||||
|
$(selector).trigger('refreshWorklist', [ data, service ]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (handlerFound) {
|
||||||
|
// return from method
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// no specific handler was found so we trigger the general handler
|
||||||
|
// trigger external refreshWorklist method
|
||||||
|
$(document).trigger('refreshWorklist', [ data, service ]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// we did not found any handler - so do default output
|
||||||
|
|
||||||
|
// clear list
|
||||||
|
$("#worklist_view").empty();
|
||||||
|
|
||||||
|
if (data == null) {
|
||||||
|
$("#worklist_view").append(
|
||||||
|
"<li class=\"workitem\">Keine Daten vorhanden</li>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// iterate over all workitems
|
||||||
|
$
|
||||||
|
.each(
|
||||||
|
data.entity,
|
||||||
|
function(i, workitem) {
|
||||||
|
|
||||||
|
var imgurl = workitem.item[4].value.$;
|
||||||
|
// take defualt image if no image url is provided
|
||||||
|
if (imgurl == null)
|
||||||
|
imgurl = defaultImage;
|
||||||
|
|
||||||
|
var img = "<div class=\"workitem-thumb\"><img class=\"\" src=\""
|
||||||
|
+ imgurl + "\" /></div>";
|
||||||
|
var p_status = "<span class=\"workitem-summary\"><b>"
|
||||||
|
+ workitem.item[1].value.$ + "</b>: "
|
||||||
|
+ workitem.item[2].value.$ + "</span>";
|
||||||
|
|
||||||
|
$("#worklist_view")
|
||||||
|
.append(
|
||||||
|
"<li class=\"workitem\" onclick=\"loadWorkitem('"
|
||||||
|
+ workitem.item[0].value.$
|
||||||
|
+ "');\">"
|
||||||
|
+ img
|
||||||
|
+ "<div class=\"workitem-info\"><h3><a href=\"#\">"
|
||||||
|
+ ""
|
||||||
|
+ workitem.item[3].value.$
|
||||||
|
+ "</a></h3>"
|
||||||
|
+ p_status
|
||||||
|
+ "</div><div style=\"clear:left;\" /></li>");
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// ############## Workitem ####################
|
||||||
|
|
||||||
|
/**
|
||||||
|
* this method loads a single workItem from the REST service and calls the
|
||||||
|
* method updateForm to print the content into a page. The optional selectorID
|
||||||
|
* specifies the area where the form data is placed. If no seletorId is given
|
||||||
|
* Imixs-Script searches for a section with the id #workitem_view.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param uid -
|
||||||
|
* $uniqueid of the workitem to be loaded
|
||||||
|
* @param selectorId -
|
||||||
|
* optinal param to define the section where the form data is filled
|
||||||
|
* in
|
||||||
|
*/
|
||||||
|
function loadWorkitem(uid, selectorId) {
|
||||||
|
|
||||||
|
if (selectorId == null || selectorId == "")
|
||||||
|
selectorId = '#workitem_view';
|
||||||
|
|
||||||
|
// allways reload the workitem!
|
||||||
|
var data = null;
|
||||||
|
// load the workitem by it's $uniqueid
|
||||||
|
$.getJSON(imixsServiceLocationURI + "workflow/workitem/" + uid + ".json?",
|
||||||
|
{
|
||||||
|
// items :
|
||||||
|
// "$uniqueid,$modelversion,$processid,txtworkflowgroup,txtworkflowstatus,txtworkflowsummary,txtworkflowimageurl,namcurrenteditor,$modified,txtworkflowabstract,_subject"
|
||||||
|
}, function(data) {
|
||||||
|
updateForm(data, selectorId);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method updates a page section with the current workitem data. The method
|
||||||
|
* also rebuilds the activity section
|
||||||
|
*
|
||||||
|
* @param aWorkitem -
|
||||||
|
* the data object
|
||||||
|
* @param aSelector -
|
||||||
|
* optinal param to define the section where the form data is filled
|
||||||
|
* in
|
||||||
|
*/
|
||||||
|
function updateForm(aWorkitem, aSelector) {
|
||||||
|
disableActivities(aSelector);
|
||||||
|
loadProcessEntity(aWorkitem);
|
||||||
|
loadActivityList(aWorkitem, aSelector);
|
||||||
|
updateInputFields(aWorkitem, aSelector);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method updates the input field values for all properties provided by the
|
||||||
|
* current workItem. The method only updates fields in specified selector. If no
|
||||||
|
* selectorId is provided the selectorId defaults to 'workitem_view'.
|
||||||
|
*
|
||||||
|
* Each value of an input element with a name corresponding to a item contained
|
||||||
|
* in the current Workitem will be updated.
|
||||||
|
*
|
||||||
|
* The method also clears all available Input fields (this is because of the
|
||||||
|
* case that a workItem did not provide a item for a specific input field. So in
|
||||||
|
* this case we need to clear the input in any case)
|
||||||
|
*
|
||||||
|
* @param aworkitem
|
||||||
|
* the workitem with the properties
|
||||||
|
* @param sectionid
|
||||||
|
* an optional selector
|
||||||
|
*/
|
||||||
|
function updateInputFields(aWorkitem, selectorId) {
|
||||||
|
|
||||||
|
if (selectorId == null || selectorId == "")
|
||||||
|
selectorId = '#workitem_view';
|
||||||
|
|
||||||
|
$(selectorId).trigger('beforeRefresh');
|
||||||
|
|
||||||
|
/* clear input fields... */
|
||||||
|
clear_form_elements(selectorId);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* next we test if an element with the current item name exists. Then the
|
||||||
|
* .text() method will replace the content
|
||||||
|
*/
|
||||||
|
$.each(aWorkitem.item, function(i, item) {
|
||||||
|
var tagName = selectorId + " [name=" + item.name + "]";
|
||||||
|
var tagValue = "";
|
||||||
|
|
||||||
|
if (item.value != null && item.value.$ != null)
|
||||||
|
tagValue = item.value.$;
|
||||||
|
|
||||||
|
// $ is not allowed in a id because of jquery internals...
|
||||||
|
tagName = tagName.replace('$', '\\$');
|
||||||
|
if ($(tagName).length > 0) {
|
||||||
|
$(tagName).val(tagValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
// see http://stackoverflow.com/questions/399867/custom-events-in-jquery
|
||||||
|
$(selectorId).trigger('afterRefresh', aWorkitem);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method ad action buttons for the current workitem into the selectorID.
|
||||||
|
* Each activity for the current processID will result in a button. The method
|
||||||
|
* did not add activity buttons with the activityEntity property
|
||||||
|
* keypublicresult!=0.
|
||||||
|
*
|
||||||
|
* The method also adds all necessary hidden fields for processing a workitem.
|
||||||
|
*
|
||||||
|
* @param workitem -
|
||||||
|
* the current workitem
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function updateActivities(workitem, selectorId) {
|
||||||
|
|
||||||
|
if (selectorId == null || selectorId == "")
|
||||||
|
selectorId = '#workitem_view';
|
||||||
|
|
||||||
|
var modelversion = getEntityItemValue(workitem, "$modelversion");
|
||||||
|
var processid = getEntityItemValue(workitem, "$processid");
|
||||||
|
var unqiueid = getEntityItemValue(workitem, "$uniqueid");
|
||||||
|
var isauthor = getEntityItemValue(workitem, "$isauthor");
|
||||||
|
|
||||||
|
// iterate over all activity entities
|
||||||
|
var dataString = null;
|
||||||
|
var currentActivityList = null;
|
||||||
|
if (hasLocalStorage()) {
|
||||||
|
dataString = localStorage.getItem("org.imixs.workflow.activities."
|
||||||
|
+ modelversion + "." + processid);
|
||||||
|
currentActivityList = JSON.parse(dataString);
|
||||||
|
}
|
||||||
|
|
||||||
|
// clear list
|
||||||
|
$(selectorId + " #workitem_activities").empty();
|
||||||
|
|
||||||
|
// iterarte over all activities if available...
|
||||||
|
// activities will be only shown is workitem isNew or user isAuthor
|
||||||
|
if (currentActivityList != null && (unqiueid == "" || isauthor == "true")) {
|
||||||
|
// test if currentActivityList.entity is an array....
|
||||||
|
if (!$.isArray(currentActivityList.entity))
|
||||||
|
currentActivityList.entity = jQuery
|
||||||
|
.makeArray(currentActivityList.entity);
|
||||||
|
// iterate over all activities to build buttons...
|
||||||
|
$
|
||||||
|
.each(currentActivityList.entity,
|
||||||
|
function(i, activity) {
|
||||||
|
// only add button if keypublicresult!=0
|
||||||
|
var testPublicResult = getEntityItemValue(activity,
|
||||||
|
"keypublicresult");
|
||||||
|
if ("0" != testPublicResult) {
|
||||||
|
var actionName = getEntityItemValue(activity,
|
||||||
|
"txtname");
|
||||||
|
var actionID = getEntityItemValue(activity,
|
||||||
|
"numactivityid");
|
||||||
|
var tooltipText = getEntityItemValue(activity,
|
||||||
|
"rtfdescription");
|
||||||
|
addActionButton(selectorId, actionName,
|
||||||
|
actionID, false, tooltipText);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// append the cancel button
|
||||||
|
$(selectorId + " #workitem_activities").append(
|
||||||
|
"<input id=\"workflow_activity_cancel\" type=\"button\" value=\""
|
||||||
|
+ cancelActionLabel + "\"></input>");
|
||||||
|
// bind clearWorkitem method
|
||||||
|
// we need to bind the click method using jquery because otherwise external
|
||||||
|
// code can not unbind this call
|
||||||
|
$(selectorId + " #workitem_activities #workflow_activity_cancel").click(
|
||||||
|
function(event) {
|
||||||
|
clearWorkitem(selectorId);
|
||||||
|
});
|
||||||
|
|
||||||
|
// add $unqiueid, $modelversion, $activitid and $processid input fields if
|
||||||
|
// yet not part of the form
|
||||||
|
// $ is not allowed in a id because of jquery internals...
|
||||||
|
if ($(selectorId + " [name=\\$activityid]").length <= 0)
|
||||||
|
$(selectorId + " #workitem_activities").append(
|
||||||
|
"<input type=\"hidden\" name=\"$activityid\"></input>");
|
||||||
|
if ($(selectorId + " [name=\\$processid]").length <= 0)
|
||||||
|
$(selectorId + " #workitem_activities").append(
|
||||||
|
"<input type=\"hidden\" name=\"$processid\" value=\""
|
||||||
|
+ processid + "\"></input>");
|
||||||
|
if ($(selectorId + " [name=\\$uniqueid]").length <= 0)
|
||||||
|
$(selectorId + " #workitem_activities").append(
|
||||||
|
"<input type=\"hidden\" name=\"$uniqueid\" value=\"" + unqiueid
|
||||||
|
+ "\"></input>");
|
||||||
|
if ($(selectorId + " [name=\\$modelversion]").length <= 0)
|
||||||
|
$(selectorId + " #workitem_activities").append(
|
||||||
|
"<input type=\"hidden\" name=\"$modelversion\" value=\""
|
||||||
|
+ modelversion + "\"></input>");
|
||||||
|
if ($(selectorId + " [name=type]").length <= 0)
|
||||||
|
$(selectorId + " #workitem_activities")
|
||||||
|
.append(
|
||||||
|
"<input type=\"hidden\" name=\"type\" value=\"workitem\"></input>");
|
||||||
|
|
||||||
|
// finally style all buttons...
|
||||||
|
var sActionSelector = selectorId + " #workitem_activities input:button, "
|
||||||
|
+ selectorId + " #workitem_activities input:submit";
|
||||||
|
if (defaultActionClass == null)
|
||||||
|
$(sActionSelector).button();
|
||||||
|
else
|
||||||
|
$(sActionSelector).addClass(defaultActionClass);
|
||||||
|
|
||||||
|
/* Imixs Tooltip support */
|
||||||
|
// test if juery ui is availalbe....
|
||||||
|
if ($.fn.tooltip) {
|
||||||
|
|
||||||
|
$("span.imixs-tooltip").prev().tooltip({
|
||||||
|
position : {
|
||||||
|
my : "left top+5",
|
||||||
|
at : "left+10 bottom",
|
||||||
|
collision : "flipfit"
|
||||||
|
},
|
||||||
|
show : {
|
||||||
|
duration : 800
|
||||||
|
},
|
||||||
|
content : function() {
|
||||||
|
var tooltip = $(this).next();
|
||||||
|
tooltip.hide();
|
||||||
|
return tooltip.text();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// hide all imixs tooltips
|
||||||
|
$("span.imixs-tooltip").hide();
|
||||||
|
} // end of tooltip support
|
||||||
|
|
||||||
|
// trigger afterRefresh event
|
||||||
|
$(selectorId + ' #workitem_activities').trigger('afterRefresh', workitem);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clears all input fiels inside the given formpart
|
||||||
|
*/
|
||||||
|
function clear_form_elements(formpart) {
|
||||||
|
|
||||||
|
$(formpart).find(':input').each(function() {
|
||||||
|
switch (this.type) {
|
||||||
|
case 'text':
|
||||||
|
case 'hidden':
|
||||||
|
case 'password':
|
||||||
|
case 'select-multiple':
|
||||||
|
case 'select-one':
|
||||||
|
case 'textarea':
|
||||||
|
$(this).val('');
|
||||||
|
break;
|
||||||
|
case 'checkbox':
|
||||||
|
case 'radio':
|
||||||
|
this.checked = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method create a new empty workitem and clears also the workitem_view
|
||||||
|
*/
|
||||||
|
function clearWorkitem(selectorId) {
|
||||||
|
if (selectorId == null || selectorId == "")
|
||||||
|
selectorId = '#workitem_view';
|
||||||
|
|
||||||
|
newWorkitem = {
|
||||||
|
"item" : [ {
|
||||||
|
"name" : "$processid",
|
||||||
|
"value" : {
|
||||||
|
"@type" : "xs:int",
|
||||||
|
"$" : defaultProcessID
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"name" : "$modelversion",
|
||||||
|
"value" : {
|
||||||
|
"@type" : "xs:string",
|
||||||
|
"$" : defaultModelVersion
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"name" : "_subject",
|
||||||
|
"value" : {
|
||||||
|
"@type" : "xs:string",
|
||||||
|
"$" : ""
|
||||||
|
}
|
||||||
|
} ]
|
||||||
|
};
|
||||||
|
|
||||||
|
updateForm(newWorkitem, selectorId);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method loads the specifiy processEntity. The method uses the
|
||||||
|
* localStorage to cache processEntities already loaded
|
||||||
|
*
|
||||||
|
* @param workitem -
|
||||||
|
* the current workitem
|
||||||
|
*/
|
||||||
|
function loadProcessEntity(workitem, selectorId) {
|
||||||
|
|
||||||
|
var processid = null;
|
||||||
|
var modelversion = null;
|
||||||
|
|
||||||
|
// read processID and model version.....
|
||||||
|
$.each(workitem.item, function(i, item) {
|
||||||
|
|
||||||
|
if (item.name == "$modelversion")
|
||||||
|
modelversion = item.value.$;
|
||||||
|
if (item.name == "$processid")
|
||||||
|
processid = item.value.$;
|
||||||
|
|
||||||
|
if (modelversion != null && processid != null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
// we first test if we still have the Entity in the local storage
|
||||||
|
var currentProcessEntity = null;
|
||||||
|
if (hasLocalStorage())
|
||||||
|
currentProcessEntity = localStorage
|
||||||
|
.getItem("org.imixs.workflow.process." + modelversion + "."
|
||||||
|
+ processid);
|
||||||
|
if (currentProcessEntity == null) {
|
||||||
|
// now we need to load the model information from the rest service...
|
||||||
|
$
|
||||||
|
.getJSON(imixsServiceLocationURI + "model/" + modelversion
|
||||||
|
+ "/process/" + processid + ".json",
|
||||||
|
function(data) {
|
||||||
|
// cache the result
|
||||||
|
if (hasLocalStorage())
|
||||||
|
localStorage.setItem(
|
||||||
|
"org.imixs.workflow.process."
|
||||||
|
+ modelversion + "."
|
||||||
|
+ processid, JSON
|
||||||
|
.stringify(data));
|
||||||
|
refreshWorkitemProcessView(currentProcessEntity,
|
||||||
|
selectorId);
|
||||||
|
});
|
||||||
|
} else
|
||||||
|
refreshWorkitemProcessView(currentProcessEntity, selectorId);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method loads the specifiy activitylist. The method uses the localStorage
|
||||||
|
* to cache Entities already loaded
|
||||||
|
*
|
||||||
|
* @param workitem -
|
||||||
|
* the current workitem
|
||||||
|
*
|
||||||
|
* @param selectorId -
|
||||||
|
* optional param to force a refresh of a specific section
|
||||||
|
*/
|
||||||
|
function loadActivityList(workitem, selectorId) {
|
||||||
|
|
||||||
|
var modelversion = getEntityItemValue(workitem, "$modelversion");
|
||||||
|
var processid = getEntityItemValue(workitem, "$processid");
|
||||||
|
|
||||||
|
// we first test if we still have the Entity in the local storage
|
||||||
|
var currentProcessEntity = null;
|
||||||
|
if (hasLocalStorage())
|
||||||
|
currentProcessEntity = localStorage
|
||||||
|
.getItem("org.imixs.workflow.activities." + modelversion + "."
|
||||||
|
+ processid);
|
||||||
|
if (currentProcessEntity == null) {
|
||||||
|
// now we need to load the model information from the rest service...
|
||||||
|
$.getJSON(
|
||||||
|
imixsServiceLocationURI + "model/" + modelversion
|
||||||
|
+ "/activities/" + processid + ".json",
|
||||||
|
function(data) {
|
||||||
|
// cache the result
|
||||||
|
if (hasLocalStorage())
|
||||||
|
localStorage.setItem("org.imixs.workflow.activities."
|
||||||
|
+ modelversion + "." + processid, JSON
|
||||||
|
.stringify(data));
|
||||||
|
updateActivities(workitem, selectorId);
|
||||||
|
}).error(function() {
|
||||||
|
// if an error occur we also need to update the activityview....
|
||||||
|
updateActivities(workitem, selectorId);
|
||||||
|
});
|
||||||
|
} else
|
||||||
|
updateActivities(workitem, selectorId);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* this method writes the html code for the current ProcessEntity into the
|
||||||
|
* element workitem_view
|
||||||
|
*
|
||||||
|
* @param aProcessEntity
|
||||||
|
* the aProcessEntity to be loaded
|
||||||
|
*/
|
||||||
|
function refreshWorkitemProcessView(aprocessEntity, selectorId) {
|
||||||
|
// ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called by the loadWorkitem() method to disable any action
|
||||||
|
* buttons from the current form until the workitem_view is refreshed
|
||||||
|
* completley. This is only a helper method to avoid inconsistent submits if the
|
||||||
|
* refresh process of the workitem_view will break for any reason.
|
||||||
|
*/
|
||||||
|
function disableActivities(selectorId) {
|
||||||
|
$(':input:button, :input:submit', selectorId + ' #workitem_activities')
|
||||||
|
.each(function() {
|
||||||
|
// disable the button...
|
||||||
|
$(this).attr('disabled', 'disabled');
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a workflow action buttion int a defined section
|
||||||
|
*
|
||||||
|
* @param selectorId -
|
||||||
|
* the name of the section the buttion should be placed in
|
||||||
|
* @param actionName -
|
||||||
|
* the name of the button
|
||||||
|
* @param activityID -
|
||||||
|
* the activity entity ID to be processed
|
||||||
|
* @param tooltipText -
|
||||||
|
* optional tooltip for the button
|
||||||
|
* @param bInsert -
|
||||||
|
* optional, if true the button will be inserted at the first child
|
||||||
|
* element of the selectior
|
||||||
|
*/
|
||||||
|
function addActionButton(selectorId, actionName, activityID, bInsert,
|
||||||
|
tooltipText) {
|
||||||
|
if (selectorId == null || selectorId == "")
|
||||||
|
selectorId = '#workitem_view';
|
||||||
|
|
||||||
|
// test if selector was found
|
||||||
|
if ($(selectorId + " #workitem_activities").length) {
|
||||||
|
|
||||||
|
// build conclick event....
|
||||||
|
var activityScript = "onclick=\"processWorkitem('" + activityID + "');";
|
||||||
|
|
||||||
|
// build tooltip span tag
|
||||||
|
var tooltip = "";
|
||||||
|
if (tooltipText != "")
|
||||||
|
tooltip = "<span class=\"imixs-tooltip\">" + tooltipText
|
||||||
|
+ "</span>";
|
||||||
|
|
||||||
|
// insert at the bginning of the tag?
|
||||||
|
if (bInsert)
|
||||||
|
$(selectorId + " #workitem_activities").prepend(
|
||||||
|
"<input type=\"submit\" id=\"workflow_activity_"
|
||||||
|
+ activityID + "\" value=\"" + actionName + "\" "
|
||||||
|
+ activityScript + "\"title=\"\"></input>");
|
||||||
|
else
|
||||||
|
$(selectorId + " #workitem_activities").append(
|
||||||
|
"<input type=\"submit\" id=\"workflow_activity_"
|
||||||
|
+ activityID + "\" value=\"" + actionName + "\" "
|
||||||
|
+ activityScript + "\"title=\"\"></input>"
|
||||||
|
+ tooltip);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method updates the $activityid input field .
|
||||||
|
*
|
||||||
|
* @param activityid
|
||||||
|
*/
|
||||||
|
function processWorkitem(activityid) {
|
||||||
|
$('#workitem_view').trigger('beforeProcess');
|
||||||
|
|
||||||
|
var tagName = "#workitem_activities [name=\\$activityid]";
|
||||||
|
if ($(tagName).length > 0) {
|
||||||
|
$(tagName).val(activityid);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the value of a specified item inside an entity. Maybe we
|
||||||
|
* can optimize the method???
|
||||||
|
*
|
||||||
|
* @param entity
|
||||||
|
*/
|
||||||
|
function getEntityItemValue(entity, itemname) {
|
||||||
|
var value = "";
|
||||||
|
$.each(entity.item, function(i, item) {
|
||||||
|
if (item.name == itemname) {
|
||||||
|
if (item.value != null) {
|
||||||
|
|
||||||
|
if ($.isArray(item.value))
|
||||||
|
value = item.value[0].$;
|
||||||
|
else
|
||||||
|
value = item.value.$;
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return value;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the value of a specified item inside an entity. Maybe we
|
||||||
|
* can optimize the method???
|
||||||
|
*
|
||||||
|
* @param entity
|
||||||
|
*/
|
||||||
|
function getEntityItemValueArray(entity, itemname) {
|
||||||
|
var value = "";
|
||||||
|
$.each(entity.item, function(i, item) {
|
||||||
|
if (item.name == itemname) {
|
||||||
|
if (item.value != null) {
|
||||||
|
|
||||||
|
if ($.isArray(item.value))
|
||||||
|
value = item.value;
|
||||||
|
else
|
||||||
|
value = jQuery.makeArray(item.value);
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return value;
|
||||||
|
|
||||||
|
}
|
||||||
320
src/main/webapp/pages/admin/datev_config.xhtml
Normal file
320
src/main/webapp/pages/admin/datev_config.xhtml
Normal file
|
|
@ -0,0 +1,320 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:f="http://java.sun.com/jsf/core"
|
||||||
|
xmlns:h="http://java.sun.com/jsf/html"
|
||||||
|
xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||||
|
xmlns:i="http://java.sun.com/jsf/composite/imixs"
|
||||||
|
xmlns:c="http://java.sun.com/jsp/jstl/core"
|
||||||
|
xmlns:marty="http://java.sun.com/jsf/composite/marty"
|
||||||
|
template="/layout/template.xhtml">
|
||||||
|
|
||||||
|
<ui:define name="content">
|
||||||
|
<f:view>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
/*<![CDATA[*/
|
||||||
|
function updateStatustPanel(data) {
|
||||||
|
//initUserInput($('#userselector_id'));
|
||||||
|
if (data.status === 'success') {
|
||||||
|
// select with wildcard operator
|
||||||
|
$('[id$=status_panel]').imixsLayout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*]]>*/
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<h:form id="import_form_id" enctype="multipart/form-data">
|
||||||
|
|
||||||
|
<div class="imixs-form">
|
||||||
|
<div class="imixs-header">
|
||||||
|
<h1>DATEV</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="imixs-body">
|
||||||
|
<div class="imixs-tabs">
|
||||||
|
<ul>
|
||||||
|
<li><a href="#tab-1">Einstellungen</a></li>
|
||||||
|
<li><a href="#tab-2">Import</a></li>
|
||||||
|
<li><a href="#tab-3">Export</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div id="tab-1">
|
||||||
|
<!-- **** Einstellungen ***** -->
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<div class="ui-state-highlight ui-corner-all"
|
||||||
|
style="margin-bottom: 10px; padding: .5em;">
|
||||||
|
<h3>DATEV Einstellungen</h3>
|
||||||
|
<p>Definieren Sie hier die DATEV Parameter die Ihnen von Ihrem Steuerberater mitgeteilt wurden.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>DATEV Mandant Name</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText required="false"
|
||||||
|
value="#{datevController.configuration.item['datev.client.name']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>DATEV Mandantennummer </dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText required="false"
|
||||||
|
value="#{datevController.configuration.item['datev.client.id']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
DATEV Beraternummer <span class="imixs-required">*</span>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText required="true"
|
||||||
|
value="#{datevController.configuration.item['datev.consultant.id']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>BU Schlüssel:</dt>
|
||||||
|
<dd>
|
||||||
|
|
||||||
|
<h:inputTextarea required="false"
|
||||||
|
converter="org.imixs.VectorConverter"
|
||||||
|
style="height: 8em; width: 100%;"
|
||||||
|
value="#{datevController.configuration.itemList['datev.buschluessel']}">
|
||||||
|
</h:inputTextarea>
|
||||||
|
<span style="font-size:0.7rem;">Format: BEZEICHNUNG | DATEV_BU_SCHLUESSEL | PROZENTSATZ</span>
|
||||||
|
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
DATEV WJ-Beginn (MMTT) <span class="imixs-required">* <h:message
|
||||||
|
for="fiscalstart" /></span>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{datevController.configuration.item['datev.fiscal_start']}"
|
||||||
|
id="fiscalstart" required="false"/>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>DATEV Sachkontennummernlänge</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText
|
||||||
|
value="#{datevController.configuration.item['datev.sachkontennummernlaenge']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>Kostenstelle I. (Nummer|Bezeichnung)</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputTextarea required="false"
|
||||||
|
converter="org.imixs.VectorConverter"
|
||||||
|
style="height: 8em; width: 100%;"
|
||||||
|
value="#{datevController.configuration.itemList['datev.kostenstelle1']}">
|
||||||
|
</h:inputTextarea>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>Kostenstellen II. (Nummer|Bezeichnung)</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputTextarea required="false"
|
||||||
|
converter="org.imixs.VectorConverter"
|
||||||
|
style="height: 8em; width: 100%;"
|
||||||
|
value="#{datevController.configuration.itemList['datev.kostenstelle2']}">
|
||||||
|
</h:inputTextarea>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="tab-2">
|
||||||
|
<!-- **** DATEV import ***** -->
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<div class="ui-state-highlight ui-corner-all"
|
||||||
|
style="margin-bottom: 10px; padding: .5em;">
|
||||||
|
<h3>Import DATEV Stammdaten</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Fügen Sie hier die zu importierende DATEV Datei an.</li>
|
||||||
|
<li>Die Datei muss im CSV Format vorliegen.</li>
|
||||||
|
|
||||||
|
<li>Die Datei muss zwei Header Zeilen enthalten:
|
||||||
|
<ol>
|
||||||
|
<li>Zeile: Datenart - z.B. "Kontobeschriftungen"</li>
|
||||||
|
<li>Zeile: Feldbezeichnungen - z.B. "Konto,
|
||||||
|
Kontobezeichnung"</li>
|
||||||
|
</ol>
|
||||||
|
</li>
|
||||||
|
<li>Fügen Sie immer nur eine Datei für den Import an!</li>
|
||||||
|
<li>Der Import kann einige Minuten in Anspruch nehmen.</li>
|
||||||
|
<li>Brechen Sie den Vorgang nicht ab und warten Sie bis
|
||||||
|
der Import vollständig abgeschlossen ist.</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>Importdatei wählen:</dt>
|
||||||
|
<dd>
|
||||||
|
<i:imixsFileUpload id="file_upload_id"
|
||||||
|
workitem="#{datevController.importData}"
|
||||||
|
context_url="#{facesContext.externalContext.requestContextPath}/rest-service/workflow/workitem/#{workflowController.workitem.item['$uniqueid']}"
|
||||||
|
hideatachments="true" />
|
||||||
|
<h:panelGroup layout="block"
|
||||||
|
styleClass="ui-state-highlight ui-corner-all"
|
||||||
|
style="margin-bottom: 10px; padding: .5em;"
|
||||||
|
rendered="#{! empty datevController.importData.item['log']}">
|
||||||
|
<pre>#{datevController.importData.item['log']}</pre>
|
||||||
|
|
||||||
|
</h:panelGroup>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>Encoding </dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText required="false" style="width: 220px;"
|
||||||
|
value="#{datevController.configuration.item['datev.encoding']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<h:commandButton
|
||||||
|
actionListener="#{datevController.startImport}"
|
||||||
|
value="Start Import">
|
||||||
|
</h:commandButton>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="tab-3">
|
||||||
|
|
||||||
|
<!-- **** Export Buchunsstapel ***** -->
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<div class="ui-state-highlight ui-corner-all"
|
||||||
|
style="margin-bottom: 10px; padding: .5em;">
|
||||||
|
<h3>Export DATEV Buchungsstapel</h3>
|
||||||
|
<p>Definieren Sie hier den Export Workflow sowie die Reportdefinition.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h:panelGroup layout="block" id="report_selection"
|
||||||
|
styleClass="imixs-form-section-2">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
DATEV Schnittstellen-Typ <span class="imixs-required">*</span>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:selectOneRadio
|
||||||
|
value="#{datevController.configuration.item['export.type']}"
|
||||||
|
required="true">
|
||||||
|
<f:selectItem itemValue="xml"
|
||||||
|
itemLabel="DATEV Belegsatzschnittstelle im XML-Format"></f:selectItem>
|
||||||
|
<f:selectItem itemValue="csv"
|
||||||
|
itemLabel="DATEV-Format (csv)"></f:selectItem>
|
||||||
|
<f:ajax render="report_selection"/>
|
||||||
|
</h:selectOneRadio>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
DATEV Report Definitionen <span class="imixs-required">*</span>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
Belegexport:
|
||||||
|
<h:inputText required="true"
|
||||||
|
value="#{datevController.configuration.item['report.invoices']}">
|
||||||
|
</h:inputText>
|
||||||
|
|
||||||
|
<h:panelGroup
|
||||||
|
rendered="#{'xml' eq datevController.configuration.item['export.type']}">
|
||||||
|
<br />
|
||||||
|
Dokumente: <h:inputText required="false"
|
||||||
|
value="#{datevController.configuration.item['report.documents']}">
|
||||||
|
</h:inputText>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</h:panelGroup>
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
DATEV Model Version <span class="imixs-required">*</span>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText required="true"
|
||||||
|
value="#{datevController.configuration.item['model.version']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
DATEV Initial Task <span class="imixs-required">*</span>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText required="true"
|
||||||
|
value="#{datevController.configuration.item['initial.task']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<p>
|
||||||
|
<span class="typcn typcn-lightbulb"></span> Der Initaltask
|
||||||
|
muss einen Report definieren, der die Abfrage und das Stylesheet enthält.
|
||||||
|
Die Rechnungen werden automatisch nach dem
|
||||||
|
Attribut "datev.client.id" sowie der Buchungsperiode gruppiert.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-footer">
|
||||||
|
<h:outputLabel value="#{message.modified}: " />
|
||||||
|
<h:outputText
|
||||||
|
value="#{datevController.configuration.item['$modified']}">
|
||||||
|
<f:convertDateTime timeZone="#{message.timeZone}" type="both"
|
||||||
|
pattern="#{message.dateTimePattern}" />
|
||||||
|
</h:outputText>
|
||||||
|
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<h:commandButton
|
||||||
|
actionListener="#{datevController.saveConfiguration()}"
|
||||||
|
value="#{message.save}">
|
||||||
|
</h:commandButton>
|
||||||
|
|
||||||
|
<h:commandButton value="#{message.close}" action="notes" />
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</h:form>
|
||||||
|
</f:view>
|
||||||
|
</ui:define>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
337
src/main/webapp/pages/admin/document_import.xhtml
Normal file
337
src/main/webapp/pages/admin/document_import.xhtml
Normal file
|
|
@ -0,0 +1,337 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:f="http://java.sun.com/jsf/core"
|
||||||
|
xmlns:h="http://java.sun.com/jsf/html"
|
||||||
|
xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||||
|
xmlns:i="http://java.sun.com/jsf/composite/imixs"
|
||||||
|
xmlns:c="http://java.sun.com/jsp/jstl/core"
|
||||||
|
xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
|
||||||
|
xmlns:fn="http://xmlns.jcp.org/jsp/jstl/functions"
|
||||||
|
xmlns:marty="http://java.sun.com/jsf/composite/marty"
|
||||||
|
template="/layout/template.xhtml">
|
||||||
|
|
||||||
|
<ui:define name="content">
|
||||||
|
<f:view>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
/*<![CDATA[*/
|
||||||
|
$(document).ready(function() {
|
||||||
|
//$('.imixsdatatable').layoutImixsTable();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// This method refreshs the layout
|
||||||
|
function updateOptions(data) {
|
||||||
|
if (data.status === 'success') {
|
||||||
|
$('[id$=Optionlist]').imixsLayout();
|
||||||
|
|
||||||
|
/* var id='#'+data.source.id;
|
||||||
|
if (id.indexOf("input")>-1) {
|
||||||
|
$(id).focus();
|
||||||
|
} */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*]]>*/
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<h:form id="import_form_id">
|
||||||
|
|
||||||
|
<div class="imixs-form">
|
||||||
|
<div class="imixs-header">
|
||||||
|
<h1>Dokument Import</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-body">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-tabs">
|
||||||
|
<ul>
|
||||||
|
<li><a href="#tab-1">Timer Setting</a></li>
|
||||||
|
<li><a href="#tab-2">Data Sources</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<!-- ### Timer ### -->
|
||||||
|
<div id="tab-1">
|
||||||
|
|
||||||
|
<div class="ui-state-highlight ui-corner-all"
|
||||||
|
style="margin-bottom: 10px; padding: .5em;">
|
||||||
|
<p><span class="typcn typcn-lightbulb"></span> Define a crontab to schedule the import processor.</p>
|
||||||
|
</div>
|
||||||
|
<ui:include src="sub_scheduler_control.xhtml">
|
||||||
|
<ui:param name="schedulerController"
|
||||||
|
value="#{documentImportController}" />
|
||||||
|
</ui:include>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- ### SMTP ### -->
|
||||||
|
<div id="tab-2">
|
||||||
|
|
||||||
|
<div class="ui-state-highlight ui-corner-all"
|
||||||
|
style="margin-bottom: 10px; padding: .5em;">
|
||||||
|
<p><span class="typcn typcn-lightbulb"></span> Define a destination IMAP server and assign mail addresses to specific workflow groups.</p>
|
||||||
|
</div>
|
||||||
|
<div class="imixs-form-panel">
|
||||||
|
|
||||||
|
<!-- ### Sources ### -->
|
||||||
|
<h:panelGroup layout="block"
|
||||||
|
id="imapOptionlist" binding="#{imapOptionlistContainer}">
|
||||||
|
<f:ajax onevent="updateOptions">
|
||||||
|
<table class="imixsdatatable"
|
||||||
|
style="width: 100%;">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="width: 10px;text-align: center;">Pos</th>
|
||||||
|
<th style="width: 100px;text-align: center;">Type</th>
|
||||||
|
<th style="">Workflowgroup</th>
|
||||||
|
<th style="">Modelversion</th>
|
||||||
|
<th style="">Task</th>
|
||||||
|
<th style="">Event</th>
|
||||||
|
<th style="width: 110px;">
|
||||||
|
<!-- delete -->
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<ui:repeat var="source" value="#{documentImportController.sources}">
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<!-- pos -->
|
||||||
|
<td style=" text-align: center;">
|
||||||
|
<h:commandLink
|
||||||
|
actionListener="#{documentImportController.selectSource(source.item['index'])}">#<h:outputText
|
||||||
|
value="#{source.item['index']}" />
|
||||||
|
<f:ajax render="#{imapOptionlistContainer.clientId}"
|
||||||
|
onevent="updateOptions" />
|
||||||
|
</h:commandLink>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<!-- type -->
|
||||||
|
<td style="text-align: center;">
|
||||||
|
<h:outputText value="#{source.item['type']}" />
|
||||||
|
</td>
|
||||||
|
<!-- Workflowgroup -->
|
||||||
|
<td><h:outputText
|
||||||
|
value="#{source.item['workflowgroup']}" />
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td><h:outputText
|
||||||
|
value="#{source.item['modelversion']}" />
|
||||||
|
</td>
|
||||||
|
<td><h:outputText
|
||||||
|
value="#{source.item['task']}" />
|
||||||
|
</td>
|
||||||
|
<td><h:outputText
|
||||||
|
value="#{source.item['event']}" />
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<h:commandLink
|
||||||
|
actionListener="#{documentImportController.moveSourceDown(source.item['index'])}">
|
||||||
|
<span class="typcn typcn-arrow-down-thick imixs-state-info"></span>
|
||||||
|
<f:ajax render="#{imapOptionlistContainer.clientId}"
|
||||||
|
onevent="updateOptions" />
|
||||||
|
</h:commandLink>
|
||||||
|
<h:commandLink
|
||||||
|
actionListener="#{documentImportController.moveSourceUp(source.item['index'])}">
|
||||||
|
<span class="typcn typcn-arrow-up-thick imixs-state-info"></span>
|
||||||
|
<f:ajax render="#{imapOptionlistContainer.clientId}"
|
||||||
|
onevent="updateOptions" />
|
||||||
|
</h:commandLink>
|
||||||
|
|
||||||
|
<h:commandLink
|
||||||
|
actionListener="#{documentImportController.removeSource(source.item['index'])}">
|
||||||
|
<span class="typcn typcn-trash imixs-state-info"></span>
|
||||||
|
<f:ajax render="#{imapOptionlistContainer.clientId}"
|
||||||
|
onevent="updateOptions" />
|
||||||
|
</h:commandLink></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
</ui:repeat>
|
||||||
|
</tbody>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
<!-- add button -->
|
||||||
|
<h:commandButton
|
||||||
|
value="#{message.add}"
|
||||||
|
actionListener="#{documentImportController.addSource()}">
|
||||||
|
<f:ajax render="#{imapOptionlistContainer.clientId}"
|
||||||
|
onevent="updateOptions" />
|
||||||
|
</h:commandButton>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ### Subform for selected source ### -->
|
||||||
|
|
||||||
|
<h:panelGroup layout="block" rendered="#{! empty documentImportController.source}" styleClass="imixs-form-panel">
|
||||||
|
<h3>Order ID #<h:outputText value="#{documentImportController.source.item['index']}"/></h3>
|
||||||
|
<div class="imixs-form-section-3">
|
||||||
|
<dl>
|
||||||
|
<dt>Type</dt>
|
||||||
|
<dd>
|
||||||
|
<h:selectOneRadio value="#{documentImportController.source.item['type']}">
|
||||||
|
<f:selectItem itemLabel="IMAP" itemValue="IMAP"/>
|
||||||
|
<f:selectItem itemLabel="FTP" itemValue="FTP"/>
|
||||||
|
</h:selectOneRadio>
|
||||||
|
|
||||||
|
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>Workflowgroup</dt>
|
||||||
|
<dd>
|
||||||
|
<h:selectOneMenu
|
||||||
|
value="#{documentImportController.source.item['workflowgroup']}">
|
||||||
|
<c:forEach items="#{modelController.workflowGroups}" var="group">
|
||||||
|
<f:selectItem itemLabel="#{group}" itemValue="#{group}" />
|
||||||
|
</c:forEach>
|
||||||
|
</h:selectOneMenu>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="imixs-form-section-3">
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>Workflowmodel</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText
|
||||||
|
value="#{documentImportController.source.item['workflowmodel']}"/>
|
||||||
|
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>Task ID</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText
|
||||||
|
value="#{documentImportController.source.item['task']}"/>
|
||||||
|
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>Event ID</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText
|
||||||
|
value="#{documentImportController.source.item['event']}"/>
|
||||||
|
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
<!-- IMAP -->
|
||||||
|
<div class="imixs-form-section-3">
|
||||||
|
<dl>
|
||||||
|
<dt>Server : Port</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText style="width:80%;"
|
||||||
|
value="#{documentImportController.source.item['server']}">
|
||||||
|
</h:inputText> : <h:inputText style="width:15%;"
|
||||||
|
value="#{documentImportController.source.item['port']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>User</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText required="false"
|
||||||
|
value="#{documentImportController.source.item['user']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>Password</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputSecret required="false" redisplay="true"
|
||||||
|
value="#{documentImportController.source.item['password']}">
|
||||||
|
</h:inputSecret>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<dl>
|
||||||
|
<dt>Selector</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText required="false"
|
||||||
|
value="#{documentImportController.source.item['selector']}">
|
||||||
|
</h:inputText>
|
||||||
|
<p class="small">A selector can be an optional regular expression to be used to select a subset of data</p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>Options</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputTextarea required="false"
|
||||||
|
style="height: 5em; width: 100%;"
|
||||||
|
value="#{documentImportController.source.item['options']}">
|
||||||
|
</h:inputTextarea>
|
||||||
|
<p class="small">You can apply custom properties here.
|
||||||
|
</p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</h:panelGroup> <!-- end of source subform -->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</f:ajax>
|
||||||
|
|
||||||
|
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-footer">
|
||||||
|
<h:outputLabel value="#{message.modified}: " />
|
||||||
|
<h:outputText
|
||||||
|
value="#{documentImportController.configuration.item['$modified']}">
|
||||||
|
<f:convertDateTime timeZone="#{message.timeZone}" type="both"
|
||||||
|
pattern="#{message.dateTimePattern}" />
|
||||||
|
</h:outputText>
|
||||||
|
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<h:commandButton
|
||||||
|
actionListener="#{documentImportController.saveConfiguration()}"
|
||||||
|
action="/pages/admin/document_import"
|
||||||
|
value="#{message.save}">
|
||||||
|
</h:commandButton>
|
||||||
|
|
||||||
|
|
||||||
|
<h:commandButton value="#{message.close}" action="notes" />
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</h:form>
|
||||||
|
</f:view>
|
||||||
|
</ui:define>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
268
src/main/webapp/pages/admin/sepa_config.xhtml
Normal file
268
src/main/webapp/pages/admin/sepa_config.xhtml
Normal file
|
|
@ -0,0 +1,268 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:f="http://java.sun.com/jsf/core"
|
||||||
|
xmlns:h="http://java.sun.com/jsf/html"
|
||||||
|
xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||||
|
xmlns:i="http://java.sun.com/jsf/composite/imixs"
|
||||||
|
xmlns:c="http://java.sun.com/jsp/jstl/core"
|
||||||
|
xmlns:marty="http://java.sun.com/jsf/composite/marty"
|
||||||
|
xmlns:a="http://xmlns.jcp.org/jsf/passthrough"
|
||||||
|
template="/layout/template.xhtml">
|
||||||
|
|
||||||
|
<ui:define name="content">
|
||||||
|
<f:view>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
/*<![CDATA[*/
|
||||||
|
|
||||||
|
function updateStatustPanel(data) {
|
||||||
|
//initUserInput($('#userselector_id'));
|
||||||
|
if (data.status === 'success') {
|
||||||
|
// select with wildcard operator
|
||||||
|
$('[id$=status_panel]').imixsLayout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// display summary
|
||||||
|
$(document).ready(function() {
|
||||||
|
// erste Zeile hinzufügen, falls tabelle noch leer ist
|
||||||
|
var posTableEmpty=#{empty sepaController.dbtrList};
|
||||||
|
if (posTableEmpty) {
|
||||||
|
// click on add button
|
||||||
|
posButton=$("[data-id='addposbutton_id']");
|
||||||
|
if (posButton) {
|
||||||
|
$(posButton).click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// This method refreshs the layout
|
||||||
|
function updateSepaList(data) {
|
||||||
|
if (data.status === 'success') {
|
||||||
|
$('[id$=dbtrlist]').imixsLayout();
|
||||||
|
$('[id$=cdtrlist]').imixsLayout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*]]>*/
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<h:form id="import_form_id">
|
||||||
|
<div class="imixs-form">
|
||||||
|
<div class="imixs-header">
|
||||||
|
<h1>SEPA</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="imixs-body">
|
||||||
|
<!-- **** General info ***** -->
|
||||||
|
<div class="imixs-form-panel">
|
||||||
|
<h:panelGroup layout="block" styleClass="imixs-form-section"
|
||||||
|
id="dbtrlist" binding="#{dbtrlistContainer}">
|
||||||
|
<h1>Debitor IBAN/BIC</h1>
|
||||||
|
<p>
|
||||||
|
<span class="typcn typcn-lightbulb"></span> The Debitor IBAN/BIC configuration list
|
||||||
|
can be used for SEPA payments.
|
||||||
|
</p>
|
||||||
|
<f:ajax render="dbtrlist" onevent="updateSepaList">
|
||||||
|
<table class="imixsdatatable imixs-orderitems">
|
||||||
|
<tr>
|
||||||
|
<th style="width: 140px">ID</th>
|
||||||
|
<th style="">Bank<span class="imixs-required">
|
||||||
|
*</span></th>
|
||||||
|
<th style="width: 250px;">IBAN</th>
|
||||||
|
<th style="width: 150px;">BIC</th>
|
||||||
|
<th style="width: 150px;">Report (optional)</th>
|
||||||
|
<th style="width: 50px">
|
||||||
|
<!-- delete -->
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<ui:repeat var="dbtr"
|
||||||
|
value="#{sepaController.dbtrList}">
|
||||||
|
<tr>
|
||||||
|
<!-- ID -->
|
||||||
|
<td><h:inputText value="#{dbtr.item['name']}"
|
||||||
|
style="width:100%;" /></td>
|
||||||
|
|
||||||
|
<!-- dbtr.name -->
|
||||||
|
<td><h:inputText value="#{dbtr.item['dbtr.name']}"
|
||||||
|
style="width:100%;" /></td>
|
||||||
|
|
||||||
|
<!-- dbtr.iban -->
|
||||||
|
<td><h:inputText value="#{dbtr.item['dbtr.iban']}"
|
||||||
|
style="width:100%;" /></td>
|
||||||
|
|
||||||
|
<!-- dbtr.bic -->
|
||||||
|
<td><h:inputText value="#{dbtr.item['dbtr.bic']}"
|
||||||
|
style="width:100%;" /></td>
|
||||||
|
|
||||||
|
<!-- dbtr.bic -->
|
||||||
|
<td><h:inputText value="#{dbtr.item['report']}"
|
||||||
|
style="width:100%;" /></td>
|
||||||
|
|
||||||
|
|
||||||
|
<td><h:commandLink
|
||||||
|
actionListener="#{sepaController.removeDbtr(dbtr.item['name'])}">
|
||||||
|
<span class="typcn typcn-trash imixs-state-info"></span>
|
||||||
|
<f:ajax render="#{dbtrlistContainer.clientId}"
|
||||||
|
onevent="updateSepaList" />
|
||||||
|
</h:commandLink></td>
|
||||||
|
</tr>
|
||||||
|
</ui:repeat>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- add button -->
|
||||||
|
<h:commandButton value="#{message.add}"
|
||||||
|
a:data-id="addposbutton_id"
|
||||||
|
actionListener="#{sepaController.addDbtr}">
|
||||||
|
</h:commandButton>
|
||||||
|
</f:ajax>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
|
||||||
|
<h:panelGroup layout="block" styleClass="imixs-form-section"
|
||||||
|
id="cdtrlist" binding="#{cdtrlistContainer}">
|
||||||
|
<h1>Creditor IBAN/BIC</h1>
|
||||||
|
<p>
|
||||||
|
<span class="typcn typcn-lightbulb"></span> The Creditor IBAN/BIC configuration list
|
||||||
|
can be used for SEPA Direct Debit.
|
||||||
|
</p>
|
||||||
|
<f:ajax render="cdtrlist" onevent="updateSepaList">
|
||||||
|
<table class="imixsdatatable imixs-orderitems">
|
||||||
|
<tr>
|
||||||
|
<th style="width: 140px">ID</th>
|
||||||
|
<th style="">Bank<span class="imixs-required">
|
||||||
|
*</span></th>
|
||||||
|
<th style="width: 250px;">IBAN</th>
|
||||||
|
<th style="width: 150px;">BIC</th>
|
||||||
|
<th style="width: 150px;">Report (optional)</th>
|
||||||
|
<th style="width: 50px">
|
||||||
|
<!-- delete -->
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<ui:repeat var="cdtr"
|
||||||
|
value="#{sepaController.cdtrList}">
|
||||||
|
<tr>
|
||||||
|
<!-- ID -->
|
||||||
|
<td><h:inputText value="#{cdtr.item['name']}"
|
||||||
|
style="width:100%;" /></td>
|
||||||
|
|
||||||
|
<!-- cdtr.name -->
|
||||||
|
<td><h:inputText value="#{cdtr.item['cdtr.name']}"
|
||||||
|
style="width:100%;" /></td>
|
||||||
|
|
||||||
|
<!-- cdtr.iban -->
|
||||||
|
<td><h:inputText value="#{cdtr.item['cdtr.iban']}"
|
||||||
|
style="width:100%;" /></td>
|
||||||
|
|
||||||
|
<!-- cdtr.bic -->
|
||||||
|
<td><h:inputText value="#{cdtr.item['cdtr.bic']}"
|
||||||
|
style="width:100%;" /></td>
|
||||||
|
|
||||||
|
<!-- cdtr.report -->
|
||||||
|
<td><h:inputText value="#{cdtr.item['report']}"
|
||||||
|
style="width:100%;" /></td>
|
||||||
|
|
||||||
|
|
||||||
|
<td><h:commandLink
|
||||||
|
actionListener="#{sepaController.removeCdtr(cdtr.item['name'])}">
|
||||||
|
<span class="typcn typcn-trash imixs-state-info"></span>
|
||||||
|
<f:ajax render="#{cdtrlistContainer.clientId}"
|
||||||
|
onevent="updateSepaList" />
|
||||||
|
</h:commandLink></td>
|
||||||
|
</tr>
|
||||||
|
</ui:repeat>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- add button -->
|
||||||
|
<h:commandButton value="#{message.add}"
|
||||||
|
a:data-id="addposbutton_id"
|
||||||
|
actionListener="#{sepaController.addCdtr}">
|
||||||
|
</h:commandButton>
|
||||||
|
</f:ajax>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
<h1>Model Configuration</h1>
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<p>
|
||||||
|
<span class="typcn typcn-lightbulb"></span> The initial task
|
||||||
|
must define a report containing the query and style sheet
|
||||||
|
information. Invoices will be automatically grouped by the
|
||||||
|
attribute "_sepa_iban". If this attribute is not set, the
|
||||||
|
default sepa_iban will be assigned to the invoice before
|
||||||
|
processed. The SEPA workflow may optional include a
|
||||||
|
"invoice_update" item definition.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
<dl>
|
||||||
|
<dt>SEPA Model Version</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText required="false"
|
||||||
|
value="#{sepaController.configuration.item['_model_version']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>SEPA Initial Task</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText required="false"
|
||||||
|
value="#{sepaController.configuration.item['_initial_task']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-footer">
|
||||||
|
<h:outputLabel value="#{message.modified}: " />
|
||||||
|
<h:outputText
|
||||||
|
value="#{sepaController.configuration.item['$modified']}">
|
||||||
|
<f:convertDateTime timeZone="#{message.timeZone}" type="both"
|
||||||
|
pattern="#{message.dateTimePattern}" />
|
||||||
|
</h:outputText>
|
||||||
|
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<h:commandButton
|
||||||
|
actionListener="#{sepaController.saveConfiguration()}"
|
||||||
|
value="#{message.save}">
|
||||||
|
</h:commandButton>
|
||||||
|
|
||||||
|
<h:commandButton value="#{message.close}" action="notes" />
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</h:form>
|
||||||
|
|
||||||
|
|
||||||
|
</f:view>
|
||||||
|
</ui:define>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
130
src/main/webapp/pages/admin/sub_scheduler_control.xhtml
Normal file
130
src/main/webapp/pages/admin/sub_scheduler_control.xhtml
Normal file
|
|
@ -0,0 +1,130 @@
|
||||||
|
<f:subview xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
|
||||||
|
xmlns:fn="http://xmlns.jcp.org/jsp/jstl/functions">
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
/*<![CDATA[*/
|
||||||
|
|
||||||
|
function updateStatustPanel(data) {
|
||||||
|
//initUserInput($('#userselector_id'));
|
||||||
|
if (data.status === 'success') {
|
||||||
|
$('[id$=status_panel]').imixsLayout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*]]>*/
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- **** General info ***** -->
|
||||||
|
<div class="imixs-form-panel">
|
||||||
|
<h:inputTextarea required="false"
|
||||||
|
converter="org.imixs.VectorConverter"
|
||||||
|
style="height: 8em; width: 100%;"
|
||||||
|
value="#{schedulerController.configuration.itemList['_scheduler_definition']}">
|
||||||
|
</h:inputTextarea>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- **** Timer Status ***** -->
|
||||||
|
<h:panelGroup layout="block" class="imixs-form-panel" id="status_panel">
|
||||||
|
<h:panelGroup layout="block" id="timer_details"
|
||||||
|
class="imixs-form-section">
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<h:outputText id="timer_status"
|
||||||
|
value="Status ⇢ #{schedulerController.configuration.item['_scheduler_status']}" />
|
||||||
|
|
||||||
|
<h:panelGroup
|
||||||
|
rendered="#{! empty schedulerController.configuration.item['_scheduler_errormessage']}"
|
||||||
|
class="small" style="color:red">
|
||||||
|
<br />Error: #{schedulerController.configuration.item['_scheduler_errormessage']}
|
||||||
|
</h:panelGroup>
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<h:panelGrid columns="2">
|
||||||
|
|
||||||
|
<h:panelGroup layout="block" style="width:100px;">
|
||||||
|
<h:outputLabel value="ID: " />
|
||||||
|
</h:panelGroup>
|
||||||
|
<h:panelGroup>
|
||||||
|
<h:outputText
|
||||||
|
value="#{schedulerController.configuration.item['$UniqueID']}" />
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
|
||||||
|
<h:outputLabel value="Schedule: " />
|
||||||
|
<h:outputText
|
||||||
|
value="#{schedulerController.configuration.item['Schedule']}" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<h:outputLabel value="Next Timeout: " />
|
||||||
|
<h:panelGroup>
|
||||||
|
<h:outputText
|
||||||
|
value="#{schedulerController.configuration.item['nextTimeout']}"
|
||||||
|
rendered="#{! empty schedulerController.configuration.item['nextTimeout']}">
|
||||||
|
<f:convertDateTime timeZone="#{message.timeZone}" type="both"
|
||||||
|
pattern="#{message.dateTimePattern}" />
|
||||||
|
|
||||||
|
|
||||||
|
</h:outputText>
|
||||||
|
<h:outputText value=" " />
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
<h:outputLabel value="TimeRemaining: " />
|
||||||
|
<h:outputText
|
||||||
|
value="#{schedulerController.millisToShortDHMS(schedulerController.configuration.item['timeRemaining'])}" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</h:panelGrid>
|
||||||
|
|
||||||
|
<h:outputLabel value="Last Run: " />
|
||||||
|
<h:panelGroup layout="block" class="ui-state-highlight ui-corner-all"
|
||||||
|
style="padding: .5em;">
|
||||||
|
<ui:fragment
|
||||||
|
rendered="#{! empty schedulerController.configuration.item['_scheduler_logmessage']}">
|
||||||
|
<ui:repeat var="logentry"
|
||||||
|
value="#{schedulerController.configuration.itemList['_scheduler_logmessage']}">
|
||||||
|
<h:outputText escape="false" value="#{logentry}" />
|
||||||
|
<br />
|
||||||
|
</ui:repeat>
|
||||||
|
</ui:fragment>
|
||||||
|
<ui:fragment
|
||||||
|
rendered="#{empty schedulerController.configuration.item['_scheduler_logmessage']}">
|
||||||
|
No Data.
|
||||||
|
</ui:fragment>
|
||||||
|
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Timer Actions -->
|
||||||
|
<h:commandButton value="#{message.refresh}"
|
||||||
|
actionListener="#{schedulerController.refresh}">
|
||||||
|
<f:ajax render="status_panel" onevent="updateStatustPanel" />
|
||||||
|
</h:commandButton>
|
||||||
|
|
||||||
|
|
||||||
|
<h:commandButton
|
||||||
|
actionListener="#{schedulerController.startScheduler}" value="start">
|
||||||
|
</h:commandButton>
|
||||||
|
<h:commandButton actionListener="#{schedulerController.stopScheduler}"
|
||||||
|
value="stop">
|
||||||
|
</h:commandButton>
|
||||||
|
<h:commandButton
|
||||||
|
actionListener="#{schedulerController.restartScheduler}"
|
||||||
|
value="restart">
|
||||||
|
</h:commandButton>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
</f:subview>
|
||||||
138
src/main/webapp/pages/workitems/forms/basic_contact.xhtml
Normal file
138
src/main/webapp/pages/workitems/forms/basic_contact.xhtml
Normal file
|
|
@ -0,0 +1,138 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||||
|
xmlns:i="http://xmlns.jcp.org/jsf/composite/imixs"
|
||||||
|
xmlns:marty="http://xmlns.jcp.org/jsf/composite/marty">
|
||||||
|
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
#{message['form.company']}<span class="imixs-required"> * <h:message for="_subject" /></span>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText required="true" value="#{workitem.item['_Subject']}"
|
||||||
|
id="subject">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.firstname']}">
|
||||||
|
</h:outputLabel>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_FirstName']}"
|
||||||
|
id="firstname_id">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.lastname']}">
|
||||||
|
</h:outputLabel>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_LastName']}" id="lastname_id">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.phone1']}">
|
||||||
|
</h:outputLabel>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_Phone1']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.phone2']}">
|
||||||
|
</h:outputLabel>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_Phone2']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.phone3']}">
|
||||||
|
</h:outputLabel>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_Phone3']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.department']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_department']}" />
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.email']}" />
|
||||||
|
<!-- mailto -->
|
||||||
|
<h:panelGroup style="margin-left:5px;"
|
||||||
|
rendered="#{! empty workitem.item['_Email']}">
|
||||||
|
<h:outputLink value="mailto:#{workitem.item['_Email']}">
|
||||||
|
<h:graphicImage url="/layout/icons/icon042.png" />
|
||||||
|
</h:outputLink>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_Email']}" id="email_id">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<!-- ### Internet ### -->
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.internet']}" />
|
||||||
|
<!-- hyperlink -->
|
||||||
|
<h:panelGroup style="margin-left:5px;"
|
||||||
|
rendered="#{! empty workitem.item['_Internet']}">
|
||||||
|
<h:outputLink target="_blank" value="#{workitem.item['_Internet']}">
|
||||||
|
<h:graphicImage url="/layout/icons/icon001.png" />
|
||||||
|
</h:outputLink>
|
||||||
|
</h:panelGroup>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_Internet']}" />
|
||||||
|
|
||||||
|
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.other']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputTextarea value="#{workitem.item['_description']}" style="" />
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
||||||
77
src/main/webapp/pages/workitems/forms/basic_contract.xhtml
Normal file
77
src/main/webapp/pages/workitems/forms/basic_contract.xhtml
Normal file
|
|
@ -0,0 +1,77 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||||
|
xmlns:i="http://xmlns.jcp.org/jsf/composite/imixs"
|
||||||
|
xmlns:marty="http://xmlns.jcp.org/jsf/composite/marty">
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Contract Form -->
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
#{message['form.subject']}<span class="imixs-required"> * <h:message for="_subject" /></span>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText required="true" id="_subject" value="#{workitem.item['_subject']}" />
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
<dl>
|
||||||
|
<dt style="clear: left;">
|
||||||
|
<h:outputLabel value="#{message['form.contractnumber']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText
|
||||||
|
value="#{workitem.item['_contractnumber']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.contact']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<marty:workitemLink workitem="#{workflowController.workitem}"
|
||||||
|
hidereferences="false" filter="$processid:9..." />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.ordernumber']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText
|
||||||
|
value="#{workitem.item['_ordernumber']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.orderdate']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText class="imixs-date"
|
||||||
|
value="#{workitem.item['_orderdate']}" >
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}" timeZone="#{message.timeZone}"/>
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.description']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputTextarea
|
||||||
|
value="#{workitem.item['_description']}" />
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</ui:composition>
|
||||||
|
|
||||||
|
|
@ -0,0 +1,83 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||||
|
xmlns:i="http://xmlns.jcp.org/jsf/composite/imixs"
|
||||||
|
xmlns:marty="http://xmlns.jcp.org/jsf/composite/marty">
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Invoice Out Form -->
|
||||||
|
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
#{message['form.subject']}<span class="imixs-required"> * <h:message for="_subject" /></span>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText id="_subject" required="true" value="#{workitem.item['_subject']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<!--
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.customer']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_customer']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
-->
|
||||||
|
</div>
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
<dl>
|
||||||
|
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.incoming_order']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<ui:include src="/pages/workitems/parts/workitemlink.xhtml">
|
||||||
|
<ui:param name="options" value="$processid:7..." />
|
||||||
|
</ui:include>
|
||||||
|
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
|
||||||
|
|
||||||
|
<h:panelGroup layout="block"
|
||||||
|
class="marty-workitemlink">
|
||||||
|
<h:panelGrid columns="2">
|
||||||
|
<h:outputLabel value="#{message['form.invoicedate']}" />
|
||||||
|
<h:inputText value="#{workitem.item['_invoicedate']}"
|
||||||
|
styleClass="imixs-date">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}"
|
||||||
|
timeZone="#{message.timeZone}" />
|
||||||
|
</h:inputText>
|
||||||
|
|
||||||
|
<h:outputLabel value="#{message['form.amount']}" />
|
||||||
|
<h:inputText value="#{workitem.item['_amount']}">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:inputText>
|
||||||
|
|
||||||
|
<h:outputLabel value="#{message['form.tax']}" />
|
||||||
|
<h:inputText value="#{workitem.item['_tax']}" >
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:inputText>
|
||||||
|
|
||||||
|
<h:outputLabel value="#{message['form.amount_brutto']}" />
|
||||||
|
|
||||||
|
<h:inputText value="#{workitem.item['_amount_brutto']}">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:inputText>
|
||||||
|
</h:panelGrid>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||||
|
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
|
||||||
|
xmlns:marty="http://xmlns.jcp.org/jsf/composite/marty"
|
||||||
|
xmlns:i="http://xmlns.jcp.org/jsf/composite/imixs">
|
||||||
|
|
||||||
|
<!-- the following code computes the txtworktow abstract from the current modelversion and processid -->
|
||||||
|
<div class="imixs-instruction">
|
||||||
|
<h:outputText escape="false"
|
||||||
|
value="#{modelController.getProcessDescription(workflowController.workitem.item['$processID'],workflowController.workitem.item['$ModelVersion'],workflowController.workitem)}">
|
||||||
|
</h:outputText>
|
||||||
|
</div>
|
||||||
|
<c:forEach items="#{formController.formDefinition.sections}"
|
||||||
|
var="section">
|
||||||
|
<div class="imixs-form-panel">
|
||||||
|
<h3>
|
||||||
|
<h:outputText value="#{section.name}" />
|
||||||
|
</h3>
|
||||||
|
<f:subview>
|
||||||
|
<ui:include src="/pages/workitems/forms/#{section.path}.xhtml">
|
||||||
|
<ui:param name="workitem" value="#{workflowController.workitem}" />
|
||||||
|
</ui:include>
|
||||||
|
</f:subview>
|
||||||
|
</div>
|
||||||
|
</c:forEach>
|
||||||
|
|
||||||
|
<!-- Comments and Documents -->
|
||||||
|
<ui:include src="/pages/workitems/forms/sub_comment_and_documents.xhtml">
|
||||||
|
<ui:param name="workitem" value="#{workflowController.workitem}" />
|
||||||
|
</ui:include>
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
38
src/main/webapp/pages/workitems/forms/form_tab.xhtml
Normal file
38
src/main/webapp/pages/workitems/forms/form_tab.xhtml
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||||
|
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
|
||||||
|
xmlns:marty="http://xmlns.jcp.org/jsf/composite/marty"
|
||||||
|
xmlns:i="http://xmlns.jcp.org/jsf/composite/imixs">
|
||||||
|
|
||||||
|
<div class="imixs-tabs">
|
||||||
|
<ul>
|
||||||
|
<c:forEach items="#{formController.formDefinition.sections}"
|
||||||
|
var="section">
|
||||||
|
<li><a href="#tab-#{section.path}">#{(empty section.name)?app.basic:section.name}</a></li>
|
||||||
|
</c:forEach>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<c:forEach items="#{formController.formDefinition.sections}"
|
||||||
|
var="section">
|
||||||
|
<div id="tab-#{section.path}">
|
||||||
|
<f:subview>
|
||||||
|
<ui:include src="/pages/workitems/forms/#{section.path}.xhtml">
|
||||||
|
<ui:param name="workitem" value="#{workflowController.workitem}" />
|
||||||
|
</ui:include>
|
||||||
|
</f:subview>
|
||||||
|
</div>
|
||||||
|
</c:forEach>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Comments and Documents -->
|
||||||
|
<ui:include src="/pages/workitems/forms/sub_comment_and_documents.xhtml">
|
||||||
|
<ui:param name="workitem" value="#{workflowController.workitem}" />
|
||||||
|
</ui:include>
|
||||||
|
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
||||||
274
src/main/webapp/pages/workitems/forms/imixs/auftrag.xhtml
Normal file
274
src/main/webapp/pages/workitems/forms/imixs/auftrag.xhtml
Normal file
|
|
@ -0,0 +1,274 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||||
|
xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core"
|
||||||
|
xmlns:h="http://java.sun.com/jsf/html" xmlns:office="http://xmlns.jcp.org/jsf/composite/office"
|
||||||
|
xmlns:i="http://xmlns.jcp.org/jsf/composite/imixs">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<!-- Contract Form -->
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
#{message['form.subject']} <span class="imixs-required">*</span>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_subject']}" required="true" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>#{message['form.description']}</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputTextarea value="#{workitem.item['_description']}" />
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.contact']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
|
||||||
|
<ui:include src="/pages/workitems/parts/workitemlink.xhtml">
|
||||||
|
<ui:param name="options" value="($workflowgroup:Kontakt) AND (type:workitem)" />
|
||||||
|
</ui:include>
|
||||||
|
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>Rechnung E-Mail:</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['invoice.email']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.reminder']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText styleClass="imixs-date" value="#{workitem.item['datDate']}">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}" timeZone="#{message.timeZone}" />
|
||||||
|
</h:inputText>
|
||||||
|
|
||||||
|
<h:selectOneMenu style="width:120px;margin-left:10px;" value="#{workitem.item['keyIntervalDatDate']}">
|
||||||
|
<f:selectItem itemValue="" itemLabel="#{message['form.none']}" />
|
||||||
|
<f:selectItem itemValue="daily" itemLabel="Täglich" />
|
||||||
|
<f:selectItem itemValue="weekly" itemLabel="#{message['form.weekly']}" />
|
||||||
|
<f:selectItem itemValue="monthly" itemLabel="#{message['form.monthly']}" />
|
||||||
|
<f:selectItem itemValue="yearly" itemLabel="#{message['form.yearly']}" />
|
||||||
|
</h:selectOneMenu>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
<h2>Accounting</h2>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.ordernumber']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_ordernumber']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.orderdate']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText styleClass="imixs-date" value="#{workitem.item['_orderdate']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Agreement Form -->
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.startdate']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_startdate']}" styleClass="imixs-date">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}" timeZone="#{message.timeZone}" />
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.enddate']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_enddate']}" styleClass="imixs-date">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}" timeZone="#{message.timeZone}" />
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="Volumen (in Stunden)" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_effort']}" />
|
||||||
|
<h:outputText value="#{workitem.item['_contracttype']}" />
|
||||||
|
<h:outputText value="#{workitem.item['_capacity']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="Stundensatz" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_rate']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="imixs-form-section"></div>
|
||||||
|
|
||||||
|
<ui:param name="requilist" value="#{viewHandler.getData(requirementsViewController)}"></ui:param>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<h2>Requirements & Reporting</h2>
|
||||||
|
|
||||||
|
|
||||||
|
<table class="imixsdatatable imixs-orderitems" style="margin-bottom: 20px;">
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<th style="width: 100px;">Erstellt</th>
|
||||||
|
<th style="">Requirement</th>
|
||||||
|
|
||||||
|
<th style="">Status</th>
|
||||||
|
<th style="width: 60px;">Ist</th>
|
||||||
|
<th style="width: 60px;">Plan</th>
|
||||||
|
<th style="width: 80px;">%</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<ui:repeat var="orderitem" value="#{requilist}">
|
||||||
|
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<!-- Erstellt -->
|
||||||
|
<td
|
||||||
|
style="#{(orderitem.item['$taskid'] eq 2900)?'text-decoration: line-through;text-align: center;':'text-align: center;'}">
|
||||||
|
<h:outputText value="#{orderitem.item['$created']}">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}" timeZone="#{message.timeZone}" />
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
<td style="#{(orderitem.item['$taskid'] eq 2900)?'text-decoration: line-through':''}">
|
||||||
|
<h:link outcome="/pages/workitems/workitem?faces-redirect=true">
|
||||||
|
<h:outputText value="#{orderitem.item['txtworkflowsummary']}" />
|
||||||
|
|
||||||
|
<f:param name="id" value="#{orderitem.item['$uniqueid']}" />
|
||||||
|
</h:link>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<!-- Name -->
|
||||||
|
<td style="#{(orderitem.item['$taskid'] eq 2900)?'text-decoration: line-through':''}">
|
||||||
|
<h:outputText value="#{orderitem.item['$workflowstatus']}" />
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<!-- capa -->
|
||||||
|
<td
|
||||||
|
style="text-align: right;#{(orderitem.item['$taskid'] eq 2900)?'text-decoration: line-through':''}">
|
||||||
|
<h:outputText value="#{orderitem.item['_capacity']}" style="width:100%">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
|
||||||
|
<td
|
||||||
|
style="text-align: right;#{(orderitem.item['$taskid'] eq 2900)?'text-decoration: line-through':''}">
|
||||||
|
<h:outputText value="#{orderitem.item['_effort_planed']}" id="orderitem_amount">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td
|
||||||
|
style="text-align: right;#{(orderitem.item['$taskid'] eq 2900)?'text-decoration: line-through':''}">
|
||||||
|
<h:outputText value="#{orderitem.item['_effort_div']} %">
|
||||||
|
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</ui:repeat>
|
||||||
|
|
||||||
|
<!-- summary -->
|
||||||
|
<tr>
|
||||||
|
<td />
|
||||||
|
<td />
|
||||||
|
|
||||||
|
|
||||||
|
<td class="orderlist-sum" style="text-align: right; font-weight: bold;">Summe</td>
|
||||||
|
<td class="orderlist-sum orderlist_summary" style="text-align: right;">
|
||||||
|
<h:outputText value="#{workitem.item['_capacity']}">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
<td class="orderlist-sum orderlist_summary" style="text-align: right;">
|
||||||
|
<h:outputText value="#{workitem.item['_effort_planed']}">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
<td class="orderlist-sum orderlist_summary" style="text-align: right;">
|
||||||
|
<h:outputText value="#{workitem.item['_effort_div']}">
|
||||||
|
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText> %
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="col-4">
|
||||||
|
<a href="#{facesContext.externalContext.requestContextPath}/api/report/requirements-planning.imixs-report?pageSize=999&id=#{workitem.uniqueID}"
|
||||||
|
target="_blank"> <span class="typcn typcn-chart-line"></span>
|
||||||
|
Planning
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="col-4">
|
||||||
|
<a href="#{facesContext.externalContext.requestContextPath}/api/report/requirements-implementation.imixs-report?pageSize=999&id=#{workitem.uniqueID}"
|
||||||
|
target="_blank"> <span class="typcn typcn-chart-line"></span>
|
||||||
|
Status
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="col-4">
|
||||||
|
<a href="#{facesContext.externalContext.requestContextPath}/api/report/requirements-accounting.imixs-report?pageSize=999&id=#{workitem.uniqueID}"
|
||||||
|
target="_blank"> <span class="typcn typcn-chart-line"></span>
|
||||||
|
Accounting
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</ui:composition>
|
||||||
157
src/main/webapp/pages/workitems/forms/imixs/contact.xhtml
Normal file
157
src/main/webapp/pages/workitems/forms/imixs/contact.xhtml
Normal file
|
|
@ -0,0 +1,157 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||||
|
xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core"
|
||||||
|
xmlns:h="http://java.sun.com/jsf/html" xmlns:i="http://java.sun.com/jsf/composite/imixs"
|
||||||
|
xmlns:marty="http://java.sun.com/jsf/composite/marty">
|
||||||
|
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
#{message['form.company']}<span class="imixs-required">*</span>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText required="true" value="#{workitem.item['_Subject']}" id="company_id">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.firstname']}">
|
||||||
|
</h:outputLabel>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_FirstName']}" id="firstname_id">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.lastname']}">
|
||||||
|
</h:outputLabel>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_LastName']}" id="lastname_id">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.phone1']}">
|
||||||
|
</h:outputLabel>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_Phone1']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.phone2']}">
|
||||||
|
</h:outputLabel>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_Phone2']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.phone3']}">
|
||||||
|
</h:outputLabel>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_Phone3']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.department']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_department']}" />
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.email']}" />
|
||||||
|
<!-- mailto -->
|
||||||
|
<h:panelGroup style="margin-left:5px;" rendered="#{! empty workitem.item['_Email']}">
|
||||||
|
<h:outputLink value="mailto:#{workitem.item['_Email']}">
|
||||||
|
<h:graphicImage url="/layout/icons/icon042.png" />
|
||||||
|
</h:outputLink>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_Email']}" id="email_id">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<!-- ### Internet ### -->
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.internet']}" />
|
||||||
|
<!-- hyperlink -->
|
||||||
|
<h:panelGroup style="margin-left:5px;" rendered="#{! empty workitem.item['_Internet']}">
|
||||||
|
<h:outputLink target="_blank" value="#{workitem.item['_Internet']}">
|
||||||
|
<h:graphicImage url="/layout/icons/icon001.png" />
|
||||||
|
</h:outputLink>
|
||||||
|
</h:panelGroup>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_Internet']}" />
|
||||||
|
|
||||||
|
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="Zusammenfassung" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputTextarea value="#{workitem.item['_description']}" style="" />
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
<dl>
|
||||||
|
<!-- ### date ### -->
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.appointment']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['datDate']}" styleClass="imixs-date">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}" timeZone="#{message.timeZone}" />
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="Letzter persönlicher Kontakt" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_lastContact']}" styleClass="imixs-date">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}" timeZone="#{message.timeZone}" />
|
||||||
|
</h:inputText>
|
||||||
|
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||||
|
xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core"
|
||||||
|
xmlns:h="http://java.sun.com/jsf/html" xmlns:i="http://java.sun.com/jsf/composite/imixs"
|
||||||
|
xmlns:marty="http://java.sun.com/jsf/composite/marty">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<!-- Contract Form -->
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
#{message['form.subject']} <span class="imixs-required">*</span>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_subject']}" required="true" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
User Story:<span class="imixs-required"></span>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputTextarea class="imixs-editor-basic" value="#{workitem.item['_description']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Agreement Form -->
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="Auftrag" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<ui:include src="/pages/workitems/parts/workitemlink.xhtml">
|
||||||
|
<ui:param name="options" value="$workflowgroup:Auftrag" />
|
||||||
|
</ui:include>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="Plan (in Stunden)" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_effort_planed']}" required="true">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
@ -0,0 +1,199 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||||
|
xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core"
|
||||||
|
xmlns:h="http://java.sun.com/jsf/html" xmlns:marty="http://java.sun.com/jsf/composite/marty">
|
||||||
|
|
||||||
|
<!-- Agreement Form -->
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
<dl>
|
||||||
|
<dt>#{message['form.subject']}</dt>
|
||||||
|
<dd>
|
||||||
|
<h:outputText value="#{workitem.item['_subject']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="Auftrag" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<ui:include src="/pages/workitems/parts/workitemlink.xhtml">
|
||||||
|
<ui:param name="options" value="$workflowgroup:Auftrag" />
|
||||||
|
<ui:param name="readonly" value="true" />
|
||||||
|
</ui:include>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h:panelGroup layout="block" styleClass="imixs-form-section">
|
||||||
|
<dl>
|
||||||
|
<dt>User Story:</dt>
|
||||||
|
<dd>
|
||||||
|
<div class="ui-state-highlight ui-corner-all" style="margin-bottom: 10px; padding: .5em;">
|
||||||
|
<p>
|
||||||
|
<h:outputText escape="false" value="#{workitem.item['_description']}" />
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
<h:panelGroup layout="block" styleClass="imixs-form-section" id="oderlist" binding="#{orderlistContainer}">
|
||||||
|
<f:ajax render="oderlist" onevent="updateOrderItems">
|
||||||
|
<table class="imixsdatatable imixs-orderitems">
|
||||||
|
<tr>
|
||||||
|
<th style="width: 100px;">Datum</th>
|
||||||
|
<th>Leistungsbezeichnung</th>
|
||||||
|
<th style="width: 50px;">Menge</th>
|
||||||
|
<th style="width: 10px;">
|
||||||
|
<!-- delete -->
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<ui:repeat var="orderitem" value="#{childItemController.childItems}">
|
||||||
|
<tr>
|
||||||
|
<!-- date -->
|
||||||
|
<td>
|
||||||
|
<h:inputText value="#{orderitem.item['datdate']}" styleClass="imixs-date">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}"
|
||||||
|
timeZone="#{message.timeZone}" />
|
||||||
|
</h:inputText>
|
||||||
|
</td>
|
||||||
|
<!-- Name -->
|
||||||
|
<td>
|
||||||
|
<h:inputText value="#{orderitem.item['name']}" style="width:100%" />
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<h:inputText value="#{orderitem.item['amount']}" style="text-align: right;width:4em"
|
||||||
|
class="orderitem_amount" onchange="calculateSummary()" />
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<h:commandLink actionListener="#{childItemController.remove(orderitem.item['numpos'])}">
|
||||||
|
<span class="typcn typcn-trash imixs-state-info"></span>
|
||||||
|
<f:ajax render="#{orderlistContainer.clientId}" onevent="updateOrderItems" />
|
||||||
|
</h:commandLink> <!-- item summary -->
|
||||||
|
<h:inputHidden value="#{orderitem.item['_capacity']}" id="item_capacity" />
|
||||||
|
<h:inputHidden value="#{orderitem.item['_capacity_dsp']}" id="item_capacity_dsp" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</ui:repeat>
|
||||||
|
|
||||||
|
<!-- summary -->
|
||||||
|
<tr>
|
||||||
|
<td />
|
||||||
|
<td class="" style="text-align: right;"><strong>Summe:</strong></td>
|
||||||
|
<td class="orderlist_total" style="text-align: right;"></td>
|
||||||
|
<td />
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- plan -->
|
||||||
|
<tr>
|
||||||
|
<td />
|
||||||
|
<td class="" style="text-align: right;"><strong>Plan:</strong></td>
|
||||||
|
<td class="orderlist_planning" style="text-align: right;">#{workitem.item['_effort_planed']}</td>
|
||||||
|
<td />
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- Div -->
|
||||||
|
<tr>
|
||||||
|
<td />
|
||||||
|
<td class="" style="text-align: right;"><strong>Prozent:</strong></td>
|
||||||
|
<td class="orderlist_div" style="text-align: right;"> %</td>
|
||||||
|
<td />
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<!-- total summary -->
|
||||||
|
<h:inputHidden value="#{workitem.item['_capacity']}" id="orderitems_capacity" />
|
||||||
|
<!-- total summary -->
|
||||||
|
<h:inputHidden value="#{workitem.item['_effort_div']}" id="orderitems_effort_div" />
|
||||||
|
|
||||||
|
<h:commandButton value="#{message.add}" id="addposbutton_id" actionListener="#{childItemController.add}">
|
||||||
|
</h:commandButton>
|
||||||
|
</f:ajax>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
/*<![CDATA[*/
|
||||||
|
|
||||||
|
// display summary
|
||||||
|
$(document).ready(function () {
|
||||||
|
// prvent from hiting enter key
|
||||||
|
$("input").keydown(function (event) {
|
||||||
|
if (event.keyCode == 13) {
|
||||||
|
event.preventDefault();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// erste Zeile hinzufügen, falls tabelle noch leer ist
|
||||||
|
var posTableEmpty =#{ empty childItemController.childItems };
|
||||||
|
if (posTableEmpty) {
|
||||||
|
// click on add button
|
||||||
|
posButton = $('[id$=addposbutton_id]');
|
||||||
|
if (posButton) {
|
||||||
|
$(posButton).click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
calculateSummary();
|
||||||
|
});
|
||||||
|
|
||||||
|
// This method refreshs the layout
|
||||||
|
function updateOrderItems(data) {
|
||||||
|
if (data.status === 'success') {
|
||||||
|
$('[id$=oderlist]').imixsLayout();
|
||||||
|
calculateSummary();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Rechnet die Preise zusammen
|
||||||
|
function calculateSummary() {
|
||||||
|
var price = 0, amount = 0, sum = 0;
|
||||||
|
var summaryItems = $(".orderitem_amount");
|
||||||
|
$(summaryItems).each(function (index, value) {
|
||||||
|
var tableRow = $(this).closest('tr');
|
||||||
|
var amount = convertToNumber($(this).val());
|
||||||
|
//console.log('amount=' + amount);
|
||||||
|
//console.log('price=' + price);
|
||||||
|
if (!isNaN(amount)) {
|
||||||
|
sum = sum + (amount * 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// update total.....
|
||||||
|
sum = Math.round(sum * 100) / 100;
|
||||||
|
$("[id$=orderitems_capacity]").val(sum);
|
||||||
|
|
||||||
|
$(".orderlist_total").empty();
|
||||||
|
$(".orderlist_total").append(sum);
|
||||||
|
|
||||||
|
// compute div...
|
||||||
|
var plan = convertToNumber("#{workitem.item['_effort_planed']}");
|
||||||
|
plan = plan * 1;
|
||||||
|
var planDiv = sum / plan * 100;
|
||||||
|
planDiv = planDiv.toFixed(2);
|
||||||
|
//alert(d2);
|
||||||
|
$(".orderlist_div").empty();
|
||||||
|
$(".orderlist_div").append(planDiv + "%");
|
||||||
|
$("[id$=orderitems_effort_div]").val(planDiv);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* format 1.000,00 to 1000.00 */
|
||||||
|
function convertToNumber(currency) {
|
||||||
|
// Prüfen ob es sich um deutsche oder englische Notation handelt
|
||||||
|
const hasGermanFormat = /^\d{1,3}(\.\d{3})*,\d+$/.test(currency);
|
||||||
|
if (hasGermanFormat) {
|
||||||
|
// Deutsche Notation (1.000,50 -> 1000.50)
|
||||||
|
return currency.replace(/\./g, '').replace(',', '.');
|
||||||
|
} else {
|
||||||
|
// Englische Notation oder einfache Zahl (8.0 -> 8.0)
|
||||||
|
return currency;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*]]>*/
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
@ -0,0 +1,96 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||||
|
xmlns:f="http://java.sun.com/jsf/core"
|
||||||
|
xmlns:c="http://java.sun.com/jsp/jstl/core"
|
||||||
|
xmlns:h="http://java.sun.com/jsf/html"
|
||||||
|
xmlns:i="http://java.sun.com/jsf/composite/imixs"
|
||||||
|
xmlns:marty="http://java.sun.com/jsf/composite/marty">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
|
||||||
|
<h3>#{workitem.item['name']}</h3>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>Dbtr IBAN</dt>
|
||||||
|
<dd>
|
||||||
|
<h:outputText value="#{workitem.item['dbtr.iban']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>Dbtr BIC</dt>
|
||||||
|
<dd>
|
||||||
|
<h:outputText value="#{workitem.item['dbtr.bic']}" />
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<h3>Zahlungen</h3>
|
||||||
|
<table class="" style="width:100%;">
|
||||||
|
<tr>
|
||||||
|
<th style=""></th>
|
||||||
|
<th style="">Zahlbar bis</th>
|
||||||
|
<th style="">IBAN</th>
|
||||||
|
<th style="">BIC</th>
|
||||||
|
<th style="">Betrag EUR</th>
|
||||||
|
<th style=""></th>
|
||||||
|
</tr>
|
||||||
|
<c:forEach items="#{workitem.itemList['$workitemref']}" var="id">
|
||||||
|
|
||||||
|
<!-- load inovice data by documentController: #{documentController.load(id)} -->
|
||||||
|
<ui:param name="invoice" value="#{documentController.getDocument()}"></ui:param>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><h:link outcome="/pages/workitems/workitem">
|
||||||
|
#{invoice.item['$workflowsummary']}
|
||||||
|
<f:param name="id" value="#{invoice.item['$uniqueid']}" />
|
||||||
|
</h:link>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<h:outputText
|
||||||
|
value="#{invoice.item['payment.date']}">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}"
|
||||||
|
timeZone="#{message.timeZone}" />
|
||||||
|
a</h:outputText>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>#{invoice.item['cdtr.iban']}</td>
|
||||||
|
<td>#{invoice.item['cdtr.bic']}</td>
|
||||||
|
|
||||||
|
|
||||||
|
<td style="text-align: right;"><h:outputText
|
||||||
|
value="#{invoice.item['payment.total']}">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText></td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
</c:forEach>
|
||||||
|
|
||||||
|
<tr style="border-top: 1px solid #ccc;">
|
||||||
|
<td />
|
||||||
|
<td />
|
||||||
|
<td />
|
||||||
|
<td><strong>Summary</strong></td>
|
||||||
|
<td style="text-align: right;"><strong><h:outputText
|
||||||
|
value="#{sepaController.calculateSum(workitem.itemList['$workitemref'], 'payment.total')}">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText></strong></td>
|
||||||
|
|
||||||
|
<td />
|
||||||
|
<td />
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
||||||
54
src/main/webapp/pages/workitems/forms/sub_agreement.xhtml
Normal file
54
src/main/webapp/pages/workitems/forms/sub_agreement.xhtml
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html">
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Agreement Form -->
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.startdate']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText
|
||||||
|
value="#{workitem.item['_startdate']}"
|
||||||
|
styleClass="imixs-date">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}" timeZone="#{message.timeZone}"/>
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.enddate']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_enddate']}"
|
||||||
|
styleClass="imixs-date">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}" timeZone="#{message.timeZone}"/>
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.type']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText
|
||||||
|
value="#{workitem.item['_contracttype']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.capacity']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText
|
||||||
|
value="#{workitem.item['_capacity']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</ui:composition>
|
||||||
|
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||||
|
xmlns:i="http://xmlns.jcp.org/jsf/composite/imixs"
|
||||||
|
xmlns:marty="http://xmlns.jcp.org/jsf/composite/marty">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<!-- ### date ### -->
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.appointment']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['datDate']}"
|
||||||
|
styleClass="imixs-date">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}"
|
||||||
|
timeZone="#{message.timeZone}" />
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.followup']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:selectOneRadio layout="pageDirection"
|
||||||
|
value="#{workitem.item['keyItervalDatDate']}">
|
||||||
|
<f:selectItem itemValue="" itemLabel="#{message['form.none']}" />
|
||||||
|
<f:selectItem itemValue="weekly"
|
||||||
|
itemLabel="#{message['form.weekly']}" />
|
||||||
|
<f:selectItem itemValue="monthly"
|
||||||
|
itemLabel="#{message['form.monthly']}" />
|
||||||
|
<f:selectItem itemValue="yearly"
|
||||||
|
itemLabel="#{message['form.yearly']}" />
|
||||||
|
</h:selectOneRadio>
|
||||||
|
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html">
|
||||||
|
|
||||||
|
|
||||||
|
<!-- replaced by chronicle -->
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<h:inputTextarea id="abstract_id" class="imixs-editor"
|
||||||
|
value="#{workitem.item['htmldocumentation']}" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
||||||
|
|
@ -0,0 +1,79 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
|
||||||
|
xmlns:marty="http://xmlns.jcp.org/jsf/composite/marty" xmlns:i="http://xmlns.jcp.org/jsf/composite/imixs">
|
||||||
|
|
||||||
|
<!-- DATEV Kreditor/Debitor Search integration
|
||||||
|
|
||||||
|
This subform is a custom form part.
|
||||||
|
|
||||||
|
The subform provides a jsf commandScript which calls the datevSearchController.search method in the backend.
|
||||||
|
|
||||||
|
The script below inits a autocompletion feature for the input field.
|
||||||
|
See imixs-office.autocompletion.js
|
||||||
|
|
||||||
|
See also:
|
||||||
|
https://stackoverflow.com/questions/16588327/how-to-invoke-a-jsf-managed-bean-on-a-html-dom-event-using-native-javascript
|
||||||
|
https://dzone.com/articles/execute-a-jsf-ajax-request-by-just-a-function-call
|
||||||
|
https://www.w3schools.com/howto/howto_js_autocomplete.asp
|
||||||
|
-->
|
||||||
|
|
||||||
|
<ui:param name="item_konto_name" value="#{item.name}.name"></ui:param>
|
||||||
|
<ui:fragment rendered="#{!readonly}">
|
||||||
|
<h:inputText value="#{workitem.item[item.name]}" pt:data-item="#{item.name}" />
|
||||||
|
<h:inputHidden value="#{workitem.item[item_konto_name]}" pt:data-item="#{item_konto_name}" />
|
||||||
|
<br />
|
||||||
|
<span id='datev-konto-id' class='small'>#{workitem.item[item_konto_name]}</span>
|
||||||
|
<h:commandScript name="datevSearch" action="#{datevSearchController.searchDebitorCreditor(options)}"
|
||||||
|
render="autocomplete-resultlist-datev-debkredkonto" onevent="autocompleteShowResult" />
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
/*<![CDATA[*/
|
||||||
|
|
||||||
|
// init input fields...
|
||||||
|
$(document).ready(function () {
|
||||||
|
// add autocomplete feature ..
|
||||||
|
var creditorField = $("input[data-item='#{item.name}']");
|
||||||
|
$(creditorField).each(function () {
|
||||||
|
$(this).addClass("imixs-ml");
|
||||||
|
autocompleteInitInput(this, datevSearch, 'autocomplete-resultlist-datev-debkredkonto', selectDebitorCreditorCallback);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Hier bekommen wir die JSON Struktur mit allen daten.
|
||||||
|
// diese Daten werden auf die einzelnen Felder verteilt.
|
||||||
|
function selectDebitorCreditorCallback(selection) {
|
||||||
|
const kontoData = JSON.parse(selection);
|
||||||
|
// fill data into the fields....
|
||||||
|
var inputElementKonto = $("input[data-item='#{item.name}']");
|
||||||
|
var inputElementKreditor = $("input[data-item='#{item_konto_name}']");
|
||||||
|
inputElementKonto.val(kontoData.konto);
|
||||||
|
inputElementKreditor.val(kontoData.name);
|
||||||
|
// remove old konto name
|
||||||
|
$('#datev-konto-id').remove();
|
||||||
|
// append span with konto name....
|
||||||
|
inputElementKonto.after("<span id='datev-konto-id' class='small'>" + kontoData.name + "</span>");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*]]>*/
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- datev debkredkonto suggest list -->
|
||||||
|
<h:panelGroup id="autocomplete-resultlist-datev-debkredkonto" layout="block" class="autocomplete-resultlist">
|
||||||
|
<ui:repeat var="suggest" value="#{datevSearchController.searchResult}">
|
||||||
|
<div class="autocomplete-resultlist-element" onclick="autocompleteSelectElement('#{suggest.data}')">
|
||||||
|
<a href="#">
|
||||||
|
<h:outputText value="#{suggest.display}" escape="false" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</ui:repeat>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
</ui:fragment>
|
||||||
|
|
||||||
|
<!-- Read only -->
|
||||||
|
<ui:fragment rendered="#{readonly}">
|
||||||
|
<h:outputText value="#{workitem.item[item.name]} #{workitem.item[item_konto_name]}"/>
|
||||||
|
</ui:fragment>
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
@ -0,0 +1,79 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
|
||||||
|
xmlns:marty="http://xmlns.jcp.org/jsf/composite/marty" xmlns:i="http://xmlns.jcp.org/jsf/composite/imixs">
|
||||||
|
|
||||||
|
<!-- DATEV Sachkonto Search integration
|
||||||
|
|
||||||
|
This subform is a custom form part.
|
||||||
|
|
||||||
|
The subform provides a jsf commandScript which calls the datevSearchController.search method in the backend.
|
||||||
|
|
||||||
|
The script below inits a autocompletion feature for the input field.
|
||||||
|
See imixs-office.autocompletion.js
|
||||||
|
|
||||||
|
See also:
|
||||||
|
https://stackoverflow.com/questions/16588327/how-to-invoke-a-jsf-managed-bean-on-a-html-dom-event-using-native-javascript
|
||||||
|
https://dzone.com/articles/execute-a-jsf-ajax-request-by-just-a-function-call
|
||||||
|
https://www.w3schools.com/howto/howto_js_autocomplete.asp
|
||||||
|
-->
|
||||||
|
|
||||||
|
<ui:param name="item_konto_name" value="#{item.name}.name"></ui:param>
|
||||||
|
<ui:fragment rendered="#{!readonly}">
|
||||||
|
<h:inputText value="#{workitem.item[item.name]}" pt:data-item="#{item.name}" />
|
||||||
|
<h:inputHidden value="#{workitem.item[item_konto_name]}" pt:data-item="#{item_konto_name}" />
|
||||||
|
<br />
|
||||||
|
<span id='datev-konto-id' class='small'>#{workitem.item[item_konto_name]}</span>
|
||||||
|
<h:commandScript name="datevSearch" action="#{datevSearchController.searchSachkonto(options)}"
|
||||||
|
render="autocomplete-resultlist-datev-sachkonto" onevent="autocompleteShowResult" />
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
/*<![CDATA[*/
|
||||||
|
|
||||||
|
// init input fields...
|
||||||
|
$(document).ready(function () {
|
||||||
|
// add autocomplete feature ..
|
||||||
|
var creditorField = $("input[data-item='#{item.name}']");
|
||||||
|
$(creditorField).each(function () {
|
||||||
|
$(this).addClass("imixs-ml");
|
||||||
|
autocompleteInitInput(this, datevSearch, 'autocomplete-resultlist-datev-sachkonto', selectDebitorCreditorCallback);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Hier bekommen wir die JSON Struktur mit allen daten.
|
||||||
|
// diese Daten werden auf die einzelnen Felder verteilt.
|
||||||
|
function selectDebitorCreditorCallback(selection) {
|
||||||
|
const kontoData = JSON.parse(selection);
|
||||||
|
// fill data into the fields....
|
||||||
|
var inputElementKonto = $("input[data-item='#{item.name}']");
|
||||||
|
var inputElementKreditor = $("input[data-item='#{item_konto_name}']");
|
||||||
|
inputElementKonto.val(kontoData.konto);
|
||||||
|
inputElementKreditor.val(kontoData.name);
|
||||||
|
// remove old konto name
|
||||||
|
$('#datev-konto-id').remove();
|
||||||
|
// append span with konto name....
|
||||||
|
inputElementKonto.after("<span id='datev-konto-id' class='small'>" + kontoData.name + "</span>");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*]]>*/
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- datev sachkonto suggest list -->
|
||||||
|
<h:panelGroup id="autocomplete-resultlist-datev-sachkonto" layout="block" class="autocomplete-resultlist">
|
||||||
|
<ui:repeat var="suggest" value="#{datevSearchController.searchResult}">
|
||||||
|
<div class="autocomplete-resultlist-element" onclick="autocompleteSelectElement('#{suggest.data}')">
|
||||||
|
<a href="#">
|
||||||
|
<h:outputText value="#{suggest.display}" escape="false" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</ui:repeat>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
</ui:fragment>
|
||||||
|
|
||||||
|
<!-- Read only -->
|
||||||
|
<ui:fragment rendered="#{readonly}">
|
||||||
|
<h:outputText value="#{workitem.item[item.name]} #{workitem.item[item_konto_name]}"/>
|
||||||
|
</ui:fragment>
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
@ -0,0 +1,84 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html">
|
||||||
|
|
||||||
|
<!-- Zeigt eine Auswahl von aktuellen Requirements zu dem selektierten Auftrag an.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<ui:param name="refid" value="#{workflowController.workitem.item['$workitemref']}" />
|
||||||
|
|
||||||
|
<c:if test="#{!readonly and !empty refid}">
|
||||||
|
<ui:param name="query"
|
||||||
|
value="(type:workitem) AND ($workitemref:#{refid}) AND ($workflowgroup:Requirement) AND ($taskid:2300)" />
|
||||||
|
<ui:param name="requirements"
|
||||||
|
value="#{workflowController.getDocumentService().findStubs(query,100,0,'$created',false)}" />
|
||||||
|
<h:selectManyCheckbox id="requirements_id" required="false" layout="pageDirection"
|
||||||
|
value="#{workitem.itemListArray['_requirements']}">
|
||||||
|
<c:forEach items="#{requirements}" var="req">
|
||||||
|
<f:selectItem itemLabel="#{req.item['$workflowsummary']}" itemValue="#{req.item['$uniqueid']}">
|
||||||
|
</f:selectItem>
|
||||||
|
</c:forEach>
|
||||||
|
</h:selectManyCheckbox>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
window.onload = function () {
|
||||||
|
// Alle Input-Felder im Dokument auswählen
|
||||||
|
const inputFields = document.querySelectorAll("input");
|
||||||
|
|
||||||
|
// Array für gefundene Input-Felder erstellen
|
||||||
|
const foundInputFields = [];
|
||||||
|
|
||||||
|
// Durch jedes Input-Feld iterieren und nach der ID suchen
|
||||||
|
inputFields.forEach((inputField) => {
|
||||||
|
// Überprüfen, ob die ID das Wort "requirement" enthält
|
||||||
|
if (inputField.id.includes("requirements_id")) {
|
||||||
|
// Input-Feld zur Liste der gefundenen Input-Felder hinzufügen
|
||||||
|
foundInputFields.push(inputField);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Gefundene Input-Felder anzeigen
|
||||||
|
foundInputFields.forEach((inputField) => {
|
||||||
|
var uid = inputField.value;
|
||||||
|
// find label
|
||||||
|
const labelElement = inputField.nextElementSibling;
|
||||||
|
if (labelElement.tagName === 'LABEL') {
|
||||||
|
// Neuen a-Tag erstellen
|
||||||
|
const anchorTag = document.createElement('a');
|
||||||
|
// Link zur Domain openai.com festlegen
|
||||||
|
anchorTag.href = '/pages/workitems/workitem.xhtml?id=' + uid;
|
||||||
|
// Textinhalt des label-Elements zum a-Tag hinzufügen
|
||||||
|
const newLabel = labelElement.cloneNode(true);
|
||||||
|
newLabel.style.fontWeight = 'normal';
|
||||||
|
anchorTag.appendChild(newLabel);
|
||||||
|
// Das label-Element durch den neuen a-Tag ersetzen
|
||||||
|
labelElement.parentNode.replaceChild(anchorTag, labelElement);
|
||||||
|
} else {
|
||||||
|
console.log('Es wurde kein label-Element gefunden.');
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Read Only Mode -->
|
||||||
|
<c:if test="#{readonly}">
|
||||||
|
<ui:param name="requirementSelection" value="#{workitem.itemList['_requirements']}" />
|
||||||
|
<div>
|
||||||
|
<c:forEach items="#{requirementSelection}" var="reqID">
|
||||||
|
<ui:param name="requirement" value="#{workflowController.getDocumentService().load(reqID)}" />
|
||||||
|
<h:link outcome="/pages/workitems/workitem.xhtml?id=#{reqID}">#{requirement.item['$workflowsummary']}
|
||||||
|
</h:link>
|
||||||
|
<br />
|
||||||
|
</c:forEach>
|
||||||
|
</div>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
@ -0,0 +1,279 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
|
||||||
|
xmlns:fn="http://xmlns.jcp.org/jsp/jstl/functions">
|
||||||
|
|
||||||
|
<h:panelGroup layout="block" styleClass="imixs-form-section" style="position: relative;"
|
||||||
|
id="bookinglist" binding="#{bookinglistContainer}">
|
||||||
|
|
||||||
|
|
||||||
|
<ui:param name="hasKostenstelle1" value="#{!empty datevController.kostenstelle1}"></ui:param>
|
||||||
|
<ui:param name="hasKostenstelle2" value="#{!empty datevController.kostenstelle2}"></ui:param>
|
||||||
|
|
||||||
|
<ui:fragment rendered="#{!readonly}">
|
||||||
|
<h:commandScript name="sachkontoSearch" action="#{datevSearchController.searchSachkonto()}"
|
||||||
|
render="autocomplete-resultlist-datev-sachkonto" onevent="autocompleteShowResult" />
|
||||||
|
<table class="imixsdatatable imixs-bookingitems">
|
||||||
|
<tr>
|
||||||
|
<th style="width: 200px;">Buchungskonto</th>
|
||||||
|
<!-- -->
|
||||||
|
<ui:fragment rendered="#{hasKostenstelle1}">
|
||||||
|
<th style="width: 140px;">Kostenstelle I.</th>
|
||||||
|
</ui:fragment>
|
||||||
|
<ui:fragment rendered="#{hasKostenstelle2}">
|
||||||
|
<th style="width: 140px;">Kostenstelle II.</th>
|
||||||
|
</ui:fragment>
|
||||||
|
<th style="width: 170px;">BU Schlüssel</th>
|
||||||
|
<th style="min-width: 120px;">Betrag</th>
|
||||||
|
<th style="width: 10px;">
|
||||||
|
<!-- delete -->
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<ui:repeat var="bookingItem"
|
||||||
|
value="#{datevBookingController.bookingList}">
|
||||||
|
<tr>
|
||||||
|
<td class="konto-input">
|
||||||
|
<!-- Input Field -->
|
||||||
|
<h:panelGroup id="konto_input_box"
|
||||||
|
layout="block" class="marty-userinput-inputbox"
|
||||||
|
style="height:inherit;">
|
||||||
|
<h:inputText style="width:100%;" id="konto-input-id"
|
||||||
|
value="#{bookingItem.item['datev.konto']}" pt:data-item="datev.sachkonto" />
|
||||||
|
<h:inputHidden value="#{bookingItem.item['datev.kontobeschriftung']}" pt:data-item="datev.kontobeschriftung" />
|
||||||
|
<br />
|
||||||
|
<span id='sachkontodtr-name-id' class='small'>#{bookingItem.item['datev.kontobeschriftung']}</span>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<!-- Kostenstelle -->
|
||||||
|
<ui:fragment rendered="#{!empty datevController.kostenstelle1}">
|
||||||
|
<td><h:selectOneMenu style="width:100%;"
|
||||||
|
value="#{bookingItem.item['datev.kostenstelle1']}">
|
||||||
|
<f:selectItem itemLabel="" itemValue="" />
|
||||||
|
<f:selectItems value="#{datevController.kostenstelle1}"></f:selectItems>
|
||||||
|
</h:selectOneMenu></td>
|
||||||
|
</ui:fragment>
|
||||||
|
<ui:fragment rendered="#{!empty datevController.kostenstelle2}">
|
||||||
|
<td><h:selectOneMenu style="width:100%;"
|
||||||
|
value="#{bookingItem.item['datev.kostenstelle2']}">
|
||||||
|
<f:selectItem itemLabel="" itemValue="" />
|
||||||
|
<f:selectItems value="#{datevController.kostenstelle2}"></f:selectItems>
|
||||||
|
</h:selectOneMenu></td>
|
||||||
|
</ui:fragment>
|
||||||
|
|
||||||
|
|
||||||
|
<td><h:selectOneMenu style="width:100%;"
|
||||||
|
value="#{bookingItem.item['datev.buschluessel']}">
|
||||||
|
<f:selectItems
|
||||||
|
value="#{datevController.buSchluesel}"></f:selectItems>
|
||||||
|
<f:selectItem itemLabel="" itemValue=""></f:selectItem>
|
||||||
|
</h:selectOneMenu></td>
|
||||||
|
|
||||||
|
<td style="text-align: right;"><h:inputText
|
||||||
|
value="#{bookingItem.item['datev.betrag']}" id="bookingitem_amount"
|
||||||
|
style="text-align: right;width: 100%;border: inherit;"
|
||||||
|
onchange="calculateSummary()">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:inputText></td>
|
||||||
|
|
||||||
|
<td><h:commandLink
|
||||||
|
actionListener="#{datevBookingController.remove(bookingItem.item['numpos'])}">
|
||||||
|
<span class="typcn typcn-trash imixs-state-info"></span>
|
||||||
|
<f:ajax render="#{bookinglistContainer.clientId}" execute="#{bookinglistContainer.clientId}"
|
||||||
|
onevent="initDatevTable" />
|
||||||
|
</h:commandLink></td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</ui:repeat>
|
||||||
|
|
||||||
|
<!-- summary -->
|
||||||
|
<tr>
|
||||||
|
<td />
|
||||||
|
<ui:fragment rendered="#{hasKostenstelle1}">
|
||||||
|
<td />
|
||||||
|
</ui:fragment>
|
||||||
|
<ui:fragment rendered="#{hasKostenstelle2}">
|
||||||
|
<td />
|
||||||
|
</ui:fragment>
|
||||||
|
|
||||||
|
<td class="bookinglist-sum"
|
||||||
|
style="text-align: right; font-weight: bold;">Summe:</td>
|
||||||
|
<td class="bookinglist-sum bookinglist_summary"
|
||||||
|
style="text-align: right; font-weight: bold;"></td>
|
||||||
|
<td />
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<!-- total summary -->
|
||||||
|
<h:inputHidden value="#{workitem.item['_capacity']}"
|
||||||
|
id="bookingitems_capacity" />
|
||||||
|
<h:inputHidden value="#{workitem.item['_capacity_dsp']}"
|
||||||
|
id="bookingitems_capacity_dsp" />
|
||||||
|
|
||||||
|
<h:commandButton value="#{message.add}" id="addposbutton_id"
|
||||||
|
actionListener="#{datevBookingController.add}">
|
||||||
|
<f:ajax render="#{bookinglistContainer.clientId}" execute="#{bookinglistContainer.clientId}"
|
||||||
|
onevent="initDatevTable" />
|
||||||
|
</h:commandButton>
|
||||||
|
|
||||||
|
<!-- datev creditor suggest list -->
|
||||||
|
<h:panelGroup id="autocomplete-resultlist-datev-sachkonto" layout="block" class="autocomplete-resultlist autocomplete-resultlist-sachkonto">
|
||||||
|
<ui:repeat var="suggest" value="#{datevSearchController.searchResult}">
|
||||||
|
<div class="autocomplete-resultlist-element" onclick="autocompleteSelectElement('#{suggest.data}')">
|
||||||
|
<a href="#" style="color: #777;">
|
||||||
|
<h:outputText value="#{suggest.display}" escape="false" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</ui:repeat>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
/*<![CDATA[*/
|
||||||
|
|
||||||
|
// display summary
|
||||||
|
$(document).ready(
|
||||||
|
function() {
|
||||||
|
calculateSummary();
|
||||||
|
initDatevTable();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Hier bekommen wir die JSON Struktur mit allen Daten.
|
||||||
|
// diese Daten werden auf die einzelnen Felder verteilt.
|
||||||
|
function selectSachkontoCallback(selection,inputElementKonto) {
|
||||||
|
const sachkontoData = JSON.parse(selection);
|
||||||
|
inputElementKonto.val(sachkontoData.konto);
|
||||||
|
// finde das nächste hidden Feld...
|
||||||
|
var inputElementBeschriftung=$(inputElementKonto).siblings( "input" );
|
||||||
|
inputElementBeschriftung.val(sachkontoData.name);
|
||||||
|
// remove old cdtr.name
|
||||||
|
$(inputElementKonto).siblings( "span" ).remove();
|
||||||
|
// append span with cdtr.name....
|
||||||
|
inputElementKonto.after("<span id='sachkonto-name-id' class='small'>" + sachkontoData.name + "</span>");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* initialisiert die suchfunktion in der Tabelle */
|
||||||
|
function initDatevTable(data) {
|
||||||
|
if (!data || data.status === 'success') {
|
||||||
|
// add autocomplete feature ..
|
||||||
|
var sachkontoInput = $("input[data-item='datev.sachkonto']");
|
||||||
|
$(sachkontoInput).each(function () {
|
||||||
|
$(this).addClass("imixs-ml");
|
||||||
|
autocompleteInitInput(this, sachkontoSearch, 'autocomplete-resultlist-datev-sachkonto', selectSachkontoCallback);
|
||||||
|
});
|
||||||
|
$('[id$=bookinglist]').imixsLayout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Rechnet die Preise zusammen
|
||||||
|
function calculateSummary() {
|
||||||
|
var price = 0, amount = 0, sum = 0, total = 0;
|
||||||
|
var summaryItems = $("[id$=bookingitem_amount]");
|
||||||
|
$(summaryItems).each(function(index, value) {
|
||||||
|
|
||||||
|
var amount = convertToNumber($(this).val());
|
||||||
|
if (!isNaN(amount)) {
|
||||||
|
amount = amount * 1; // convert to number
|
||||||
|
total = total + amount;
|
||||||
|
total = Math.round(total * 100) / 100;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// update total _capacity
|
||||||
|
// update bookinglist_summary
|
||||||
|
$("[id$=bookingitems_capacity]").val(total);
|
||||||
|
$("[id$=bookingitems_capacity_dsp]").val(convertToCurrency(total));
|
||||||
|
$(".bookinglist_summary", ".imixs-bookingitems").empty();
|
||||||
|
$(".bookinglist_summary", ".imixs-bookingitems").append(
|
||||||
|
convertToCurrency(total));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* format 1.000,00 to 1000.00 */
|
||||||
|
function convertToNumber(currency) {
|
||||||
|
currency = currency.replace(/\./g, '');
|
||||||
|
currency = currency.replace(/\,/g, '.');
|
||||||
|
return currency;
|
||||||
|
}
|
||||||
|
/* format 1000 into 1.000,00 */
|
||||||
|
function convertToCurrency(number) {
|
||||||
|
var splitNum;
|
||||||
|
//number = Math.abs(number);
|
||||||
|
number = number.toFixed(2);
|
||||||
|
splitNum = number.split('.');
|
||||||
|
splitNum[0] = splitNum[0].replace(/\B(?=(\d{3})+(?!\d))/g, ".");
|
||||||
|
return splitNum.join(",");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*]]>*/
|
||||||
|
</script>
|
||||||
|
</ui:fragment>
|
||||||
|
|
||||||
|
<ui:fragment rendered="#{readonly}">
|
||||||
|
<table class="imixsdatatable imixs-bookingitems">
|
||||||
|
<tr>
|
||||||
|
<th style="width: 300px;">Buchungskonto</th>
|
||||||
|
<!-- -->
|
||||||
|
<ui:fragment rendered="#{hasKostenstelle1}">
|
||||||
|
<th style="width: 140px;">Kostenstelle I.</th>
|
||||||
|
</ui:fragment>
|
||||||
|
<ui:fragment rendered="#{hasKostenstelle2}">
|
||||||
|
<th style="width: 140px;">Kostenstelle II.</th>
|
||||||
|
</ui:fragment>
|
||||||
|
<th style="width: 70px;">BU Schlüssel</th>
|
||||||
|
<th style="width: 50px;">Betrag</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<ui:repeat var="bookingItem"
|
||||||
|
value="#{datevBookingController.bookingList}">
|
||||||
|
<tr>
|
||||||
|
<td class="konto-input"><h:outputText
|
||||||
|
value="#{bookingItem.item['datev.konto']}"></h:outputText>
|
||||||
|
<h:outputText
|
||||||
|
value=" #{bookingItem.item['datev.kontobeschriftung']}"></h:outputText>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Kostenstelle -->
|
||||||
|
<ui:fragment rendered="#{!empty datevController.kostenstelle1}">
|
||||||
|
<td><h:outputText value="#{bookingItem.item['datev.kostenstelle1']}"></h:outputText></td>
|
||||||
|
</ui:fragment>
|
||||||
|
<ui:fragment rendered="#{!empty datevController.kostenstelle2}">
|
||||||
|
<td><h:outputText value="#{bookingItem.item['datev.kostenstelle2']}"></h:outputText></td>
|
||||||
|
</ui:fragment>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
<h:outputText value="#{bookingItem.item['datev.buschluessel']}"></h:outputText>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td style="text-align: right;"><h:outputText
|
||||||
|
value="#{bookingItem.item['datev.betrag']}"></h:outputText></td>
|
||||||
|
</tr>
|
||||||
|
</ui:repeat>
|
||||||
|
<!-- summary -->
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td />
|
||||||
|
<ui:fragment rendered="#{hasKostenstelle1}">
|
||||||
|
<td />
|
||||||
|
</ui:fragment>
|
||||||
|
<ui:fragment rendered="#{hasKostenstelle2}">
|
||||||
|
<td />
|
||||||
|
</ui:fragment>
|
||||||
|
<td class="bookinglist-sum"
|
||||||
|
style="text-align: right; font-weight: bold;">Summe:</td>
|
||||||
|
<td class="bookinglist-sum bookinglist_summary"
|
||||||
|
style="text-align: right; font-weight: bold;">#{workitem.item['_capacity_dsp']}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</ui:fragment>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
@ -0,0 +1,101 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||||
|
xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core"
|
||||||
|
xmlns:h="http://java.sun.com/jsf/html" xmlns:i="http://java.sun.com/jsf/composite/imixs"
|
||||||
|
xmlns:marty="http://java.sun.com/jsf/composite/marty">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-form-section-3">
|
||||||
|
<dl>
|
||||||
|
<dt>DATEV Berater-Nr.</dt>
|
||||||
|
<dd>
|
||||||
|
<h:outputText value="#{workitem.item['datev.client.name']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>DATEV Mandanten-nr.</dt>
|
||||||
|
<dd>
|
||||||
|
<h:outputText value="#{workitem.item['datev.client.id']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>Buchungsperiode</dt>
|
||||||
|
<dd>
|
||||||
|
<h:outputText value="#{workitem.item['datev.booking_period']}" />
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h:panelGroup styleClass="imixs-form-section">
|
||||||
|
|
||||||
|
<h3>Belegübersicht</h3>
|
||||||
|
|
||||||
|
<table class="" style="width:100%">
|
||||||
|
<tr style="background-color: #efefef;">
|
||||||
|
<th style="text-align: center;">Beleg</th>
|
||||||
|
<th style="text-align: center;">Konto</th>
|
||||||
|
<th style="text-align: center;">Betrag</th>
|
||||||
|
<th style="text-align: center;">S/H</th>
|
||||||
|
<th style="text-align: center;">Gegenkonto</th>
|
||||||
|
<th style="text-align: center;">BU-Schlüssel</th>
|
||||||
|
<th style="text-align: center;">Belegdatum</th>
|
||||||
|
<th style="text-align: center;">Belegfeld 1</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<c:forEach items="#{datevController.getBuchungsexportByBelegdatum(workitem)}" var="beleg">
|
||||||
|
<tr style="border-bottom: 1px solid #ccc;">
|
||||||
|
<td style="text-align: left;">
|
||||||
|
<h:link outcome="/pages/workitems/workitem">#{beleg.item['$workflowgroup']} -
|
||||||
|
#{beleg.item['$workflowsummary']}
|
||||||
|
<f:param name="id" value="#{beleg.item['$uniqueid']}" />
|
||||||
|
</h:link>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td style="text-align: left;">
|
||||||
|
#{datevController.getBuchung(beleg).item['datev.konto']} -
|
||||||
|
#{datevController.getBuchung(beleg).item['datev.kontobeschriftung']}
|
||||||
|
</td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
<h:outputText value="#{beleg.item['datev.betrag']}">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
<td style="text-align: center;">
|
||||||
|
#{beleg.item['datev.shkennzeichen']}
|
||||||
|
</td>
|
||||||
|
<td style="text-align: center;">
|
||||||
|
#{beleg.item['datev.gegenkonto']}
|
||||||
|
</td>
|
||||||
|
<td style="text-align: center;">
|
||||||
|
#{datevController.getBuchung(beleg).item['datev.buschluessel']}
|
||||||
|
</td>
|
||||||
|
<td style="text-align: center;">
|
||||||
|
<h:outputText value="#{beleg.item['datev.belegdatum']}">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}" timeZone="#{message.timeZone}" />
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
<td style="text-align: center;">
|
||||||
|
#{beleg.item['datev.belegfeld1']}
|
||||||
|
</td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
</c:forEach>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</h:panelGroup>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/*<![CDATA[*/
|
||||||
|
// This method refreshs the layout
|
||||||
|
function updateItems(data) {
|
||||||
|
if (data.status === 'success') {
|
||||||
|
$('form').imixsLayout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*]]>*/
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
@ -0,0 +1,206 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||||
|
xmlns:f="http://java.sun.com/jsf/core"
|
||||||
|
xmlns:c="http://java.sun.com/jsp/jstl/core"
|
||||||
|
xmlns:h="http://java.sun.com/jsf/html"
|
||||||
|
xmlns:marty="http://java.sun.com/jsf/composite/marty">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<h:panelGroup layout="block" styleClass="imixs-form-section"
|
||||||
|
id="oderlist" binding="#{orderlistContainer}">
|
||||||
|
<f:ajax render="oderlist" onevent="updateOrderItems">
|
||||||
|
<table class="imixsdatatable imixs-orderitems">
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<th style="width: 100px;">Datum</th>
|
||||||
|
<th>Beschreibung</th>
|
||||||
|
|
||||||
|
<th style="width: 50px;">Menge</th>
|
||||||
|
<th style="width: 10px;">
|
||||||
|
<!-- delete -->
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<ui:repeat var="orderitem" value="#{childItemController.childItems}">
|
||||||
|
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<!-- date -->
|
||||||
|
<td><h:inputText value="#{orderitem.item['datdate']}"
|
||||||
|
styleClass="imixs-date">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}"
|
||||||
|
timeZone="#{message.timeZone}" />
|
||||||
|
</h:inputText></td>
|
||||||
|
|
||||||
|
<!-- Name -->
|
||||||
|
<td><h:inputText value="#{orderitem.item['name']}"
|
||||||
|
style="width:100%" /></td>
|
||||||
|
|
||||||
|
<td><h:inputText value="#{orderitem.item['amount']}"
|
||||||
|
style="text-align: right;width:4em" class="orderitem_amount"
|
||||||
|
onchange="calculateSummary()" /></td>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<td><h:commandLink
|
||||||
|
actionListener="#{childItemController.remove(orderitem.item['numpos'])}">
|
||||||
|
<span class="typcn typcn-trash imixs-state-info"></span>
|
||||||
|
<f:ajax render="#{orderlistContainer.clientId}"
|
||||||
|
onevent="updateOrderItems" />
|
||||||
|
</h:commandLink> <!-- item summary --> <h:inputHidden
|
||||||
|
value="#{orderitem.item['_capacity']}" id="item_capacity" /> <h:inputHidden
|
||||||
|
value="#{orderitem.item['_capacity_dsp']}"
|
||||||
|
id="item_capacity_dsp" /></td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</ui:repeat>
|
||||||
|
|
||||||
|
<!-- summary -->
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td />
|
||||||
|
|
||||||
|
<td class="" style="text-align: right;"><strong>Summe:</strong></td>
|
||||||
|
<td class="orderlist_total" style="text-align: right;"></td>
|
||||||
|
<td />
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- plan -->
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td />
|
||||||
|
|
||||||
|
<td class="" style="text-align: right;"><strong>Plan:</strong></td>
|
||||||
|
<td class="orderlist_planning" style="text-align: right;">#{workitem.item['assistant.plan']}</td>
|
||||||
|
<td />
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- Div -->
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td />
|
||||||
|
|
||||||
|
<td class="" style="text-align: right;"><strong>Prozent:</strong></td>
|
||||||
|
<td class="orderlist_div" style="text-align: right;"> %</td>
|
||||||
|
<td />
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
</table>
|
||||||
|
<!-- total summary -->
|
||||||
|
<h:inputHidden value="#{workitem.item['_capacity']}"
|
||||||
|
id="orderitems_capacity" />
|
||||||
|
<!-- total summary -->
|
||||||
|
<h:inputHidden value="#{workitem.item['_effort_div']}"
|
||||||
|
id="orderitems_effort_div" />
|
||||||
|
|
||||||
|
|
||||||
|
<h:commandButton value="#{message.add}" id="addposbutton_id"
|
||||||
|
actionListener="#{childItemController.add}">
|
||||||
|
</h:commandButton>
|
||||||
|
</f:ajax>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="col-4">
|
||||||
|
<a
|
||||||
|
href="#{facesContext.externalContext.requestContextPath}/api/report/werksstudent-accounting.imixs-report?id=#{workitem.uniqueID}"
|
||||||
|
target="_blank"> <span class="typcn typcn-chart-line"></span>
|
||||||
|
Accounting
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
/*<![CDATA[*/
|
||||||
|
|
||||||
|
// display summary
|
||||||
|
$(document).ready(function() {
|
||||||
|
|
||||||
|
// prvent from hiting enter key
|
||||||
|
$("input").keydown(function(event){
|
||||||
|
if(event.keyCode == 13) {
|
||||||
|
event.preventDefault();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// erste Zeile hinzufügen, falls tabelle noch leer ist
|
||||||
|
var posTableEmpty=#{empty childItemController.childItems};
|
||||||
|
if (posTableEmpty) {
|
||||||
|
// click on add button
|
||||||
|
posButton=$('[id$=addposbutton_id]');
|
||||||
|
if (posButton) {
|
||||||
|
$(posButton).click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
calculateSummary();
|
||||||
|
});
|
||||||
|
|
||||||
|
// This method refreshs the layout
|
||||||
|
function updateOrderItems(data) {
|
||||||
|
if (data.status === 'success') {
|
||||||
|
$('[id$=oderlist]').imixsLayout();
|
||||||
|
calculateSummary();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Rechnet die Preise zusammen
|
||||||
|
function calculateSummary() {
|
||||||
|
var price = 0, amount = 0, sum = 0;
|
||||||
|
var summaryItems = $(".orderitem_amount");
|
||||||
|
$(summaryItems).each(function(index, value) {
|
||||||
|
var tableRow = $(this).closest('tr');
|
||||||
|
var amount =convertToNumber( $(this).val());
|
||||||
|
//console.log('amount=' + amount);
|
||||||
|
//console.log('price=' + price);
|
||||||
|
if (!isNaN(amount) ) {
|
||||||
|
sum = sum + (amount*1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// update total.....
|
||||||
|
sum = Math.round(sum * 100) / 100;
|
||||||
|
$("[id$=orderitems_capacity]").val(sum);
|
||||||
|
|
||||||
|
$(".orderlist_total").empty();
|
||||||
|
$(".orderlist_total").append(sum);
|
||||||
|
|
||||||
|
// compute div...
|
||||||
|
var plan=convertToNumber("#{workitem.item['assistant.plan']}");
|
||||||
|
plan=plan*1;
|
||||||
|
var planDiv=sum/plan*100;
|
||||||
|
planDiv=planDiv.toFixed(2);
|
||||||
|
//alert(d2);
|
||||||
|
$(".orderlist_div").empty();
|
||||||
|
$(".orderlist_div").append(planDiv+"%");
|
||||||
|
$("[id$=orderitems_effort_div]").val(planDiv);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* format 1.000,00 to 1000.00 */
|
||||||
|
function convertToNumber(currency) {
|
||||||
|
currency = currency.replace(/\./g, '');
|
||||||
|
currency = currency.replace(/\,/g, '.');
|
||||||
|
return currency;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*]]>*/
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
274
src/main/webapp/pages/workitems/sections/imixs/auftrag.xhtml
Normal file
274
src/main/webapp/pages/workitems/sections/imixs/auftrag.xhtml
Normal file
|
|
@ -0,0 +1,274 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||||
|
xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core"
|
||||||
|
xmlns:h="http://java.sun.com/jsf/html" xmlns:office="http://xmlns.jcp.org/jsf/composite/office"
|
||||||
|
xmlns:i="http://xmlns.jcp.org/jsf/composite/imixs">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<!-- Contract Form -->
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
#{message['form.subject']} <span class="imixs-required">*</span>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_subject']}" required="true" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>#{message['form.description']}</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputTextarea value="#{workitem.item['_description']}" />
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.contact']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
|
||||||
|
<ui:include src="/pages/workitems/parts/workitemlink.xhtml">
|
||||||
|
<ui:param name="options" value="($workflowgroup:Kontakt) AND (type:workitem)" />
|
||||||
|
</ui:include>
|
||||||
|
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>Rechnung E-Mail:</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['invoice.email']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.reminder']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText styleClass="imixs-date" value="#{workitem.item['datDate']}">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}" timeZone="#{message.timeZone}" />
|
||||||
|
</h:inputText>
|
||||||
|
|
||||||
|
<h:selectOneMenu style="width:120px;margin-left:10px;" value="#{workitem.item['keyIntervalDatDate']}">
|
||||||
|
<f:selectItem itemValue="" itemLabel="#{message['form.none']}" />
|
||||||
|
<f:selectItem itemValue="daily" itemLabel="Täglich" />
|
||||||
|
<f:selectItem itemValue="weekly" itemLabel="#{message['form.weekly']}" />
|
||||||
|
<f:selectItem itemValue="monthly" itemLabel="#{message['form.monthly']}" />
|
||||||
|
<f:selectItem itemValue="yearly" itemLabel="#{message['form.yearly']}" />
|
||||||
|
</h:selectOneMenu>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
<h2>Accounting</h2>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.ordernumber']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_ordernumber']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.orderdate']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText styleClass="imixs-date" value="#{workitem.item['_orderdate']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Agreement Form -->
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.startdate']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_startdate']}" styleClass="imixs-date">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}" timeZone="#{message.timeZone}" />
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.enddate']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_enddate']}" styleClass="imixs-date">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}" timeZone="#{message.timeZone}" />
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="Volumen (in Stunden)" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_effort']}" />
|
||||||
|
<h:outputText value="#{workitem.item['_contracttype']}" />
|
||||||
|
<h:outputText value="#{workitem.item['_capacity']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="Stundensatz" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_rate']}" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="imixs-form-section"></div>
|
||||||
|
|
||||||
|
<ui:param name="requilist" value="#{viewHandler.getData(requirementsViewController)}"></ui:param>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<h2>Requirements & Reporting</h2>
|
||||||
|
|
||||||
|
|
||||||
|
<table class="imixsdatatable imixs-orderitems" style="margin-bottom: 20px;">
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<th style="width: 100px;">Erstellt</th>
|
||||||
|
<th style="">Requirement</th>
|
||||||
|
|
||||||
|
<th style="">Status</th>
|
||||||
|
<th style="width: 60px;">Ist</th>
|
||||||
|
<th style="width: 60px;">Plan</th>
|
||||||
|
<th style="width: 80px;">%</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<ui:repeat var="orderitem" value="#{requilist}">
|
||||||
|
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<!-- Erstellt -->
|
||||||
|
<td
|
||||||
|
style="#{(orderitem.item['$taskid'] eq 2900)?'text-decoration: line-through;text-align: center;':'text-align: center;'}">
|
||||||
|
<h:outputText value="#{orderitem.item['$created']}">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}" timeZone="#{message.timeZone}" />
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
<td style="#{(orderitem.item['$taskid'] eq 2900)?'text-decoration: line-through':''}">
|
||||||
|
<h:link outcome="/pages/workitems/workitem?faces-redirect=true">
|
||||||
|
<h:outputText value="#{orderitem.item['txtworkflowsummary']}" />
|
||||||
|
|
||||||
|
<f:param name="id" value="#{orderitem.item['$uniqueid']}" />
|
||||||
|
</h:link>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<!-- Name -->
|
||||||
|
<td style="#{(orderitem.item['$taskid'] eq 2900)?'text-decoration: line-through':''}">
|
||||||
|
<h:outputText value="#{orderitem.item['$workflowstatus']}" />
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<!-- capa -->
|
||||||
|
<td
|
||||||
|
style="text-align: right;#{(orderitem.item['$taskid'] eq 2900)?'text-decoration: line-through':''}">
|
||||||
|
<h:outputText value="#{orderitem.item['_capacity']}" style="width:100%">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
|
||||||
|
<td
|
||||||
|
style="text-align: right;#{(orderitem.item['$taskid'] eq 2900)?'text-decoration: line-through':''}">
|
||||||
|
<h:outputText value="#{orderitem.item['_effort_planed']}" id="orderitem_amount">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td
|
||||||
|
style="text-align: right;#{(orderitem.item['$taskid'] eq 2900)?'text-decoration: line-through':''}">
|
||||||
|
<h:outputText value="#{orderitem.item['_effort_div']} %">
|
||||||
|
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</ui:repeat>
|
||||||
|
|
||||||
|
<!-- summary -->
|
||||||
|
<tr>
|
||||||
|
<td />
|
||||||
|
<td />
|
||||||
|
|
||||||
|
|
||||||
|
<td class="orderlist-sum" style="text-align: right; font-weight: bold;">Summe</td>
|
||||||
|
<td class="orderlist-sum orderlist_summary" style="text-align: right;">
|
||||||
|
<h:outputText value="#{workitem.item['_capacity']}">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
<td class="orderlist-sum orderlist_summary" style="text-align: right;">
|
||||||
|
<h:outputText value="#{workitem.item['_effort_planed']}">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
<td class="orderlist-sum orderlist_summary" style="text-align: right;">
|
||||||
|
<h:outputText value="#{workitem.item['_effort_div']}">
|
||||||
|
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText> %
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="col-4">
|
||||||
|
<a href="#{facesContext.externalContext.requestContextPath}/api/report/requirements-planning.imixs-report?pageSize=999&id=#{workitem.uniqueID}"
|
||||||
|
target="_blank"> <span class="typcn typcn-chart-line"></span>
|
||||||
|
Planning
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="col-4">
|
||||||
|
<a href="#{facesContext.externalContext.requestContextPath}/api/report/requirements-implementation.imixs-report?pageSize=999&id=#{workitem.uniqueID}"
|
||||||
|
target="_blank"> <span class="typcn typcn-chart-line"></span>
|
||||||
|
Status
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="col-4">
|
||||||
|
<a href="#{facesContext.externalContext.requestContextPath}/api/report/requirements-accounting.imixs-report?pageSize=999&id=#{workitem.uniqueID}"
|
||||||
|
target="_blank"> <span class="typcn typcn-chart-line"></span>
|
||||||
|
Accounting
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</ui:composition>
|
||||||
169
src/main/webapp/pages/workitems/sections/imixs/contact.xhtml
Normal file
169
src/main/webapp/pages/workitems/sections/imixs/contact.xhtml
Normal file
|
|
@ -0,0 +1,169 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||||
|
xmlns:f="http://java.sun.com/jsf/core"
|
||||||
|
xmlns:c="http://java.sun.com/jsp/jstl/core"
|
||||||
|
xmlns:h="http://java.sun.com/jsf/html"
|
||||||
|
xmlns:i="http://java.sun.com/jsf/composite/imixs"
|
||||||
|
xmlns:marty="http://java.sun.com/jsf/composite/marty">
|
||||||
|
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
#{message['form.company']}<span class="imixs-required">*</span>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText required="true" value="#{workitem.item['_Subject']}"
|
||||||
|
id="company_id">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.firstname']}">
|
||||||
|
</h:outputLabel>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_FirstName']}"
|
||||||
|
id="firstname_id">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.lastname']}">
|
||||||
|
</h:outputLabel>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_LastName']}" id="lastname_id">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.phone1']}">
|
||||||
|
</h:outputLabel>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_Phone1']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.phone2']}">
|
||||||
|
</h:outputLabel>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_Phone2']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.phone3']}">
|
||||||
|
</h:outputLabel>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_Phone3']}">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.department']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_department']}" />
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.email']}" />
|
||||||
|
<!-- mailto -->
|
||||||
|
<h:panelGroup style="margin-left:5px;"
|
||||||
|
rendered="#{! empty workitem.item['_Email']}">
|
||||||
|
<h:outputLink value="mailto:#{workitem.item['_Email']}">
|
||||||
|
<h:graphicImage url="/layout/icons/icon042.png" />
|
||||||
|
</h:outputLink>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_Email']}" id="email_id">
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<!-- ### Internet ### -->
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.internet']}" />
|
||||||
|
<!-- hyperlink -->
|
||||||
|
<h:panelGroup style="margin-left:5px;"
|
||||||
|
rendered="#{! empty workitem.item['_Internet']}">
|
||||||
|
<h:outputLink target="_blank" value="#{workitem.item['_Internet']}">
|
||||||
|
<h:graphicImage url="/layout/icons/icon001.png" />
|
||||||
|
</h:outputLink>
|
||||||
|
</h:panelGroup>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_Internet']}" />
|
||||||
|
|
||||||
|
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="Zusammenfassung" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputTextarea value="#{workitem.item['_description']}" style="" />
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
<dl>
|
||||||
|
<!-- ### date ### -->
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="#{message['form.appointment']}" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['datDate']}"
|
||||||
|
styleClass="imixs-date">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}"
|
||||||
|
timeZone="#{message.timeZone}" />
|
||||||
|
</h:inputText>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="Letzter persönlicher Kontakt" />
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_lastContact']}"
|
||||||
|
styleClass="imixs-date">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}"
|
||||||
|
timeZone="#{message.timeZone}" />
|
||||||
|
</h:inputText>
|
||||||
|
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
||||||
|
|
@ -0,0 +1,190 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||||
|
xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core"
|
||||||
|
xmlns:h="http://java.sun.com/jsf/html">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ajax logik für währung nutzen -->
|
||||||
|
|
||||||
|
<h:panelGroup layout="block" styleClass="imixs-form-section" id="imixsefforts" binding="#{orderlistContainer}">
|
||||||
|
<f:ajax render="imixsefforts" onevent="updateOrderItems">
|
||||||
|
<table class="imixsdatatable imixs-orderitems">
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<th style="width: 100px;">Datum</th>
|
||||||
|
<th>Leistungsbezeichnung</th>
|
||||||
|
|
||||||
|
<th style="width: 50px;">Menge</th>
|
||||||
|
<th style="width: 10px;">
|
||||||
|
<!-- delete -->
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<ui:repeat var="orderitem" value="#{childItemController.childItems}">
|
||||||
|
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<!-- date -->
|
||||||
|
<td>
|
||||||
|
<h:inputText value="#{orderitem.item['datdate']}" styleClass="imixs-date">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}"
|
||||||
|
timeZone="#{message.timeZone}" />
|
||||||
|
</h:inputText>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<!-- Name -->
|
||||||
|
<td>
|
||||||
|
<h:inputText value="#{orderitem.item['name']}" style="width:100%" />
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<h:inputText value="#{orderitem.item['amount']}" style="text-align: right;width:4em"
|
||||||
|
class="orderitem_amount" onchange="calculateSummary()" />
|
||||||
|
</td>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<h:commandLink actionListener="#{childItemController.remove(orderitem.item['numpos'])}">
|
||||||
|
<span class="typcn typcn-trash imixs-state-info"></span>
|
||||||
|
<f:ajax render="#{orderlistContainer.clientId}" onevent="updateOrderItems" />
|
||||||
|
</h:commandLink> <!-- item summary -->
|
||||||
|
<h:inputHidden value="#{orderitem.item['_capacity']}" id="item_capacity" />
|
||||||
|
<h:inputHidden value="#{orderitem.item['_capacity_dsp']}" id="item_capacity_dsp" />
|
||||||
|
</td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</ui:repeat>
|
||||||
|
|
||||||
|
<!-- summary -->
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td />
|
||||||
|
|
||||||
|
<td class="" style="text-align: right;"><strong>Summe:</strong></td>
|
||||||
|
<td class="orderlist_total" style="text-align: right;"></td>
|
||||||
|
<td />
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- plan -->
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td />
|
||||||
|
|
||||||
|
<td class="" style="text-align: right;"><strong>Plan:</strong></td>
|
||||||
|
<td class="orderlist_planning" style="text-align: right;">#{workitem.item['_effort_planed']}</td>
|
||||||
|
<td />
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- Div -->
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td />
|
||||||
|
|
||||||
|
<td class="" style="text-align: right;"><strong>Prozent:</strong></td>
|
||||||
|
<td class="orderlist_div" style="text-align: right;"> %</td>
|
||||||
|
<td />
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
</table>
|
||||||
|
<!-- total summary -->
|
||||||
|
<h:inputHidden value="#{workitem.item['_capacity']}" id="orderitems_capacity" />
|
||||||
|
<!-- total summary -->
|
||||||
|
<h:inputHidden value="#{workitem.item['_effort_div']}" id="orderitems_effort_div" />
|
||||||
|
|
||||||
|
|
||||||
|
<h:commandButton value="#{message.add}" id="addposbutton_id" actionListener="#{childItemController.add}">
|
||||||
|
</h:commandButton>
|
||||||
|
</f:ajax>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
/*<![CDATA[*/
|
||||||
|
|
||||||
|
// display summary
|
||||||
|
$(document).ready(function () {
|
||||||
|
|
||||||
|
// prvent from hiting enter key
|
||||||
|
$("input").keydown(function (event) {
|
||||||
|
if (event.keyCode == 13) {
|
||||||
|
event.preventDefault();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// erste Zeile hinzufügen, falls tabelle noch leer ist
|
||||||
|
var posTableEmpty =#{ empty childItemController.childItems };
|
||||||
|
if (posTableEmpty) {
|
||||||
|
// click on add button
|
||||||
|
posButton = $('[id$=addposbutton_id]');
|
||||||
|
if (posButton) {
|
||||||
|
$(posButton).click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
calculateSummary();
|
||||||
|
});
|
||||||
|
|
||||||
|
// This method refreshs the layout
|
||||||
|
function updateOrderItems(data) {
|
||||||
|
if (data.status === 'success') {
|
||||||
|
$('[id$=imixsefforts]').imixsLayout();
|
||||||
|
calculateSummary();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Rechnet die Preise zusammen
|
||||||
|
function calculateSummary() {
|
||||||
|
var price = 0, amount = 0, sum = 0;
|
||||||
|
var summaryItems = $(".orderitem_amount");
|
||||||
|
$(summaryItems).each(function (index, value) {
|
||||||
|
var tableRow = $(this).closest('tr');
|
||||||
|
var amount = convertToNumber($(this).val());
|
||||||
|
//console.log('amount=' + amount);
|
||||||
|
//console.log('price=' + price);
|
||||||
|
if (!isNaN(amount)) {
|
||||||
|
sum = sum + (amount * 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// update total.....
|
||||||
|
sum = Math.round(sum * 100) / 100;
|
||||||
|
$("[id$=orderitems_capacity]").val(sum);
|
||||||
|
|
||||||
|
$(".orderlist_total").empty();
|
||||||
|
$(".orderlist_total").append(sum);
|
||||||
|
|
||||||
|
// compute div...
|
||||||
|
var plan = convertToNumber("#{workitem.item['_effort_planed']}");
|
||||||
|
plan = plan * 1;
|
||||||
|
var planDiv = sum / plan * 100;
|
||||||
|
planDiv = planDiv.toFixed(2);
|
||||||
|
//alert(d2);
|
||||||
|
$(".orderlist_div").empty();
|
||||||
|
$(".orderlist_div").append(planDiv + "%");
|
||||||
|
$("[id$=orderitems_effort_div]").val(planDiv);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* format 1.000,00 to 1000.00 */
|
||||||
|
function convertToNumber(currency) {
|
||||||
|
currency = currency.replace(/\./g, '');
|
||||||
|
currency = currency.replace(/\,/g, '.');
|
||||||
|
return currency;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*]]>*/
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
@ -0,0 +1,104 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html">
|
||||||
|
|
||||||
|
<ui:param name="requilist" value="#{viewHandler.getData(requirementsViewController)}"></ui:param>
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<table class="imixsdatatable imixs-orderitems">
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<th style="width: 100px;">Erstellt</th>
|
||||||
|
<th style="">Requirement</th>
|
||||||
|
<th style="">Status</th>
|
||||||
|
<th style="width: 60px;">Ist</th>
|
||||||
|
<th style="width: 60px;">Plan</th>
|
||||||
|
<th style="width: 80px;">%</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<ui:repeat var="orderitem" value="#{requilist}">
|
||||||
|
<tr>
|
||||||
|
<!-- Erstellt -->
|
||||||
|
<td
|
||||||
|
style="#{(orderitem.item['$taskid'] eq 2900)?'text-decoration: line-through;text-align: center;':'text-align: center;'}">
|
||||||
|
<h:outputText value="#{orderitem.item['$created']}">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}" timeZone="#{message.timeZone}" />
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td style="#{(orderitem.item['$taskid'] eq 2900)?'text-decoration: line-through':''}">
|
||||||
|
<h:link outcome="/pages/workitems/workitem?faces-redirect=true">
|
||||||
|
<h:outputText value="#{orderitem.item['$workflowsummary']}" />
|
||||||
|
|
||||||
|
<f:param name="id" value="#{orderitem.item['$uniqueid']}" />
|
||||||
|
</h:link>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<!-- Name -->
|
||||||
|
<td style="#{(orderitem.item['$taskid'] eq 2900)?'text-decoration: line-through':''}">
|
||||||
|
<h:outputText value="#{orderitem.item['$workflowstatus']}" />
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<!-- capa -->
|
||||||
|
<td
|
||||||
|
style="text-align: right;#{(orderitem.item['$taskid'] eq 2900)?'text-decoration: line-through':''}">
|
||||||
|
<h:outputText value="#{orderitem.item['_capacity']}" style="width:100%">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td
|
||||||
|
style="text-align: right;#{(orderitem.item['$taskid'] eq 2900)?'text-decoration: line-through':''}">
|
||||||
|
<h:outputText value="#{orderitem.item['_effort_planed']}" id="orderitem_amount">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td
|
||||||
|
style="text-align: right;#{(orderitem.item['$taskid'] eq 2900)?'text-decoration: line-through':''}">
|
||||||
|
<h:outputText value="#{orderitem.item['_effort_div']} %">
|
||||||
|
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</ui:repeat>
|
||||||
|
|
||||||
|
<!-- summary -->
|
||||||
|
<tr>
|
||||||
|
<td />
|
||||||
|
<td />
|
||||||
|
<td class="orderlist-sum" style="text-align: right; font-weight: bold;">Summe</td>
|
||||||
|
<td class="orderlist-sum orderlist_summary" style="text-align: right;">
|
||||||
|
<h:outputText value="#{workitem.item['_capacity']}">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
<td class="orderlist-sum orderlist_summary" style="text-align: right;">
|
||||||
|
<h:outputText value="#{workitem.item['_effort_planed']}">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText>
|
||||||
|
</td>
|
||||||
|
<td class="orderlist-sum orderlist_summary" style="text-align: right;">
|
||||||
|
<h:outputText value="#{workitem.item['_effort_div']}">
|
||||||
|
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText> %
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div style="display:grid;grid-template-columns:1fr 1fr 1fr;background-color: #eee;padding: 5px 20px;">
|
||||||
|
<a href="#{facesContext.externalContext.requestContextPath}/api/report/requirements-planning.imixs-report?pageSize=999&id=#{workitem.uniqueID}"
|
||||||
|
target="_blank"> <span class="typcn typcn-chart-line"></span> Planning
|
||||||
|
</a>
|
||||||
|
<a href="#{facesContext.externalContext.requestContextPath}/api/report/requirements-implementation.imixs-report?pageSize=999&id=#{workitem.uniqueID}"
|
||||||
|
target="_blank"> <span class="typcn typcn-chart-line"></span>
|
||||||
|
Status</a>
|
||||||
|
<a href="#{facesContext.externalContext.requestContextPath}/api/report/requirements-accounting.imixs-report?pageSize=999&id=#{workitem.uniqueID}"
|
||||||
|
target="_blank"> <span class="typcn typcn-chart-line"></span>
|
||||||
|
Accounting
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</ui:composition>
|
||||||
|
|
@ -0,0 +1,232 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Reiskostenabrechnung (de_DE) -->
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<h3>Reisegrund</h3>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>Anlass<span class="imixs-required"> * <h:message for="_subject" /></span></dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['_subject']}" required="true" id="_subject" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="imixs-form-section-2">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="Beginn" /><span class="imixs-required"> * <h:message for="_date" /></span>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['datfrom']}" id="_date"
|
||||||
|
styleClass="imixs-date" required="true" />
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<h:outputLabel value="Ende" /><span class="imixs-required"> * <h:message for="_dateto" /></span>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputText value="#{workitem.item['datto']}" id="_dateto"
|
||||||
|
styleClass="imixs-date" required="true" />
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
Reiseziel (Anschrift)<span class="imixs-required"> * <h:message for="_destination" /></span>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<h:inputTextarea value="#{workitem.item['_destination']}" id="_destination"
|
||||||
|
required="true" />
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="imixs-form-section">
|
||||||
|
<h3>Reisekosten</h3>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ajax logik für währung nutzen -->
|
||||||
|
|
||||||
|
<h:panelGroup layout="block" styleClass="imixs-form-section"
|
||||||
|
id="oderlist" binding="#{orderlistContainer}">
|
||||||
|
|
||||||
|
<f:ajax render="oderlist" onevent="updateOrderItems">
|
||||||
|
<table class="imixsdatatable imixs-orderitems">
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<th style="width: 50px;">Pos.</th>
|
||||||
|
<th>Leistungsbezeichnung</th>
|
||||||
|
<th style="width: 100px;">Kosten</th>
|
||||||
|
|
||||||
|
<th style="width: 10px;">
|
||||||
|
<!-- delete -->
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<ui:repeat var="orderitem" value="#{childItemController.childItems}">
|
||||||
|
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<!-- pos -->
|
||||||
|
<td><h:outputText value="#{orderitem.item['numpos']}" /></td>
|
||||||
|
|
||||||
|
<!-- Name -->
|
||||||
|
<td><h:inputText value="#{orderitem.item['name']}"
|
||||||
|
style="width:100%;" /></td>
|
||||||
|
|
||||||
|
|
||||||
|
<td style="text-align: right;"><h:inputText value="#{orderitem.item['price']}"
|
||||||
|
id="orderitem_price" style="text-align: right;"
|
||||||
|
onchange="calculateSummary()">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:inputText></td>
|
||||||
|
|
||||||
|
|
||||||
|
<td><h:commandLink
|
||||||
|
actionListener="#{childItemController.remove(orderitem.item['numpos'])}">
|
||||||
|
<span class="typcn typcn-trash imixs-state-info"></span>
|
||||||
|
<f:ajax render="#{orderlistContainer.clientId}"
|
||||||
|
onevent="updateOrderItems" />
|
||||||
|
</h:commandLink> <!-- item summary --> <h:inputHidden
|
||||||
|
value="#{orderitem.item['_capacity']}" id="item_capacity" /> <h:inputHidden
|
||||||
|
value="#{orderitem.item['_capacity_dsp']}"
|
||||||
|
id="item_capacity_dsp" /></td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</ui:repeat>
|
||||||
|
|
||||||
|
<!-- summary -->
|
||||||
|
<tr>
|
||||||
|
<td />
|
||||||
|
|
||||||
|
<td class="orderlist-sum" style="text-align: right;">Summe</td>
|
||||||
|
<td class="orderlist-sum orderlist_summary"
|
||||||
|
style="text-align: right;"></td>
|
||||||
|
<td />
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
<!-- total summary -->
|
||||||
|
<h:inputHidden value="#{workitem.item['_capacity']}"
|
||||||
|
id="orderitems_capacity" />
|
||||||
|
|
||||||
|
<h:inputHidden value="#{workitem.item['_capacity_dsp']}"
|
||||||
|
id="orderitems_capacity_dsp" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<h:commandButton value="#{message.add}" id="addposbutton_id"
|
||||||
|
actionListener="#{childItemController.add}">
|
||||||
|
</h:commandButton>
|
||||||
|
</f:ajax>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
/*<![CDATA[*/
|
||||||
|
|
||||||
|
// display summary
|
||||||
|
$(document).ready(function() {
|
||||||
|
|
||||||
|
// prvent from hiting enter key
|
||||||
|
$("input").keydown(function(event){
|
||||||
|
if(event.keyCode == 13) {
|
||||||
|
event.preventDefault();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// erste Zeile hinzufügen, falls tabelle noch leer ist
|
||||||
|
var posTableEmpty=#{empty childItemController.childItems};
|
||||||
|
if (posTableEmpty) {
|
||||||
|
// click on add button
|
||||||
|
posButton=$('[id$=addposbutton_id]');
|
||||||
|
if (posButton) {
|
||||||
|
$(posButton).click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
calculateSummary();
|
||||||
|
});
|
||||||
|
|
||||||
|
// This method refreshs the layout
|
||||||
|
function updateOrderItems(data) {
|
||||||
|
if (data.status === 'success') {
|
||||||
|
$('[id$=oderlist]').imixsLayout();
|
||||||
|
calculateSummary();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Rechnet die Preise zusammen
|
||||||
|
function calculateSummary() {
|
||||||
|
var price = 0, total = 0;
|
||||||
|
var summaryItems = $("[id$=orderitem_price]");
|
||||||
|
|
||||||
|
$(summaryItems).each(function(index, value) {
|
||||||
|
price = convertToNumber($(this).val());
|
||||||
|
if (!isNaN(price)) {
|
||||||
|
sum = price;
|
||||||
|
// round
|
||||||
|
sum = Math.round(sum * 100) / 100;
|
||||||
|
total = total + sum;
|
||||||
|
total = Math.round(total * 100) / 100;
|
||||||
|
sum = convertToCurrency(sum);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// update total _capacity
|
||||||
|
// update orderlist_summary
|
||||||
|
$("[id$=orderitems_capacity]").val(total);
|
||||||
|
$("[id$=orderitems_capacity_dsp]").val(convertToCurrency(total));
|
||||||
|
$(".orderlist_summary", ".imixs-orderitems").empty();
|
||||||
|
$(".orderlist_summary", ".imixs-orderitems").append(
|
||||||
|
convertToCurrency(total));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* format 1.000,00 to 1000.00 */
|
||||||
|
function convertToNumber(currency) {
|
||||||
|
currency = currency.replace(/\./g, '');
|
||||||
|
currency = currency.replace(/\,/g, '.');
|
||||||
|
return currency;
|
||||||
|
}
|
||||||
|
/* format 1000 into 1.000,00 */
|
||||||
|
function convertToCurrency(number) {
|
||||||
|
var splitNum;
|
||||||
|
number = Math.abs(number);
|
||||||
|
number = number.toFixed(2);
|
||||||
|
splitNum = number.split('.');
|
||||||
|
splitNum[0] = splitNum[0].replace(/\B(?=(\d{3})+(?!\d))/g, ".");
|
||||||
|
return splitNum.join(",");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*]]>*/
|
||||||
|
</script>
|
||||||
|
</ui:composition>
|
||||||
|
|
||||||
1
templates/.~lock.DYNAMIXS-Rechnungsvorlage-v4.xlsx#
Normal file
1
templates/.~lock.DYNAMIXS-Rechnungsvorlage-v4.xlsx#
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
,rsoika,ralpus-framework,01.10.2026 09:38,file:///home/rsoika/.config/libreoffice/4;
|
||||||
BIN
templates/DYNAMIXS-Rechnungsvorlage-v3.ods
Normal file
BIN
templates/DYNAMIXS-Rechnungsvorlage-v3.ods
Normal file
Binary file not shown.
BIN
templates/DYNAMIXS-Rechnungsvorlage-v4.ods
Normal file
BIN
templates/DYNAMIXS-Rechnungsvorlage-v4.ods
Normal file
Binary file not shown.
BIN
templates/DYNAMIXS-Rechnungsvorlage-v4.xlsx
Normal file
BIN
templates/DYNAMIXS-Rechnungsvorlage-v4.xlsx
Normal file
Binary file not shown.
|
|
@ -1,213 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:BPMN2="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:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:imixs="http://www.imixs.org/bpmn2" xmlns:open-bpmn="http://open-bpmn.org/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exporter="org.openbpmn" exporterVersion="1.0.0" targetNamespace="http://open-bpmn.org">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="txtworkflowmodelversion" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[basic-de-1.0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtplugins" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.RulePlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.SplitAndJoinPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.OwnerPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ApproverPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.HistoryPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ApplicationPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.IntervalPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.MailPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ResultPlugin]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtfieldmapping" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Creator|$creator]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[Owner|$owner]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[Editor|$editor]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:collaboration id="collaboration_1" name="Default Collaboration">
|
|
||||||
<bpmn2:participant id="participant_STxhdA" name="Default Process" processRef="process_1"/>
|
|
||||||
<bpmn2:participant id="participant_aMKbSA" name="Request" processRef="process_4zs0ww">
|
|
||||||
<bpmn2:documentation id="documentation_awmzgg"/>
|
|
||||||
</bpmn2:participant>
|
|
||||||
</bpmn2:collaboration>
|
|
||||||
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_1" name="Default Process" processType="Public">
|
|
||||||
<bpmn2:documentation id="documentation_mdKRmQ"/>
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<open-bpmn:auto-align>true</open-bpmn:auto-align>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
</bpmn2:process>
|
|
||||||
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_4zs0ww" isExecutable="true" name="Request" processType="Private">
|
|
||||||
<bpmn2:laneSet id="laneset_YAbhZw" name="Lane Set">
|
|
||||||
<bpmn2:lane id="lane_mNgUrw" name="Assist">
|
|
||||||
<bpmn2:documentation id="documentation_2VH0iA"/>
|
|
||||||
<bpmn2:flowNodeRef>task_6Rvbrg</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_zUD3jQ</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_D00leQ</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>task_sz0cKg</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_FrL0EA</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>dataObject_0jfMhA</bpmn2:flowNodeRef>
|
|
||||||
</bpmn2:lane>
|
|
||||||
</bpmn2:laneSet>
|
|
||||||
<bpmn2:startEvent id="event_zUD3jQ" name="Start">
|
|
||||||
<bpmn2:documentation id="documentation_q0CQSQ"/>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_IPSgCg</bpmn2:outgoing>
|
|
||||||
</bpmn2:startEvent>
|
|
||||||
<bpmn2:task id="task_6Rvbrg" imixs:processid="1000" name="Task 1">
|
|
||||||
<bpmn2:extensionElements/>
|
|
||||||
<bpmn2:documentation id="documentation_UU4yNw"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_IPSgCg</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_0AMIqg</bpmn2:outgoing>
|
|
||||||
</bpmn2:task>
|
|
||||||
<bpmn2:endEvent id="event_D00leQ" name="End">
|
|
||||||
<bpmn2:documentation id="documentation_S0FDqg"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_J9TrXg</bpmn2:incoming>
|
|
||||||
</bpmn2:endEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_IPSgCg" sourceRef="event_zUD3jQ" targetRef="task_6Rvbrg">
|
|
||||||
<bpmn2:documentation id="documentation_kH0gZQ"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_0AMIqg" sourceRef="task_6Rvbrg" targetRef="event_FrL0EA">
|
|
||||||
<bpmn2:documentation id="documentation_t4zfjw"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:task id="task_sz0cKg" imixs:processid="1100" name="Task 2">
|
|
||||||
<bpmn2:extensionElements/>
|
|
||||||
<bpmn2:documentation id="documentation_pm2R1w"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_02i9iQ</bpmn2:incoming>
|
|
||||||
<bpmn2:incoming>sequenceFlow_M9MRGw</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_J9TrXg</bpmn2:outgoing>
|
|
||||||
</bpmn2:task>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_FrL0EA" imixs:activityid="20" name="Submit">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtactivityresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[<validation name="required">false</validation>
|
|
||||||
<imixs-ai name="ASSIST">
|
|
||||||
<debug>true</debug>
|
|
||||||
<endpoint><propertyvalue>llm.service.endpoint</propertyvalue></endpoint>
|
|
||||||
<result-item>request.response.text</result-item>
|
|
||||||
</imixs-ai>]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="documentation_lz2ljQ"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_0AMIqg</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_M9MRGw</bpmn2:outgoing>
|
|
||||||
<bpmn2:signalEventDefinition id="signalEventDefinition_V0oOhw" signalRef="signal_1"/>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_M9MRGw" sourceRef="event_FrL0EA" targetRef="task_sz0cKg">
|
|
||||||
<bpmn2:documentation id="documentation_mqOMag"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:dataObject id="dataObject_0jfMhA" imixs:datatype="form-data" name="Form">
|
|
||||||
<bpmn2:documentation id="documentation_KIcv5Q"><![CDATA[<?xml version="1.0"?>
|
|
||||||
<imixs-form>
|
|
||||||
<imixs-subform label="Allgemein">
|
|
||||||
<imixs-form-section columns="1" >
|
|
||||||
<item name="request.subject" type="text" label="Firma:" required="true" />
|
|
||||||
<item name="request.description" type="textarea" label="Anfrage:" />
|
|
||||||
|
|
||||||
</imixs-form-section>
|
|
||||||
<imixs-form-section columns="2" label="">
|
|
||||||
<item name="customer.firstname" type="text" label="Vorname:" />
|
|
||||||
<item name="customer.lastname" type="text" label="Nachname:" />
|
|
||||||
<item name="customer.phone1" type="text" label="Telefon:" />
|
|
||||||
<item name="customer.phone2" type="text" label="Mobile:" />
|
|
||||||
|
|
||||||
<item name="customer.email" type="text" label="E-Mail:" />
|
|
||||||
<item name="customer.internet" type="text" label="Internet:" />
|
|
||||||
</imixs-form-section>
|
|
||||||
<imixs-form-section columns="2" label="Wiedervorlage">
|
|
||||||
<item name="customer.reminder.date" type="date" label="Termin:" />
|
|
||||||
<item name="customer.lastcontact.date" type="date" label="Letzter persönlicher Kontakt:" />
|
|
||||||
</imixs-form-section>
|
|
||||||
|
|
||||||
<imixs-form-section columns="1" label="Vorschlag E-Mail Antwort" readonly="true" >
|
|
||||||
<item name="request.response.text" type="custom" path="markdown" />
|
|
||||||
</imixs-form-section>
|
|
||||||
</imixs-subform>
|
|
||||||
<imixs-subform label="Adresse" >
|
|
||||||
<imixs-form-section columns="4" >
|
|
||||||
<item name="customer.address" type="text" label="Straße:" />
|
|
||||||
<item name="customer.zip" type="text" label="PLZ:" />
|
|
||||||
<item name="custmer.city" type="text" label="Ort:" />
|
|
||||||
<item name="customer.country" type="custom" path="country" label="Land:" />
|
|
||||||
<item name="customer.department" type="text" label="Abteilung:" />
|
|
||||||
</imixs-form-section>
|
|
||||||
</imixs-subform>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</imixs-form>
|
|
||||||
]]></bpmn2:documentation>
|
|
||||||
</bpmn2:dataObject>
|
|
||||||
<bpmn2:association id="association_X5iIsg" sourceRef="dataObject_0jfMhA" targetRef="task_6Rvbrg">
|
|
||||||
<bpmn2:documentation id="documentation_PDwxmg"/>
|
|
||||||
</bpmn2:association>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_J9TrXg" sourceRef="task_sz0cKg" targetRef="event_D00leQ">
|
|
||||||
<bpmn2:documentation id="documentation_woMiMQ"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
</bpmn2:process>
|
|
||||||
<bpmn2:signal id="signal_1" name="org.imixs.ai.workflow.ImixsAIAssistantAdapter"/>
|
|
||||||
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="OpenBPMN Diagram">
|
|
||||||
<bpmndi:BPMNPlane bpmnElement="process_1" id="BPMNPlane_wBZ1iA">
|
|
||||||
<bpmndi:BPMNShape bpmnElement="participant_STxhdA" id="BPMNShape_F40S0w">
|
|
||||||
<dc:Bounds height="210.0" width="800.0" x="0.0" y="0.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
</bpmndi:BPMNPlane>
|
|
||||||
<bpmndi:BPMNPlane bpmnElement="collaboration_1" id="BPMNPlane_E78zcg">
|
|
||||||
<bpmndi:BPMNShape bpmnElement="participant_aMKbSA" id="BPMNShape_t6JRBw">
|
|
||||||
<dc:Bounds height="340.0" width="1330.0" x="80.0" y="130.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="lane_mNgUrw" id="BPMNShape_ytlcMg">
|
|
||||||
<dc:Bounds height="340.0" width="1300.0" x="110.0" y="130.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_zUD3jQ" id="BPMNShape_cvGU9Q">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="177.0" y="257.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_3U3fqA">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="145.0" y="296.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="task_6Rvbrg" id="BPMNShape_Tx6tQQ">
|
|
||||||
<dc:Bounds height="50.0" width="110.0" x="290.0" y="250.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_D00leQ" id="BPMNShape_Ymu9vA">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="1107.0" y="257.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_Q3qxiA">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="1075.0" y="296.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="task_sz0cKg" id="BPMNShape_ZPpE9Q">
|
|
||||||
<dc:Bounds height="50.0" width="110.0" x="840.0" y="250.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_FrL0EA" id="BPMNShape_beJhIA">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="597.0" y="257.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_dlLiYw">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="565.0" y="296.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_IPSgCg" id="BPMNEdge_1fpCJA" sourceElement="BPMNShape_cvGU9Q" targetElement="BPMNShape_Tx6tQQ">
|
|
||||||
<di:waypoint x="213.0" y="275.0"/>
|
|
||||||
<di:waypoint x="290.0" y="275.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_0AMIqg" id="BPMNEdge_TLb2hA" sourceElement="BPMNShape_Tx6tQQ" targetElement="BPMNShape_beJhIA">
|
|
||||||
<di:waypoint x="400.0" y="275.0"/>
|
|
||||||
<di:waypoint x="597.0" y="275.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_M9MRGw" id="BPMNEdge_8yerTg" sourceElement="BPMNShape_beJhIA" targetElement="BPMNShape_ZPpE9Q">
|
|
||||||
<di:waypoint x="633.0" y="275.0"/>
|
|
||||||
<di:waypoint x="840.0" y="275.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="dataObject_0jfMhA" id="BPMNShape_sxOufg">
|
|
||||||
<dc:Bounds height="50.0" width="35.0" x="180.0" y="160.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_Em4O4Q">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="147.5" y="215.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="association_X5iIsg" id="BPMNEdge_89BTFw" sourceElement="BPMNShape_sxOufg" targetElement="BPMNShape_Tx6tQQ">
|
|
||||||
<di:waypoint x="215.0" y="186.0"/>
|
|
||||||
<di:waypoint x="316.0" y="186.0"/>
|
|
||||||
<di:waypoint x="316.0" y="250.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_J9TrXg" id="BPMNEdge_uRbDXA" sourceElement="BPMNShape_ZPpE9Q" targetElement="BPMNShape_Ymu9vA">
|
|
||||||
<di:waypoint x="950.0" y="275.0"/>
|
|
||||||
<di:waypoint x="1107.0" y="275.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
</bpmndi:BPMNPlane>
|
|
||||||
</bpmndi:BPMNDiagram>
|
|
||||||
</bpmn2:definitions>
|
|
||||||
|
|
@ -1,507 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:BPMN2="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:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:imixs="http://www.imixs.org/bpmn2" xmlns:open-bpmn="http://open-bpmn.org/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exporter="org.openbpmn" exporterVersion="1.0.0" targetNamespace="http://open-bpmn.org">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="txtworkflowmodelversion" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[sales-request-en-1.0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtplugins" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.RulePlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.SplitAndJoinPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.OwnerPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ApproverPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.HistoryPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ApplicationPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.IntervalPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.MailPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ResultPlugin]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtfieldmapping" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Creator|$creator]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[Owner|$owner]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[Editor|$editor]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:collaboration id="collaboration_1" name="Default Collaboration">
|
|
||||||
<bpmn2:participant id="participant_STxhdA" name="Default Process" processRef="process_1"/>
|
|
||||||
<bpmn2:participant id="participant_aMKbSA" name="Sales Request" processRef="process_4zs0ww">
|
|
||||||
<bpmn2:documentation id="documentation_awmzgg"/>
|
|
||||||
</bpmn2:participant>
|
|
||||||
</bpmn2:collaboration>
|
|
||||||
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_1" name="Default Process" processType="Public">
|
|
||||||
<bpmn2:documentation id="documentation_mdKRmQ"/>
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<open-bpmn:auto-align>true</open-bpmn:auto-align>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
</bpmn2:process>
|
|
||||||
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_4zs0ww" isExecutable="true" name="Sales Request" processType="Private">
|
|
||||||
<bpmn2:laneSet id="laneset_YAbhZw" name="Lane Set">
|
|
||||||
<bpmn2:lane id="lane_mNgUrw" name="Assist">
|
|
||||||
<bpmn2:documentation id="documentation_2VH0iA"/>
|
|
||||||
<bpmn2:flowNodeRef>task_6Rvbrg</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_zUD3jQ</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_D00leQ</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>task_sz0cKg</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_FrL0EA</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>dataObject_0jfMhA</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>dataObject_6m4mpw</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>dataObject_3cHBTA</bpmn2:flowNodeRef>
|
|
||||||
</bpmn2:lane>
|
|
||||||
</bpmn2:laneSet>
|
|
||||||
<bpmn2:startEvent id="event_zUD3jQ" name="Start">
|
|
||||||
<bpmn2:documentation id="documentation_q0CQSQ"/>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_IPSgCg</bpmn2:outgoing>
|
|
||||||
</bpmn2:startEvent>
|
|
||||||
<bpmn2:task id="task_6Rvbrg" imixs:processid="1000" name="New Sales Request">
|
|
||||||
<bpmn2:extensionElements/>
|
|
||||||
<bpmn2:documentation id="documentation_UU4yNw"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_IPSgCg</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_0AMIqg</bpmn2:outgoing>
|
|
||||||
</bpmn2:task>
|
|
||||||
<bpmn2:endEvent id="event_D00leQ" name="End">
|
|
||||||
<bpmn2:documentation id="documentation_S0FDqg"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_J9TrXg</bpmn2:incoming>
|
|
||||||
</bpmn2:endEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_IPSgCg" sourceRef="event_zUD3jQ" targetRef="task_6Rvbrg">
|
|
||||||
<bpmn2:documentation id="documentation_kH0gZQ"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_0AMIqg" sourceRef="task_6Rvbrg" targetRef="event_FrL0EA">
|
|
||||||
<bpmn2:documentation id="documentation_t4zfjw"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:task id="task_sz0cKg" imixs:processid="1100" name="Confirmation sent">
|
|
||||||
<bpmn2:extensionElements/>
|
|
||||||
<bpmn2:documentation id="documentation_pm2R1w"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_02i9iQ</bpmn2:incoming>
|
|
||||||
<bpmn2:incoming>sequenceFlow_M9MRGw</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_J9TrXg</bpmn2:outgoing>
|
|
||||||
</bpmn2:task>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_FrL0EA" imixs:activityid="20" name="Send E-Mail Confrimation">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtactivityresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[<validation name="required">false</validation>
|
|
||||||
<imixs-ai name="ASSIST">
|
|
||||||
<debug>true</debug>
|
|
||||||
<endpoint><propertyvalue>llm.service.endpoint</propertyvalue></endpoint>
|
|
||||||
<result-item>request.response.text</result-item>
|
|
||||||
</imixs-ai>]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="documentation_lz2ljQ"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_0AMIqg</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_M9MRGw</bpmn2:outgoing>
|
|
||||||
<bpmn2:signalEventDefinition id="signalEventDefinition_V0oOhw" signalRef="signal_1"/>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_M9MRGw" sourceRef="event_FrL0EA" targetRef="task_sz0cKg">
|
|
||||||
<bpmn2:documentation id="documentation_mqOMag"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:dataObject id="dataObject_0jfMhA" imixs:datatype="form-data" name="Form">
|
|
||||||
<bpmn2:documentation id="documentation_KIcv5Q"><![CDATA[<?xml version="1.0"?>
|
|
||||||
<imixs-form>
|
|
||||||
<imixs-subform label="Allgemein">
|
|
||||||
<imixs-form-section columns="1" >
|
|
||||||
<item name="request.subject" type="text" label="Firma:" required="true" />
|
|
||||||
<item name="request.description" type="textarea" label="Anfrage:" />
|
|
||||||
|
|
||||||
</imixs-form-section>
|
|
||||||
<imixs-form-section columns="2" label="">
|
|
||||||
<item name="customer.firstname" type="text" label="Vorname:" />
|
|
||||||
<item name="customer.lastname" type="text" label="Nachname:" />
|
|
||||||
<item name="customer.phone1" type="text" label="Telefon:" />
|
|
||||||
<item name="customer.phone2" type="text" label="Mobile:" />
|
|
||||||
|
|
||||||
<item name="customer.email" type="text" label="E-Mail:" />
|
|
||||||
<item name="customer.internet" type="text" label="Internet:" />
|
|
||||||
</imixs-form-section>
|
|
||||||
<imixs-form-section columns="2" label="Wiedervorlage">
|
|
||||||
<item name="customer.reminder.date" type="date" label="Termin:" />
|
|
||||||
<item name="customer.lastcontact.date" type="date" label="Letzter persönlicher Kontakt:" />
|
|
||||||
</imixs-form-section>
|
|
||||||
|
|
||||||
<imixs-form-section columns="1" label="Vorschlag E-Mail Antwort" readonly="true" >
|
|
||||||
<item name="request.response.text" type="custom" path="markdown" />
|
|
||||||
</imixs-form-section>
|
|
||||||
</imixs-subform>
|
|
||||||
<imixs-subform label="Adresse" >
|
|
||||||
<imixs-form-section columns="4" >
|
|
||||||
<item name="customer.address" type="text" label="Straße:" />
|
|
||||||
<item name="customer.zip" type="text" label="PLZ:" />
|
|
||||||
<item name="custmer.city" type="text" label="Ort:" />
|
|
||||||
<item name="customer.country" type="custom" path="country" label="Land:" />
|
|
||||||
<item name="customer.department" type="text" label="Abteilung:" />
|
|
||||||
</imixs-form-section>
|
|
||||||
</imixs-subform>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</imixs-form>
|
|
||||||
]]></bpmn2:documentation>
|
|
||||||
</bpmn2:dataObject>
|
|
||||||
<bpmn2:association id="association_X5iIsg" sourceRef="dataObject_0jfMhA" targetRef="task_6Rvbrg">
|
|
||||||
<bpmn2:documentation id="documentation_PDwxmg"/>
|
|
||||||
</bpmn2:association>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_J9TrXg" sourceRef="task_sz0cKg" targetRef="event_D00leQ">
|
|
||||||
<bpmn2:documentation id="documentation_woMiMQ"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:dataObject id="dataObject_6m4mpw" imixs:datatype="prompt-data" name="What">
|
|
||||||
<bpmn2:documentation id="documentation_3GuzxA"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<PromptDefinition>
|
|
||||||
<prompt role="system"><![CDATA[
|
|
||||||
# KI-Vertriebsassistent für Imixs-Office-Workflow
|
|
||||||
|
|
||||||
## Deine Rolle
|
|
||||||
Du bist Vertriebsleiter der Imixs Software Solutions GmbH. Deine Aufgabe ist es unsere Software Lösung "Imixs-Office-Workflow" an Neukunden und Interessenten zu verkaufen. Das beinhaltet die Kommunikation mit dem Kunden bei einem ersten Kontakt sowie die laufende Kommunikation bis zum Vertragsabschluss.
|
|
||||||
|
|
||||||
## Verkaufsziele
|
|
||||||
Bis zu einem erfolgreichen Vertragsabschluss können folgende Teilziele erreicht werden:
|
|
||||||
- Den Kunden mit grundlegenden Informationen über unsere Lösung zu versorgen um sein Interesse zu wecken
|
|
||||||
- Den Kunden zu einer Webkonferenz einladen damit wir ihm die Vorteile unserer Lösung anhand einer Demo live zeigen können
|
|
||||||
- Das Nachfassen um den Kontakt aufrecht zu erhalten
|
|
||||||
- Der Vertragsabschluss
|
|
||||||
|
|
||||||
## Kommunikationsstil
|
|
||||||
Du bist stets freundlich aber auch bestimmt und zeigst dem Kunden die vielfältigen Vorteile unserer Lösung "Imixs-Office-Workflow" auf. Beginne Gespräche immer mit einer Bedarfsanalyse und höre aktiv zu.
|
|
||||||
|
|
||||||
## Über Imixs-Office-Workflow
|
|
||||||
|
|
||||||
### Die Plattform
|
|
||||||
Imixs-Office-Workflow ist eine moderne Low-Code Business Process Management Plattform, die auf BPMN 2.0 basiert. Die Lösung ermöglicht es Unternehmen, ihre Geschäftsprozesse ohne Programmierkenntnisse zu digitalisieren und zu automatisieren.
|
|
||||||
|
|
||||||
### Kernvorteile
|
|
||||||
- **Low-Code-Ansatz**: Schnelle Umsetzung ohne Programmierkenntnisse erforderlich
|
|
||||||
- **BPMN 2.0 Standard**: Branchenunabhängige, standardisierte Prozessmodellierung
|
|
||||||
- **Sofort einsetzbar**: In allen Unternehmensbereichen anwendbar
|
|
||||||
- **DSGVO-konform**: Höchste Datenschutz- und Datensicherheitsstandards
|
|
||||||
- **KI-Integration**: Verantwortungsvoller KI-Einsatz im Rahmen des EU AI Acts
|
|
||||||
- **System-Integration**: Nahtlose Anbindung an bestehende IT-Systeme
|
|
||||||
|
|
||||||
### Haupteinsatzbereiche
|
|
||||||
- **Auftragsverwaltung**: Angebote, Bestellungen, Rechnungsausgang, Mahnwesen
|
|
||||||
- **Controlling**: Rechnungseingang, Rechnungsprüfung, Einkauf, BANF, Investitionen
|
|
||||||
- **Projektmanagement**: Aufgabenmanagement, Zeiterfassung, Vertragsmanagement
|
|
||||||
- **Qualitätsmanagement**: Arbeitsanweisungen, Ticket Management, ISO-Zertifizierung, Reklamationen
|
|
||||||
- **Dokumentenmanagement**: DMS, Posteingang, Rechnungseingang, Ablage, Kategorisierung, Archivierung, OCR
|
|
||||||
- **Reporting & BI**: Business Intelligence, Auswertungen, Analysen, Qualitätsmanagement
|
|
||||||
|
|
||||||
## Unser umfassendes Servicekonzept
|
|
||||||
|
|
||||||
### Full-Service-Ansatz
|
|
||||||
Wir bieten unseren Kunden ein komplettes Servicepaket, das sie von der ersten Analyse bis zum laufenden Betrieb begleitet:
|
|
||||||
|
|
||||||
#### 1. Prozessanalyse & Beratung
|
|
||||||
- Individuelle Analyse bestehender Arbeitsabläufe
|
|
||||||
- Identifikation von Digitalisierungspotenzialen
|
|
||||||
- Strategische Digitalisierungsberatung
|
|
||||||
- Maßgeschneiderte Lösungskonzepte
|
|
||||||
|
|
||||||
#### 2. Prozessmodellierung & Implementierung
|
|
||||||
- BPMN 2.0-basierte Prozessmodellierung
|
|
||||||
- Konfiguration der Imixs-Office-Workflow Plattform
|
|
||||||
- Anpassung an spezifische Unternehmensanforderungen
|
|
||||||
- Umfassende Tests und Qualitätssicherung
|
|
||||||
|
|
||||||
#### 3. System-Integration
|
|
||||||
- **Nahtlose Integration** in bestehende IT-Landschaften
|
|
||||||
- Anbindung an ERP-Systeme, CRM-Systeme, Datenbanken
|
|
||||||
- API-basierte Schnittstellen zu Drittsystemen
|
|
||||||
- Migration bestehender Daten und Prozesse
|
|
||||||
|
|
||||||
#### 4. Plattform-Betrieb & Support
|
|
||||||
- Hosting und technischer Betrieb der Plattform
|
|
||||||
- Kontinuierliche Wartung und Updates
|
|
||||||
- 24/7 Support und Monitoring
|
|
||||||
- Backup- und Disaster-Recovery-Services
|
|
||||||
|
|
||||||
#### 5. Schulung & Change Management
|
|
||||||
- Anwender-Schulungen für alle Beteiligten
|
|
||||||
- Train-the-Trainer Programme
|
|
||||||
- Change Management Begleitung
|
|
||||||
- Kontinuierliche Weiterbildungsangebote
|
|
||||||
|
|
||||||
### Unser Mehrwert
|
|
||||||
- **Schneller Start**: Von der Analyse bis zur produktiven Nutzung in wenigen Wochen
|
|
||||||
- **Keine IT-Kenntnisse erforderlich**: Wir übernehmen die komplette technische Umsetzung
|
|
||||||
- **Minimales Risiko**: Bewährte Technologie und erfahrenes Team
|
|
||||||
- **Maximale Integration**: Ihre bestehenden Systeme bleiben erhalten und werden optimal eingebunden
|
|
||||||
|
|
||||||
## Zielgruppe
|
|
||||||
Kleine und mittelständische Unternehmen, die ihre Geschäftsprozesse digitalisieren möchten, aber nicht über umfassende IT-Kenntnisse verfügen oder keine teuren Individuallösungen benötigen.
|
|
||||||
|
|
||||||
## Gesprächsführung
|
|
||||||
|
|
||||||
### Einstieg
|
|
||||||
- Beginne immer mit einer Bedarfsanalyse: "In welchen Bereichen sehen Sie aktuell die größten Herausforderungen bei Ihren Geschäftsprozessen?"
|
|
||||||
- Höre aktiv zu und stelle gezielte Nachfragen
|
|
||||||
- Identifiziere konkrete Schmerzpunkte
|
|
||||||
|
|
||||||
### Argumentation
|
|
||||||
- Fokussiere auf konkrete Schmerzpunkte: Zeitaufwand, manuelle Prozesse, fehlende Transparenz, Medienbrüche
|
|
||||||
- Zeige branchenspezifische Anwendungsfälle auf
|
|
||||||
- Betone unseren Full-Service-Ansatz als Alleinstellungsmerkmal
|
|
||||||
- Verwende konkrete Beispiele aus den Einsatzbereichen
|
|
||||||
- Stelle die System-Integration als wichtigen Vorteil heraus
|
|
||||||
|
|
||||||
### Nutzenargumentation
|
|
||||||
- **Effizienzsteigerung**: Automatisierte Prozesse sparen Zeit und Ressourcen
|
|
||||||
- **Transparenz**: Vollständige Nachverfolgbarkeit aller Prozesse
|
|
||||||
- **Compliance**: DSGVO-konforme und rechtssichere Prozessabwicklung
|
|
||||||
- **Skalierbarkeit**: Lösung wächst mit dem Unternehmen mit
|
|
||||||
- **ROI**: Schnelle Amortisation durch Effizienzgewinne
|
|
||||||
|
|
||||||
## Einwandbehandlung
|
|
||||||
|
|
||||||
### Häufige Einwände und Antworten
|
|
||||||
- **"Zu komplex für unser kleines Unternehmen"**
|
|
||||||
→ Betone Low-Code-Ansatz und unseren Full-Service: "Genau dafür sind wir da - Sie müssen sich um nichts kümmern"
|
|
||||||
|
|
||||||
- **"Zu teuer"**
|
|
||||||
→ Fokus auf ROI: "Welche Kosten entstehen Ihnen durch ineffiziente manuelle Prozesse?"
|
|
||||||
|
|
||||||
- **"Haben bereits eine Lösung"**
|
|
||||||
→ Integration hervorheben: "Wir ersetzen nicht, sondern integrieren und optimieren"
|
|
||||||
|
|
||||||
- **"Brauchen individuelle Lösung"**
|
|
||||||
→ BPMN-Standard: "BPMN ermöglicht maximale Anpassung an Ihre spezifischen Anforderungen"
|
|
||||||
|
|
||||||
- **"Keine IT-Ressourcen"**
|
|
||||||
→ Full-Service betonen: "Das ist kein Problem - wir übernehmen Analyse, Umsetzung und Betrieb komplett"
|
|
||||||
|
|
||||||
- **"Angst vor Systemausfall"**
|
|
||||||
→ Hosting und Support: "24/7 Monitoring und professioneller Betrieb sorgen für maximale Verfügbarkeit"
|
|
||||||
|
|
||||||
## Call-to-Actions
|
|
||||||
- Einladung zu einer unverbindlichen Prozessanalyse
|
|
||||||
- Demo-Termin für eine Live-Präsentation
|
|
||||||
- Workshop zur Identifikation von Digitalisierungspotenzialen
|
|
||||||
- Pilotprojekt für einen ersten Prozess
|
|
||||||
|
|
||||||
|
|
||||||
]]]]><![CDATA[>
|
|
||||||
</prompt>
|
|
||||||
</PromptDefinition>]]></bpmn2:documentation>
|
|
||||||
</bpmn2:dataObject>
|
|
||||||
<bpmn2:association id="association_DGdajg" sourceRef="dataObject_6m4mpw" targetRef="task_6Rvbrg">
|
|
||||||
<bpmn2:documentation id="documentation_b0naDw"/>
|
|
||||||
</bpmn2:association>
|
|
||||||
<bpmn2:dataObject id="dataObject_3cHBTA" imixs:datatype="prompt-data" name="How">
|
|
||||||
<bpmn2:documentation id="documentation_wYgnLw"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<PromptDefinition>
|
|
||||||
<prompt role="user"><![CDATA[
|
|
||||||
## AKTUELLE AUFGABE: <itemvalue>$workflowstatus</itemvalue>
|
|
||||||
|
|
||||||
Du befindest dich jetzt im Task "<itemvalue>$event.name</itemvalue>" des Prozesses.
|
|
||||||
|
|
||||||
Deine Aufgabe ist es, basierend auf der nachfolgenden Kundenanfrage eine professionelle Antwort-E-Mail zu verfassen, die folgende Ziele verfolgt:
|
|
||||||
1. Interesse des Kunden bestätigen und verstärken
|
|
||||||
2. Einen konkreten Demo-Termin vorschlagen
|
|
||||||
3. Den Mehrwert einer Live-Demonstration hervorheben
|
|
||||||
4. Vertrauen aufbauen durch Kompetenz und Service-Orientierung
|
|
||||||
|
|
||||||
## E-Mail Struktur
|
|
||||||
|
|
||||||
### Betreff
|
|
||||||
Erstelle einen ansprechenden, personalisierten Betreff der Neugier weckt:
|
|
||||||
- Bezug zur Kundenanfrage
|
|
||||||
- Benefit-orientiert
|
|
||||||
- Handlungsaufforderung
|
|
||||||
|
|
||||||
**Beispiele:**
|
|
||||||
- "Ihre Prozessoptimierung bei [Firmenname] - Live-Demo vereinbaren?"
|
|
||||||
- "So digitalisieren Sie [spezifischer Prozess] in 3 Wochen - Demo-Termin?"
|
|
||||||
|
|
||||||
### Anrede
|
|
||||||
- Persönlich und angemessen
|
|
||||||
- Bei Unklarheit "Sehr geehrte Damen und Herren"
|
|
||||||
|
|
||||||
### Einleitung (2-3 Sätze)
|
|
||||||
- Dank für die Anfrage
|
|
||||||
- Bestätigung des Verständnisses für die Herausforderung
|
|
||||||
- Positive Einschätzung der Machbarkeit
|
|
||||||
|
|
||||||
### Hauptteil - Problem-Lösung-Nutzen
|
|
||||||
**1. Problem-Verständnis demonstrieren:**
|
|
||||||
- Spiegle die vom Kunden genannten Herausforderungen wider
|
|
||||||
- Zeige Verständnis für die Branche/Situation
|
|
||||||
|
|
||||||
**2. Lösungsansatz skizzieren:**
|
|
||||||
- Konkrete Anwendungsfälle für ihren Bereich
|
|
||||||
- Verweis auf ähnliche erfolgreiche Projekte
|
|
||||||
- Betonung des Full-Service-Ansatzes
|
|
||||||
|
|
||||||
**3. Demo-Mehrwert herausstellen:**
|
|
||||||
- "Live erleben statt nur hören"
|
|
||||||
- Individuelle Anpassung der Demo an ihre Prozesse
|
|
||||||
- Sofortige Beantwortung ihrer spezifischen Fragen
|
|
||||||
|
|
||||||
### Call-to-Action - Terminvorschlag
|
|
||||||
**Konkrete Terminoptionen anbieten:**
|
|
||||||
- 2-3 spezifische Zeitslots in den nächsten 7-10 Tagen
|
|
||||||
- Dauer angeben (45-60 Minuten)
|
|
||||||
- Online-Meeting erwähnen (flexibel und zeitsparend)
|
|
||||||
|
|
||||||
**Beispiel:**
|
|
||||||
"Ich schlage Ihnen gerne folgende Termine für eine 45-minütige Online-Demo vor:
|
|
||||||
- Dienstag, [Datum] um 14:00 Uhr
|
|
||||||
- Donnerstag, [Datum] um 10:00 Uhr
|
|
||||||
- Freitag, [Datum] um 15:00 Uhr"
|
|
||||||
|
|
||||||
### Zusätzliche Services erwähnen
|
|
||||||
- Kostenlose Prozessanalyse
|
|
||||||
- Unverbindliche Machbarkeitsstudie
|
|
||||||
- Referenzkunden aus der Branche
|
|
||||||
|
|
||||||
### Schluss
|
|
||||||
- Freundlicher, aber bestimmter Ton
|
|
||||||
- Verfügbarkeit für Rückfragen
|
|
||||||
- Professionelle Grußformel
|
|
||||||
|
|
||||||
## Ton und Stil
|
|
||||||
- **Professionell aber zugänglich**
|
|
||||||
- **Nutzen-orientiert statt feature-lastig**
|
|
||||||
- **Vertrauensbildend durch Kompetenz**
|
|
||||||
- **Handlungsorientiert aber nicht aufdringlich**
|
|
||||||
- **Persönlich aber nicht zu familiär**
|
|
||||||
|
|
||||||
## Wichtige Elemente
|
|
||||||
- Immer Bezug zur ursprünglichen Anfrage
|
|
||||||
- Branchenspezifische Beispiele wenn möglich
|
|
||||||
- Betonung der System-Integration
|
|
||||||
- Verweis auf den Full-Service-Ansatz
|
|
||||||
- Zeitnahe Terminvorschläge
|
|
||||||
- Klare nächste Schritte
|
|
||||||
|
|
||||||
## Was zu vermeiden ist
|
|
||||||
- Generische Massenantworten
|
|
||||||
- Zu technische Details
|
|
||||||
- Zu lange E-Mails (max. 200 Wörter)
|
|
||||||
- Zu aggressive Verkaufssprache
|
|
||||||
- Vage Terminvorschläge ("nächste Woche")
|
|
||||||
|
|
||||||
## Variablen für Personalisierung
|
|
||||||
Die E-Mail soll folgende Informationen aus der Kundenanfrage verwenden:
|
|
||||||
- `{FIRMENNAME}` - Name des Unternehmens
|
|
||||||
- `{ANSPRECHPARTNER}` - Name der Kontaktperson
|
|
||||||
- `{BRANCHE}` - Branche des Unternehmens
|
|
||||||
- `{HERAUSFORDERUNG}` - Spezifische genannte Probleme
|
|
||||||
- `{PROZESSBEREICH}` - Relevante Einsatzbereiche
|
|
||||||
- `{ZEITRAHMEN}` - Gewünschter Umsetzungszeitraum (falls genannt)
|
|
||||||
|
|
||||||
## Erfolgsmessung
|
|
||||||
Die generierte E-Mail ist erfolgreich, wenn sie:
|
|
||||||
- Professionell und fehlerfrei ist
|
|
||||||
- Konkrete nächste Schritte definiert
|
|
||||||
- Den Mehrwert einer Demo klar kommuniziert
|
|
||||||
- Vertrauen in unsere Kompetenz aufbaut
|
|
||||||
- Eine hohe Antwortwahrscheinlichkeit hat
|
|
||||||
|
|
||||||
|
|
||||||
# Kunden Anfrage:
|
|
||||||
|
|
||||||
Firma: <itemvalue>request.subject</itemvalue>
|
|
||||||
Vorname: <itemvalue>customer.firstname</itemvalue>
|
|
||||||
Nachname: <itemvalue>customer.lastname</itemvalue>
|
|
||||||
|
|
||||||
## Grund der Anfrage:
|
|
||||||
<itemvalue>request.description</itemvalue>
|
|
||||||
|
|
||||||
]]]]><![CDATA[>
|
|
||||||
</prompt>
|
|
||||||
</PromptDefinition>]]></bpmn2:documentation>
|
|
||||||
</bpmn2:dataObject>
|
|
||||||
<bpmn2:association id="association_iB96Yg" sourceRef="dataObject_3cHBTA" targetRef="event_FrL0EA">
|
|
||||||
<bpmn2:documentation id="documentation_g0te0Q"/>
|
|
||||||
</bpmn2:association>
|
|
||||||
</bpmn2:process>
|
|
||||||
<bpmn2:signal id="signal_1" name="org.imixs.ai.workflow.ImixsAIAssistantAdapter"/>
|
|
||||||
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="OpenBPMN Diagram">
|
|
||||||
<bpmndi:BPMNPlane bpmnElement="process_1" id="BPMNPlane_wBZ1iA">
|
|
||||||
<bpmndi:BPMNShape bpmnElement="participant_STxhdA" id="BPMNShape_F40S0w">
|
|
||||||
<dc:Bounds height="210.0" width="800.0" x="0.0" y="0.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
</bpmndi:BPMNPlane>
|
|
||||||
<bpmndi:BPMNPlane bpmnElement="collaboration_1" id="BPMNPlane_E78zcg">
|
|
||||||
<bpmndi:BPMNShape bpmnElement="participant_aMKbSA" id="BPMNShape_t6JRBw">
|
|
||||||
<dc:Bounds height="340.0" width="1330.0" x="80.0" y="130.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="lane_mNgUrw" id="BPMNShape_ytlcMg">
|
|
||||||
<dc:Bounds height="340.0" width="1300.0" x="110.0" y="130.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_zUD3jQ" id="BPMNShape_cvGU9Q">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="177.0" y="257.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_3U3fqA">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="145.0" y="296.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="task_6Rvbrg" id="BPMNShape_Tx6tQQ">
|
|
||||||
<dc:Bounds height="50.0" width="110.0" x="290.0" y="250.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_D00leQ" id="BPMNShape_Ymu9vA">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="1107.0" y="257.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_Q3qxiA">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="1075.0" y="296.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="task_sz0cKg" id="BPMNShape_ZPpE9Q">
|
|
||||||
<dc:Bounds height="50.0" width="110.0" x="840.0" y="250.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_FrL0EA" id="BPMNShape_beJhIA">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="597.0" y="257.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_dlLiYw">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="565.0" y="296.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="dataObject_6m4mpw" id="BPMNShape_yfVFKg">
|
|
||||||
<dc:Bounds height="50.0" width="35.0" x="289.5" y="347.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_JrhJbw">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="257.0" y="402.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="dataObject_3cHBTA" id="BPMNShape_N0J0Qw">
|
|
||||||
<dc:Bounds height="50.0" width="35.0" x="600.0" y="350.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_UUXWCg">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="567.5" y="405.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_IPSgCg" id="BPMNEdge_1fpCJA" sourceElement="BPMNShape_cvGU9Q" targetElement="BPMNShape_Tx6tQQ">
|
|
||||||
<di:waypoint x="213.0" y="275.0"/>
|
|
||||||
<di:waypoint x="290.0" y="275.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_0AMIqg" id="BPMNEdge_TLb2hA" sourceElement="BPMNShape_Tx6tQQ" targetElement="BPMNShape_beJhIA">
|
|
||||||
<di:waypoint x="400.0" y="275.0"/>
|
|
||||||
<di:waypoint x="597.0" y="275.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_M9MRGw" id="BPMNEdge_8yerTg" sourceElement="BPMNShape_beJhIA" targetElement="BPMNShape_ZPpE9Q">
|
|
||||||
<di:waypoint x="633.0" y="275.0"/>
|
|
||||||
<di:waypoint x="840.0" y="275.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="dataObject_0jfMhA" id="BPMNShape_sxOufg">
|
|
||||||
<dc:Bounds height="50.0" width="35.0" x="180.0" y="160.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_Em4O4Q">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="147.5" y="215.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="association_X5iIsg" id="BPMNEdge_89BTFw" sourceElement="BPMNShape_sxOufg" targetElement="BPMNShape_Tx6tQQ">
|
|
||||||
<di:waypoint x="215.0" y="186.0"/>
|
|
||||||
<di:waypoint x="316.0" y="186.0"/>
|
|
||||||
<di:waypoint x="316.0" y="250.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_J9TrXg" id="BPMNEdge_uRbDXA" sourceElement="BPMNShape_ZPpE9Q" targetElement="BPMNShape_Ymu9vA">
|
|
||||||
<di:waypoint x="950.0" y="275.0"/>
|
|
||||||
<di:waypoint x="1107.0" y="275.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="association_DGdajg" id="BPMNEdge_XHS3Fw" sourceElement="BPMNShape_yfVFKg" targetElement="BPMNShape_Tx6tQQ">
|
|
||||||
<di:waypoint x="307.0" y="347.0"/>
|
|
||||||
<di:waypoint x="307.0" y="324.0"/>
|
|
||||||
<di:waypoint x="345.0" y="324.0"/>
|
|
||||||
<di:waypoint x="345.0" y="300.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="association_iB96Yg" id="BPMNEdge_up8OmA" sourceElement="BPMNShape_N0J0Qw" targetElement="BPMNShape_beJhIA">
|
|
||||||
<di:waypoint x="618.0" y="350.0"/>
|
|
||||||
<di:waypoint x="618.0" y="322.0"/>
|
|
||||||
<di:waypoint x="615.0" y="322.0"/>
|
|
||||||
<di:waypoint x="615.0" y="293.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
</bpmndi:BPMNPlane>
|
|
||||||
</bpmndi:BPMNDiagram>
|
|
||||||
</bpmn2:definitions>
|
|
||||||
|
|
@ -1,213 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:BPMN2="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:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:imixs="http://www.imixs.org/bpmn2" xmlns:open-bpmn="http://open-bpmn.org/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exporter="org.openbpmn" exporterVersion="1.0.0" targetNamespace="http://open-bpmn.org">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="txtworkflowmodelversion" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[basic-de-1.0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtplugins" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.RulePlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.SplitAndJoinPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.OwnerPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ApproverPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.HistoryPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ApplicationPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.IntervalPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.MailPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ResultPlugin]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtfieldmapping" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Creator|$creator]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[Owner|$owner]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[Editor|$editor]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:collaboration id="collaboration_1" name="Default Collaboration">
|
|
||||||
<bpmn2:participant id="participant_STxhdA" name="Default Process" processRef="process_1"/>
|
|
||||||
<bpmn2:participant id="participant_aMKbSA" name="Request" processRef="process_4zs0ww">
|
|
||||||
<bpmn2:documentation id="documentation_awmzgg"/>
|
|
||||||
</bpmn2:participant>
|
|
||||||
</bpmn2:collaboration>
|
|
||||||
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_1" name="Default Process" processType="Public">
|
|
||||||
<bpmn2:documentation id="documentation_mdKRmQ"/>
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<open-bpmn:auto-align>true</open-bpmn:auto-align>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
</bpmn2:process>
|
|
||||||
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_4zs0ww" isExecutable="true" name="Request" processType="Private">
|
|
||||||
<bpmn2:laneSet id="laneset_YAbhZw" name="Lane Set">
|
|
||||||
<bpmn2:lane id="lane_mNgUrw" name="Assist">
|
|
||||||
<bpmn2:documentation id="documentation_2VH0iA"/>
|
|
||||||
<bpmn2:flowNodeRef>task_6Rvbrg</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_zUD3jQ</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_D00leQ</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>task_sz0cKg</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_FrL0EA</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>dataObject_0jfMhA</bpmn2:flowNodeRef>
|
|
||||||
</bpmn2:lane>
|
|
||||||
</bpmn2:laneSet>
|
|
||||||
<bpmn2:startEvent id="event_zUD3jQ" name="Start">
|
|
||||||
<bpmn2:documentation id="documentation_q0CQSQ"/>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_IPSgCg</bpmn2:outgoing>
|
|
||||||
</bpmn2:startEvent>
|
|
||||||
<bpmn2:task id="task_6Rvbrg" imixs:processid="1000" name="Task 1">
|
|
||||||
<bpmn2:extensionElements/>
|
|
||||||
<bpmn2:documentation id="documentation_UU4yNw"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_IPSgCg</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_0AMIqg</bpmn2:outgoing>
|
|
||||||
</bpmn2:task>
|
|
||||||
<bpmn2:endEvent id="event_D00leQ" name="End">
|
|
||||||
<bpmn2:documentation id="documentation_S0FDqg"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_J9TrXg</bpmn2:incoming>
|
|
||||||
</bpmn2:endEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_IPSgCg" sourceRef="event_zUD3jQ" targetRef="task_6Rvbrg">
|
|
||||||
<bpmn2:documentation id="documentation_kH0gZQ"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_0AMIqg" sourceRef="task_6Rvbrg" targetRef="event_FrL0EA">
|
|
||||||
<bpmn2:documentation id="documentation_t4zfjw"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:task id="task_sz0cKg" imixs:processid="1100" name="Task 2">
|
|
||||||
<bpmn2:extensionElements/>
|
|
||||||
<bpmn2:documentation id="documentation_pm2R1w"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_02i9iQ</bpmn2:incoming>
|
|
||||||
<bpmn2:incoming>sequenceFlow_M9MRGw</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_J9TrXg</bpmn2:outgoing>
|
|
||||||
</bpmn2:task>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_FrL0EA" imixs:activityid="20" name="Submit">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtactivityresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[<validation name="required">false</validation>
|
|
||||||
<imixs-ai name="ASSIST">
|
|
||||||
<debug>true</debug>
|
|
||||||
<endpoint><propertyvalue>llm.service.endpoint</propertyvalue></endpoint>
|
|
||||||
<result-item>request.response.text</result-item>
|
|
||||||
</imixs-ai>]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="documentation_lz2ljQ"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_0AMIqg</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_M9MRGw</bpmn2:outgoing>
|
|
||||||
<bpmn2:signalEventDefinition id="signalEventDefinition_V0oOhw" signalRef="signal_1"/>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_M9MRGw" sourceRef="event_FrL0EA" targetRef="task_sz0cKg">
|
|
||||||
<bpmn2:documentation id="documentation_mqOMag"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:dataObject id="dataObject_0jfMhA" imixs:datatype="form-data" name="Form">
|
|
||||||
<bpmn2:documentation id="documentation_KIcv5Q"><![CDATA[<?xml version="1.0"?>
|
|
||||||
<imixs-form>
|
|
||||||
<imixs-subform label="Allgemein">
|
|
||||||
<imixs-form-section columns="1" >
|
|
||||||
<item name="request.subject" type="text" label="Firma:" required="true" />
|
|
||||||
<item name="request.description" type="textarea" label="Anfrage:" />
|
|
||||||
|
|
||||||
</imixs-form-section>
|
|
||||||
<imixs-form-section columns="2" label="">
|
|
||||||
<item name="customer.firstname" type="text" label="Vorname:" />
|
|
||||||
<item name="customer.lastname" type="text" label="Nachname:" />
|
|
||||||
<item name="customer.phone1" type="text" label="Telefon:" />
|
|
||||||
<item name="customer.phone2" type="text" label="Mobile:" />
|
|
||||||
|
|
||||||
<item name="customer.email" type="text" label="E-Mail:" />
|
|
||||||
<item name="customer.internet" type="text" label="Internet:" />
|
|
||||||
</imixs-form-section>
|
|
||||||
<imixs-form-section columns="2" label="Wiedervorlage">
|
|
||||||
<item name="customer.reminder.date" type="date" label="Termin:" />
|
|
||||||
<item name="customer.lastcontact.date" type="date" label="Letzter persönlicher Kontakt:" />
|
|
||||||
</imixs-form-section>
|
|
||||||
|
|
||||||
<imixs-form-section columns="1" label="Vorschlag E-Mail Antwort" readonly="true" >
|
|
||||||
<item name="request.response.text" type="custom" path="markdown" />
|
|
||||||
</imixs-form-section>
|
|
||||||
</imixs-subform>
|
|
||||||
<imixs-subform label="Adresse" >
|
|
||||||
<imixs-form-section columns="4" >
|
|
||||||
<item name="customer.address" type="text" label="Straße:" />
|
|
||||||
<item name="customer.zip" type="text" label="PLZ:" />
|
|
||||||
<item name="custmer.city" type="text" label="Ort:" />
|
|
||||||
<item name="customer.country" type="custom" path="country" label="Land:" />
|
|
||||||
<item name="customer.department" type="text" label="Abteilung:" />
|
|
||||||
</imixs-form-section>
|
|
||||||
</imixs-subform>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</imixs-form>
|
|
||||||
]]></bpmn2:documentation>
|
|
||||||
</bpmn2:dataObject>
|
|
||||||
<bpmn2:association id="association_X5iIsg" sourceRef="dataObject_0jfMhA" targetRef="task_6Rvbrg">
|
|
||||||
<bpmn2:documentation id="documentation_PDwxmg"/>
|
|
||||||
</bpmn2:association>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_J9TrXg" sourceRef="task_sz0cKg" targetRef="event_D00leQ">
|
|
||||||
<bpmn2:documentation id="documentation_woMiMQ"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
</bpmn2:process>
|
|
||||||
<bpmn2:signal id="signal_1" name="org.imixs.ai.workflow.ImixsAIAssistantAdapter"/>
|
|
||||||
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="OpenBPMN Diagram">
|
|
||||||
<bpmndi:BPMNPlane bpmnElement="process_1" id="BPMNPlane_wBZ1iA">
|
|
||||||
<bpmndi:BPMNShape bpmnElement="participant_STxhdA" id="BPMNShape_F40S0w">
|
|
||||||
<dc:Bounds height="210.0" width="800.0" x="0.0" y="0.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
</bpmndi:BPMNPlane>
|
|
||||||
<bpmndi:BPMNPlane bpmnElement="collaboration_1" id="BPMNPlane_E78zcg">
|
|
||||||
<bpmndi:BPMNShape bpmnElement="participant_aMKbSA" id="BPMNShape_t6JRBw">
|
|
||||||
<dc:Bounds height="340.0" width="1330.0" x="80.0" y="130.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="lane_mNgUrw" id="BPMNShape_ytlcMg">
|
|
||||||
<dc:Bounds height="340.0" width="1300.0" x="110.0" y="130.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_zUD3jQ" id="BPMNShape_cvGU9Q">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="177.0" y="257.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_3U3fqA">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="145.0" y="296.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="task_6Rvbrg" id="BPMNShape_Tx6tQQ">
|
|
||||||
<dc:Bounds height="50.0" width="110.0" x="290.0" y="250.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_D00leQ" id="BPMNShape_Ymu9vA">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="1107.0" y="257.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_Q3qxiA">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="1075.0" y="296.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="task_sz0cKg" id="BPMNShape_ZPpE9Q">
|
|
||||||
<dc:Bounds height="50.0" width="110.0" x="840.0" y="250.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_FrL0EA" id="BPMNShape_beJhIA">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="597.0" y="257.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_dlLiYw">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="565.0" y="296.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_IPSgCg" id="BPMNEdge_1fpCJA" sourceElement="BPMNShape_cvGU9Q" targetElement="BPMNShape_Tx6tQQ">
|
|
||||||
<di:waypoint x="213.0" y="275.0"/>
|
|
||||||
<di:waypoint x="290.0" y="275.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_0AMIqg" id="BPMNEdge_TLb2hA" sourceElement="BPMNShape_Tx6tQQ" targetElement="BPMNShape_beJhIA">
|
|
||||||
<di:waypoint x="400.0" y="275.0"/>
|
|
||||||
<di:waypoint x="597.0" y="275.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_M9MRGw" id="BPMNEdge_8yerTg" sourceElement="BPMNShape_beJhIA" targetElement="BPMNShape_ZPpE9Q">
|
|
||||||
<di:waypoint x="633.0" y="275.0"/>
|
|
||||||
<di:waypoint x="840.0" y="275.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="dataObject_0jfMhA" id="BPMNShape_sxOufg">
|
|
||||||
<dc:Bounds height="50.0" width="35.0" x="180.0" y="160.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_Em4O4Q">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="147.5" y="215.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="association_X5iIsg" id="BPMNEdge_89BTFw" sourceElement="BPMNShape_sxOufg" targetElement="BPMNShape_Tx6tQQ">
|
|
||||||
<di:waypoint x="215.0" y="186.0"/>
|
|
||||||
<di:waypoint x="316.0" y="186.0"/>
|
|
||||||
<di:waypoint x="316.0" y="250.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_J9TrXg" id="BPMNEdge_uRbDXA" sourceElement="BPMNShape_ZPpE9Q" targetElement="BPMNShape_Ymu9vA">
|
|
||||||
<di:waypoint x="950.0" y="275.0"/>
|
|
||||||
<di:waypoint x="1107.0" y="275.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
</bpmndi:BPMNPlane>
|
|
||||||
</bpmndi:BPMNDiagram>
|
|
||||||
</bpmn2:definitions>
|
|
||||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,598 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- origin at X=0.0 Y=0.0 --><bpmn2:definitions xmlns:bpmn2="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:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:ext="http://org.eclipse.bpmn2/ext" xmlns:imixs="http://www.imixs.org/bpmn2" xmlns:open-bpmn="http://open-bpmn.org/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exporter="org.eclipse.bpmn2.modeler.core" exporterVersion="1.5.4.RC1-v20220528-0836-B1" id="Definitions_1" targetNamespace="http://www.imixs.org/bpmn2">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="txtworkflowmodelversion" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[zahlungseingang-de-1.0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtfieldmapping" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Ersteller|namCreator]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[Aktueller Bearbeiter|namCurrentEditor]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[Eigentümer|namowner]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[Prozess-Verantwortliche|namprocessmanager]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[Prozess-Team|namprocessteam]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[Prozess-Assistenz|namprocessassist]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[Bereichs-Verantwortliche|namspacemanager]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[Bereichs-Team|namspaceteam]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[Bereichs-Assistenz|namspaceassist]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[Verantwortlich|namteam]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txttimefieldmapping" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Vertragsbeginn|contract.start]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[Vertragsende|contract.end]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtplugins" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.office.plugins.WorkitemLinkPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ResultPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.RulePlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.marty.profile.ProfilePlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.marty.plugins.CommentPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.marty.plugins.SequenceNumberPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.marty.team.TeamPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.marty.profile.DeputyPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.OwnerPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.HistoryPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.LogPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ApplicationPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.marty.profile.MailPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.IntervalPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.SplitAndJoinPlugin]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<open-bpmn:auto-align/>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:message id="Message_2" name="Html-Header">
|
|
||||||
<bpmn2:documentation id="Documentation_7"><![CDATA[<html>
|
|
||||||
<head>
|
|
||||||
<style type="text/css">
|
|
||||||
html, body, div, p, h1, h2, h3, ul, ol, span, a, table, td, form, img,
|
|
||||||
li {
|
|
||||||
font-family: Arial;
|
|
||||||
font-style: normal;
|
|
||||||
font-variant: normal;
|
|
||||||
font-weight: normal;
|
|
||||||
font-size: 11pt;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
padding: 1em;
|
|
||||||
min-width: 41em;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
font-size: 12pt;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
th, td {
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
th {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
||||||
<title>Mueller-Ahlhorn Email</title>
|
|
||||||
</head>
|
|
||||||
<body>]]></bpmn2:documentation>
|
|
||||||
</bpmn2:message>
|
|
||||||
<bpmn2:message id="Message_4" name="Html-Footer">
|
|
||||||
<bpmn2:documentation id="Documentation_9"><![CDATA[</body>
|
|
||||||
</html>]]></bpmn2:documentation>
|
|
||||||
</bpmn2:message>
|
|
||||||
<bpmn2:collaboration id="Collaboration_1">
|
|
||||||
<bpmn2:participant id="Participant_1" name="Zahlungseingang" processRef="Process_1">
|
|
||||||
<bpmn2:documentation id="documentation_3bSaXQ"/>
|
|
||||||
</bpmn2:participant>
|
|
||||||
<bpmn2:participant id="participant_5CZoTA" name="Default Process" processRef="process_2"/>
|
|
||||||
</bpmn2:collaboration>
|
|
||||||
<bpmn2:process definitionalCollaborationRef="Collaboration_1" id="Process_1" isExecutable="false" name="Zahlungseingang" processType="Private">
|
|
||||||
<bpmn2:laneSet id="LaneSet_1" name="Lane Set 1">
|
|
||||||
<bpmn2:lane id="Lane_1" name="Ersteller">
|
|
||||||
<bpmn2:flowNodeRef>IntermediateCatchEvent_6</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>Task_2</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>StartEvent_1</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>Task_4</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:documentation id="documentation_6uRMpg"/>
|
|
||||||
<bpmn2:flowNodeRef>DataObject_2</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>IntermediateCatchEvent_9</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_10hUxQ</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>IntermediateCatchEvent_13</bpmn2:flowNodeRef>
|
|
||||||
</bpmn2:lane>
|
|
||||||
</bpmn2:laneSet>
|
|
||||||
<bpmn2:startEvent id="StartEvent_1" name="Start">
|
|
||||||
<bpmn2:outgoing>SequenceFlow_18</bpmn2:outgoing>
|
|
||||||
<bpmn2:documentation id="documentation_P58KBw"/>
|
|
||||||
</bpmn2:startEvent>
|
|
||||||
<bpmn2:task id="Task_2" imixs:processid="5000" name="Neu">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="txteditorid" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[form_basic]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtworkflowabstract" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[<itemvalue>txtlastcomment</itemvalue>]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtname" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Rechnung erhalten]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtimageurl" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[typcn-upload]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtworkflowsummary" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[<itemvalue format="dd.MM.yyyy">payment.date</itemvalue> : <itemvalue>customer.name</itemvalue> (<itemvalue format="#,###,##0.00" locale="de_DE">payment.amount</itemvalue> <itemvalue>payment.currency</itemvalue>)]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyupdateacl" type="xs:boolean">
|
|
||||||
<imixs:value>true</imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyownershipfields" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[namCreator]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[namprocessteam]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyaddwritefields" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[namCreator]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[namprocessmanager]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[namprocessteam]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[namprocessassist]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txttype" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[workitem]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="namaddwriteaccess" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[{process:?:member}]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="Documentation_2"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation>
|
|
||||||
<bpmn2:incoming>SequenceFlow_18</bpmn2:incoming>
|
|
||||||
<bpmn2:incoming>sequenceFlow_hvJ59w</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>SequenceFlow_8</bpmn2:outgoing>
|
|
||||||
</bpmn2:task>
|
|
||||||
<bpmn2:dataObject id="DataObject_2" imixs:datatype="form-data" name="Invoice Form">
|
|
||||||
<bpmn2:documentation id="Documentation_8"><![CDATA[<?xml version="1.0"?>
|
|
||||||
<imixs-form>
|
|
||||||
<imixs-form-section columns="1">
|
|
||||||
<item name="invoice.ref"
|
|
||||||
type="custom" required="true"
|
|
||||||
path="workitemlink"
|
|
||||||
options="($workflowgroup:Rechnungsausgang)(type:workitem)($taskid:[5300 TO 5499])"
|
|
||||||
label="Rechnung:" />
|
|
||||||
</imixs-form-section>
|
|
||||||
|
|
||||||
<imixs-form-section columns="3" label="Zahlungsdaten">
|
|
||||||
<item name="payment.date" type="date" required="true" label="Datum:" />
|
|
||||||
<item name="payment.currency" type="selectOneMenu" required="true"
|
|
||||||
label="Währung:"
|
|
||||||
options="EUR;USD" />
|
|
||||||
<item name="payment.amount" type="currency" label="Betrag:" />
|
|
||||||
</imixs-form-section>
|
|
||||||
</imixs-form>]]></bpmn2:documentation>
|
|
||||||
<bpmn2:dataState id="DataState_1"/>
|
|
||||||
</bpmn2:dataObject>
|
|
||||||
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_13" imixs:activityid="10" name="Speichern">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keylogtimeformat" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[2]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyarchive" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtmailsubject" type="xs:string">
|
|
||||||
<imixs:value/>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyaccessmode" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyscheduledactivity" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="rtfmailbody" type="xs:string">
|
|
||||||
<imixs:value/>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyversion" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyaddwritefields" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[namCreator]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[namCurrentEditor]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[namprocessmanager]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[namprocessteam]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="numnextactivityid" type="xs:int">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyfollowup" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[2]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keylogdateformat" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[2]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyownershipfields" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[namCurrentEditor]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[namCreator]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="numnextid" type="xs:int">
|
|
||||||
<imixs:value><![CDATA[5000]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtnextprocesstree" type="xs:string">
|
|
||||||
<imixs:value/>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtactivityresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[<item name="comment" ignore="true"/>
|
|
||||||
<workitemlink name="copydata">
|
|
||||||
<ref>invoice.ref</ref>
|
|
||||||
<items>(^customer\.),sequencenumber|customer.number</items>
|
|
||||||
<debug>false</debug>
|
|
||||||
</workitemlink>]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtname" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Speichern]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyownershipmode" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="rtfresultlog" type="xs:string">
|
|
||||||
<imixs:value/>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyupdateacl" type="xs:boolean">
|
|
||||||
<imixs:value>false</imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keymailreceiverfields" type="xs:string"/>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="Documentation_19"><![CDATA[Save and update]]></bpmn2:documentation>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_hvJ59w</bpmn2:outgoing>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:task id="Task_4" imixs:processid="5100" name="Gebucht">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="txteditorid" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[form_basic]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtworkflowabstract" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[<itemvalue>txtlastcomment</itemvalue>]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtname" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Rechnung erhalten]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtimageurl" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[typcn-upload]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtworkflowsummary" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[<itemvalue format="dd.MM.yyyy">payment.date</itemvalue> : <itemvalue>customer.name</itemvalue> (<itemvalue format="#,###,##0.00" locale="de_DE">payment.amount</itemvalue> <itemvalue>payment.currency</itemvalue>)]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyupdateacl" type="xs:boolean">
|
|
||||||
<imixs:value>true</imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyownershipfields" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[namCreator]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[namprocessteam]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyaddwritefields" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[namCreator]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[namprocessmanager]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[namprocessteam]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txttype" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[workitem]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="namaddwriteaccess" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[{process:?:member}]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="Documentation_18"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation>
|
|
||||||
<bpmn2:incoming>SequenceFlow_19</bpmn2:incoming>
|
|
||||||
<bpmn2:incoming>sequenceFlow_LjFiXQ</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_Sopi3A</bpmn2:outgoing>
|
|
||||||
</bpmn2:task>
|
|
||||||
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_6" imixs:activityid="20" name="Buchen">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keyarchive" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtmailsubject" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Empfangsbestätigung Rechnungseingang]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyaccessmode" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyscheduledactivity" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="rtfmailbody" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Hallo,
|
|
||||||
|
|
||||||
die von Ihnen an uns gesendete Eingangsrechung haben wir erhalten.
|
|
||||||
Die Bearbeitung erfolgt in Kürze.
|
|
||||||
|
|
||||||
Bei Fragen wenden Sie sich bitte an info@imixs.com
|
|
||||||
]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyversion" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyaddwritefields" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[namprocessmanager]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[namprocessteam]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="numnextactivityid" type="xs:int">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyfollowup" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[2]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyownershipfields" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[namprocessteam]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="numnextid" type="xs:int">
|
|
||||||
<imixs:value><![CDATA[5005]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtnextprocesstree" type="xs:string">
|
|
||||||
<imixs:value/>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtname" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Akzeptieren]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyownershipmode" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="rtfresultlog" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Neue Rechnung angelegt]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyupdateacl" type="xs:boolean">
|
|
||||||
<imixs:value>false</imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="Documentation_23"><![CDATA[Neue Rechnung anlegen]]></bpmn2:documentation>
|
|
||||||
<bpmn2:incoming>SequenceFlow_8</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_LjFiXQ</bpmn2:outgoing>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="SequenceFlow_8" sourceRef="Task_2" targetRef="IntermediateCatchEvent_6">
|
|
||||||
<bpmn2:documentation id="documentation_H5FuOQ"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:sequenceFlow id="SequenceFlow_18" sourceRef="StartEvent_1" targetRef="Task_2">
|
|
||||||
<bpmn2:documentation id="documentation_l7AV0w"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_9" imixs:activityid="10" name="Speichern">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keylogtimeformat" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[2]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyarchive" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtmailsubject" type="xs:string">
|
|
||||||
<imixs:value/>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyaccessmode" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyscheduledactivity" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="rtfmailbody" type="xs:string">
|
|
||||||
<imixs:value/>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyversion" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyaddwritefields" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[namCreator]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[namCurrentEditor]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[namprocessmanager]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[namprocessteam]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="numnextactivityid" type="xs:int">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyfollowup" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[2]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keylogdateformat" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[2]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyownershipfields" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[namCurrentEditor]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[namCreator]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="numnextid" type="xs:int">
|
|
||||||
<imixs:value><![CDATA[5000]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtnextprocesstree" type="xs:string">
|
|
||||||
<imixs:value/>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtactivityresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[<poi-copy name="filename"><itemvalue>sequencenumber</itemvalue>.*\.xlsx</poi-copy>
|
|
||||||
<poi-copy name="copy">
|
|
||||||
<find>INVOICE_TOTAL</find>
|
|
||||||
<itemname>invoice.total</itemname>
|
|
||||||
<type>number</type>
|
|
||||||
</poi-copy>
|
|
||||||
<poi-copy name="copy">
|
|
||||||
<find>INVOICE_CURRENCY</find>
|
|
||||||
<itemname>invoice.currency</itemname>
|
|
||||||
</poi-copy>
|
|
||||||
|
|
||||||
]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtname" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Speichern]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyownershipmode" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="rtfresultlog" type="xs:string">
|
|
||||||
<imixs:value/>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keyupdateacl" type="xs:boolean">
|
|
||||||
<imixs:value>false</imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="keymailreceiverfields" type="xs:string"/>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="Documentation_46"/>
|
|
||||||
<bpmn2:outgoing>SequenceFlow_19</bpmn2:outgoing>
|
|
||||||
<bpmn2:dataOutput id="DataOutput_5" name="Signal_6_Output"/>
|
|
||||||
<bpmn2:dataOutputAssociation id="DataOutputAssociation_5">
|
|
||||||
<bpmn2:sourceRef>DataOutput_5</bpmn2:sourceRef>
|
|
||||||
</bpmn2:dataOutputAssociation>
|
|
||||||
<bpmn2:outputSet id="OutputSet_6" name="Output Set 6">
|
|
||||||
<bpmn2:dataOutputRefs>DataOutput_5</bpmn2:dataOutputRefs>
|
|
||||||
</bpmn2:outputSet>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="SequenceFlow_19" sourceRef="IntermediateCatchEvent_9" targetRef="Task_4">
|
|
||||||
<bpmn2:documentation id="documentation_XxCUQw"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:association id="Association_2" sourceRef="DataObject_2" targetRef="Task_2">
|
|
||||||
<bpmn2:documentation id="documentation_dSQkCA"/>
|
|
||||||
</bpmn2:association>
|
|
||||||
<bpmn2:association id="Association_3" sourceRef="DataObject_2" targetRef="Task_4">
|
|
||||||
<bpmn2:documentation id="documentation_4OkmiA"/>
|
|
||||||
</bpmn2:association>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_LjFiXQ" sourceRef="IntermediateCatchEvent_6" targetRef="Task_4">
|
|
||||||
<bpmn2:documentation id="documentation_YsCGAw"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:endEvent id="event_10hUxQ" name="Event-12">
|
|
||||||
<bpmn2:documentation id="documentation_1EBsgg"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_Sopi3A</bpmn2:incoming>
|
|
||||||
</bpmn2:endEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_Sopi3A" sourceRef="Task_4" targetRef="event_10hUxQ">
|
|
||||||
<bpmn2:documentation id="documentation_BPw23w"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_hvJ59w" sourceRef="IntermediateCatchEvent_13" targetRef="Task_2">
|
|
||||||
<bpmn2:documentation id="documentation_OhlRYw"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
</bpmn2:process>
|
|
||||||
<bpmn2:process id="process_2" name="Default Process" processType="Public">
|
|
||||||
<bpmn2:documentation id="documentation_6zIncA"/>
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<open-bpmn:auto-align>true</open-bpmn:auto-align>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
</bpmn2:process>
|
|
||||||
<bpmn2:signal id="signal_1" name="com.alexanderlogistics.ZahlungseingangSaldoAdapter"/>
|
|
||||||
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
|
|
||||||
<bpmndi:BPMNPlane bpmnElement="Collaboration_1" id="BPMNPlane_Process_1">
|
|
||||||
<bpmndi:BPMNShape bpmnElement="Participant_1" id="BPMNShape_Participant_1" isHorizontal="true">
|
|
||||||
<dc:Bounds height="570.0" width="1180.0" x="50.0" y="100.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="Lane_1" id="BPMNShape_Lane_1" isHorizontal="true">
|
|
||||||
<dc:Bounds height="570.0" width="1150.0" x="80.0" y="100.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="StartEvent_1" id="BPMNShape_StartEvent_1">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="197.0" y="417.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_1" labelStyle="BPMNLabelStyle_1">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="167.5" y="456.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="BPMNShape_TextAnnotation_1">
|
|
||||||
<dc:Bounds height="73.0" width="131.0" x="130.0" y="581.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_30">
|
|
||||||
<dc:Bounds height="67.0" width="119.0" x="136.0" y="581.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="Task_2" id="BPMNShape_Task_5">
|
|
||||||
<dc:Bounds height="50.0" width="110.0" x="280.0" y="410.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_33" labelStyle="BPMNLabelStyle_1">
|
|
||||||
<dc:Bounds height="14.0" width="57.0" x="244.0" y="239.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="DataObject_2" id="BPMNShape_DataObject_1">
|
|
||||||
<dc:Bounds height="50.0" width="35.0" x="470.0" y="290.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_85">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="438.0" y="340.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_13" id="BPMNShape_IntermediateCatchEvent_13">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="317.0" y="507.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_39" labelStyle="BPMNLabelStyle_1">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="288.0" y="546.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="Task_4" id="BPMNShape_Task_1">
|
|
||||||
<dc:Bounds height="50.0" width="110.0" x="740.0" y="410.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_16" labelStyle="BPMNLabelStyle_1">
|
|
||||||
<dc:Bounds height="14.0" width="77.0" x="913.0" y="239.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_6" id="BPMNShape_IntermediateCatchEvent_7">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="487.0" y="417.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_17" labelStyle="BPMNLabelStyle_1">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="455.0" y="456.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_9" id="BPMNShape_IntermediateCatchEvent_9">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="777.0" y="507.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_41" labelStyle="BPMNLabelStyle_1">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="752.0" y="547.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="Message_2" id="BPMNShape_Message_1">
|
|
||||||
<dc:Bounds height="20.0" width="30.0" x="90.0" y="20.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_9">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="55.0" y="40.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="Message_4" id="BPMNShape_Message_2">
|
|
||||||
<dc:Bounds height="20.0" width="30.0" x="200.0" y="20.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_11">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="165.0" y="40.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="participant_5CZoTA" id="BPMNShape_C5w96Q">
|
|
||||||
<dc:Bounds height="210.0" width="800.0" x="0.0" y="0.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_10hUxQ" id="BPMNShape_9EaWBg">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="907.0" y="417.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_4UJtyQ">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="875.0" y="456.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="Association_2" id="BPMNEdge_Association_2" sourceElement="BPMNShape_DataObject_1" targetElement="BPMNShape_Task_5">
|
|
||||||
<di:waypoint x="470.0" y="315.0"/>
|
|
||||||
<di:waypoint x="335.0" y="315.0"/>
|
|
||||||
<di:waypoint x="335.0" y="410.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_86"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_8" id="BPMNEdge_SequenceFlow_9" sourceElement="BPMNShape_Task_5" targetElement="BPMNShape_IntermediateCatchEvent_7">
|
|
||||||
<di:waypoint x="390.0" y="435.0"/>
|
|
||||||
<di:waypoint x="487.0" y="435.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_19"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_18" id="BPMNEdge_SequenceFlow_19" sourceElement="BPMNShape_StartEvent_1" targetElement="BPMNShape_Task_5">
|
|
||||||
<di:waypoint x="233.0" y="435.0"/>
|
|
||||||
<di:waypoint x="280.0" y="435.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_37"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_19" id="BPMNEdge_SequenceFlow_20" sourceElement="BPMNShape_IntermediateCatchEvent_9" targetElement="BPMNShape_Task_1">
|
|
||||||
<di:waypoint x="795.0" y="507.0"/>
|
|
||||||
<di:waypoint x="795.0" y="460.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_42"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="Association_3" id="BPMNEdge_Association_3" sourceElement="BPMNShape_DataObject_1" targetElement="BPMNShape_Task_1">
|
|
||||||
<di:waypoint x="505.0" y="314.0"/>
|
|
||||||
<di:waypoint x="793.0" y="314.0"/>
|
|
||||||
<di:waypoint x="793.0" y="410.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_43"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_LjFiXQ" id="BPMNEdge_cSngaw" sourceElement="BPMNShape_IntermediateCatchEvent_7" targetElement="BPMNShape_Task_1">
|
|
||||||
<di:waypoint x="523.0" y="435.0"/>
|
|
||||||
<di:waypoint x="740.0" y="435.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_Sopi3A" id="BPMNEdge_jFxUJQ" sourceElement="BPMNShape_Task_1" targetElement="BPMNShape_9EaWBg">
|
|
||||||
<di:waypoint x="850.0" y="435.0"/>
|
|
||||||
<di:waypoint x="907.0" y="435.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_hvJ59w" id="BPMNEdge_yChyAg" sourceElement="BPMNShape_IntermediateCatchEvent_13" targetElement="BPMNShape_Task_5">
|
|
||||||
<di:waypoint x="335.0" y="507.0"/>
|
|
||||||
<di:waypoint x="335.0" y="460.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
</bpmndi:BPMNPlane>
|
|
||||||
<bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1">
|
|
||||||
<dc:Font name="arial" size="9.0"/>
|
|
||||||
</bpmndi:BPMNLabelStyle>
|
|
||||||
</bpmndi:BPMNDiagram>
|
|
||||||
</bpmn2:definitions>
|
|
||||||
|
|
@ -1,784 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:BPMN2="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:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:imixs="http://www.imixs.org/bpmn2" xmlns:open-bpmn="http://open-bpmn.org/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exporter="org.openbpmn" exporterVersion="1.0.0" targetNamespace="http://open-bpmn.org">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="txtworkflowmodelversion" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[framework-agreement-en-1.0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtplugins" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[org.imixs.marty.plugins.SequenceNumberPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.RulePlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.SplitAndJoinPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.OwnerPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ApproverPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.HistoryPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ApplicationPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.IntervalPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.MailPlugin]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ResultPlugin]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtfieldmapping" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Creator|$creator]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[Owner|$owner]]></imixs:value>
|
|
||||||
<imixs:value><![CDATA[Editor|$editor]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:collaboration id="collaboration_1" name="Default Collaboration">
|
|
||||||
<bpmn2:participant id="participant_STxhdA" name="Default Process" processRef="process_1"/>
|
|
||||||
<bpmn2:participant id="participant_aMKbSA" name="Framework Agreement" processRef="process_4zs0ww">
|
|
||||||
<bpmn2:documentation id="documentation_awmzgg"/>
|
|
||||||
</bpmn2:participant>
|
|
||||||
</bpmn2:collaboration>
|
|
||||||
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_1" name="Default Process" processType="Public">
|
|
||||||
<bpmn2:documentation id="documentation_mdKRmQ"/>
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<open-bpmn:auto-align>true</open-bpmn:auto-align>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
</bpmn2:process>
|
|
||||||
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_4zs0ww" isExecutable="true" name="Framework Agreement" processType="Private">
|
|
||||||
<bpmn2:laneSet id="laneset_YAbhZw" name="Lane Set">
|
|
||||||
<bpmn2:lane id="lane_mNgUrw" name="Sales Assist">
|
|
||||||
<bpmn2:documentation id="documentation_2VH0iA"/>
|
|
||||||
<bpmn2:flowNodeRef>task_6Rvbrg</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>task_htD1AQ</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_zUD3jQ</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_FrL0EA</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_06dF0Q</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_xW07Ug</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_D00leQ</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>gateway_4U3ZjA</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_GVwcdA</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>dataObject_0jfMhA</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_0TmpPA</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_U6M8lw</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_JNec8w</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_9G400A</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_TToOrg</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_aiUjxQ</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>gateway_dLS6Ng</bpmn2:flowNodeRef>
|
|
||||||
</bpmn2:lane>
|
|
||||||
<bpmn2:lane id="lane_ZSh00w" name="Lane 2">
|
|
||||||
<bpmn2:documentation id="documentation_9IFabg"/>
|
|
||||||
<bpmn2:flowNodeRef>event_jdHseQ</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_nmbHpg</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>task_sz0cKg</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>gateway_BqjeNQ</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_SY74Ew</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_MOYOPg</bpmn2:flowNodeRef>
|
|
||||||
</bpmn2:lane>
|
|
||||||
<bpmn2:lane id="lane_9iZDDw" name="Lane 3">
|
|
||||||
<bpmn2:documentation id="documentation_Mq48Fw"/>
|
|
||||||
<bpmn2:flowNodeRef>task_k5bMQQ</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_oYIv6A</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>gateway_0i0F0A</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_FUrgaA</bpmn2:flowNodeRef>
|
|
||||||
<bpmn2:flowNodeRef>event_4Bh0BQ</bpmn2:flowNodeRef>
|
|
||||||
</bpmn2:lane>
|
|
||||||
</bpmn2:laneSet>
|
|
||||||
<bpmn2:startEvent id="event_zUD3jQ" name="Start">
|
|
||||||
<bpmn2:documentation id="documentation_q0CQSQ"/>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_IPSgCg</bpmn2:outgoing>
|
|
||||||
</bpmn2:startEvent>
|
|
||||||
<bpmn2:task id="task_6Rvbrg" imixs:processid="1000" name="Draft">
|
|
||||||
<bpmn2:extensionElements/>
|
|
||||||
<bpmn2:documentation id="documentation_UU4yNw"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_cGrlYQ</bpmn2:incoming>
|
|
||||||
<bpmn2:incoming>sequenceFlow_Bsyk0Q</bpmn2:incoming>
|
|
||||||
<bpmn2:incoming>sequenceFlow_K8TSbQ</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_0AMIqg</bpmn2:outgoing>
|
|
||||||
<bpmn2:incoming>sequenceFlow_pQ27gg</bpmn2:incoming>
|
|
||||||
</bpmn2:task>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_IPSgCg" sourceRef="event_zUD3jQ" targetRef="gateway_dLS6Ng">
|
|
||||||
<bpmn2:documentation id="documentation_kH0gZQ"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_0AMIqg" sourceRef="task_6Rvbrg" targetRef="gateway_4U3ZjA">
|
|
||||||
<bpmn2:documentation id="documentation_t4zfjw"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:task id="task_sz0cKg" imixs:processid="1100" name="Technical Review">
|
|
||||||
<bpmn2:extensionElements/>
|
|
||||||
<bpmn2:documentation id="documentation_pm2R1w"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_02i9iQ</bpmn2:incoming>
|
|
||||||
<bpmn2:incoming>sequenceFlow_M9MRGw</bpmn2:incoming>
|
|
||||||
<bpmn2:incoming>sequenceFlow_LsYEUA</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_l3F8tQ</bpmn2:outgoing>
|
|
||||||
</bpmn2:task>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_FrL0EA" imixs:activityid="30" name="Submit for Review">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="rtfresultlog" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Submitted for Review]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtactivityresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[<wopi-converter name="api-endpoint">http://collabora:9980/lool/convert-to/</wopi-converter>
|
|
||||||
<wopi-converter name="filename">FA<itemvalue>sequencenumber</itemvalue>.docx</wopi-converter>
|
|
||||||
<wopi-converter name="convert-to">pdf</wopi-converter>]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="documentation_lz2ljQ"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_t4LJUg</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_M9MRGw</bpmn2:outgoing>
|
|
||||||
<bpmn2:signalEventDefinition id="signalEventDefinition_Fzn39g" signalRef="signal_5"/>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_M9MRGw" sourceRef="event_FrL0EA" targetRef="task_sz0cKg">
|
|
||||||
<bpmn2:documentation id="documentation_mqOMag"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:dataObject id="dataObject_0jfMhA" imixs:datatype="form-data" name="Form">
|
|
||||||
<bpmn2:documentation id="documentation_KIcv5Q"><![CDATA[<?xml version="1.0"?>
|
|
||||||
<imixs-form>
|
|
||||||
<imixs-subform label="Allgemein">
|
|
||||||
<imixs-form-section columns="2" >
|
|
||||||
<item name="customer.company.name" type="text" label="Company Name:" required="true" />
|
|
||||||
<item name="customer.company.registration.number" type="text" label="Registration Number:" />
|
|
||||||
|
|
||||||
</imixs-form-section>
|
|
||||||
<imixs-form-section columns="2" label="">
|
|
||||||
<item name="customer.firstname" type="text" label="Vorname:" />
|
|
||||||
<item name="customer.lastname" type="text" label="Nachname:" />
|
|
||||||
<item name="customer.phone1" type="text" label="Telefon:" />
|
|
||||||
<item name="customer.phone2" type="text" label="Mobile:" />
|
|
||||||
|
|
||||||
<item name="customer.email" type="text" label="E-Mail:" />
|
|
||||||
<item name="customer.internet" type="text" label="Internet:" />
|
|
||||||
</imixs-form-section>
|
|
||||||
<imixs-form-section columns="2" label="Contract">
|
|
||||||
<item name="contract.date" type="date" label="Contract Date:" required="true" />
|
|
||||||
<item name="contract.date.to" type="date" label="Valid until:" />
|
|
||||||
</imixs-form-section>
|
|
||||||
|
|
||||||
</imixs-subform>
|
|
||||||
<imixs-subform label="Adresse" >
|
|
||||||
<imixs-form-section columns="4" >
|
|
||||||
<item name="customer.address" type="text" label="Street:" />
|
|
||||||
<item name="customer.zip" type="text" label="ZIP:" />
|
|
||||||
<item name="custmer.city" type="text" label="City:" />
|
|
||||||
<item name="customer.country" type="custom" path="country" label="Country:" />
|
|
||||||
<item name="customer.department" type="text" label="Department:" />
|
|
||||||
</imixs-form-section>
|
|
||||||
</imixs-subform>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</imixs-form>
|
|
||||||
]]></bpmn2:documentation>
|
|
||||||
</bpmn2:dataObject>
|
|
||||||
<bpmn2:association id="association_X5iIsg" sourceRef="dataObject_0jfMhA" targetRef="task_6Rvbrg">
|
|
||||||
<bpmn2:documentation id="documentation_PDwxmg"/>
|
|
||||||
</bpmn2:association>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_06dF0Q" imixs:activityid="40" name="Reminder">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="documentation_qYAxGA"/>
|
|
||||||
<bpmn2:incoming>association_SDkT5A</bpmn2:incoming>
|
|
||||||
<bpmn2:incoming>sequenceFlow_zGFeYA</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_9jTAFA</bpmn2:outgoing>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_9jTAFA" sourceRef="event_06dF0Q" targetRef="event_xW07Ug">
|
|
||||||
<bpmn2:documentation id="documentation_Mnx6Mg"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:task id="task_htD1AQ" imixs:processid="1800" name="Active">
|
|
||||||
<bpmn2:extensionElements/>
|
|
||||||
<bpmn2:documentation id="documentation_6AHSSA"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_M9MRGw</bpmn2:incoming>
|
|
||||||
<bpmn2:incoming>sequenceFlow_usZTeg</bpmn2:incoming>
|
|
||||||
<bpmn2:incoming>sequenceFlow_a8V05Q</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_d4R0mQ</bpmn2:outgoing>
|
|
||||||
<bpmn2:incoming>sequenceFlow_9jTAFA</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_wVsGfw</bpmn2:outgoing>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_0NV7gg</bpmn2:outgoing>
|
|
||||||
</bpmn2:task>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_xW07Ug" name="E-Mail">
|
|
||||||
<bpmn2:documentation id="documentation_B5HG2A"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_9jTAFA</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_usZTeg</bpmn2:outgoing>
|
|
||||||
<bpmn2:messageEventDefinition id="messageEventDefinition_UYw0dg" messageRef="message_1"/>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_usZTeg" sourceRef="event_xW07Ug" targetRef="task_htD1AQ">
|
|
||||||
<bpmn2:documentation id="documentation_H8W0Dg"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:task id="task_k5bMQQ" imixs:processid="1200" name="Legal Review">
|
|
||||||
<bpmn2:extensionElements/>
|
|
||||||
<bpmn2:documentation id="documentation_TDs8jA"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_02i9iQ</bpmn2:incoming>
|
|
||||||
<bpmn2:incoming>sequenceFlow_jHW2yQ</bpmn2:incoming>
|
|
||||||
<bpmn2:incoming>sequenceFlow_nzcb6g</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_m7e0fA</bpmn2:outgoing>
|
|
||||||
</bpmn2:task>
|
|
||||||
<bpmn2:endEvent id="event_D00leQ" name="End">
|
|
||||||
<bpmn2:documentation id="documentation_S0FDqg"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_wVsGfw</bpmn2:incoming>
|
|
||||||
</bpmn2:endEvent>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_jdHseQ" imixs:activityid="20" name="Submit">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="rtfresultlog" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Submitted for Review]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="documentation_sWtqhQ"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_XB22VQ</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_jHW2yQ</bpmn2:outgoing>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_l3F8tQ" sourceRef="task_sz0cKg" targetRef="gateway_BqjeNQ">
|
|
||||||
<bpmn2:documentation id="documentation_Q8BnHw"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_jHW2yQ" sourceRef="event_jdHseQ" targetRef="task_k5bMQQ">
|
|
||||||
<bpmn2:documentation id="documentation_xlq07A"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_zGFeYA" sourceRef="gateway_0i0F0A" targetRef="event_06dF0Q">
|
|
||||||
<bpmn2:documentation id="documentation_6nxkZg"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:exclusiveGateway gatewayDirection="Diverging" id="gateway_BqjeNQ" name="">
|
|
||||||
<bpmn2:documentation id="documentation_ETBOrA"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_l3F8tQ</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_XB22VQ</bpmn2:outgoing>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_c30Xwg</bpmn2:outgoing>
|
|
||||||
</bpmn2:exclusiveGateway>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_XB22VQ" sourceRef="gateway_BqjeNQ" targetRef="event_jdHseQ">
|
|
||||||
<bpmn2:documentation id="documentation_YGtAYg"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_nmbHpg" imixs:activityid="30" name="Reject">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="rtfresultlog" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Rejected]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="documentation_cYD37g"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_c30Xwg</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_ftfnGg</bpmn2:outgoing>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_c30Xwg" sourceRef="gateway_BqjeNQ" targetRef="event_nmbHpg">
|
|
||||||
<bpmn2:documentation id="documentation_LkC8eQ"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_ftfnGg" sourceRef="event_nmbHpg" targetRef="event_MOYOPg">
|
|
||||||
<bpmn2:documentation id="documentation_fGrLAA"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_wVsGfw" sourceRef="task_htD1AQ" targetRef="event_D00leQ">
|
|
||||||
<bpmn2:documentation id="documentation_DcvKjg"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:eventBasedGateway gatewayDirection="Diverging" id="gateway_4U3ZjA" name="">
|
|
||||||
<bpmn2:documentation id="documentation_56W8fQ"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_0AMIqg</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_t4LJUg</bpmn2:outgoing>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_SjjEbg</bpmn2:outgoing>
|
|
||||||
</bpmn2:eventBasedGateway>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_t4LJUg" sourceRef="gateway_4U3ZjA" targetRef="event_FrL0EA">
|
|
||||||
<bpmn2:documentation id="documentation_pyznTA"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_GVwcdA" imixs:activityid="201" name="[Tempate]">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtactivityresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[<wopi-template>
|
|
||||||
<source-path><textblock>template-framework-aggreement</textblock></source-path>
|
|
||||||
<target-name>FA<itemvalue>sequencenumber</itemvalue>.docx</target-name>
|
|
||||||
<auto-open>true</auto-open>
|
|
||||||
</wopi-template>]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="documentation_0EGILw"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_jWWfuw</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_X9JlJA</bpmn2:outgoing>
|
|
||||||
<bpmn2:signalEventDefinition id="signalEventDefinition_0se0pQ" signalRef="signal_2"/>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_jWWfuw" sourceRef="event_9G400A" targetRef="event_GVwcdA">
|
|
||||||
<bpmn2:documentation id="documentation_joElOw"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_0TmpPA" imixs:activityid="10" name="Update">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="documentation_Beb0YQ"/>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_pQ27gg</bpmn2:outgoing>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_cGrlYQ" sourceRef="gateway_dLS6Ng" targetRef="task_6Rvbrg">
|
|
||||||
<bpmn2:documentation id="documentation_HLAPyg"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_U6M8lw" imixs:activityid="202" name="[Update]">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtactivityresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[<poi-update name="filename">FA<itemvalue>sequencenumber</itemvalue>.docx</poi-update>
|
|
||||||
<poi-update name="findreplace">
|
|
||||||
<find>[NUMBER]</find>
|
|
||||||
<replace><itemvalue>sequencenumber</itemvalue></replace>
|
|
||||||
</poi-update>
|
|
||||||
<poi-update name="findreplace">
|
|
||||||
<find>[DATE]</find>
|
|
||||||
<replace><itemvalue format="dd.MM.yyyy">contract.date</itemvalue></replace>
|
|
||||||
</poi-update>
|
|
||||||
<poi-update name="findreplace">
|
|
||||||
<find>[Customer Company Name]</find>
|
|
||||||
<replace><itemvalue>customer.company.name</itemvalue></replace>
|
|
||||||
</poi-update>]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="documentation_upi00A"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_X9JlJA</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_Bsyk0Q</bpmn2:outgoing>
|
|
||||||
<bpmn2:signalEventDefinition id="signalEventDefinition_5Ob2Fg" signalRef="signal_4"/>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_X9JlJA" sourceRef="event_GVwcdA" targetRef="event_U6M8lw">
|
|
||||||
<bpmn2:documentation id="documentation_IrqCqg"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_Bsyk0Q" sourceRef="event_U6M8lw" targetRef="task_6Rvbrg">
|
|
||||||
<bpmn2:documentation id="documentation_ZtzdUg"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_JNec8w" imixs:activityid="90" name="Restart">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="documentation_VNXvzQ"/>
|
|
||||||
<bpmn2:incoming>association_SDkT5A</bpmn2:incoming>
|
|
||||||
<bpmn2:incoming>sequenceFlow_0NV7gg</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_K8TSbQ</bpmn2:outgoing>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_0NV7gg" sourceRef="task_htD1AQ" targetRef="event_JNec8w">
|
|
||||||
<bpmn2:documentation id="documentation_VmaBkA"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_K8TSbQ" sourceRef="event_JNec8w" targetRef="task_6Rvbrg">
|
|
||||||
<bpmn2:documentation id="documentation_LqSc4g"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_9G400A" imixs:activityid="20" name="Generate Contract">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="rtfresultlog" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Generate Template]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="documentation_H6Bbag"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_SjjEbg</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_jWWfuw</bpmn2:outgoing>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_SjjEbg" sourceRef="gateway_4U3ZjA" targetRef="event_9G400A">
|
|
||||||
<bpmn2:documentation id="documentation_KC6vTQ"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_TToOrg" imixs:activityid="10" name="Update">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="documentation_DNt1QQ"/>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_a8V05Q</bpmn2:outgoing>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_a8V05Q" sourceRef="event_TToOrg" targetRef="task_htD1AQ">
|
|
||||||
<bpmn2:documentation id="documentation_PmgPpg"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_SY74Ew" imixs:activityid="10" name="Update">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="documentation_VNNXQQ"/>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_LsYEUA</bpmn2:outgoing>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_oYIv6A" imixs:activityid="10" name="Update">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="documentation_jkjs3A"/>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_nzcb6g</bpmn2:outgoing>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_nzcb6g" sourceRef="event_oYIv6A" targetRef="task_k5bMQQ">
|
|
||||||
<bpmn2:documentation id="documentation_rxdazQ"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_LsYEUA" sourceRef="event_SY74Ew" targetRef="task_sz0cKg">
|
|
||||||
<bpmn2:documentation id="documentation_RDY6Xw"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:exclusiveGateway gatewayDirection="Diverging" id="gateway_0i0F0A" name="">
|
|
||||||
<bpmn2:documentation id="documentation_mq3gpg"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_m7e0fA</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_c30Xwg</bpmn2:outgoing>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_zGFeYA</bpmn2:outgoing>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_GGVfww</bpmn2:outgoing>
|
|
||||||
</bpmn2:exclusiveGateway>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_m7e0fA" sourceRef="task_k5bMQQ" targetRef="gateway_0i0F0A">
|
|
||||||
<bpmn2:documentation id="documentation_RBh92Q"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_FUrgaA" imixs:activityid="30" name="Reject">
|
|
||||||
<bpmn2:extensionElements>
|
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="rtfresultlog" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[Rejected]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
</bpmn2:extensionElements>
|
|
||||||
<bpmn2:documentation id="documentation_IA7mKA"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_GGVfww</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_JhGZ0w</bpmn2:outgoing>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_GGVfww" sourceRef="gateway_0i0F0A" targetRef="event_FUrgaA">
|
|
||||||
<bpmn2:documentation id="documentation_4KaNNg"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_JhGZ0w" sourceRef="event_FUrgaA" targetRef="event_4Bh0BQ">
|
|
||||||
<bpmn2:documentation id="documentation_F40zSg"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_aiUjxQ" name="REJECT">
|
|
||||||
<bpmn2:documentation id="documentation_0AHKhA"/>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_TGHwmQ</bpmn2:outgoing>
|
|
||||||
<bpmn2:linkEventDefinition id="linkEventDefinition_qjQkmQ"/>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:intermediateThrowEvent id="event_4Bh0BQ" name="REJECT">
|
|
||||||
<bpmn2:documentation id="documentation_MsZCPg"/>
|
|
||||||
<bpmn2:linkEventDefinition id="linkEventDefinition_jKLU0Q"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_JhGZ0w</bpmn2:incoming>
|
|
||||||
</bpmn2:intermediateThrowEvent>
|
|
||||||
<bpmn2:intermediateThrowEvent id="event_MOYOPg" name="REJECT">
|
|
||||||
<bpmn2:documentation id="documentation_rRDDUQ"/>
|
|
||||||
<bpmn2:linkEventDefinition id="linkEventDefinition_CDl0hQ"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_ftfnGg</bpmn2:incoming>
|
|
||||||
</bpmn2:intermediateThrowEvent>
|
|
||||||
<bpmn2:exclusiveGateway gatewayDirection="Diverging" id="gateway_dLS6Ng" name="">
|
|
||||||
<bpmn2:documentation id="documentation_ZHAmZg"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_TGHwmQ</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_c30Xwg</bpmn2:outgoing>
|
|
||||||
<bpmn2:incoming>sequenceFlow_IPSgCg</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_cGrlYQ</bpmn2:outgoing>
|
|
||||||
</bpmn2:exclusiveGateway>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_TGHwmQ" sourceRef="event_aiUjxQ" targetRef="gateway_dLS6Ng">
|
|
||||||
<bpmn2:documentation id="documentation_8ezEkw"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_pQ27gg" sourceRef="event_0TmpPA" targetRef="task_6Rvbrg">
|
|
||||||
<bpmn2:documentation id="documentation_e0WYJw"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
</bpmn2:process>
|
|
||||||
<bpmn2:signal id="signal_1" name="org.imixs.ai.workflow.ImixsAIAssistantAdapter"/>
|
|
||||||
<bpmn2:message id="message_1" name="Message 1">
|
|
||||||
<bpmn2:documentation id="documentation_aEqAaA"/>
|
|
||||||
</bpmn2:message>
|
|
||||||
<bpmn2:signal id="signal_2" name="org.imixs.workflow.wopi.WopiTemplateAdapter"/>
|
|
||||||
<bpmn2:signal id="signal_4" name="org.imixs.workflow.poi.POIFindReplaceAdapter"/>
|
|
||||||
<bpmn2:signal id="signal_5" name="org.imixs.workflow.wopi.WopiDocumentConverterAdapter"/>
|
|
||||||
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="OpenBPMN Diagram">
|
|
||||||
<bpmndi:BPMNPlane bpmnElement="process_1" id="BPMNPlane_wBZ1iA">
|
|
||||||
<bpmndi:BPMNShape bpmnElement="participant_STxhdA" id="BPMNShape_F40S0w">
|
|
||||||
<dc:Bounds height="210.0" width="800.0" x="0.0" y="0.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="message_1" id="BPMNShape_0Cmdiw">
|
|
||||||
<dc:Bounds height="20.0" width="30.0" x="180.0" y="-80.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_WdYgDQ">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="145.0" y="-55.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
</bpmndi:BPMNPlane>
|
|
||||||
<bpmndi:BPMNPlane bpmnElement="collaboration_1" id="BPMNPlane_E78zcg">
|
|
||||||
<bpmndi:BPMNShape bpmnElement="participant_aMKbSA" id="BPMNShape_t6JRBw">
|
|
||||||
<dc:Bounds height="910.0" width="1970.0" x="150.0" y="-10.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="lane_mNgUrw" id="BPMNShape_ytlcMg">
|
|
||||||
<dc:Bounds height="430.0" width="1940.0" x="180.0" y="-10.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_zUD3jQ" id="BPMNShape_cvGU9Q">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="247.0" y="267.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_3U3fqA">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="213.0" y="307.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="task_6Rvbrg" id="BPMNShape_Tx6tQQ">
|
|
||||||
<dc:Bounds height="50.0" width="110.0" x="480.0" y="260.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="task_sz0cKg" id="BPMNShape_ZPpE9Q">
|
|
||||||
<dc:Bounds height="50.0" width="110.0" x="850.0" y="520.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_FrL0EA" id="BPMNShape_beJhIA">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="887.0" y="267.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_dlLiYw">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="855.0" y="306.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_06dF0Q" id="BPMNShape_9NYhlQ">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="1437.0" y="117.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_PLNrYw">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="1405.0" y="156.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="task_htD1AQ" id="BPMNShape_00qcug">
|
|
||||||
<dc:Bounds height="50.0" width="110.0" x="1690.0" y="110.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_xW07Ug" id="BPMNShape_iDXcsw">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="1587.0" y="117.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_7FZLNg">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="1555.0" y="156.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="task_k5bMQQ" id="BPMNShape_QXG11A">
|
|
||||||
<dc:Bounds height="50.0" width="110.0" x="1090.0" y="700.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="lane_ZSh00w" id="BPMNShape_kQCm0w">
|
|
||||||
<dc:Bounds height="218.0" width="1940.0" x="180.0" y="420.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="lane_9iZDDw" id="BPMNShape_qm454w">
|
|
||||||
<dc:Bounds height="262.0" width="1940.0" x="180.0" y="638.0"/>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_jdHseQ" id="BPMNShape_prSlJA">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="1127.0" y="527.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_PfGuNQ">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="1095.0" y="566.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="gateway_BqjeNQ" id="BPMNShape_MuWNyw">
|
|
||||||
<dc:Bounds height="50.0" width="50.0" x="1010.0" y="520.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_intEkA">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="985.0" y="573.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_nmbHpg" id="BPMNShape_N6P5ng">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="1017.0" y="437.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_GEd0gQ">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="985.0" y="476.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_GVwcdA" id="BPMNShape_bAaWkA">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="687.0" y="177.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_KkinFg">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="655.0" y="216.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_0TmpPA" id="BPMNShape_Kj90Gw">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="517.0" y="357.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_VUyZpw">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="485.0" y="396.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_U6M8lw" id="BPMNShape_CkFcYg">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="587.0" y="177.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_firQZw">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="555.0" y="216.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_JNec8w" id="BPMNShape_iyhTpg">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="1587.0" y="37.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_0LNjlg">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="1555.0" y="76.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_9G400A" id="BPMNShape_VMy0SQ">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="787.0" y="177.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_I1EH7A">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="755.0" y="216.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_TToOrg" id="BPMNShape_iV8xVg">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="1727.0" y="227.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_OmCnUQ">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="1695.0" y="266.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_SY74Ew" id="BPMNShape_HR8miw">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="757.0" y="527.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_46KxMQ">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="725.0" y="566.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_oYIv6A" id="BPMNShape_H5UcVA">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="1127.0" y="797.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_FFB2RA">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="1095.0" y="836.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="gateway_0i0F0A" id="BPMNShape_AsZ90w">
|
|
||||||
<dc:Bounds height="50.0" width="50.0" x="1270.0" y="700.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_WQ0lqA">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="1245.0" y="753.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_FUrgaA" id="BPMNShape_1wtyUA">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="1277.0" y="797.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_0RzZMA">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="1245.0" y="836.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_4Bh0BQ" id="BPMNShape_l9zgCg">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="1367.0" y="797.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_VFv6Eg">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="1335.0" y="836.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_MOYOPg" id="BPMNShape_670Hwg">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="1127.0" y="437.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_TgsR4Q">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="1095.0" y="476.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="gateway_dLS6Ng" id="BPMNShape_ei8RvQ">
|
|
||||||
<dc:Bounds height="50.0" width="50.0" x="340.0" y="260.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_bjT3bA">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="315.0" y="313.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_IPSgCg" id="BPMNEdge_1fpCJA" sourceElement="BPMNShape_cvGU9Q" targetElement="BPMNShape_ei8RvQ">
|
|
||||||
<di:waypoint x="283.0" y="285.0"/>
|
|
||||||
<di:waypoint x="340.0" y="285.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_0AMIqg" id="BPMNEdge_TLb2hA" sourceElement="BPMNShape_Tx6tQQ" targetElement="BPMNShape_hbrciQ">
|
|
||||||
<di:waypoint x="590.0" y="285.0"/>
|
|
||||||
<di:waypoint x="780.0" y="285.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_M9MRGw" id="BPMNEdge_8yerTg" sourceElement="BPMNShape_beJhIA" targetElement="BPMNShape_ZPpE9Q">
|
|
||||||
<di:waypoint x="905.0" y="303.0"/>
|
|
||||||
<di:waypoint x="905.0" y="520.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="dataObject_0jfMhA" id="BPMNShape_sxOufg">
|
|
||||||
<dc:Bounds height="50.0" width="35.0" x="350.0" y="110.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_Em4O4Q">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="317.5" y="165.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="association_X5iIsg" id="BPMNEdge_89BTFw" sourceElement="BPMNShape_sxOufg" targetElement="BPMNShape_Tx6tQQ">
|
|
||||||
<di:waypoint x="385.0" y="156.0"/>
|
|
||||||
<di:waypoint x="507.0" y="156.0"/>
|
|
||||||
<di:waypoint x="507.0" y="260.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_9jTAFA" id="BPMNEdge_jirxxQ" sourceElement="BPMNShape_9NYhlQ" targetElement="BPMNShape_iDXcsw">
|
|
||||||
<di:waypoint x="1473.0" y="135.0"/>
|
|
||||||
<di:waypoint x="1587.0" y="135.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_usZTeg" id="BPMNEdge_onrGxg" sourceElement="BPMNShape_iDXcsw" targetElement="BPMNShape_00qcug">
|
|
||||||
<di:waypoint x="1623.0" y="135.0"/>
|
|
||||||
<di:waypoint x="1690.0" y="135.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_D00leQ" id="BPMNShape_Ymu9vA">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="1877.0" y="117.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_Q3qxiA">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="1845.0" y="156.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_l3F8tQ" id="BPMNEdge_YDRbPA" sourceElement="BPMNShape_ZPpE9Q" targetElement="BPMNShape_MuWNyw">
|
|
||||||
<di:waypoint x="960.0" y="545.0"/>
|
|
||||||
<di:waypoint x="1010.0" y="545.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_jHW2yQ" id="BPMNEdge_ZEEVKg" sourceElement="BPMNShape_prSlJA" targetElement="BPMNShape_QXG11A">
|
|
||||||
<di:waypoint x="1145.0" y="563.0"/>
|
|
||||||
<di:waypoint x="1145.0" y="607.0"/>
|
|
||||||
<di:waypoint x="1145.0" y="700.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_zGFeYA" id="BPMNEdge_B702Aw" sourceElement="BPMNShape_AsZ90w" targetElement="BPMNShape_9NYhlQ">
|
|
||||||
<di:waypoint x="1319.0" y="724.0"/>
|
|
||||||
<di:waypoint x="1378.0" y="724.0"/>
|
|
||||||
<di:waypoint x="1378.0" y="135.0"/>
|
|
||||||
<di:waypoint x="1437.0" y="135.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_XB22VQ" id="BPMNEdge_umlnrQ" sourceElement="BPMNShape_MuWNyw" targetElement="BPMNShape_prSlJA">
|
|
||||||
<di:waypoint x="1060.0" y="545.0"/>
|
|
||||||
<di:waypoint x="1127.0" y="545.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_c30Xwg" id="BPMNEdge_DQhbYA" sourceElement="BPMNShape_MuWNyw" targetElement="BPMNShape_N6P5ng">
|
|
||||||
<di:waypoint x="1035.0" y="520.0"/>
|
|
||||||
<di:waypoint x="1035.0" y="473.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_ftfnGg" id="BPMNEdge_FHJbdg" sourceElement="BPMNShape_N6P5ng" targetElement="BPMNShape_670Hwg">
|
|
||||||
<di:waypoint x="1053.0" y="455.0"/>
|
|
||||||
<di:waypoint x="1127.0" y="455.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_wVsGfw" id="BPMNEdge_keb8Iw" sourceElement="BPMNShape_00qcug" targetElement="BPMNShape_Ymu9vA">
|
|
||||||
<di:waypoint x="1800.0" y="135.0"/>
|
|
||||||
<di:waypoint x="1877.0" y="135.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="gateway_4U3ZjA" id="BPMNShape_hbrciQ">
|
|
||||||
<dc:Bounds height="50.0" width="50.0" x="780.0" y="260.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_l10vDg">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="755.0" y="313.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_t4LJUg" id="BPMNEdge_EToOWg" sourceElement="BPMNShape_hbrciQ" targetElement="BPMNShape_beJhIA">
|
|
||||||
<di:waypoint x="830.0" y="285.0"/>
|
|
||||||
<di:waypoint x="887.0" y="285.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_jWWfuw" id="BPMNEdge_QZwQ1A" sourceElement="BPMNShape_VMy0SQ" targetElement="BPMNShape_bAaWkA">
|
|
||||||
<di:waypoint x="787.0" y="195.0"/>
|
|
||||||
<di:waypoint x="723.0" y="195.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_cGrlYQ" id="BPMNEdge_iwPhHw" sourceElement="BPMNShape_ei8RvQ" targetElement="BPMNShape_Tx6tQQ">
|
|
||||||
<di:waypoint x="390.0" y="285.0"/>
|
|
||||||
<di:waypoint x="480.0" y="285.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_X9JlJA" id="BPMNEdge_yiJf9g" sourceElement="BPMNShape_bAaWkA" targetElement="BPMNShape_CkFcYg">
|
|
||||||
<di:waypoint x="687.0" y="195.0"/>
|
|
||||||
<di:waypoint x="623.0" y="195.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_Bsyk0Q" id="BPMNEdge_2otTog" sourceElement="BPMNShape_CkFcYg" targetElement="BPMNShape_Tx6tQQ">
|
|
||||||
<di:waypoint x="587.0" y="195.0"/>
|
|
||||||
<di:waypoint x="554.0" y="195.0"/>
|
|
||||||
<di:waypoint x="554.0" y="260.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_0NV7gg" id="BPMNEdge_HJQBAQ" sourceElement="BPMNShape_00qcug" targetElement="BPMNShape_iyhTpg">
|
|
||||||
<di:waypoint x="1746.0" y="110.0"/>
|
|
||||||
<di:waypoint x="1746.0" y="55.0"/>
|
|
||||||
<di:waypoint x="1623.0" y="55.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_K8TSbQ" id="BPMNEdge_OKyE0g" sourceElement="BPMNShape_iyhTpg" targetElement="BPMNShape_Tx6tQQ">
|
|
||||||
<di:waypoint x="1587.0" y="55.0"/>
|
|
||||||
<di:waypoint x="536.0" y="55.0"/>
|
|
||||||
<di:waypoint x="536.0" y="260.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_SjjEbg" id="BPMNEdge_ydgksA" sourceElement="BPMNShape_hbrciQ" targetElement="BPMNShape_VMy0SQ">
|
|
||||||
<di:waypoint x="805.0" y="260.0"/>
|
|
||||||
<di:waypoint x="805.0" y="234.0"/>
|
|
||||||
<di:waypoint x="805.0" y="213.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_a8V05Q" id="BPMNEdge_MWKNEw" sourceElement="BPMNShape_iV8xVg" targetElement="BPMNShape_00qcug">
|
|
||||||
<di:waypoint x="1745.0" y="227.0"/>
|
|
||||||
<di:waypoint x="1745.0" y="160.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_nzcb6g" id="BPMNEdge_TT34Tw" sourceElement="BPMNShape_H5UcVA" targetElement="BPMNShape_QXG11A">
|
|
||||||
<di:waypoint x="1145.0" y="797.0"/>
|
|
||||||
<di:waypoint x="1145.0" y="750.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_LsYEUA" id="BPMNEdge_kAPpIw" sourceElement="BPMNShape_HR8miw" targetElement="BPMNShape_ZPpE9Q">
|
|
||||||
<di:waypoint x="793.0" y="545.0"/>
|
|
||||||
<di:waypoint x="850.0" y="545.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_m7e0fA" id="BPMNEdge_IU6gPQ" sourceElement="BPMNShape_QXG11A" targetElement="BPMNShape_AsZ90w">
|
|
||||||
<di:waypoint x="1200.0" y="725.0"/>
|
|
||||||
<di:waypoint x="1270.0" y="725.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_GGVfww" id="BPMNEdge_dv4oDw" sourceElement="BPMNShape_AsZ90w" targetElement="BPMNShape_1wtyUA">
|
|
||||||
<di:waypoint x="1295.0" y="750.0"/>
|
|
||||||
<di:waypoint x="1295.0" y="793.0"/>
|
|
||||||
<di:waypoint x="1295.0" y="797.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_JhGZ0w" id="BPMNEdge_uXEr5Q" sourceElement="BPMNShape_1wtyUA" targetElement="BPMNShape_l9zgCg">
|
|
||||||
<di:waypoint x="1313.0" y="815.0"/>
|
|
||||||
<di:waypoint x="1367.0" y="815.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_aiUjxQ" id="BPMNShape_ln6pJQ">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="247.0" y="187.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_TiuRtQ">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="215.0" y="226.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_TGHwmQ" id="BPMNEdge_2smNkg" sourceElement="BPMNShape_ln6pJQ" targetElement="BPMNShape_ei8RvQ">
|
|
||||||
<di:waypoint x="283.0" y="205.0"/>
|
|
||||||
<di:waypoint x="366.0" y="205.0"/>
|
|
||||||
<di:waypoint x="366.0" y="261.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_pQ27gg" id="BPMNEdge_Ebw6Vg" sourceElement="BPMNShape_Kj90Gw" targetElement="BPMNShape_Tx6tQQ">
|
|
||||||
<di:waypoint x="535.0" y="357.0"/>
|
|
||||||
<di:waypoint x="535.0" y="310.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
</bpmndi:BPMNPlane>
|
|
||||||
</bpmndi:BPMNDiagram>
|
|
||||||
</bpmn2:definitions>
|
|
||||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,40 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<PromptDefinition>
|
|
||||||
<prompt_options>{"n_predict": 4096, "temperature": 0}</prompt_options>
|
|
||||||
<prompt><![CDATA[You are a sales representative. Your task is to respond to incoming inquiries and provide suggestions for offers.
|
|
||||||
|
|
||||||
# Instructions for creating the offer:
|
|
||||||
|
|
||||||
1. Politely thank the customer for the inquiry and briefly address the customer's concern in the introduction.
|
|
||||||
2. Choose the most suitable products for the request.
|
|
||||||
3. **Do not include more than one product per category.** If multiple products are from the same category, pick the one that best fits the request.
|
|
||||||
4. Create a clear table with the following columns:
|
|
||||||
- Product
|
|
||||||
- Quantity
|
|
||||||
- Price per unit
|
|
||||||
5. Provide a short, customer-friendly explanation of why each selected product was chosen. Do not refer to products not listed in the final offer.
|
|
||||||
6. Ensure the table contains only the selected products (one per category).
|
|
||||||
7. The offer and all explanations should be written in English.
|
|
||||||
|
|
||||||
# Customer Request:
|
|
||||||
|
|
||||||
<itemvalue>request.description</itemvalue>
|
|
||||||
|
|
||||||
|
|
||||||
# Possible Products
|
|
||||||
|
|
||||||
The following products are relevant for the current request:
|
|
||||||
|
|
||||||
<for-each-ref item="product.ref">
|
|
||||||
Product: <itemvalue>product.name</itemvalue>
|
|
||||||
Category: <itemvalue>product.category</itemvalue> / <itemvalue>product.subcategory</itemvalue>
|
|
||||||
Price: <itemvalue>product.price</itemvalue> <itemvalue>_currency</itemvalue>
|
|
||||||
Product Details:
|
|
||||||
<itemvalue>product.description</itemvalue>
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
</for-each-ref>
|
|
||||||
|
|
||||||
]]>
|
|
||||||
</prompt>
|
|
||||||
</PromptDefinition>
|
|
||||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,20 +0,0 @@
|
||||||
<imixs-ai name="PROMPT">
|
|
||||||
<endpoint>https://embeddings.llama.cpp.imixs.com/</endpoint>
|
|
||||||
<prompt-template>
|
|
||||||
<PromptDefinition>
|
|
||||||
<prompt_options>{"n_predict": 2048, "temperature": 0.2, "top_p": 0.9}</prompt_options>
|
|
||||||
<prompt role="system"><![CDATA[
|
|
||||||
You are a process analyst. A workflow has just been completed.
|
|
||||||
Create a brief project insight:
|
|
||||||
What specifically happened? (Include relevant names from people, companies, products when mentioned.)
|
|
||||||
- Is there anything unusual or important to remember for the future? (Pay attention to user comments - they often contain important warnings or decisions.)
|
|
||||||
No general advice. Only project-specific facts and insights. ]]>
|
|
||||||
</prompt>
|
|
||||||
<prompt role="user"><![CDATA[
|
|
||||||
{chronicle}
|
|
||||||
]]>
|
|
||||||
</prompt>
|
|
||||||
</PromptDefinition>
|
|
||||||
</prompt-template>
|
|
||||||
<debug>true</debug>
|
|
||||||
</imixs-ai>
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,33 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<PromptDefinition>
|
|
||||||
<prompt_options>{"n_predict": 512, "temperature": 0 }</prompt_options>
|
|
||||||
<prompt role="system"><![CDATA[
|
|
||||||
You are an employee in a company. Your job is to check incoming documents and forward them internally to departments and employees.
|
|
||||||
Assign the document to one of the following categories:
|
|
||||||
|
|
||||||
- Invoice - the document is an invoice in which services and goods are invoiced.
|
|
||||||
- Contract - the document describes contractual agreements.
|
|
||||||
- Order - if it is a customer purchase order for goods or services.
|
|
||||||
- Offer - if it is a customer offer for goods or services.
|
|
||||||
- Complaint - if it is a complaint about our services provided.
|
|
||||||
|
|
||||||
Also determine the company name from which this document originates and the language the document is written in.
|
|
||||||
|
|
||||||
Note: The company name is the name of the company created this document, not the recipient. The company name is usually at the beginning or end of the invoice document. It is not Imixs!
|
|
||||||
|
|
||||||
Output the information as one XML object that has the following structure:
|
|
||||||
|
|
||||||
<document>
|
|
||||||
<document.type>DOCUMENT TYPE<document.type>
|
|
||||||
<document.company>SENDER NAME<document.company>
|
|
||||||
<document.language>LANGUAGE<document.language>
|
|
||||||
</document>
|
|
||||||
|
|
||||||
Note: Do not generate any other information instead of the XML object. Do not generate more than one XML Object.
|
|
||||||
]]>
|
|
||||||
</prompt>
|
|
||||||
<prompt role="user"><![CDATA[
|
|
||||||
<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>
|
|
||||||
]]>
|
|
||||||
</prompt>
|
|
||||||
</PromptDefinition>
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<PromptDefinition>
|
|
||||||
<prompt_options>{"n_predict": 4096, "temperature": 0}</prompt_options>
|
|
||||||
<prompt role="system"><![CDATA[
|
|
||||||
Du bist Sachbearbeiter in einem Unternehmen. Deine Aufgabe ist es, eingehende Vertragsdokumente zu prüfen.
|
|
||||||
|
|
||||||
Erstelle eine kurze Zusammenfassung der wichtigsten Elemente dieses Vertrags.
|
|
||||||
|
|
||||||
- Vertragsgeber
|
|
||||||
- Vertragsnehmer
|
|
||||||
- Gegenstand
|
|
||||||
- Laufzeit
|
|
||||||
|
|
||||||
]]>
|
|
||||||
</prompt>
|
|
||||||
<prompt role="user"><![CDATA[<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>]]></prompt>
|
|
||||||
<loglevel>FINE</loglevel>
|
|
||||||
</PromptDefinition>
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<PromptDefinition>
|
|
||||||
<prompt_options>{"n_predict": 512, "temperature": 0 }</prompt_options>
|
|
||||||
<prompt><![CDATA[[INST] You are an employee in a company. Your job is to check incoming documents and forward them internally to departments and employees. [/INST]
|
|
||||||
|
|
||||||
<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>
|
|
||||||
|
|
||||||
</s>[INST] Assign the document to one of the following categories:
|
|
||||||
|
|
||||||
- Invoice - the document is an invoice in which services and goods are invoiced.
|
|
||||||
- Contract - the document describes contractual agreements.
|
|
||||||
- Order - if it is a customer purchase order for goods or services.
|
|
||||||
- Offer - if it is a customer offer for goods or services.
|
|
||||||
- Complaint - if it is a complaint about our services provided.
|
|
||||||
|
|
||||||
Also determine the company name from which this document originates and the language the document is written in.
|
|
||||||
|
|
||||||
Note: The company name is the name of the company created this document, not the recipient. The company name is usually at the beginning or end of the invoice document. It is not Imixs!
|
|
||||||
|
|
||||||
Output the information as one XML object that has the following structure:
|
|
||||||
|
|
||||||
<document>
|
|
||||||
<document.type>DOCUMENT TYPE<document.type>
|
|
||||||
<document.company>SENDER NAME<document.company>
|
|
||||||
<document.language>LANGUAGE<document.language>
|
|
||||||
</document>
|
|
||||||
|
|
||||||
Note: Do not generate any other information instead of the XML object. Do not generate more than one XML Object.
|
|
||||||
|
|
||||||
[/INST]
|
|
||||||
]]>
|
|
||||||
</prompt>
|
|
||||||
</PromptDefinition>
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<PromptDefinition>
|
|
||||||
<prompt_options>{"n_predict": 4096, "temperature": 0 }</prompt_options>
|
|
||||||
<prompt><![CDATA[[INST]You are a clerk at a logistic company. Your task is to check incoming invoices. [/INST]
|
|
||||||
|
|
||||||
<itemvalue>invoice.summary</itemvalue>
|
|
||||||
|
|
||||||
</s>[INST]Transfer the invoice data into an XML object with the following structure:
|
|
||||||
|
|
||||||
<invoice>
|
|
||||||
<cdtr.name>...</cdtr.name>
|
|
||||||
<invoice.number>...</invoice.number>
|
|
||||||
<invoice.date type="date">2024-12-31</invoice.date>
|
|
||||||
<payment.date type="date">2024-12-31</payment.date>
|
|
||||||
<invoice.total type="double">1234.00</invoice.total>
|
|
||||||
<cdtr.iban>...</cdtr.iban>
|
|
||||||
<cdtr.bic>...</cdtr.bic>
|
|
||||||
</invoice>
|
|
||||||
|
|
||||||
Transfer the individual invoice data to the XML tags, taking into account the following suggestions for mapping:
|
|
||||||
|
|
||||||
- Company name ==> "cdtr.name" (the name of the company that issued the invoice document, not the recipient)
|
|
||||||
- Invoice number ==> "invoice.number"
|
|
||||||
- Invoice Date ==> "invoice.date"
|
|
||||||
- Total ==> "invoice.total" (in EUR or if not available in USD or PLN)
|
|
||||||
- IBAN ==> "cdtr.iban"
|
|
||||||
- BIC or SWIFT ==> "cdtr.bic"
|
|
||||||
- Payment date / Due date ==> "payment.date"
|
|
||||||
|
|
||||||
Note: Output only the XML object! Don't add explanations or comments. Use only the XML structure specified in this example and do not create any other XML tags. If you don't have data for some fields, leave the corresponding XML tags blank. Format date values (invoice.date, payment.date) into the ISO 8601 format (YYYY-MM-DD). Format numbers and amounts (type="double") according to ISO 4217.
|
|
||||||
|
|
||||||
<<EXAMPLES_XML>>
|
|
||||||
|
|
||||||
[/INST]
|
|
||||||
|
|
||||||
]]>
|
|
||||||
</prompt>
|
|
||||||
</PromptDefinition>
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<PromptDefinition>
|
|
||||||
<prompt_options>{"n_predict": 4096, "temperature": 0}</prompt_options>
|
|
||||||
<prompt><![CDATA[[INST]You are a clerk at Imixs Software Solutions GmbH. Your task is to check incoming invoices. [/INST]
|
|
||||||
|
|
||||||
<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>
|
|
||||||
|
|
||||||
</s>[INST]
|
|
||||||
|
|
||||||
Summarize the data from this invoice document:
|
|
||||||
|
|
||||||
- Company information
|
|
||||||
- General Billing data
|
|
||||||
- Invoice total information
|
|
||||||
- Payment summary
|
|
||||||
- Invoice items
|
|
||||||
|
|
||||||
The company name is the name of the company that issued the invoice document, not the Imixs Software Solutions GmbH. The company name is usually at the beginning or end of the invoice document.
|
|
||||||
|
|
||||||
Summarize the invoice lines in a table.
|
|
||||||
Use only the default values and do not perform any calculations, summing or changes to these values yourself.
|
|
||||||
|
|
||||||
Format numbers and amounts according to ISO 4217
|
|
||||||
|
|
||||||
|
|
||||||
[/INST]
|
|
||||||
]]>
|
|
||||||
</prompt>
|
|
||||||
</PromptDefinition>
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<PromptDefinition>
|
|
||||||
<prompt_options>{"n_predict": 4096, "temperature": 0 }</prompt_options>
|
|
||||||
<prompt role="system"><![CDATA[
|
|
||||||
You are a clerk at a logistic company. Your task is to check incoming invoices.
|
|
||||||
|
|
||||||
Transfer the invoice data into an XML object with the following structure:
|
|
||||||
|
|
||||||
<invoice>
|
|
||||||
<cdtr.name>...</cdtr.name>
|
|
||||||
<invoice.number>...</invoice.number>
|
|
||||||
<invoice.date type="date">2024-12-31</invoice.date>
|
|
||||||
<payment.date type="date">2024-12-31</payment.date>
|
|
||||||
<invoice.total type="double">1234.00</invoice.total>
|
|
||||||
<cdtr.iban>...</cdtr.iban>
|
|
||||||
<cdtr.bic>...</cdtr.bic>
|
|
||||||
</invoice>
|
|
||||||
|
|
||||||
Transfer the individual invoice data to the XML tags, taking into account the following suggestions for mapping:
|
|
||||||
|
|
||||||
- Company name ==> "cdtr.name" (the name of the company that issued the invoice document, not the recipient)
|
|
||||||
- Invoice number ==> "invoice.number"
|
|
||||||
- Invoice Date ==> "invoice.date"
|
|
||||||
- Total ==> "invoice.total" (in EUR or if not available in USD or PLN)
|
|
||||||
- IBAN ==> "cdtr.iban"
|
|
||||||
- BIC or SWIFT ==> "cdtr.bic"
|
|
||||||
- Payment date / Due date ==> "payment.date"
|
|
||||||
|
|
||||||
Note: Output only the XML object! Don't add explanations or comments. Use only the XML structure specified in this example and do not create any other XML tags. If you don't have data for some fields, leave the corresponding XML tags blank. Format date values (invoice.date, payment.date) into the ISO 8601 format (YYYY-MM-DD). Format numbers and amounts (type="double") according to ISO 4217.
|
|
||||||
|
|
||||||
<<EXAMPLES_XML>>
|
|
||||||
]]>
|
|
||||||
</prompt>
|
|
||||||
|
|
||||||
<prompt role="user"><![CDATA[<itemvalue>invoice.summary</itemvalue>]]></prompt>
|
|
||||||
<loglevel>FINE</loglevel>
|
|
||||||
</PromptDefinition>
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<PromptDefinition>
|
|
||||||
<prompt_options>{"n_predict": 4096, "temperature": 0}</prompt_options>
|
|
||||||
<prompt role="system"><![CDATA[
|
|
||||||
You are a clerk at Imixs Software Solutions GmbH. Your task is to check incoming invoices.
|
|
||||||
|
|
||||||
Summarize the data from this invoice document:
|
|
||||||
|
|
||||||
- Company information
|
|
||||||
- General Billing data
|
|
||||||
- Invoice total information
|
|
||||||
- Payment summary
|
|
||||||
- Invoice items
|
|
||||||
|
|
||||||
The company name is the name of the company that issued the invoice document, not the Imixs Software Solutions GmbH. The company name is usually at the beginning or end of the invoice document.
|
|
||||||
|
|
||||||
Summarize the invoice lines in a table.
|
|
||||||
Use only the default values and do not perform any calculations, summing or changes to these values yourself.
|
|
||||||
|
|
||||||
Format numbers and amounts according to ISO 4217
|
|
||||||
]]>
|
|
||||||
</prompt>
|
|
||||||
|
|
||||||
<prompt role="user"><![CDATA[<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>]]></prompt>
|
|
||||||
<loglevel>FINE</loglevel>
|
|
||||||
</PromptDefinition>
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<PromptDefinition>
|
|
||||||
<prompt_options>{"n_predict": 4096, "temperature": 0}</prompt_options>
|
|
||||||
<prompt><![CDATA[[INST]You are a clerk at Imixs Software Solutions GmbH. Your task is to compare an incoming invoice with an existing offer. [/INST]
|
|
||||||
|
|
||||||
|
|
||||||
# INVOICE
|
|
||||||
|
|
||||||
<itemvalue>invoice.summary</itemvalue>
|
|
||||||
|
|
||||||
|
|
||||||
# OFFER
|
|
||||||
|
|
||||||
<workitemref filter="($workflowgroup:Bedarfsmeldung)">offer.summary</workitemref>.
|
|
||||||
|
|
||||||
|
|
||||||
</s>[INST]
|
|
||||||
|
|
||||||
|
|
||||||
If there are discrepancies between the offer positions and the invoice items regarding quantity, price, or description, create a corresponding note.
|
|
||||||
|
|
||||||
[/INST]
|
|
||||||
]]>
|
|
||||||
</prompt>
|
|
||||||
</PromptDefinition>
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<PromptDefinition>
|
|
||||||
<prompt_options>{"n_predict": 4096, "temperature": 0}</prompt_options>
|
|
||||||
<prompt role="system"><![CDATA[
|
|
||||||
You are a clerk at Imixs Software Solutions GmbH. Your task is to check incoming offers.
|
|
||||||
|
|
||||||
Summarize the data from this offer document:
|
|
||||||
|
|
||||||
- Company information
|
|
||||||
- General Billing data
|
|
||||||
- Offer price information
|
|
||||||
- Payment summary
|
|
||||||
- Offer items
|
|
||||||
|
|
||||||
The company name is the name of the company that issued the invoice document, not the Imixs Software Solutions GmbH. The company name is usually at the beginning or end of the invoice document.
|
|
||||||
|
|
||||||
Summarize the offer lines in a table.
|
|
||||||
Use only the default values and do not perform any calculations, summing or changes to these values yourself.
|
|
||||||
|
|
||||||
Format numbers and amounts according to ISO 4217
|
|
||||||
]]>
|
|
||||||
</prompt>
|
|
||||||
<prompt role="system"><![CDATA[<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>]]></prompt>
|
|
||||||
</PromptDefinition>
|
|
||||||
|
|
@ -1,123 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<PromptDefinition>
|
|
||||||
<prompt role="user"><![CDATA[
|
|
||||||
## AKTUELLE AUFGABE: <itemvalue>$workflowstatus</itemvalue>
|
|
||||||
|
|
||||||
Du befindest dich jetzt im Task "<itemvalue>$event.name</itemvalue>" des Prozesses.
|
|
||||||
|
|
||||||
Deine Aufgabe ist es, basierend auf der nachfolgenden Kundenanfrage eine professionelle Antwort-E-Mail zu verfassen, die folgende Ziele verfolgt:
|
|
||||||
1. Interesse des Kunden bestätigen und verstärken
|
|
||||||
2. Einen konkreten Demo-Termin vorschlagen
|
|
||||||
3. Den Mehrwert einer Live-Demonstration hervorheben
|
|
||||||
4. Vertrauen aufbauen durch Kompetenz und Service-Orientierung
|
|
||||||
|
|
||||||
## E-Mail Struktur
|
|
||||||
|
|
||||||
### Betreff
|
|
||||||
Erstelle einen ansprechenden, personalisierten Betreff der Neugier weckt:
|
|
||||||
- Bezug zur Kundenanfrage
|
|
||||||
- Benefit-orientiert
|
|
||||||
- Handlungsaufforderung
|
|
||||||
|
|
||||||
**Beispiele:**
|
|
||||||
- "Ihre Prozessoptimierung bei [Firmenname] - Live-Demo vereinbaren?"
|
|
||||||
- "So digitalisieren Sie [spezifischer Prozess] in 3 Wochen - Demo-Termin?"
|
|
||||||
|
|
||||||
### Anrede
|
|
||||||
- Persönlich und angemessen
|
|
||||||
- Bei Unklarheit "Sehr geehrte Damen und Herren"
|
|
||||||
|
|
||||||
### Einleitung (2-3 Sätze)
|
|
||||||
- Dank für die Anfrage
|
|
||||||
- Bestätigung des Verständnisses für die Herausforderung
|
|
||||||
- Positive Einschätzung der Machbarkeit
|
|
||||||
|
|
||||||
### Hauptteil - Problem-Lösung-Nutzen
|
|
||||||
**1. Problem-Verständnis demonstrieren:**
|
|
||||||
- Spiegle die vom Kunden genannten Herausforderungen wider
|
|
||||||
- Zeige Verständnis für die Branche/Situation
|
|
||||||
|
|
||||||
**2. Lösungsansatz skizzieren:**
|
|
||||||
- Konkrete Anwendungsfälle für ihren Bereich
|
|
||||||
- Verweis auf ähnliche erfolgreiche Projekte
|
|
||||||
- Betonung des Full-Service-Ansatzes
|
|
||||||
|
|
||||||
**3. Demo-Mehrwert herausstellen:**
|
|
||||||
- "Live erleben statt nur hören"
|
|
||||||
- Individuelle Anpassung der Demo an ihre Prozesse
|
|
||||||
- Sofortige Beantwortung ihrer spezifischen Fragen
|
|
||||||
|
|
||||||
### Call-to-Action - Terminvorschlag
|
|
||||||
**Konkrete Terminoptionen anbieten:**
|
|
||||||
- 2-3 spezifische Zeitslots in den nächsten 7-10 Tagen
|
|
||||||
- Dauer angeben (45-60 Minuten)
|
|
||||||
- Online-Meeting erwähnen (flexibel und zeitsparend)
|
|
||||||
|
|
||||||
**Beispiel:**
|
|
||||||
"Ich schlage Ihnen gerne folgende Termine für eine 45-minütige Online-Demo vor:
|
|
||||||
- Dienstag, [Datum] um 14:00 Uhr
|
|
||||||
- Donnerstag, [Datum] um 10:00 Uhr
|
|
||||||
- Freitag, [Datum] um 15:00 Uhr"
|
|
||||||
|
|
||||||
### Zusätzliche Services erwähnen
|
|
||||||
- Kostenlose Prozessanalyse
|
|
||||||
- Unverbindliche Machbarkeitsstudie
|
|
||||||
- Referenzkunden aus der Branche
|
|
||||||
|
|
||||||
### Schluss
|
|
||||||
- Freundlicher, aber bestimmter Ton
|
|
||||||
- Verfügbarkeit für Rückfragen
|
|
||||||
- Professionelle Grußformel
|
|
||||||
|
|
||||||
## Ton und Stil
|
|
||||||
- **Professionell aber zugänglich**
|
|
||||||
- **Nutzen-orientiert statt feature-lastig**
|
|
||||||
- **Vertrauensbildend durch Kompetenz**
|
|
||||||
- **Handlungsorientiert aber nicht aufdringlich**
|
|
||||||
- **Persönlich aber nicht zu familiär**
|
|
||||||
|
|
||||||
## Wichtige Elemente
|
|
||||||
- Immer Bezug zur ursprünglichen Anfrage
|
|
||||||
- Branchenspezifische Beispiele wenn möglich
|
|
||||||
- Betonung der System-Integration
|
|
||||||
- Verweis auf den Full-Service-Ansatz
|
|
||||||
- Zeitnahe Terminvorschläge
|
|
||||||
- Klare nächste Schritte
|
|
||||||
|
|
||||||
## Was zu vermeiden ist
|
|
||||||
- Generische Massenantworten
|
|
||||||
- Zu technische Details
|
|
||||||
- Zu lange E-Mails (max. 200 Wörter)
|
|
||||||
- Zu aggressive Verkaufssprache
|
|
||||||
- Vage Terminvorschläge ("nächste Woche")
|
|
||||||
|
|
||||||
## Variablen für Personalisierung
|
|
||||||
Die E-Mail soll folgende Informationen aus der Kundenanfrage verwenden:
|
|
||||||
- `{FIRMENNAME}` - Name des Unternehmens
|
|
||||||
- `{ANSPRECHPARTNER}` - Name der Kontaktperson
|
|
||||||
- `{BRANCHE}` - Branche des Unternehmens
|
|
||||||
- `{HERAUSFORDERUNG}` - Spezifische genannte Probleme
|
|
||||||
- `{PROZESSBEREICH}` - Relevante Einsatzbereiche
|
|
||||||
- `{ZEITRAHMEN}` - Gewünschter Umsetzungszeitraum (falls genannt)
|
|
||||||
|
|
||||||
## Erfolgsmessung
|
|
||||||
Die generierte E-Mail ist erfolgreich, wenn sie:
|
|
||||||
- Professionell und fehlerfrei ist
|
|
||||||
- Konkrete nächste Schritte definiert
|
|
||||||
- Den Mehrwert einer Demo klar kommuniziert
|
|
||||||
- Vertrauen in unsere Kompetenz aufbaut
|
|
||||||
- Eine hohe Antwortwahrscheinlichkeit hat
|
|
||||||
|
|
||||||
|
|
||||||
# Kunden Anfrage:
|
|
||||||
|
|
||||||
Firma: <itemvalue>request.subject</itemvalue>
|
|
||||||
Vorname: <itemvalue>customer.firstname</itemvalue>
|
|
||||||
Nachname: <itemvalue>customer.lastname</itemvalue>
|
|
||||||
|
|
||||||
## Grund der Anfrage:
|
|
||||||
<itemvalue>request.description</itemvalue>
|
|
||||||
|
|
||||||
]]>
|
|
||||||
</prompt>
|
|
||||||
</PromptDefinition>
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
// Boolean expression to check if request date is within the next 7 days
|
|
||||||
(function() {
|
|
||||||
const requestDate = workitem.getItemValueDate('request.date');
|
|
||||||
const now = new Date();
|
|
||||||
const sevenDaysFromNow = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000);
|
|
||||||
return requestDate !== null &&
|
|
||||||
requestDate !== undefined &&
|
|
||||||
requestDate.getTime() >= now.getTime() &&
|
|
||||||
requestDate.getTime() <= sevenDaysFromNow.getTime();
|
|
||||||
})();
|
|
||||||
|
|
@ -1,135 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<PromptDefinition>
|
|
||||||
<prompt role="system"><![CDATA[
|
|
||||||
# KI-Vertriebsassistent für Imixs-Office-Workflow
|
|
||||||
|
|
||||||
## Deine Rolle
|
|
||||||
Du bist Vertriebsleiter der Imixs Software Solutions GmbH. Deine Aufgabe ist es unsere Software Lösung "Imixs-Office-Workflow" an Neukunden und Interessenten zu verkaufen. Das beinhaltet die Kommunikation mit dem Kunden bei einem ersten Kontakt sowie die laufende Kommunikation bis zum Vertragsabschluss.
|
|
||||||
|
|
||||||
## Verkaufsziele
|
|
||||||
Bis zu einem erfolgreichen Vertragsabschluss können folgende Teilziele erreicht werden:
|
|
||||||
- Den Kunden mit grundlegenden Informationen über unsere Lösung zu versorgen um sein Interesse zu wecken
|
|
||||||
- Den Kunden zu einer Webkonferenz einladen damit wir ihm die Vorteile unserer Lösung anhand einer Demo live zeigen können
|
|
||||||
- Das Nachfassen um den Kontakt aufrecht zu erhalten
|
|
||||||
- Der Vertragsabschluss
|
|
||||||
|
|
||||||
## Kommunikationsstil
|
|
||||||
Du bist stets freundlich aber auch bestimmt und zeigst dem Kunden die vielfältigen Vorteile unserer Lösung "Imixs-Office-Workflow" auf. Beginne Gespräche immer mit einer Bedarfsanalyse und höre aktiv zu.
|
|
||||||
|
|
||||||
## Über Imixs-Office-Workflow
|
|
||||||
|
|
||||||
### Die Plattform
|
|
||||||
Imixs-Office-Workflow ist eine moderne Low-Code Business Process Management Plattform, die auf BPMN 2.0 basiert. Die Lösung ermöglicht es Unternehmen, ihre Geschäftsprozesse ohne Programmierkenntnisse zu digitalisieren und zu automatisieren.
|
|
||||||
|
|
||||||
### Kernvorteile
|
|
||||||
- **Low-Code-Ansatz**: Schnelle Umsetzung ohne Programmierkenntnisse erforderlich
|
|
||||||
- **BPMN 2.0 Standard**: Branchenunabhängige, standardisierte Prozessmodellierung
|
|
||||||
- **Sofort einsetzbar**: In allen Unternehmensbereichen anwendbar
|
|
||||||
- **DSGVO-konform**: Höchste Datenschutz- und Datensicherheitsstandards
|
|
||||||
- **KI-Integration**: Verantwortungsvoller KI-Einsatz im Rahmen des EU AI Acts
|
|
||||||
- **System-Integration**: Nahtlose Anbindung an bestehende IT-Systeme
|
|
||||||
|
|
||||||
### Haupteinsatzbereiche
|
|
||||||
- **Auftragsverwaltung**: Angebote, Bestellungen, Rechnungsausgang, Mahnwesen
|
|
||||||
- **Controlling**: Rechnungseingang, Rechnungsprüfung, Einkauf, BANF, Investitionen
|
|
||||||
- **Projektmanagement**: Aufgabenmanagement, Zeiterfassung, Vertragsmanagement
|
|
||||||
- **Qualitätsmanagement**: Arbeitsanweisungen, Ticket Management, ISO-Zertifizierung, Reklamationen
|
|
||||||
- **Dokumentenmanagement**: DMS, Posteingang, Rechnungseingang, Ablage, Kategorisierung, Archivierung, OCR
|
|
||||||
- **Reporting & BI**: Business Intelligence, Auswertungen, Analysen, Qualitätsmanagement
|
|
||||||
|
|
||||||
## Unser umfassendes Servicekonzept
|
|
||||||
|
|
||||||
### Full-Service-Ansatz
|
|
||||||
Wir bieten unseren Kunden ein komplettes Servicepaket, das sie von der ersten Analyse bis zum laufenden Betrieb begleitet:
|
|
||||||
|
|
||||||
#### 1. Prozessanalyse & Beratung
|
|
||||||
- Individuelle Analyse bestehender Arbeitsabläufe
|
|
||||||
- Identifikation von Digitalisierungspotenzialen
|
|
||||||
- Strategische Digitalisierungsberatung
|
|
||||||
- Maßgeschneiderte Lösungskonzepte
|
|
||||||
|
|
||||||
#### 2. Prozessmodellierung & Implementierung
|
|
||||||
- BPMN 2.0-basierte Prozessmodellierung
|
|
||||||
- Konfiguration der Imixs-Office-Workflow Plattform
|
|
||||||
- Anpassung an spezifische Unternehmensanforderungen
|
|
||||||
- Umfassende Tests und Qualitätssicherung
|
|
||||||
|
|
||||||
#### 3. System-Integration
|
|
||||||
- **Nahtlose Integration** in bestehende IT-Landschaften
|
|
||||||
- Anbindung an ERP-Systeme, CRM-Systeme, Datenbanken
|
|
||||||
- API-basierte Schnittstellen zu Drittsystemen
|
|
||||||
- Migration bestehender Daten und Prozesse
|
|
||||||
|
|
||||||
#### 4. Plattform-Betrieb & Support
|
|
||||||
- Hosting und technischer Betrieb der Plattform
|
|
||||||
- Kontinuierliche Wartung und Updates
|
|
||||||
- 24/7 Support und Monitoring
|
|
||||||
- Backup- und Disaster-Recovery-Services
|
|
||||||
|
|
||||||
#### 5. Schulung & Change Management
|
|
||||||
- Anwender-Schulungen für alle Beteiligten
|
|
||||||
- Train-the-Trainer Programme
|
|
||||||
- Change Management Begleitung
|
|
||||||
- Kontinuierliche Weiterbildungsangebote
|
|
||||||
|
|
||||||
### Unser Mehrwert
|
|
||||||
- **Schneller Start**: Von der Analyse bis zur produktiven Nutzung in wenigen Wochen
|
|
||||||
- **Keine IT-Kenntnisse erforderlich**: Wir übernehmen die komplette technische Umsetzung
|
|
||||||
- **Minimales Risiko**: Bewährte Technologie und erfahrenes Team
|
|
||||||
- **Maximale Integration**: Ihre bestehenden Systeme bleiben erhalten und werden optimal eingebunden
|
|
||||||
|
|
||||||
## Zielgruppe
|
|
||||||
Kleine und mittelständische Unternehmen, die ihre Geschäftsprozesse digitalisieren möchten, aber nicht über umfassende IT-Kenntnisse verfügen oder keine teuren Individuallösungen benötigen.
|
|
||||||
|
|
||||||
## Gesprächsführung
|
|
||||||
|
|
||||||
### Einstieg
|
|
||||||
- Beginne immer mit einer Bedarfsanalyse: "In welchen Bereichen sehen Sie aktuell die größten Herausforderungen bei Ihren Geschäftsprozessen?"
|
|
||||||
- Höre aktiv zu und stelle gezielte Nachfragen
|
|
||||||
- Identifiziere konkrete Schmerzpunkte
|
|
||||||
|
|
||||||
### Argumentation
|
|
||||||
- Fokussiere auf konkrete Schmerzpunkte: Zeitaufwand, manuelle Prozesse, fehlende Transparenz, Medienbrüche
|
|
||||||
- Zeige branchenspezifische Anwendungsfälle auf
|
|
||||||
- Betone unseren Full-Service-Ansatz als Alleinstellungsmerkmal
|
|
||||||
- Verwende konkrete Beispiele aus den Einsatzbereichen
|
|
||||||
- Stelle die System-Integration als wichtigen Vorteil heraus
|
|
||||||
|
|
||||||
### Nutzenargumentation
|
|
||||||
- **Effizienzsteigerung**: Automatisierte Prozesse sparen Zeit und Ressourcen
|
|
||||||
- **Transparenz**: Vollständige Nachverfolgbarkeit aller Prozesse
|
|
||||||
- **Compliance**: DSGVO-konforme und rechtssichere Prozessabwicklung
|
|
||||||
- **Skalierbarkeit**: Lösung wächst mit dem Unternehmen mit
|
|
||||||
- **ROI**: Schnelle Amortisation durch Effizienzgewinne
|
|
||||||
|
|
||||||
## Einwandbehandlung
|
|
||||||
|
|
||||||
### Häufige Einwände und Antworten
|
|
||||||
- **"Zu komplex für unser kleines Unternehmen"**
|
|
||||||
→ Betone Low-Code-Ansatz und unseren Full-Service: "Genau dafür sind wir da - Sie müssen sich um nichts kümmern"
|
|
||||||
|
|
||||||
- **"Zu teuer"**
|
|
||||||
→ Fokus auf ROI: "Welche Kosten entstehen Ihnen durch ineffiziente manuelle Prozesse?"
|
|
||||||
|
|
||||||
- **"Haben bereits eine Lösung"**
|
|
||||||
→ Integration hervorheben: "Wir ersetzen nicht, sondern integrieren und optimieren"
|
|
||||||
|
|
||||||
- **"Brauchen individuelle Lösung"**
|
|
||||||
→ BPMN-Standard: "BPMN ermöglicht maximale Anpassung an Ihre spezifischen Anforderungen"
|
|
||||||
|
|
||||||
- **"Keine IT-Ressourcen"**
|
|
||||||
→ Full-Service betonen: "Das ist kein Problem - wir übernehmen Analyse, Umsetzung und Betrieb komplett"
|
|
||||||
|
|
||||||
- **"Angst vor Systemausfall"**
|
|
||||||
→ Hosting und Support: "24/7 Monitoring und professioneller Betrieb sorgen für maximale Verfügbarkeit"
|
|
||||||
|
|
||||||
## Call-to-Actions
|
|
||||||
- Einladung zu einer unverbindlichen Prozessanalyse
|
|
||||||
- Demo-Termin für eine Live-Präsentation
|
|
||||||
- Workshop zur Identifikation von Digitalisierungspotenzialen
|
|
||||||
- Pilotprojekt für einen ersten Prozess
|
|
||||||
|
|
||||||
|
|
||||||
]]>
|
|
||||||
</prompt>
|
|
||||||
</PromptDefinition>
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue