update - draft

This commit is contained in:
Ralph Soika 2024-11-17 20:41:03 +01:00
parent 1762c5c878
commit b7011a5cf8
4 changed files with 388 additions and 261 deletions

View file

@ -6,7 +6,7 @@
<parent> <parent>
<artifactId>office-alexander-logistics</artifactId> <artifactId>office-alexander-logistics</artifactId>
<groupId>com.alexander-logistics</groupId> <groupId>com.alexander-logistics</groupId>
<version>1.3.0</version> <version>1.3.1</version>
</parent> </parent>
<artifactId>office-alexander-logistics-app</artifactId> <artifactId>office-alexander-logistics-app</artifactId>
<packaging>war</packaging> <packaging>war</packaging>

View file

@ -23,6 +23,7 @@ import org.imixs.workflow.exceptions.PluginException;
import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.exceptions.QueryException;
import org.imixs.workflow.office.config.ConfigService; import org.imixs.workflow.office.config.ConfigService;
import org.imixs.workflow.poi.POIFindReplaceAdapter; import org.imixs.workflow.poi.POIFindReplaceAdapter;
import org.imixs.workflow.poi.POIUtil;
import org.imixs.workflow.util.XMLParser; import org.imixs.workflow.util.XMLParser;
import jakarta.inject.Inject; import jakarta.inject.Inject;
@ -88,13 +89,13 @@ public class AGLAnalyticExcelAdapterDebitor extends POIFindReplaceAdapter {
// ermittle die Hauptwährungen // ermittle die Hauptwährungen
ItemCollection configItemCollection = configService.loadConfiguration("AGL_CONFIGURATION"); ItemCollection configItemCollection = configService.loadConfiguration("AGL_CONFIGURATION");
List<String> currencyList = configItemCollection.getItemValue("currency.out"); List<String> currencyList = configItemCollection.getItemValue("currency.out");
if (currencyList == null || currencyList.size() < 2) { if (currencyList == null || currencyList.size() < 1) {
throw new PluginException(AGLAnalyticExcelAdapter.class.getSimpleName(), throw new PluginException(AGLAnalyticExcelAdapter.class.getSimpleName(),
OPListExportService.ERROR_CONFIG, OPListExportService.ERROR_CONFIG,
"missing Currency configuration - please check parameters"); "missing Currency configuration - please check parameters");
} }
// read the Steuerbescheide options // read the options
ItemCollection ausgangsrechnungConfig = workflowService.evalWorkflowResult(event, "soa", ItemCollection ausgangsrechnungConfig = workflowService.evalWorkflowResult(event, "soa",
document, document,
false); false);
@ -113,25 +114,64 @@ public class AGLAnalyticExcelAdapterDebitor extends POIFindReplaceAdapter {
targetName = workflowService.adaptText(targetName, document); targetName = workflowService.adaptText(targetName, document);
try { try {
appendExcelTemplate(document, textblock, template, targetName); FileData fileData = appendExcelTemplate(document, textblock, template, targetName);
insertInvoiceRows(document, targetName);
logger.info("... loading poi configuration.."); // get workbook
// Process POI instructions XSSFWorkbook doc = null;
// read the config try (InputStream imputStream = new ByteArrayInputStream(fileData.getContent())) {
ItemCollection poiConfig = workflowService.evalWorkflowResult(event, "poi-update", document, doc = new XSSFWorkbook(imputStream);
false); // NOTE: we only take the first sheet !
if (poiConfig == null || !poiConfig.hasItem("findreplace")) { XSSFSheet sheet = doc.getSheetAt(0);
throw new PluginException(POIFindReplaceAdapter.class.getSimpleName(), CONFIG_ERROR,
"missing poi configuration"); // first add the columns for the currency list
addCurrencyColumns(sheet, currencyList);
// insertInvoiceRows(document, targetName);
// write back the updated excel file
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
doc.write(byteArrayOutputStream);
byte[] newContent = byteArrayOutputStream.toByteArray();
FileData fileDataNew = new FileData(fileData.getName(), newContent, fileData.getContentType(),
null);
document.addFileData(fileDataNew);
logger.finest("......new document added");
} catch (IOException e) {
throw new PluginException(AGLAnalyticExcelAdapter.class.getSimpleName(),
OPListExportService.ERROR_CONFIG,
"failed to update opliste: " + e.getMessage());
} finally {
if (doc != null) {
try {
doc.close();
} catch (IOException e) {
logger.severe("Failed to close workbook: " + e.getMessage());
e.printStackTrace();
}
}
} }
List<String> replaceDevList = poiConfig.getItemValue("findreplace");
String eval = poiConfig.getItemValueString("eval");
logger.info("... update template with normal poi information.."); // Process POI instructions
this.updateFileData(document.getFileData(targetName), document, replaceDevList, eval); // processPOIUpdate(document, event, targetName);
// // read the config
// ItemCollection poiConfig = workflowService.evalWorkflowResult(event,
// "poi-update", document,
// false);
// if (poiConfig == null || !poiConfig.hasItem("findreplace")) {
// throw new PluginException(POIFindReplaceAdapter.class.getSimpleName(),
// CONFIG_ERROR,
// "missing poi configuration");
// }
// List<String> replaceDevList = poiConfig.getItemValue("findreplace");
// String eval = poiConfig.getItemValueString("eval");
} catch (PluginException | IOException | QueryException e) { // logger.info("... update template with normal poi information..");
// this.updateFileData(document.getFileData(targetName), document,
// replaceDevList, eval);
} catch (PluginException e) {
throw new PluginException(AGLAnalyticExcelAdapter.class.getSimpleName(), throw new PluginException(AGLAnalyticExcelAdapter.class.getSimpleName(),
OPListExportService.ERROR_CONFIG, OPListExportService.ERROR_CONFIG,
"failed to update steuerbescheide: " + e.getMessage()); "failed to update steuerbescheide: " + e.getMessage());
@ -140,6 +180,30 @@ public class AGLAnalyticExcelAdapterDebitor extends POIFindReplaceAdapter {
return document; return document;
} }
/**
* A SOA can be created for one or multiple currencies. This helper method adds
* the Total and Saldo Colum for each currency
*
* The template provided only the columns for the first currency.
*
* @param sheet
* @param currencyList
*/
private void addCurrencyColumns(XSSFSheet sheet, List<String> currencyList) {
if (currencyList == null || currencyList.size() <= 1) {
// no extra currencies defined!
return;
}
int newColumns = (currencyList.size() - 1) * 2;
for (int i = 0; i < newColumns; i++) {
logger.info(".. add currency column...");
POIUtil.insertColumn(sheet, 6, 8 + i);
// POIUtil.insertColumn(sheet, 6, 8 + i+1);
}
}
/** /**
* Hilfsmethode die das fuehrende K/D aus der Debitorennummer entfernt * Hilfsmethode die das fuehrende K/D aus der Debitorennummer entfernt
* *
@ -265,7 +329,7 @@ public class AGLAnalyticExcelAdapterDebitor extends POIFindReplaceAdapter {
* @param document * @param document
* @throws PluginException * @throws PluginException
*/ */
private void appendExcelTemplate(ItemCollection document, String textblockRef, String template, private FileData appendExcelTemplate(ItemCollection document, String textblockRef, String template,
String targetName) String targetName)
throws PluginException { throws PluginException {
@ -289,7 +353,7 @@ public class AGLAnalyticExcelAdapterDebitor extends POIFindReplaceAdapter {
// append document // append document
logger.info("...append new SOA Template: " + targetName); logger.info("...append new SOA Template: " + targetName);
document.addFileData(fileData); document.addFileData(fileData);
return fileData;
} }
/** /**

View file

@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.alexander-logistics</groupId> <groupId>com.alexander-logistics</groupId>
<artifactId>office-alexander-logistics</artifactId> <artifactId>office-alexander-logistics</artifactId>
<version>1.3.0</version> <version>1.3.1</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<name>Imixs Office Workflow - Custom Build</name> <name>Imixs Office Workflow - Custom Build</name>
@ -29,7 +29,7 @@
<org.imixs.workflow.version>6.0.9-SNAPSHOT</org.imixs.workflow.version> <org.imixs.workflow.version>6.0.9-SNAPSHOT</org.imixs.workflow.version>
<org.imixs.marty.version>5.0.0</org.imixs.marty.version> <org.imixs.marty.version>5.0.0</org.imixs.marty.version>
<org.imixs.archive.version>3.0.2</org.imixs.archive.version> <org.imixs.archive.version>3.0.2</org.imixs.archive.version>
<org.imixs.adapters.version>3.0.2</org.imixs.adapters.version> <org.imixs.adapters.version>3.0.3-SNAPSHOT</org.imixs.adapters.version>
<org.imixs.melman.version>2.0.2</org.imixs.melman.version> <org.imixs.melman.version>2.0.2</org.imixs.melman.version>
<microprofile.version>6.0</microprofile.version> <microprofile.version>6.0</microprofile.version>
<net.sf.saxon.version>9.9.1-4</net.sf.saxon.version> <net.sf.saxon.version>9.9.1-4</net.sf.saxon.version>

View file

@ -90,6 +90,7 @@ th { font-weight: bold;}
<bpmn2:flowNodeRef>DataObject_1</bpmn2:flowNodeRef> <bpmn2:flowNodeRef>DataObject_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>event_HrHS9A</bpmn2:flowNodeRef> <bpmn2:flowNodeRef>event_HrHS9A</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>dataObject_00mX6w</bpmn2:flowNodeRef> <bpmn2:flowNodeRef>dataObject_00mX6w</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>event_n40tzw</bpmn2:flowNodeRef>
</bpmn2:lane> </bpmn2:lane>
</bpmn2:laneSet> </bpmn2:laneSet>
<bpmn2:startEvent id="StartEvent_1" name="Start"> <bpmn2:startEvent id="StartEvent_1" name="Start">
@ -124,6 +125,7 @@ th { font-weight: bold;}
<bpmn2:outgoing>SequenceFlow_10</bpmn2:outgoing> <bpmn2:outgoing>SequenceFlow_10</bpmn2:outgoing>
<bpmn2:incoming>sequenceFlow_OL83kQ</bpmn2:incoming> <bpmn2:incoming>sequenceFlow_OL83kQ</bpmn2:incoming>
<bpmn2:incoming>sequenceFlow_1K0l0g</bpmn2:incoming> <bpmn2:incoming>sequenceFlow_1K0l0g</bpmn2:incoming>
<bpmn2:incoming>sequenceFlow_P2Q9fQ</bpmn2:incoming>
</bpmn2:task> </bpmn2:task>
<bpmn2:sequenceFlow id="SequenceFlow_10" sourceRef="Task_2" targetRef="EndEvent_3"> <bpmn2:sequenceFlow id="SequenceFlow_10" sourceRef="Task_2" targetRef="EndEvent_3">
<bpmn2:documentation id="documentation_WzPj2A"/> <bpmn2:documentation id="documentation_WzPj2A"/>
@ -322,36 +324,7 @@ th { font-weight: bold;}
<target-name>soa_<itemvalue>dbtr.number</itemvalue>_<itemvalue format="yyyy-MM-dd">$lasteventdate</itemvalue>.xlsx</target-name> <target-name>soa_<itemvalue>dbtr.number</itemvalue>_<itemvalue format="yyyy-MM-dd">$lasteventdate</itemvalue>.xlsx</target-name>
</soa> </soa>
<poi-update name="findreplace">
<find>I6</find>
<replace><itemvalue format="dd.MM.yyyy">$lasteventdate</itemvalue></replace>
<type>date</type>
</poi-update>
<poi-update name="findreplace">
<find>D6</find>
<replace><itemvalue>dbtr.name</itemvalue></replace>
<type>date</type>
</poi-update>
<poi-update name="findreplace">
<find>G10</find>
<replace>Total EUR</replace>
</poi-update>
<poi-update name="findreplace">
<find>H10</find>
<replace>Saldo EUR</replace>
</poi-update>
<poi-update name="findreplace">
<find>I10</find>
<replace>Total USD</replace>
</poi-update>
<poi-update name="findreplace">
<find>J10</find>
<replace>Saldo USD</replace>
</poi-update>
<poi-update name="eval">TOTAL1;TOTAL2;TOTAL3;TOTAL4</poi-update>
]]></imixs:value> ]]></imixs:value>
</imixs:item> </imixs:item>
</bpmn2:extensionElements> </bpmn2:extensionElements>
@ -391,6 +364,84 @@ th { font-weight: bold;}
<bpmn2:sequenceFlow id="sequenceFlow_LhcuMQ" sourceRef="Task_1" targetRef="event_HrHS9A"> <bpmn2:sequenceFlow id="sequenceFlow_LhcuMQ" sourceRef="Task_1" targetRef="event_HrHS9A">
<bpmn2:documentation id="documentation_Ll2kVg"/> <bpmn2:documentation id="documentation_Ll2kVg"/>
</bpmn2:sequenceFlow> </bpmn2:sequenceFlow>
<bpmn2:intermediateCatchEvent id="event_n40tzw" imixs:activityid="201" name="Excel Export">
<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: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: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="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><![CDATA[Analysedaten Debitor archiviert]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>false</imixs:value>
</imixs:item>
<imixs:item name="txtactivityresult" type="xs:string">
<imixs:value><![CDATA[<soa name="excel-export">
<textblock>SOA Template</textblock>
<template>soa_template.xlsx</template>
<target-name>soa_<itemvalue>dbtr.number</itemvalue>_<itemvalue format="yyyy-MM-dd">$lasteventdate</itemvalue>.xlsx</target-name>
</soa>
]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="documentation_naV7Kg"><![CDATA[Excel Datei erzeugen]]></bpmn2:documentation>
<bpmn2:signalEventDefinition id="signalEventDefinition_0WFWhQ" signalRef="Signal_1"/>
<bpmn2:outgoing>sequenceFlow_P2Q9fQ</bpmn2:outgoing>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="sequenceFlow_P2Q9fQ" sourceRef="event_n40tzw" targetRef="Task_2">
<bpmn2:documentation id="documentation_J7LEZw"/>
</bpmn2:sequenceFlow>
</bpmn2:process> </bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="Default Process Diagram"> <bpmndi:BPMNDiagram id="BPMNDiagram_1" name="Default Process Diagram">
<bpmndi:BPMNPlane bpmnElement="Collaboration_1" id="BPMNPlane_1"> <bpmndi:BPMNPlane bpmnElement="Collaboration_1" id="BPMNPlane_1">
@ -494,6 +545,18 @@ th { font-weight: bold;}
<di:waypoint x="349.0" y="395.0"/> <di:waypoint x="349.0" y="395.0"/>
<di:waypoint x="467.0" y="395.0"/> <di:waypoint x="467.0" y="395.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNShape bpmnElement="event_n40tzw" id="BPMNShape_0HF6DQ">
<dc:Bounds height="36.0" width="36.0" x="741.0" y="224.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_QA6zUg">
<dc:Bounds height="20.0" width="100.0" x="709.0" y="263.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_P2Q9fQ" id="BPMNEdge_v9l7hQ" sourceElement="BPMNShape_0HF6DQ" targetElement="BPMNShape_Task_2">
<di:waypoint x="741.0" y="242.0"/>
<di:waypoint x="710.5" y="242.0"/>
<di:waypoint x="710.5" y="315.0"/>
<di:waypoint x="680.0" y="315.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane> </bpmndi:BPMNPlane>
<bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1"> <bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1">
<dc:Font name="arial" size="9.0"/> <dc:Font name="arial" size="9.0"/>