op-listen udpate
This commit is contained in:
parent
633bcdd3d6
commit
61a7fa8399
5 changed files with 151 additions and 130 deletions
|
|
@ -84,7 +84,7 @@ public class MetricDebitorRestService {
|
||||||
@Path("/init")
|
@Path("/init")
|
||||||
@Produces({ MediaType.TEXT_PLAIN })
|
@Produces({ MediaType.TEXT_PLAIN })
|
||||||
public Response initMetrics() {
|
public Response initMetrics() {
|
||||||
Map<String, DbtrData> dbtrDataCache = new HashMap<String, DbtrData>();
|
Map<String, ItemCollection> metricCache = new HashMap<String, ItemCollection>();
|
||||||
long l = System.currentTimeMillis();
|
long l = System.currentTimeMillis();
|
||||||
logger.info("├── init metrics...");
|
logger.info("├── init metrics...");
|
||||||
try {
|
try {
|
||||||
|
|
@ -97,68 +97,73 @@ public class MetricDebitorRestService {
|
||||||
String spaceName = space.getItemValueString("space.name");
|
String spaceName = space.getItemValueString("space.name");
|
||||||
spaceNames.add(spaceName);
|
spaceNames.add(spaceName);
|
||||||
logger.info("│ ├── grouping invoices by debitor...");
|
logger.info("│ ├── grouping invoices by debitor...");
|
||||||
groupInvoicesByWeek(space.getUniqueID(), spaceName, dbtrDataCache);
|
groupInvoicesByWeek(space.getUniqueID(), spaceName, metricCache);
|
||||||
}
|
}
|
||||||
logger.info("│ ├── grouping invoices finished in " + (System.currentTimeMillis() - l) + "ms");
|
logger.info("│ ├── grouping invoices finished in " + (System.currentTimeMillis() - l) + "ms");
|
||||||
|
|
||||||
rebuildMetrics(dbtrDataCache);
|
rebuildMetrics(metricCache);
|
||||||
logger.info("├── init metrics completed in " + (System.currentTimeMillis() - l) + "ms");
|
logger.info("├── init metrics completed in " + (System.currentTimeMillis() - l) + "ms");
|
||||||
return Response.ok().entity("init metrics completed in " + (System.currentTimeMillis() - l) + "ms").build();
|
return Response.ok().entity("init metrics completed in " + (System.currentTimeMillis() - l) + "ms").build();
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
return Response.serverError()
|
return Response.serverError()
|
||||||
.entity("Failed to initialize metrics: " + e.getMessage())
|
.entity("Failed to initialize metrics: " + e.getMessage())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void rebuildMetrics(Map<String, DbtrData> dbtrDataCache) throws PluginException {
|
private void rebuildMetrics(Map<String, ItemCollection> metricCache) throws PluginException {
|
||||||
logger.info("│ ├── rebuild metrics...");
|
logger.info("│ ├── rebuild metrics...");
|
||||||
|
|
||||||
for (String dbtrNumber : dbtrDataCache.keySet()) {
|
for (String dbtrNumber : metricCache.keySet()) {
|
||||||
DbtrData dbtrData = dbtrDataCache.get(dbtrNumber);
|
ItemCollection metricData = metricCache.get(dbtrNumber);
|
||||||
String dbtrName = dbtrData.dbtrName;
|
// String dbtrName = metricData.getItemValueString("dbtr.name");
|
||||||
|
|
||||||
|
// ItemCollection metric = metricService.loadMetric(dbtrNumber, dbtrName);
|
||||||
|
// metric.setItemValue(MetricDebitorService.ITEM_TOTALS, metricData.totals);
|
||||||
|
documentService.save(metricData);
|
||||||
|
metricService.initMetric(metricData);
|
||||||
|
|
||||||
ItemCollection metric = metricService.loadMetric(dbtrNumber, dbtrName);
|
|
||||||
metric.setItemValue(MetricDebitorService.ITEM_SALDO, dbtrData.getTotal("EUR"));
|
|
||||||
documentService.save(metric);
|
|
||||||
metricService.initMetric(metric);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Diese Methode gruppiert eine Rechnungsliste nach debitoren
|
* Diese Methode gruppiert eine Rechnungsliste nach debitoren
|
||||||
*
|
*
|
||||||
* @param spaceID - Space Ref to select a list of invoices associated with
|
* @param spaceID - Space Ref to select a list of invoices associated with
|
||||||
* a
|
* a
|
||||||
* space
|
* space
|
||||||
* @param dbtrDataCache - a local cache storing all invoices by week
|
* @param metricCache - a local cache storing all invoices by week
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private void groupInvoicesByWeek(String spaceID, String spaceName,
|
private void groupInvoicesByWeek(String spaceID, String spaceName,
|
||||||
Map<String, DbtrData> dbtrDataCache) {
|
Map<String, ItemCollection> metricCache) {
|
||||||
|
|
||||||
logger.info("│ │ ├── group invoices for " + spaceName + "/" + spaceID);
|
logger.info("│ │ ├── group invoices for " + spaceName + "/" + spaceID);
|
||||||
try {
|
try {
|
||||||
List<ItemCollection> invoices = documentService.find(
|
List<ItemCollection> invoices = documentService.find(
|
||||||
"$modelversion:rechnungsausgang-* AND type:workitem AND $uniqueidref:" + spaceID, 9999, 0,
|
"$modelversion:rechnungsausgang-* AND type:workitem AND $uniqueidref:" +
|
||||||
|
spaceID,
|
||||||
|
9999, 0,
|
||||||
"invoice.number", false);
|
"invoice.number", false);
|
||||||
|
|
||||||
logger.fine(" found " + invoices.size() + " for space " + spaceName);
|
logger.fine(" found " + invoices.size() + " for space " + spaceName);
|
||||||
for (ItemCollection invoice : invoices) {
|
for (ItemCollection invoice : invoices) {
|
||||||
|
|
||||||
String debitorName = invoice.getItemValueString("dbtr.name");
|
String debitorName = invoice.getItemValueString("dbtr.name");
|
||||||
String debitorNumber = invoice.getItemValueString("dbtr.number");
|
String debitorNumber = invoice.getItemValueString("dbtr.number");
|
||||||
|
|
||||||
DbtrData invoiceData = dbtrDataCache.get(debitorNumber);
|
ItemCollection metricData = metricCache.get(debitorNumber);
|
||||||
if (invoiceData == null) {
|
if (metricData == null) {
|
||||||
invoiceData = new DbtrData(debitorNumber, debitorName);
|
metricData = metricService.createMetaData(debitorNumber, debitorName);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Jetzt Rechnung addieren
|
// Jetzt Rechnung addieren
|
||||||
invoiceData.add(invoice);
|
addInvoice(metricData, invoice);
|
||||||
dbtrDataCache.put(debitorNumber, invoiceData);
|
// invoiceData.add(invoice);
|
||||||
|
metricCache.put(debitorNumber, metricData);
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (QueryException e) {
|
} catch (QueryException e) {
|
||||||
|
|
@ -168,41 +173,17 @@ public class MetricDebitorRestService {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Data Element for invoice totals by debitor.
|
* Addiert den saldo einer Invoice zu einem metricData object
|
||||||
* The object holds multiple currencies.
|
*
|
||||||
|
* @param metricData
|
||||||
|
* @param invoice
|
||||||
*/
|
*/
|
||||||
class DbtrData {
|
public void addInvoice(ItemCollection metricData, ItemCollection invoice) {
|
||||||
|
String currency = invoice.getItemValueString("invoice.currency");
|
||||||
String dbtrName;
|
double saldo = invoice.getItemValueDouble("invoice.saldo");
|
||||||
String dbtrNumber;
|
double saldoOld = metricData.getItemValueDouble(MetricDebitorService.ITEM_SALDO + "." + currency);
|
||||||
|
double saldoNew = InvoiceUtil.round(saldoOld + saldo);
|
||||||
Map<String, Double> totals = new HashMap<>();
|
|
||||||
|
|
||||||
public DbtrData(String dbtrNumber, String dbtrName) {
|
|
||||||
this.dbtrName = dbtrName;
|
|
||||||
this.dbtrNumber = dbtrNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void add(ItemCollection invoice) {
|
|
||||||
String currency = invoice.getItemValueString("invoice.currency");
|
|
||||||
Double total = invoice.getItemValueDouble("invoice.saldo");
|
|
||||||
Double totalCurrency = totals.get(currency);
|
|
||||||
if (totalCurrency == null) {
|
|
||||||
totalCurrency = 0.0;
|
|
||||||
}
|
|
||||||
totalCurrency = totalCurrency + total;
|
|
||||||
totals.put(currency, InvoiceUtil.round(totalCurrency));
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getTotal(String currency) {
|
|
||||||
Double result = totals.get(currency);
|
|
||||||
if (result != null) {
|
|
||||||
return result;
|
|
||||||
} else {
|
|
||||||
return 0.0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
metricData.setItemValue(MetricDebitorService.ITEM_SALDO + "." + currency, saldoNew);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -47,9 +47,8 @@ import jakarta.inject.Inject;
|
||||||
public class MetricDebitorService {
|
public class MetricDebitorService {
|
||||||
|
|
||||||
private static Logger logger = Logger.getLogger(MetricDebitorService.class.getName());
|
private static Logger logger = Logger.getLogger(MetricDebitorService.class.getName());
|
||||||
private final ConcurrentHashMap<String, Double> currentSaldos = new ConcurrentHashMap<>();
|
private final ConcurrentHashMap<String, ItemCollection> metricCache = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
public static final String METRIC_INVOICES = "invoices";
|
|
||||||
public static final String TYPE_METRIC_DEBITOR = "metric.debitor";
|
public static final String TYPE_METRIC_DEBITOR = "metric.debitor";
|
||||||
public static final String ITEM_SALDO = "invoice.saldo";
|
public static final String ITEM_SALDO = "invoice.saldo";
|
||||||
|
|
||||||
|
|
@ -76,36 +75,38 @@ public class MetricDebitorService {
|
||||||
|
|
||||||
// verify if saldo has changed.....
|
// verify if saldo has changed.....
|
||||||
double invoiceSaldo = invoice.getItemValueDouble(ITEM_SALDO);
|
double invoiceSaldo = invoice.getItemValueDouble(ITEM_SALDO);
|
||||||
|
String dbtrNumber = invoice.getItemValueString("dbtr.number");
|
||||||
|
String dbtrName = invoice.getItemValueString("dbtr.name");
|
||||||
|
String currency = invoice.getItemValueString("invoice.currency");
|
||||||
|
// load last metric...
|
||||||
double lastInvoiceSaldo = readDirtySaldo(invoice.getUniqueID());
|
double lastInvoiceSaldo = readDirtySaldo(invoice.getUniqueID());
|
||||||
if (invoiceSaldo == lastInvoiceSaldo) {
|
if (invoiceSaldo == lastInvoiceSaldo) {
|
||||||
// no change - no metric update!
|
// no change - no metric update!
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// update metric and cache last value
|
// update metric and the metric cache
|
||||||
if (processingEvent.getEventType() == ProcessingEvent.AFTER_PROCESS) {
|
if (processingEvent.getEventType() == ProcessingEvent.AFTER_PROCESS) {
|
||||||
String dbtrNumber = invoice.getItemValueString("dbtr.number");
|
|
||||||
String dbtrName = invoice.getItemValueString("dbtr.name");
|
|
||||||
|
|
||||||
ItemCollection metric = loadMetric(dbtrNumber, dbtrName);
|
ItemCollection metricData = metricCache.get(dbtrNumber);
|
||||||
|
if (metricData == null) {
|
||||||
// Saldo-Berechnung wie bisher
|
metricData = loadMetric(dbtrNumber, dbtrName);
|
||||||
debitorSaldo = metric.getItemValueDouble(ITEM_SALDO);
|
}
|
||||||
|
// Saldo-Berechnung
|
||||||
|
debitorSaldo = metricData.getItemValueDouble(ITEM_SALDO + "." + currency); // totals.get(currency);
|
||||||
debitorSaldo = debitorSaldo - lastInvoiceSaldo;
|
debitorSaldo = debitorSaldo - lastInvoiceSaldo;
|
||||||
|
|
||||||
// update debitor saldo
|
// update debitor saldo
|
||||||
debitorSaldo = InvoiceUtil.round(debitorSaldo + invoiceSaldo);
|
debitorSaldo = InvoiceUtil.round(debitorSaldo + invoiceSaldo);
|
||||||
|
|
||||||
|
metricData.setItemValue(ITEM_SALDO + "." + currency, debitorSaldo);
|
||||||
|
metricCache.put(dbtrNumber, metricData);
|
||||||
// Speichern in der Datenbank
|
// Speichern in der Datenbank
|
||||||
metric.setItemValue(ITEM_SALDO, debitorSaldo);
|
logger.info("Update metric for debitor: " + dbtrNumber + " -> " + debitorSaldo);
|
||||||
logger.info("--- update Debitor Saldo " + dbtrNumber + " -> " + debitorSaldo);
|
documentService.save(metricData);
|
||||||
documentService.save(metric);
|
|
||||||
|
|
||||||
// Aktuellen Saldo im Memory speichern
|
|
||||||
currentSaldos.put(dbtrNumber, debitorSaldo);
|
|
||||||
// Gauge registrieren
|
// Gauge registrieren
|
||||||
registerGauge(dbtrNumber, metric.getItemValueString("dbtr.name"));
|
registerGauge(metricData, currency);
|
||||||
logger.info("--- new gauge value for " + dbtrNumber + " -> " + debitorSaldo);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -119,8 +120,11 @@ public class MetricDebitorService {
|
||||||
public double readDirtySaldo(String uniqueid) {
|
public double readDirtySaldo(String uniqueid) {
|
||||||
double result = 0;
|
double result = 0;
|
||||||
ItemCollection dirtyInvoice = documentService.load(uniqueid);
|
ItemCollection dirtyInvoice = documentService.load(uniqueid);
|
||||||
|
if (dirtyInvoice == null) {
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
result = dirtyInvoice.getItemValueDouble(ITEM_SALDO);
|
result = dirtyInvoice.getItemValueDouble(ITEM_SALDO);
|
||||||
logger.info("---Dirty last Saldo was : " + result);
|
// logger.info("---Dirty last Saldo was : " + result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -147,12 +151,9 @@ public class MetricDebitorService {
|
||||||
}
|
}
|
||||||
if (debitorMetric == null) {
|
if (debitorMetric == null) {
|
||||||
// create a new instance
|
// create a new instance
|
||||||
logger.info("creating new debitor metric");
|
// logger.info("creating new debitor metric");
|
||||||
debitorMetric = new ItemCollection();
|
debitorMetric = createMetaData(dbtrNumber, dbtrName);
|
||||||
debitorMetric.setType(TYPE_METRIC_DEBITOR);
|
|
||||||
debitorMetric.setItemValue("name", dbtrNumber);
|
|
||||||
debitorMetric.setItemValue("dbtr.number", dbtrNumber);
|
|
||||||
debitorMetric.setItemValue("dbtr.name", dbtrName);
|
|
||||||
}
|
}
|
||||||
} catch (QueryException e) {
|
} catch (QueryException e) {
|
||||||
throw new PluginException(PluginException.class.getName(), "QUERY ERROR", e.getMessage(), e);
|
throw new PluginException(PluginException.class.getName(), "QUERY ERROR", e.getMessage(), e);
|
||||||
|
|
@ -161,6 +162,27 @@ public class MetricDebitorService {
|
||||||
return debitorMetric;
|
return debitorMetric;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an empty Debitor Meta Data Object (ItemCollection)
|
||||||
|
* <p>
|
||||||
|
* The ItemCollection stores the name and number and also all saldos for all
|
||||||
|
* currencies
|
||||||
|
*
|
||||||
|
* @param dbtrNumber
|
||||||
|
* @param dbtrName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public ItemCollection createMetaData(String dbtrNumber, String dbtrName) {
|
||||||
|
ItemCollection metricData = new ItemCollection();
|
||||||
|
|
||||||
|
metricData = new ItemCollection();
|
||||||
|
metricData.setType(TYPE_METRIC_DEBITOR);
|
||||||
|
metricData.setItemValue("name", dbtrNumber);
|
||||||
|
metricData.setItemValue("dbtr.number", dbtrNumber);
|
||||||
|
metricData.setItemValue("dbtr.name", dbtrName);
|
||||||
|
return metricData;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hilfsmethode um Metriken initial aufzubauen. Wird vom Metric Rest Service
|
* Hilfsmethode um Metriken initial aufzubauen. Wird vom Metric Rest Service
|
||||||
* verwendet.
|
* verwendet.
|
||||||
|
|
@ -168,13 +190,18 @@ public class MetricDebitorService {
|
||||||
*/
|
*/
|
||||||
protected void initMetric(ItemCollection metric) {
|
protected void initMetric(ItemCollection metric) {
|
||||||
String dbtrNumber = metric.getItemValueString("dbtr.number");
|
String dbtrNumber = metric.getItemValueString("dbtr.number");
|
||||||
double saldo = metric.getItemValueDouble(ITEM_SALDO);
|
|
||||||
|
|
||||||
// Aktuellen Saldo in Map speichern
|
// Aktuellen Saldo in Map speichern
|
||||||
currentSaldos.put(dbtrNumber, saldo);
|
metricCache.put(dbtrNumber, metric);
|
||||||
// Gauge registrieren
|
// Gauge für jede Währung registrieren
|
||||||
registerGauge(dbtrNumber, metric.getItemValueString("dbtr.name"));
|
for (String itemName : metric.getItemNames()) {
|
||||||
logger.info("Initialized metric for debitor " + dbtrNumber + " -> " + saldo);
|
if (itemName.startsWith(ITEM_SALDO + ".")) {
|
||||||
|
// currency value found
|
||||||
|
int pos = (ITEM_SALDO + ".").length();
|
||||||
|
String currency = itemName.substring(pos + 1);
|
||||||
|
logger.info("Init metric for debitor " + dbtrNumber + " -> " + currency);
|
||||||
|
registerGauge(metric, currency);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -183,20 +210,25 @@ public class MetricDebitorService {
|
||||||
* @param dbtrNumber - the debitor number
|
* @param dbtrNumber - the debitor number
|
||||||
* @param dbtrName - the debitor name
|
* @param dbtrName - the debitor name
|
||||||
*/
|
*/
|
||||||
private void registerGauge(String dbtrNumber, String dbtrName) {
|
private void registerGauge(ItemCollection metricData, String currency) {
|
||||||
|
String dbtrNumber = metricData.getItemValueString("dbtr.number");
|
||||||
|
String dbtrName = metricData.getItemValueString("dbtr.name");
|
||||||
List<Tag> tags = new ArrayList<>();
|
List<Tag> tags = new ArrayList<>();
|
||||||
tags.add(new Tag("type", "dbtr"));
|
tags.add(new Tag("type", "dbtr"));
|
||||||
tags.add(new Tag("number", dbtrNumber));
|
tags.add(new Tag("number", dbtrNumber));
|
||||||
tags.add(new Tag("name", dbtrName));
|
tags.add(new Tag("name", dbtrName));
|
||||||
|
tags.add(new Tag("currency", currency));
|
||||||
|
|
||||||
|
logger.info("Register metric for debitor: " + dbtrNumber + " -> " + currency);
|
||||||
Metadata metadata = Metadata.builder()
|
Metadata metadata = Metadata.builder()
|
||||||
.withName("dbtr.invoice.saldo")
|
.withName("dbtr.invoice.saldo")
|
||||||
.withDescription("Debitor Balance")
|
.withDescription("Debitor Balance by Currency")
|
||||||
.withUnit("EUR")
|
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
metricRegistry.gauge(metadata,
|
metricRegistry.gauge(metadata,
|
||||||
() -> currentSaldos.getOrDefault(dbtrNumber, 0.0),
|
() -> metricCache.getOrDefault(dbtrNumber, createMetaData(dbtrNumber, dbtrName))
|
||||||
|
.getItemValueDouble(ITEM_SALDO + "." + currency),
|
||||||
tags.toArray(new Tag[0]));
|
tags.toArray(new Tag[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -161,7 +161,7 @@ public class OPListExportScheduler implements Scheduler {
|
||||||
workflowService.processWorkItem( //
|
workflowService.processWorkItem( //
|
||||||
workitem.task(1000). //
|
workitem.task(1000). //
|
||||||
event(100). //
|
event(100). //
|
||||||
model("opliste-de-1.0"));
|
model("(^analyse-opliste-.*)"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -189,9 +189,7 @@ th { font-weight: bold;}
|
||||||
<p>
|
<p>
|
||||||
Bitte prüfen Sie die angefügte OP-Liste. Diese enthält sämtlich noch offenen Rechnungen zum Zeitpunkt des Exports für diesen Fachbereich.
|
Bitte prüfen Sie die angefügte OP-Liste. Diese enthält sämtlich noch offenen Rechnungen zum Zeitpunkt des Exports für diesen Fachbereich.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
|
||||||
Nach Prüfung schließen Sie bitte den Vorgang über die Schaltfläche "Erledigt" ab.
|
|
||||||
</p>
|
|
||||||
<a href="<propertyvalue>application.url</propertyvalue>pages/workitems/workitem.jsf?id=<itemvalue>$uniqueid</itemvalue>"><propertyvalue>application.url</propertyvalue>pages/workitems/workitem.jsf?id=<itemvalue>$uniqueid</itemvalue></a>
|
<a href="<propertyvalue>application.url</propertyvalue>pages/workitems/workitem.jsf?id=<itemvalue>$uniqueid</itemvalue>"><propertyvalue>application.url</propertyvalue>pages/workitems/workitem.jsf?id=<itemvalue>$uniqueid</itemvalue></a>
|
||||||
<attachments></attachments>
|
<attachments></attachments>
|
||||||
<bpmn2:message>Html-Footer</bpmn2:message>]]></imixs:value>
|
<bpmn2:message>Html-Footer</bpmn2:message>]]></imixs:value>
|
||||||
|
|
@ -231,7 +229,9 @@ Nach Prüfung schließen Sie bitte den Vorgang über die Schaltfläche "Erledigt
|
||||||
<imixs:item name="keyupdateacl" type="xs:boolean">
|
<imixs:item name="keyupdateacl" type="xs:boolean">
|
||||||
<imixs:value>false</imixs:value>
|
<imixs:value>false</imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
<imixs:item name="nammailreceiver" type="xs:string"/>
|
<imixs:item name="nammailreceiver" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
<imixs:item name="keymailreceiverfields" type="xs:string">
|
<imixs:item name="keymailreceiverfields" type="xs:string">
|
||||||
<imixs:value><![CDATA[process.manager]]></imixs:value>
|
<imixs:value><![CDATA[process.manager]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
|
|
@ -251,14 +251,19 @@ Nach Prüfung schließen Sie bitte den Vorgang über die Schaltfläche "Erledigt
|
||||||
<find>B7</find>
|
<find>B7</find>
|
||||||
<replace><itemvalue>space.name</itemvalue></replace>
|
<replace><itemvalue>space.name</itemvalue></replace>
|
||||||
<type>text</type>
|
<type>text</type>
|
||||||
</poi-update>
|
</poi-update>
|
||||||
|
|
||||||
<poi-update name="findreplace">
|
<poi-update name="findreplace">
|
||||||
<find>F6</find>
|
<find>F6</find>
|
||||||
<replace><itemvalue format="dd.MM.yyyy">$lasteventdate</itemvalue></replace>
|
<replace><itemvalue format="dd.MM.yyyy">$lasteventdate</itemvalue></replace>
|
||||||
<type>date</type>
|
<type>date</type>
|
||||||
</poi-update>]]></imixs:value>
|
</poi-update>]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
|
<imixs:item name="nammailreceivercc" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="nammailreceiverbcc" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
</bpmn2:extensionElements>
|
</bpmn2:extensionElements>
|
||||||
<bpmn2:documentation id="Documentation_1"><![CDATA[OP-Liste an Fachbereich versenden]]></bpmn2:documentation>
|
<bpmn2:documentation id="Documentation_1"><![CDATA[OP-Liste an Fachbereich versenden]]></bpmn2:documentation>
|
||||||
<bpmn2:incoming>SequenceFlow_5</bpmn2:incoming>
|
<bpmn2:incoming>SequenceFlow_5</bpmn2:incoming>
|
||||||
|
|
@ -359,30 +364,6 @@ Nach Prüfung schließen Sie bitte den Vorgang über die Schaltfläche "Erledigt
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
<imixs:value><![CDATA[1]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
<imixs:item name="txtactivityresult" type="xs:string">
|
|
||||||
<imixs:value><![CDATA[<opliste name="excel-export">
|
|
||||||
<textblock>OP-Liste Template</textblock>
|
|
||||||
<template>op-liste_template.xlsx</template>
|
|
||||||
<target-name>op-liste_<itemvalue>dbtr.number</itemvalue>_<itemvalue format="yyyy-MM-dd">$lasteventdate</itemvalue>.xlsx</target-name>
|
|
||||||
</opliste>
|
|
||||||
|
|
||||||
<poi-update name="findreplace">
|
|
||||||
<find>C6</find>
|
|
||||||
<replace><itemvalue>sequencenumber</itemvalue></replace>
|
|
||||||
<type>text</type>
|
|
||||||
</poi-update>
|
|
||||||
<poi-update name="findreplace">
|
|
||||||
<find>B7</find>
|
|
||||||
<replace><itemvalue>space.name</itemvalue></replace>
|
|
||||||
<type>text</type>
|
|
||||||
</poi-update>
|
|
||||||
|
|
||||||
<poi-update name="findreplace">
|
|
||||||
<find>F6</find>
|
|
||||||
<replace><itemvalue format="dd.MM.yyyy">$lasteventdate</itemvalue></replace>
|
|
||||||
<type>date</type>
|
|
||||||
</poi-update>]]></imixs:value>
|
|
||||||
</imixs:item>
|
|
||||||
<imixs:item name="txtbusinessrule" type="xs:string">
|
<imixs:item name="txtbusinessrule" type="xs:string">
|
||||||
<imixs:value><![CDATA[var result={};
|
<imixs:value><![CDATA[var result={};
|
||||||
var refField="space.ref";
|
var refField="space.ref";
|
||||||
|
|
@ -393,6 +374,18 @@ if (workitem.get(refField) == null || ''==workitem.get(refField)[0]) {
|
||||||
result.errorMessage='Bitte wählen Sie einen Fachbereich aus.';
|
result.errorMessage='Bitte wählen Sie einen Fachbereich aus.';
|
||||||
}]]></imixs:value>
|
}]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
|
<imixs:item name="txtactivityresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<opliste name="excel-export">
|
||||||
|
<textblock>OP-Liste Template</textblock>
|
||||||
|
<template>op-liste_template.xlsx</template>
|
||||||
|
<target-name>op-liste_<itemvalue>dbtr.number</itemvalue>_<itemvalue format="yyyy-MM-dd">$lasteventdate</itemvalue>.xlsx</target-name>
|
||||||
|
</opliste>
|
||||||
|
<poi-update name="findreplace">
|
||||||
|
<find>A8</find>
|
||||||
|
<replace><itemvalue format="dd.MM.yyyy">$lasteventdate</itemvalue></replace>
|
||||||
|
<type>date</type>
|
||||||
|
</poi-update>]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
</bpmn2:extensionElements>
|
</bpmn2:extensionElements>
|
||||||
<bpmn2:outgoing>SequenceFlow_6</bpmn2:outgoing>
|
<bpmn2:outgoing>SequenceFlow_6</bpmn2:outgoing>
|
||||||
<bpmn2:signalEventDefinition id="SignalEventDefinition_2" signalRef="Signal_1"/>
|
<bpmn2:signalEventDefinition id="SignalEventDefinition_2" signalRef="Signal_1"/>
|
||||||
|
|
@ -443,13 +436,23 @@ if (workitem.get(refField) == null || ''==workitem.get(refField)[0]) {
|
||||||
<template>op-liste_kw_template_de.xlsx</template>
|
<template>op-liste_kw_template_de.xlsx</template>
|
||||||
<target-name>op_liste_nach_kw_<itemvalue format="yyyy-MM-dd">$lasteventdate</itemvalue>.xlsx</target-name>
|
<target-name>op_liste_nach_kw_<itemvalue format="yyyy-MM-dd">$lasteventdate</itemvalue>.xlsx</target-name>
|
||||||
</opliste>
|
</opliste>
|
||||||
|
|
||||||
<poi-update name="findreplace">
|
<poi-update name="findreplace">
|
||||||
<find>A8</find>
|
<find>C6</find>
|
||||||
|
<replace><itemvalue>sequencenumber</itemvalue></replace>
|
||||||
|
<type>text</type>
|
||||||
|
</poi-update>
|
||||||
|
<poi-update name="findreplace">
|
||||||
|
<find>B7</find>
|
||||||
|
<replace><itemvalue>space.name</itemvalue></replace>
|
||||||
|
<type>text</type>
|
||||||
|
</poi-update>
|
||||||
|
|
||||||
|
<poi-update name="findreplace">
|
||||||
|
<find>F6</find>
|
||||||
<replace><itemvalue format="dd.MM.yyyy">$lasteventdate</itemvalue></replace>
|
<replace><itemvalue format="dd.MM.yyyy">$lasteventdate</itemvalue></replace>
|
||||||
<type>date</type>
|
<type>date</type>
|
||||||
</poi-update>
|
</poi-update>]]></imixs:value>
|
||||||
|
|
||||||
]]></imixs:value>
|
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
</bpmn2:extensionElements>
|
</bpmn2:extensionElements>
|
||||||
<bpmn2:signalEventDefinition id="signalEventDefinition_7PWLCA" signalRef="signal_2"/>
|
<bpmn2:signalEventDefinition id="signalEventDefinition_7PWLCA" signalRef="signal_2"/>
|
||||||
|
|
|
||||||
|
|
@ -187,10 +187,7 @@ th { font-weight: bold;}
|
||||||
<imixs:value><![CDATA[<bpmn2:message>Html-Header</bpmn2:message>
|
<imixs:value><![CDATA[<bpmn2:message>Html-Header</bpmn2:message>
|
||||||
<p>Hallo,</p>
|
<p>Hallo,</p>
|
||||||
<p>
|
<p>
|
||||||
Bitte prüfen Sie die angefügte OP-Liste. Diese enthält sämtlich noch offenen Rechnungen zum Zeitpunkt des Exports für diesen Fachbereich.
|
Please check the attached list of outstanding payments. This list contains all outstanding invoices at the time of export for this department.
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Nach Prüfung schließen Sie bitte den Vorgang über die Schaltfläche "Erledigt" ab.
|
|
||||||
</p>
|
</p>
|
||||||
<a href="<propertyvalue>application.url</propertyvalue>pages/workitems/workitem.jsf?id=<itemvalue>$uniqueid</itemvalue>"><propertyvalue>application.url</propertyvalue>pages/workitems/workitem.jsf?id=<itemvalue>$uniqueid</itemvalue></a>
|
<a href="<propertyvalue>application.url</propertyvalue>pages/workitems/workitem.jsf?id=<itemvalue>$uniqueid</itemvalue>"><propertyvalue>application.url</propertyvalue>pages/workitems/workitem.jsf?id=<itemvalue>$uniqueid</itemvalue></a>
|
||||||
<attachments></attachments>
|
<attachments></attachments>
|
||||||
|
|
@ -231,7 +228,9 @@ Nach Prüfung schließen Sie bitte den Vorgang über die Schaltfläche "Erledigt
|
||||||
<imixs:item name="keyupdateacl" type="xs:boolean">
|
<imixs:item name="keyupdateacl" type="xs:boolean">
|
||||||
<imixs:value>false</imixs:value>
|
<imixs:value>false</imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
<imixs:item name="nammailreceiver" type="xs:string"/>
|
<imixs:item name="nammailreceiver" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
<imixs:item name="keymailreceiverfields" type="xs:string">
|
<imixs:item name="keymailreceiverfields" type="xs:string">
|
||||||
<imixs:value><![CDATA[process.manager]]></imixs:value>
|
<imixs:value><![CDATA[process.manager]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
|
|
@ -259,6 +258,12 @@ Nach Prüfung schließen Sie bitte den Vorgang über die Schaltfläche "Erledigt
|
||||||
<type>date</type>
|
<type>date</type>
|
||||||
</poi-update>]]></imixs:value>
|
</poi-update>]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
|
<imixs:item name="nammailreceivercc" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="nammailreceiverbcc" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
</bpmn2:extensionElements>
|
</bpmn2:extensionElements>
|
||||||
<bpmn2:documentation id="Documentation_1"><![CDATA[OP-Liste an Fachbereich versenden]]></bpmn2:documentation>
|
<bpmn2:documentation id="Documentation_1"><![CDATA[OP-Liste an Fachbereich versenden]]></bpmn2:documentation>
|
||||||
<bpmn2:incoming>SequenceFlow_5</bpmn2:incoming>
|
<bpmn2:incoming>SequenceFlow_5</bpmn2:incoming>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue