diff --git a/docker-compose.yml b/docker-compose.yml index 24fd83a..00772be 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -78,7 +78,7 @@ services: environment: EXIM_SMARTHOST: "www149.your-server.de:25" EXIM_PASSWORD: "www149.your-server.de:webmaster@imixs.com:$MAILPASSWORD" - EXIM_ALLOWED_SENDERS: "10.0.0.0/8:172.16.0.0/12:192.168.0.0/16" + EXIM_ALLOWED_SENDERS: "10.0.0.0/8:172.18.0.0/12:192.168.0.0/16" diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticControllerDebitor.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticControllerDebitor.java new file mode 100644 index 0000000..cdcfa25 --- /dev/null +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticControllerDebitor.java @@ -0,0 +1,154 @@ +package com.alexanderlogistics; + +import java.io.Serializable; +import java.util.List; +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.faces.data.WorkflowController; +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; + +/** + * Der AGLAnalyticControllerDebitor berechnet verschiedene Analyse Daten von + * Ausgangsrechnungen + * + * @author rsoika + * + */ +@Named +@RequestScoped +public class AGLAnalyticControllerDebitor implements Serializable { + + private static final long serialVersionUID = 1L; + private static Logger logger = Logger.getLogger(AnalyticController.class.getName()); + + @Inject + protected DocumentService documentService; + + @Inject + protected WorkflowController workflowController; + + @Inject + TeamService teamService; + + // @Inject + // protected DebitorStatistikController debitorStatistikController; + + List steuerbescheide = null; + + public void onEvent(@Observes AnalyticEvent event) { + + logger.info("...debitor analysis...."); + ItemCollection process = teamService.getProcessByName("Mahnwesen"); + String link = "/pages/workitems/worklist.xhtml?processref=" + process.getUniqueID() + + "&workflowgroup=Steuerbescheid"; + + if ("analytic.invoices.count.all".equals(event.getKey())) { + event.setValue("" + getRechnungen()); + event.setLabel(""); + event.setDescription("Total invoices"); + event.getWorkitem().setItemValue("invoices.total", event.getValue()); + event.setLink(link); + } + + if ("analytic.invoices.count.open".equals(event.getKey())) { + event.setValue("" + getRechnungenOffen()); + event.setLabel(""); + event.setDescription("Total invoices not yet in due"); + event.getWorkitem().setItemValue("invoices.total.open", event.getValue()); + event.setLink(link); + } + + if ("analytic.invoices.count.due".equals(event.getKey())) { + event.setValue("" + getRechnungenFaellig()); + event.setLabel(""); + event.setDescription("Total invoices in due"); + event.getWorkitem().setItemValue("invoices.total.due", event.getValue()); + event.setLink(link); + } + + } + + /** + * Berechnet die Anzahl aller Rechnungen + * + * @return + */ + public int getRechnungen() { + int result = 0; + if (getDbtNr().isEmpty()) { + return 0; + } + try { + result = documentService + .count("(type:workitem OR type:workitemarchive) AND dbtr.number:" + getDbtNr() + + " AND $workflowgroup:\"Rechnungsausgang\""); + } catch (QueryException e) { + logger.severe("Failed to get statistic: " + e.getMessage()); + } + return result; + } + + /** + * Berechnet die Anzahl aller noch nicht fälligen rechnungen + * + * @return + */ + public int getRechnungenOffen() { + int result = 0; + if (getDbtNr().isEmpty()) { + return 0; + } + try { + result = documentService + .count("(type:workitem) AND dbtr.number:" + getDbtNr() + + " AND $workflowgroup:\"Rechnungsausgang\" AND ($taskid:[5000 TO 5099])"); + } catch (QueryException e) { + logger.severe("Failed to get statistic: " + e.getMessage()); + } + return result; + } + + /** + * Berechnet die Anzahl aller fälligen rechnungen + * + * @return + */ + public int getRechnungenFaellig() { + int result = 0; + if (getDbtNr().isEmpty()) { + return 0; + } + try { + result = documentService + .count("(type:workitem) AND dbtr.number:" + getDbtNr() + + " AND $workflowgroup:\"Rechnungsausgang\" AND ($taskid:[5100 TO 5199])"); + } catch (QueryException e) { + logger.severe("Failed to get statistic: " + e.getMessage()); + } + return result; + } + + /** + * Hilfsmethode die das fuehrende K/D aus der Debitorennummer entfernt + * + * @return + */ + private String getDbtNr() { + String dbtNr = workflowController.getWorkitem().getItemValueString("dbtr.number"); + if (dbtNr.startsWith("D") || dbtNr.startsWith("K")) { + dbtNr = dbtNr.substring(1); + } + return dbtNr; + } + +} diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticControllerSteuer.java similarity index 99% rename from office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticController.java rename to office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticControllerSteuer.java index b475642..ed7c582 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticController.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticControllerSteuer.java @@ -33,7 +33,7 @@ import jakarta.json.JsonObjectBuilder; */ @Named @RequestScoped -public class AGLAnalyticController implements Serializable { +public class AGLAnalyticControllerSteuer implements Serializable { private static final long serialVersionUID = 1L; private static Logger logger = Logger.getLogger(AnalyticController.class.getName()); diff --git a/office-alexander-logistics-app/src/main/webapp/pages/dbtr-stats.xhtml b/office-alexander-logistics-app/src/main/webapp/pages/dbtr-stats.xhtml index 7ba689f..9f1b7f2 100644 --- a/office-alexander-logistics-app/src/main/webapp/pages/dbtr-stats.xhtml +++ b/office-alexander-logistics-app/src/main/webapp/pages/dbtr-stats.xhtml @@ -38,6 +38,14 @@ } }; + /* + * Hilfsmethode die nur fur Ajax Events in JSF render verwendet wird + */ + function ajaxUpdateInvoiceSelection(data) { + if (data.status === 'success') { + // no op + } + } /*]]>*/ @@ -115,7 +123,8 @@ pt:data-resultlist="autocomplete-resultlist-cargosoft" pt:autocomplete="off" /> - + diff --git a/office-alexander-logistics-app/src/main/webapp/pages/workitems/parts/alexander/analyze_currency.xhtml b/office-alexander-logistics-app/src/main/webapp/pages/workitems/parts/alexander/analyze_currency.xhtml new file mode 100644 index 0000000..daddd50 --- /dev/null +++ b/office-alexander-logistics-app/src/main/webapp/pages/workitems/parts/alexander/analyze_currency.xhtml @@ -0,0 +1,67 @@ + + + + +
+
+ + + +
+ + +
#{analyticController.getLabel(item.name)}
+ + + + +
+ +
\ No newline at end of file diff --git a/office-alexander-logistics-app/src/main/webapp/pages/workitems/parts/alexander/analyze_plain.xhtml b/office-alexander-logistics-app/src/main/webapp/pages/workitems/parts/alexander/analyze_plain.xhtml index daddd50..ac18535 100644 --- a/office-alexander-logistics-app/src/main/webapp/pages/workitems/parts/alexander/analyze_plain.xhtml +++ b/office-alexander-logistics-app/src/main/webapp/pages/workitems/parts/alexander/analyze_plain.xhtml @@ -43,8 +43,7 @@
- - +
diff --git a/office-alexander-logistics-app/src/main/webapp/pages/workitems/parts/alexander/debitor_search.xhtml b/office-alexander-logistics-app/src/main/webapp/pages/workitems/parts/alexander/debitor_search.xhtml new file mode 100644 index 0000000..3bffc75 --- /dev/null +++ b/office-alexander-logistics-app/src/main/webapp/pages/workitems/parts/alexander/debitor_search.xhtml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + +
+ + + +
+
+
+ +
\ No newline at end of file diff --git a/workflow/dwc/analyse-debitor-en-1.0.0.bpmn b/workflow/dwc/analyse-debitor-en-1.0.0.bpmn new file mode 100644 index 0000000..3c9f90f --- /dev/null +++ b/workflow/dwc/analyse-debitor-en-1.0.0.bpmn @@ -0,0 +1,465 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + +<itemvalue>$workflowstatus</itemvalue> + +]]> + + + +]]> + + + + + + + + + + + + + + StartEvent_1 + Task_1 + EndEvent_3 + Task_2 + IntermediateCatchEvent_8 + + DataObject_1 + event_HrHS9A + dataObject_00mX6w + + + + SequenceFlow_4 + + + + + + $lasteventdate]]> + + + true + + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_10 + sequenceFlow_OL83kQ + sequenceFlow_P5vJKg + + + + + + SequenceFlow_10 + + + + + + $lasteventdate]]> + + + + + + + + + + + + true + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_4 + sequenceFlow_17AQjg + sequenceFlow_nZPhew + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + sequenceFlow_17AQjg + sequenceFlow_OL83kQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + Mahnwesen + + Steuerbescheide Template + + steuerbescheide_$lasteventdate.xlsx + + + + K6 + $lasteventdate + date + + +TOTAL1;TOTAL2;TOTAL3;TOTAL4 +]]> + + + + + sequenceFlow_nZPhew + sequenceFlow_P5vJKg + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +