From b495b296d06dc21dd7e9fee4dc95448c2825d3f2 Mon Sep 17 00:00:00 2001 From: Ralph Soika Date: Thu, 25 Jul 2024 19:15:15 +0200 Subject: [PATCH] migration auf imixs-office-workflow-5.0.2 --- Dockerfile | 10 +- Dockerfile-wildfly-debug | 5 +- docker-compose.yml | 58 ++------- office-alexander-logistics-app/pom.xml | 29 ++--- .../AGLConfigController.java | 6 +- .../CargosoftController.java | 16 +-- .../CargosoftExportAdapter.java | 9 +- .../CargosoftSplitAdapter.java | 4 +- .../CustomSearchController.java | 10 +- .../DebitorStatistikController.java | 23 ++-- .../com/alexanderlogistics/FTPConnector.java | 11 +- .../InvoiceAnalyseController.java | 36 +++--- .../InvoiceDispatchAdapter.java | 10 +- .../InvoiceDispatchController.java | 20 ++-- .../InvoiceOutgoingPlugin.java | 4 +- .../com/alexanderlogistics/InvoicePlugin.java | 4 +- .../KreditorDebitorService.java | 30 ++--- .../alexanderlogistics/OPListController.java | 12 +- .../OPListExportAdapter.java | 6 +- .../OPListExportAdapterByWeek.java | 4 +- .../OPListExportController.java | 8 +- .../OPListExportScheduler.java | 8 +- .../SEPAExportControllerAGL.java | 8 +- .../ZahlungsavisAppendAdapter.java | 4 +- .../ZahlungsavisController.java | 8 +- .../ZahlungsavisExportAdapter.java | 13 +-- .../ZahlungseingangSaldoAdapter.java | 22 ++-- .../ZahlungseingangService.java | 7 +- .../ZollListController.java | 108 ++++++++--------- .../api/CargosoftMigrationRestService.java | 5 +- .../datev/CargosoftExportController.java | 8 +- .../datev/CargosoftExportScheduler.java | 4 +- .../datev/DatevCargosoftImportAdapter.java | 4 +- .../dwc/SEPAExportAdapterNBD.java | 110 +++--------------- .../mahnlauf/InkassoAppendAdapter.java | 24 ++-- .../mahnlauf/InkassoController.java | 10 +- .../mahnlauf/InkassoExportAdapter.java | 11 +- .../mahnlauf/MahnlaufExecuteAdapter.java | 85 +++++++------- .../mahnlauf/MahnlaufRefAddAdapter.java | 42 +++---- .../mahnlauf/MahnlaufService.java | 12 +- .../xml/CargosoftXMLInvoiceImportService.java | 9 +- .../src/main/webapp/WEB-INF/beans.xml | 7 +- .../TestIMAPAuhtenticators.java | 12 +- .../migration/DueDateBugfix.java | 12 +- pom.xml | 92 ++++++++++----- 45 files changed, 422 insertions(+), 518 deletions(-) diff --git a/Dockerfile b/Dockerfile index b70c58b..96bb63f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,9 @@ -FROM imixs/imixs-office-workflow:4.5.2 -#FROM imixs/imixs-office-workflow:latest -#FROM imixs/imixs-office-workflow:4.4.0 +FROM imixs/imixs-office-workflow + + +# Setup debug configuration +# COPY ./docker/configuration/standalone-debug.xml /opt/jboss/wildfly/standalone/configuration/ # Deploy artefact RUN rm -r /opt/jboss/wildfly/standalone/deployments/* -COPY ./*-app/target/*.war /opt/jboss/wildfly/standalone/deployments/ +COPY ./*-app/target/*-app.war /opt/jboss/wildfly/standalone/deployments/ diff --git a/Dockerfile-wildfly-debug b/Dockerfile-wildfly-debug index be200d4..533ee01 100644 --- a/Dockerfile-wildfly-debug +++ b/Dockerfile-wildfly-debug @@ -1,6 +1,4 @@ -FROM imixs/imixs-office-workflow:4.5.2 -#FROM imixs/imixs-office-workflow:latest -#FROM imixs/imixs-office-workflow:4.4.0 +FROM imixs/imixs-office-workflow # Deploy artefact RUN rm -r /opt/jboss/wildfly/standalone/deployments/* @@ -8,3 +6,4 @@ COPY ./*-app/target/*.war /opt/jboss/wildfly/standalone/deployments/ # Run in Debug Mode CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0", "--debug", "*:8787"] + diff --git a/docker-compose.yml b/docker-compose.yml index 2deab55..177f240 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -36,13 +36,13 @@ services: #OCR_SERVICE_MAXFILESIZE: "1048576" #OCR_PDF_MODE: "OCR_ONLY | TEXT_ONLY | TEXT_AND_OCR (default)" OCR_PDF_MODE: "OCR_ONLY" - ML_SERVICE_ENDPOINT: "http://imixs-ml-spacy:8000/" + #ML_SERVICE_ENDPOINT: "http://imixs-ml-spacy:8000/" # Enable Training Scheduler #ML_TRAINNG_SCHEDULER_ENABLED: "true" # TYPO Issue #28 - ML_TRAINING_SCHEDULER_ENABLED: "true" - ML_TRAINING_SCHEDULER_INTERVAL: "10000" - ML_TRAINING_SCHEDULER_INITIALDELAY: "30000" + #ML_TRAINING_SCHEDULER_ENABLED: "true" + #ML_TRAINING_SCHEDULER_INTERVAL: "10000" + #ML_TRAINING_SCHEDULER_INITIALDELAY: "30000" ports: - "8080:8080" @@ -66,48 +66,13 @@ services: - ############################################### - # Imixs-ML-spaCy Service - ############################################### - imixs-ml-spacy: - #image: imixs/imixs-ml-spacy:1.1.1 - #image: imixs/imixs-ml-spacy:1.1.4 - #image: imixs/imixs-ml-spacy:1.1.6 - image: imixs/imixs-ml-spacy:latest - environment: - PYTHONUNBUFFERED: 1 - TZ: "Europe/Berlin" - MODEL_LANGUAGE: "de" - MODEL_PATH: "models/" - ports: - - "8000:8000" - volumes: - - ./models/:/usr/src/app/models/ - - ############################################### - # Imixs-ML Training service - ############################################### - imixs-ml-training: - image: imixs/imixs-ml-training:latest - environment: - PAYARA_ARGS: "--debug" - TZ: "Europe/Berlin" - OCR_SERVICE_ENDPOINT: "http://tika:9998/tika" - #OCR_PDF_MODE: "OCR_ONLY | TEXT_ONLY | TEXT_AND_OCR (default)" - OCR_PDF_MODE: "OCR_ONLY" - # Payara-Micor ENV - MP_OPENAPI_SERVERS: "http://localhost:8081" - ports: - - "8081:8080" - - "9009:9009" - ############################################### # Imixs-Admin ############################################### - imixsadmin: - image: imixs/imixs-admin - ports: - - "8888:8080" + #imixsadmin: + # image: imixs/imixs-admin + # ports: + # - "8888:8080" ############################################### # Mailgateway @@ -120,13 +85,6 @@ services: EXIM_ALLOWED_SENDERS: "10.0.0.0/8:172.16.0.0/12:192.168.0.0/16" - ############################################### - # Gotenberg Service (HTML2PDF converter) - ############################################### -# gotenberg: -# image: thecodingmachine/gotenberg:6 -# ports: -# - "3000:3000" volumes: dbdata: diff --git a/office-alexander-logistics-app/pom.xml b/office-alexander-logistics-app/pom.xml index 8c1d43e..6d7ac71 100644 --- a/office-alexander-logistics-app/pom.xml +++ b/office-alexander-logistics-app/pom.xml @@ -6,7 +6,7 @@ office-alexander-logistics com.alexander-logistics - 1.2.21 + 1.3.0 office-alexander-logistics-app war @@ -302,31 +302,26 @@ imixs-adapters-poi compile - - org.imixs.workflow - imixs-ml-workflow - ${org.imixs.ml.version} + imixs-ai-workflow + ${org.imixs.ai.version} compile + + + net.sf.saxon + Saxon-HE + org.apache.pdfbox pdfbox - 2.0.19 + ${apache.pdfbox.version} compile - - - net.sf.saxon - Saxon-HE - 9.9.1-4 - - - commons-net @@ -382,11 +377,5 @@ test - - org.imixs.workflow - imixs-melman - ${org.imixs.melman.version} - - \ No newline at end of file diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLConfigController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLConfigController.java index 06e8c39..09cbac6 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLConfigController.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLConfigController.java @@ -23,11 +23,11 @@ *******************************************************************************/ package com.alexanderlogistics; -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Named; - import org.imixs.workflow.office.config.ConfigController; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Named; + /** * The Custom Config Controller for TAXES and Invoice typs * diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CargosoftController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CargosoftController.java index 44b52d8..ecd725e 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CargosoftController.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CargosoftController.java @@ -9,20 +9,20 @@ import java.util.List; import java.util.logging.Logger; import java.util.stream.Collectors; -import javax.enterprise.context.ConversationScoped; -import javax.faces.context.FacesContext; -import javax.inject.Inject; -import javax.inject.Named; -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonObjectBuilder; - import org.imixs.workflow.ItemCollection; import org.imixs.workflow.engine.DocumentService; import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.faces.util.ErrorHandler; +import jakarta.enterprise.context.ConversationScoped; +import jakarta.faces.context.FacesContext; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.json.Json; +import jakarta.json.JsonObject; +import jakarta.json.JsonObjectBuilder; + /** * The CargosoftController CDI Bean provides Front-End methods for the cargosoft * kreditore objects. diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CargosoftExportAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CargosoftExportAdapter.java index 35439da..eca0fdc 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CargosoftExportAdapter.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CargosoftExportAdapter.java @@ -6,10 +6,6 @@ import java.util.List; import java.util.Optional; import java.util.logging.Logger; -import javax.inject.Inject; -import javax.xml.bind.JAXBException; -import javax.xml.transform.TransformerException; - import org.eclipse.microprofile.config.inject.ConfigProperty; import org.imixs.archive.core.SnapshotService; import org.imixs.workflow.FileData; @@ -20,6 +16,8 @@ import org.imixs.workflow.engine.WorkflowService; import org.imixs.workflow.exceptions.AdapterException; import org.imixs.workflow.exceptions.PluginException; +import jakarta.inject.Inject; + /** * This adapter exports the invoice data to a ftp server connected to cargosoft. *

@@ -115,7 +113,8 @@ public class CargosoftExportAdapter implements SignalAdapter { // finally append the success event id document.event(EVENT_SUCCESS); - } catch (PluginException | JAXBException | TransformerException | IOException e) { + } catch (PluginException | IOException + | jakarta.xml.bind.JAXBException | javax.xml.transform.TransformerException e) { logger.severe("cargosoft export failed: " + e.getMessage()); document.setItemValue("cargosoft.error", e.getMessage()); document.event(EVENT_FAILURE); diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CargosoftSplitAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CargosoftSplitAdapter.java index 9fe0355..6ddc396 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CargosoftSplitAdapter.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CargosoftSplitAdapter.java @@ -8,8 +8,6 @@ import java.util.StringTokenizer; import java.util.logging.Logger; import java.util.regex.Pattern; -import javax.inject.Inject; - import org.imixs.workflow.ItemCollection; import org.imixs.workflow.SignalAdapter; import org.imixs.workflow.WorkflowKernel; @@ -20,6 +18,8 @@ import org.imixs.workflow.exceptions.ModelException; import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.office.util.SequenceService; +import jakarta.inject.Inject; + /** * Der CargosoftSplitAdapter erezeugt anhand der Positionstablelle eignee * cargosoft export workitems, getrennt für jede Buchungsperdiode. Dies ist diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CustomSearchController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CustomSearchController.java index 017185c..42d6a11 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CustomSearchController.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CustomSearchController.java @@ -32,16 +32,16 @@ import java.util.Calendar; import java.util.Date; import java.util.logging.Logger; -import javax.enterprise.context.RequestScoped; -import javax.enterprise.event.Observes; -import javax.inject.Inject; -import javax.inject.Named; - import org.imixs.marty.team.TeamController; import org.imixs.workflow.ItemCollection; import org.imixs.workflow.office.views.SearchController; import org.imixs.workflow.office.views.SearchEvent; +import jakarta.enterprise.context.RequestScoped; +import jakarta.enterprise.event.Observes; +import jakarta.inject.Inject; +import jakarta.inject.Named; + /** * Der CustomSearchController reagiert auf SeachEvents und erweitert das Search * Query um Rechnungbetrag von-bis. diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/DebitorStatistikController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/DebitorStatistikController.java index f6b4481..049c467 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/DebitorStatistikController.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/DebitorStatistikController.java @@ -18,12 +18,6 @@ import java.util.TreeMap; import java.util.logging.Logger; import java.util.stream.Collectors; -import javax.annotation.PostConstruct; -import javax.enterprise.context.ConversationScoped; -import javax.faces.context.FacesContext; -import javax.inject.Inject; -import javax.inject.Named; - import org.imixs.workflow.ItemCollection; import org.imixs.workflow.engine.DocumentService; import org.imixs.workflow.exceptions.PluginException; @@ -31,6 +25,12 @@ import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.faces.data.WorkflowController; import org.imixs.workflow.office.views.SearchController; +import jakarta.annotation.PostConstruct; +import jakarta.enterprise.context.ConversationScoped; +import jakarta.faces.context.FacesContext; +import jakarta.inject.Inject; +import jakarta.inject.Named; + /** * Der InvoiceAnalyseController dient zur Auswertung der Sachprüfungs WOrklfow * Schritte. Die Analyse Seite ist büer das Admin Menü erreichbar. @@ -83,6 +83,7 @@ public class DebitorStatistikController implements Serializable { } } } + public ItemCollection getWorkitem() { return workflowController.getWorkitem(); } @@ -100,6 +101,7 @@ public class DebitorStatistikController implements Serializable { public String getBookmark() { return "/pages/dbtr-stats.xhtml?dbtr.number=" + getDbtNr() + "&faces-redirect=true"; } + /* * Gesamt */ @@ -108,6 +110,7 @@ public class DebitorStatistikController implements Serializable { + " AND $workflowgroup:\"Rechnungsausgang\""; return "/pages/workitems/worklist?title=Rechnungen " + getDbtNr() + " gesamt&query=" + query; } + public int getRechnungen() { int result = 0; if (getDbtNr().isEmpty()) { @@ -123,7 +126,6 @@ public class DebitorStatistikController implements Serializable { return result; } - /* * Bezahlt */ @@ -132,6 +134,7 @@ public class DebitorStatistikController implements Serializable { + " AND $workflowgroup:\"Rechnungsausgang\" AND ($taskid:[5900 TO 5999])"; return "/pages/workitems/worklist?title=Rechnungen " + getDbtNr() + " bezahlt&query=" + query; } + public int getRechnungenBezahlt() { int result = 0; if (getDbtNr().isEmpty()) { @@ -155,6 +158,7 @@ public class DebitorStatistikController implements Serializable { + " AND $workflowgroup:\"Rechnungsausgang\" AND ($taskid:[5000 TO 5099])"; return "/pages/workitems/worklist?title=Rechnungen " + getDbtNr() + " offen&query=" + query; } + public int getRechnungenOffen() { int result = 0; if (getDbtNr().isEmpty()) { @@ -178,6 +182,7 @@ public class DebitorStatistikController implements Serializable { + " AND $workflowgroup:\"Rechnungsausgang\" AND ($taskid:[5100 TO 5199])"; return "/pages/workitems/worklist?title=Rechnungen " + getDbtNr() + " fällig&query=" + query; } + public int getRechnungenFaellig() { int result = 0; if (getDbtNr().isEmpty()) { @@ -201,6 +206,7 @@ public class DebitorStatistikController implements Serializable { + " AND $workflowgroup:\"Rechnungsausgang\" AND ($taskid:[5200 TO 5299])"; return "/pages/workitems/worklist?title=Rechnungen " + getDbtNr() + " in Mahnung&query=" + query; } + public int getRechnungenGemahnt() { int result = 0; if (getDbtNr().isEmpty()) { @@ -224,6 +230,7 @@ public class DebitorStatistikController implements Serializable { + " AND $workflowgroup:\"Rechnungsausgang\" AND ($taskid:[5300 TO 5399])"; return "/pages/workitems/worklist?title=Rechnungen " + getDbtNr() + " in Inkasso&query=" + query; } + public int getRechnungenInkasso() { int result = 0; if (getDbtNr().isEmpty()) { @@ -390,6 +397,7 @@ public class DebitorStatistikController implements Serializable { } } + /** * returns * @@ -559,7 +567,6 @@ public class DebitorStatistikController implements Serializable { result = result + " trendlineLinear: { colorMin: \"red\", colorMax: \"green\", lineStyle: \"dotted\", width: 2 , projection: true },"; - result = result + "data: ["; for (Map.Entry entry : stats.entrySet()) { result = result + entry.getValue().getAveragePaymentDays() + ","; diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/FTPConnector.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/FTPConnector.java index fe465ed..d728880 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/FTPConnector.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/FTPConnector.java @@ -29,9 +29,7 @@ import java.io.InputStream; import java.util.Optional; import java.util.logging.Logger; -import javax.ejb.Stateless; -import javax.inject.Inject; - +import org.apache.commons.compress.archivers.ArchiveException; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPSClient; @@ -39,6 +37,9 @@ import org.eclipse.microprofile.config.inject.ConfigProperty; import org.imixs.workflow.FileData; import org.imixs.workflow.exceptions.PluginException; +import jakarta.ejb.Stateless; +import jakarta.inject.Inject; + /** * The FTPConnector service provides methods to push invoices to cargosoft * @@ -55,7 +56,7 @@ public class FTPConnector { public static final String ENV_EXPORT_FTP_PORT = "cargosoft.export.ftp.port"; public static final String ENV_EXPORT_FTP_USER = "cargosoft.export.ftp.user"; public static final String ENV_EXPORT_FTP_PASSWORD = "cargosoft.export.ftp.password"; - + public static final String ENV_EXPORT_FTP_MAX_ATTACHMENT_SIZED = "cargosoft.export.ftp.maxattachmentsize"; private static Logger logger = Logger.getLogger(FTPConnector.class.getName()); @@ -92,7 +93,7 @@ public class FTPConnector { throw new PluginException(CargosoftExportAdapter.class.getSimpleName(), FTP_ERROR, "FTP file transfer failed: no ftp host name provided (" + ENV_EXPORT_FTP_HOST + ")!"); } - + String fileName = fileData.getName(); // Compute file path diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceAnalyseController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceAnalyseController.java index e49becc..61b5354 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceAnalyseController.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceAnalyseController.java @@ -10,15 +10,15 @@ import java.util.Date; import java.util.List; import java.util.logging.Logger; -import javax.enterprise.context.ConversationScoped; -import javax.inject.Inject; -import javax.inject.Named; - import org.imixs.workflow.ItemCollection; import org.imixs.workflow.engine.DocumentService; import org.imixs.workflow.engine.index.Category; import org.imixs.workflow.engine.index.SearchService; +import jakarta.enterprise.context.ConversationScoped; +import jakarta.inject.Inject; +import jakarta.inject.Named; + /** * Der InvoiceAnalyseController dient zur Auswertung der Sachprüfungs WOrklfow * Schritte. Die Analyse Seite ist büer das Admin Menü erreichbar. @@ -73,10 +73,10 @@ public class InvoiceAnalyseController implements Serializable { } public Category getBuchhaltung() { - return buchhaltung; - } + return buchhaltung; + } - public int totalCountByCategory(Category cat) { + public int totalCountByCategory(Category cat) { int result = 0; Collection allCounts = cat.getLabels().values(); @@ -138,18 +138,18 @@ public class InvoiceAnalyseController implements Serializable { sachpruefung = taxResult.get(0); } - - // query Buchhaltung - query = "(type:workitem OR type:workitemarchive) "; - if (start != null || stop != null) { - query += "AND (taxonomy.buchhaltung.stop:[" + sDateFrom + " TO " + sDateTo + "]) "; - } - logger.info(query); - taxResult = searchService.getTaxonomyByQuery(query, "taxonomy.buchhaltung.stop.by"); - if (taxResult.size() > 0) { - buchhaltung = taxResult.get(0); - } + // query Buchhaltung + query = "(type:workitem OR type:workitemarchive) "; + if (start != null || stop != null) { + query += "AND (taxonomy.buchhaltung.stop:[" + sDateFrom + " TO " + sDateTo + "]) "; + } + logger.info(query); + taxResult = searchService.getTaxonomyByQuery(query, "taxonomy.buchhaltung.stop.by"); + if (taxResult.size() > 0) { + buchhaltung = taxResult.get(0); + + } } diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceDispatchAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceDispatchAdapter.java index e01f55b..0320ebd 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceDispatchAdapter.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceDispatchAdapter.java @@ -2,8 +2,6 @@ package com.alexanderlogistics; import java.util.logging.Logger; -import javax.inject.Inject; - import org.imixs.workflow.ItemCollection; import org.imixs.workflow.SignalAdapter; import org.imixs.workflow.engine.WorkflowService; @@ -13,6 +11,8 @@ import org.imixs.workflow.exceptions.ModelException; import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.exceptions.ProcessingErrorException; +import jakarta.inject.Inject; + /** * Der InvoiceDispatchAdapter verteilt die vom Abteilungsleiter ausgewählten * Rechnungen @@ -48,15 +48,15 @@ public class InvoiceDispatchAdapter implements SignalAdapter { String sSelection = document.getItemValueString("invoice.selection"); // cut first , if (sSelection.startsWith(",")) { - sSelection=sSelection.substring(1); + sSelection = sSelection.substring(1); } String[] ids = sSelection.split(","); - if (ids.length==0 || ids[0].isEmpty()) { + if (ids.length == 0 || ids[0].isEmpty()) { throw new PluginException(InvoiceDispatchAdapter.class.getSimpleName(), "PROCESSING_ERROR", "Es wurden keine Rechnungen zur Verteilung ausgewählt."); } - + for (String id : ids) { // load invoice ItemCollection invoice = workflowService.getWorkItem(id); diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceDispatchController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceDispatchController.java index c3c06f7..6c17746 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceDispatchController.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceDispatchController.java @@ -5,15 +5,15 @@ import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; -import javax.enterprise.context.ConversationScoped; -import javax.inject.Inject; -import javax.inject.Named; - import org.imixs.workflow.ItemCollection; import org.imixs.workflow.engine.DocumentService; import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.faces.util.LoginController; +import jakarta.enterprise.context.ConversationScoped; +import jakarta.inject.Inject; +import jakarta.inject.Named; + /** * The InvoiceDispatchController loads open workitems for the current user * @@ -34,9 +34,8 @@ public class InvoiceDispatchController implements Serializable { protected LoginController loginController; private List invoices = null; - private String filter =null; + private String filter = null; - public String getFilter() { return filter; } @@ -54,19 +53,20 @@ public class InvoiceDispatchController implements Serializable { * */ public void searchInvoices() { - long l=System.currentTimeMillis(); + long l = System.currentTimeMillis(); String owner = loginController.getUserPrincipal(); String query = "(type:workitem) AND ($modelversion:rechnungseingang-de*) AND ($taskid:5100) AND ($owner:" + owner + ")"; - if (filter!=null && !filter.isEmpty()) { - query=query + " AND "+filter.toLowerCase() +"*"; + if (filter != null && !filter.isEmpty()) { + query = query + " AND " + filter.toLowerCase() + "*"; } logger.info("search: " + query); try { invoices = documentService.findStubs(query, 2000, 0, "$created", false); - logger.info("found " + invoices.size() + " invoices for StapelVerarbeitung in " + (System.currentTimeMillis()-l) + "ms"); + logger.info("found " + invoices.size() + " invoices for StapelVerarbeitung in " + + (System.currentTimeMillis() - l) + "ms"); } catch (QueryException e) { e.printStackTrace(); reset(); diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceOutgoingPlugin.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceOutgoingPlugin.java index 904bc5b..9eb7b4f 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceOutgoingPlugin.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceOutgoingPlugin.java @@ -1,11 +1,11 @@ package com.alexanderlogistics; -import javax.inject.Inject; - import org.imixs.workflow.ItemCollection; import org.imixs.workflow.engine.plugins.AbstractPlugin; import org.imixs.workflow.exceptions.PluginException; +import jakarta.inject.Inject; + /** * Das InvoiceOutgoingPlugin aktualisiert die Debitor E-Mail Adresse * diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoicePlugin.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoicePlugin.java index 6b3731b..533e7fb 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoicePlugin.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoicePlugin.java @@ -6,14 +6,14 @@ import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.inject.Inject; - import org.imixs.workflow.ItemCollection; import org.imixs.workflow.engine.plugins.AbstractPlugin; import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.faces.util.ResourceBundleHandler; +import jakarta.inject.Inject; + /** * Das InvoicePlugin prüft die Eingaben auf Gültigkeit, so dass diese problemlos * nach Cargosoft exportiert werden können. diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/KreditorDebitorService.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/KreditorDebitorService.java index d771bd5..b2cb814 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/KreditorDebitorService.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/KreditorDebitorService.java @@ -33,14 +33,15 @@ import java.util.logging.Logger; import javax.annotation.security.DeclareRoles; import javax.annotation.security.RolesAllowed; import javax.annotation.security.RunAs; -import javax.ejb.EJB; -import javax.ejb.Singleton; import org.imixs.workflow.ItemCollection; import org.imixs.workflow.engine.DocumentService; import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.exceptions.QueryException; +import jakarta.ejb.EJB; +import jakarta.ejb.Singleton; + /** * Der KreditorService wird verwendet um einen Kreditor zu finden oder neue * IBAN/BIC kombinationen aufzunehmen. @@ -67,7 +68,8 @@ public class KreditorDebitorService { DocumentService documentService; /** - * Diese Method sucht einen Kreditor/Debitor. Bei Cargosoft haben kreditoren und debitoren + * Diese Method sucht einen Kreditor/Debitor. Bei Cargosoft haben kreditoren und + * debitoren * die selbe nummer und haben nur ein führendes D/K (Absolutler Irrsinn) *

* Diese Methode erwartet das führende K oder D @@ -76,8 +78,9 @@ public class KreditorDebitorService { */ public ItemCollection findCreditorDebitor(String cdtrNumber) throws PluginException { - if (cdtrNumber==null || !(cdtrNumber.startsWith("K") || cdtrNumber.startsWith("D"))) { - throw new PluginException(PluginException.class.getName(), "QUERY ERROR", "Invalid debitor/creditor number - prafix K/D expected!"); + if (cdtrNumber == null || !(cdtrNumber.startsWith("K") || cdtrNumber.startsWith("D"))) { + throw new PluginException(PluginException.class.getName(), "QUERY ERROR", + "Invalid debitor/creditor number - prafix K/D expected!"); } try { String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ") AND (name:" + cdtrNumber + ")"; @@ -93,18 +96,17 @@ public class KreditorDebitorService { return null; } - /** - * Diese Method sucht einen Kreditor. + * Diese Method sucht einen Kreditor. *

- * Diese Methode erwartet das führende K + * Diese Methode erwartet das führende K * * @throws PluginException */ public ItemCollection findCreditor(String cdtrNumber) throws PluginException { if ((!cdtrNumber.startsWith("K"))) { - cdtrNumber="K"+cdtrNumber; + cdtrNumber = "K" + cdtrNumber; } try { String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ") AND (name:" + cdtrNumber + ")"; @@ -119,18 +121,18 @@ public class KreditorDebitorService { return null; } - + /** - * Diese Method sucht einen Debitor. + * Diese Method sucht einen Debitor. *

- * Diese Methode erwartet das führende D + * Diese Methode erwartet das führende D * * @throws PluginException */ public ItemCollection findDebitor(String dbtrNumber) throws PluginException { if ((!dbtrNumber.startsWith("D"))) { - dbtrNumber="D"+dbtrNumber; + dbtrNumber = "D" + dbtrNumber; } try { String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ") AND (name:" + dbtrNumber + ")"; @@ -146,8 +148,6 @@ public class KreditorDebitorService { return null; } - - /** * Diese Methode übertragt neue IBAN/BIC kombis in den kreditor * diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListController.java index 1ed4730..e59112a 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListController.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListController.java @@ -7,12 +7,6 @@ import java.util.List; import java.util.Map; import java.util.logging.Logger; -import javax.enterprise.context.ConversationScoped; -import javax.enterprise.event.Observes; -import javax.faces.context.FacesContext; -import javax.inject.Inject; -import javax.inject.Named; - import org.imixs.workflow.ItemCollection; import org.imixs.workflow.WorkflowKernel; import org.imixs.workflow.engine.DocumentService; @@ -21,6 +15,12 @@ import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.faces.data.WorkflowController; import org.imixs.workflow.faces.data.WorkflowEvent; +import jakarta.enterprise.context.ConversationScoped; +import jakarta.enterprise.event.Observes; +import jakarta.faces.context.FacesContext; +import jakarta.inject.Inject; +import jakarta.inject.Named; + /** * Der OPListeController dient dazu eine liste aller offenen Ausgangsrechnungen * zu bilden diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportAdapter.java index d848fe5..8a8ebf9 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportAdapter.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportAdapter.java @@ -12,9 +12,6 @@ import java.util.List; import java.util.Map; import java.util.logging.Logger; -import javax.ejb.EJB; -import javax.inject.Inject; - import org.apache.poi.ss.usermodel.CellCopyPolicy; import org.apache.poi.ss.util.CellReference; import org.apache.poi.xssf.usermodel.XSSFCell; @@ -32,6 +29,9 @@ import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.office.config.ConfigService; import org.imixs.workflow.poi.POIFindReplaceAdapter; +import jakarta.ejb.EJB; +import jakarta.inject.Inject; + /** * Der OPListExportAdapter importiert eine Excel Datei aus einem Textblock * diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportAdapterByWeek.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportAdapterByWeek.java index a75e3e9..fad913a 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportAdapterByWeek.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportAdapterByWeek.java @@ -16,8 +16,6 @@ import java.util.List; import java.util.Map; import java.util.logging.Logger; -import javax.inject.Inject; - import org.apache.poi.ss.usermodel.CellCopyPolicy; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.FillPatternType; @@ -39,6 +37,8 @@ import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.office.config.ConfigService; import org.imixs.workflow.poi.POIFindReplaceAdapter; +import jakarta.inject.Inject; + /** * Der OPListExportAdapterByWeek ist ählnlich dem Der OPListExportAdapter. Er * erzeugt eine Excel tabelle mit allen offenen Rechnungen und gruppiert diese diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportController.java index 664b6fd..550b888 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportController.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportController.java @@ -26,12 +26,12 @@ package com.alexanderlogistics; import java.util.logging.Logger; -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.inject.Named; - import org.imixs.workflow.engine.scheduler.SchedulerController; +import jakarta.enterprise.context.RequestScoped; +import jakarta.inject.Inject; +import jakarta.inject.Named; + /** * The OPListExportController is used to configure the OpListeExporterService. * This service is diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportScheduler.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportScheduler.java index 2d1ac2e..4159293 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportScheduler.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportScheduler.java @@ -31,10 +31,6 @@ import java.util.Date; import java.util.List; import java.util.logging.Logger; -import javax.ejb.EJB; -import javax.ejb.TransactionAttribute; -import javax.ejb.TransactionAttributeType; - import org.imixs.marty.team.TeamService; import org.imixs.workflow.ItemCollection; import org.imixs.workflow.WorkflowKernel; @@ -49,6 +45,10 @@ import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.exceptions.ProcessingErrorException; import org.imixs.workflow.exceptions.QueryException; +import jakarta.ejb.EJB; +import jakarta.ejb.TransactionAttribute; +import jakarta.ejb.TransactionAttributeType; + /** * The OPListExportScheduler erzeugt für jeden Bereich ein neues Workitem mit * einer Excel Datei mit allen offenen Rechnungen. diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/SEPAExportControllerAGL.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/SEPAExportControllerAGL.java index c4ae7c6..3de738c 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/SEPAExportControllerAGL.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/SEPAExportControllerAGL.java @@ -4,15 +4,15 @@ import java.io.Serializable; import java.util.List; import java.util.logging.Logger; -import javax.enterprise.context.ConversationScoped; -import javax.inject.Inject; -import javax.inject.Named; - import org.imixs.workflow.ItemCollection; import org.imixs.workflow.engine.DocumentService; import org.imixs.workflow.faces.data.WorkflowController; import org.imixs.workflow.sepa.controller.SepaController; +import jakarta.enterprise.context.ConversationScoped; +import jakarta.inject.Inject; +import jakarta.inject.Named; + /** * Der SEPAExportControllerAGL dient dazu die IBAN/BIC einstellungen in * einem SEPA Export zu aktualiseren. Er wird von der Form diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungsavisAppendAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungsavisAppendAdapter.java index defa813..9dda062 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungsavisAppendAdapter.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungsavisAppendAdapter.java @@ -3,8 +3,6 @@ package com.alexanderlogistics; import java.util.List; import java.util.logging.Logger; -import javax.inject.Inject; - import org.imixs.workflow.ItemCollection; import org.imixs.workflow.SignalAdapter; import org.imixs.workflow.engine.WorkflowService; @@ -15,6 +13,8 @@ import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.exceptions.ProcessingErrorException; import org.imixs.workflow.exceptions.QueryException; +import jakarta.inject.Inject; + /** * Der ZahlungsavisAdapter verknüpft eine Rechnung mit einem Zahlungsavsis zum * aktuellen Kreiditor. Existiert aktuell kein offener Zahlungsavis für diesen diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungsavisController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungsavisController.java index 63ede25..0e98a34 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungsavisController.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungsavisController.java @@ -4,14 +4,14 @@ import java.io.Serializable; import java.util.List; import java.util.logging.Logger; -import javax.enterprise.context.ConversationScoped; -import javax.inject.Inject; -import javax.inject.Named; - import org.imixs.workflow.ItemCollection; import org.imixs.workflow.engine.DocumentService; import org.imixs.workflow.faces.data.WorkflowController; +import jakarta.enterprise.context.ConversationScoped; +import jakarta.inject.Inject; +import jakarta.inject.Named; + /** * Der ZahlungsavisController dient dazu eine bereits zugewiesene Rechnung * wieder aus dem Zahlugnsavis zu entfernen. diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungsavisExportAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungsavisExportAdapter.java index 5ceb94f..7904a7b 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungsavisExportAdapter.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungsavisExportAdapter.java @@ -8,8 +8,6 @@ import java.util.Collection; import java.util.List; import java.util.logging.Logger; -import javax.inject.Inject; - import org.apache.poi.ss.usermodel.CellCopyPolicy; import org.apache.poi.ss.util.CellReference; import org.apache.poi.xssf.usermodel.XSSFRow; @@ -23,9 +21,10 @@ import org.imixs.workflow.engine.WorkflowService; import org.imixs.workflow.exceptions.AdapterException; import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.exceptions.QueryException; - import org.imixs.workflow.poi.POIFindReplaceAdapter; +import jakarta.inject.Inject; + /** * Der ZahlungsavisAdapter importiert eine Excel Datei aus einem Textblock * @@ -43,7 +42,7 @@ import org.imixs.workflow.poi.POIFindReplaceAdapter; *

* Der Adapter kopiert die Rechnungsdaten in neue Zeilen, welche ab Zeilnenummer * 16 eingefügt werden. - *

+ *

* Dabei werden Gutschriften in spalte E und Rechnungen in Spalte F eingetrgen. *

* Abschliessend wird die Zelle 'TOTAL' noch aktualisiert. @@ -139,9 +138,9 @@ public class ZahlungsavisExportAdapter extends POIFindReplaceAdapter { XSSFRow referenceRow = sheet.getRow(cr.getRow()); int referenceRowPos = 16; int rowPos = 16; - //int lastRow = sheet.getLastRowNum(); + // int lastRow = sheet.getLastRowNum(); int lastRow = 999; - logger.finest("Last rownum="+lastRow); + logger.finest("Last rownum=" + lastRow); sheet.shiftRows(rowPos, lastRow, invoiceIDs.size(), true, true); for (String invoiceID : invoiceIDs) { @@ -155,7 +154,7 @@ public class ZahlungsavisExportAdapter extends POIFindReplaceAdapter { row.getCell(1).setCellValue(invoice.getItemValueDate("invoice.date")); row.getCell(2).setCellValue(invoice.getItemValueString("invoice.number")); row.getCell(3).setCellValue(invoice.getItemValueDate("invoice.duedate")); - + if ("credit".equals(invoice.getItemValueString("payment.type"))) { // Gutschrift row.getCell(4).setCellValue(invoice.getItemValueDouble("invoice.total")); diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungseingangSaldoAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungseingangSaldoAdapter.java index f4cdea6..b9d3c34 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungseingangSaldoAdapter.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungseingangSaldoAdapter.java @@ -3,13 +3,13 @@ package com.alexanderlogistics; import java.util.List; import java.util.logging.Logger; -import javax.inject.Inject; - import org.imixs.workflow.ItemCollection; import org.imixs.workflow.SignalAdapter; import org.imixs.workflow.exceptions.AdapterException; import org.imixs.workflow.exceptions.PluginException; +import jakarta.inject.Inject; + /** * Der ZahlungseingangSaldoAdapter korrigiert den Saldo einer Ausgangsrechnung * anhand der Zahlungsdaten in einem Zahlungseingangsworkflow. @@ -83,7 +83,7 @@ public class ZahlungseingangSaldoAdapter implements SignalAdapter { if (paymentWarning.isEmpty()) { // falls mehr einzelsummen eingeben wurden als der oben angegeben Total Pamyment // dann soll eine Warnung ausgegen werden. - if ( InvoiceUtil.round(masterPaymentAmount+masterPaymentDifference) != InvoiceUtil.round(einzelPayments)) { + if (InvoiceUtil.round(masterPaymentAmount + masterPaymentDifference) != InvoiceUtil.round(einzelPayments)) { document.setItemValue("payment.warning", "invalid saldo"); throw new PluginException(PluginException.class.getName(), ZahlungseingangService.ERROR_PAYMENT_BOOKING_FAILED, @@ -91,7 +91,6 @@ public class ZahlungseingangSaldoAdapter implements SignalAdapter { } } - for (ItemCollection payment : paymentDetails) { ItemCollection invoice = zahlungseingangService.findInvoice(payment.getUniqueID()); @@ -103,7 +102,6 @@ public class ZahlungseingangSaldoAdapter implements SignalAdapter { float invoicePaymentAmount = payment.getItemValueFloat("payment.amount"); float invoiceRate = invoice.getItemValueFloat("invoice.rate"); - if (!invoiceCurrency.equals(paymentCurrency)) { if (invoiceRate == 0) { throw new PluginException(PluginException.class.getName(), @@ -112,19 +110,18 @@ public class ZahlungseingangSaldoAdapter implements SignalAdapter { + " nicht mit der Währung der Rechnung " + invoiceNumber + " übereinstimmt!"); } } - + /** * Falls die Währung der Rechnung von der Währung der Zahlung abweicht, dann * rechnen wir den PaymentAmmout mit der Rate aus. */ if ("EUR".equals(paymentCurrency) && !invoiceCurrency.equals(paymentCurrency) && invoiceRate != 0) { - invoicePaymentAmount = invoicePaymentAmount*invoiceRate; + invoicePaymentAmount = invoicePaymentAmount * invoiceRate; // runde auf 2 Stellen - invoicePaymentAmount =(float) InvoiceUtil.round(invoicePaymentAmount); + invoicePaymentAmount = (float) InvoiceUtil.round(invoicePaymentAmount); } - - + // vergeiche Restsaldo mit payment für diese Rechnung if (Math.abs(InvoiceUtil.round(invoicePaymentAmount)) > Math.abs(InvoiceUtil.round(invoiceSaldo))) { throw new PluginException(PluginException.class.getName(), @@ -135,9 +132,8 @@ public class ZahlungseingangSaldoAdapter implements SignalAdapter { // jetzt den Rechnungsbetrag verkleinern invoiceSaldo = invoiceSaldo - invoicePaymentAmount; - - - invoiceSaldo=(float) InvoiceUtil.round(invoiceSaldo); + + invoiceSaldo = (float) InvoiceUtil.round(invoiceSaldo); invoice.setItemValue("invoice.saldo", invoiceSaldo); invoice.event(ZahlungseingangService.EVENT_UPDATE_INVOICE); zahlungseingangService.processInvoice(invoice); diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungseingangService.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungseingangService.java index 558b8a4..2c5eb3c 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungseingangService.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungseingangService.java @@ -35,8 +35,6 @@ import java.util.logging.Logger; import javax.annotation.security.DeclareRoles; import javax.annotation.security.RolesAllowed; import javax.annotation.security.RunAs; -import javax.ejb.Singleton; -import javax.inject.Inject; import org.imixs.workflow.ItemCollection; import org.imixs.workflow.engine.DocumentService; @@ -46,6 +44,9 @@ import org.imixs.workflow.exceptions.ModelException; import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.exceptions.ProcessingErrorException; +import jakarta.ejb.Singleton; +import jakarta.inject.Inject; + /** * Der ZahlungseingangService wird vom ZahlungseingangSaldoAdapter verwendet um * Ausgangsrechnungen zu akutalisieren. @@ -63,7 +64,7 @@ import org.imixs.workflow.exceptions.ProcessingErrorException; @Singleton @RunAs("org.imixs.ACCESSLEVEL.MANAGERACCESS") public class ZahlungseingangService { - + public static final int EVENT_UPDATE_INVOICE = 200; public static final String ERROR_PAYMENT_BOOKING_FAILED = "PAYMENT_BOOKING_FAILED"; public static final String ITEM_PAYMENT_DETAILS = "payment.details"; diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZollListController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZollListController.java index 2b1c34c..da56ed9 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZollListController.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZollListController.java @@ -5,15 +5,15 @@ import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; -import javax.enterprise.context.ConversationScoped; -import javax.inject.Inject; -import javax.inject.Named; - import org.imixs.workflow.ItemCollection; import org.imixs.workflow.engine.DocumentService; import org.imixs.workflow.engine.WorkflowService; import org.imixs.workflow.faces.data.WorkflowController; +import jakarta.enterprise.context.ConversationScoped; +import jakarta.inject.Inject; +import jakarta.inject.Named; + /** * Der ZollListController dient dazu in einer Zoll Liste die Rechnungen * anzuzeigen, @@ -28,70 +28,70 @@ import org.imixs.workflow.faces.data.WorkflowController; @ConversationScoped public class ZollListController implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - public static final int TASK_ERSTELLUNG = 1000; + public static final int TASK_ERSTELLUNG = 1000; - private static Logger logger = Logger.getLogger(ZollListController.class.getName()); + private static Logger logger = Logger.getLogger(ZollListController.class.getName()); - private String lastDbtrNumber = null; + private String lastDbtrNumber = null; - private String currencyFilter = "-"; - private String lastCurrencyFilter = null; + private String currencyFilter = "-"; + private String lastCurrencyFilter = null; - private List invoiceList = null; + private List invoiceList = null; - @Inject - protected WorkflowController workflowController; + @Inject + protected WorkflowController workflowController; - @Inject - protected WorkflowService workflowService; + @Inject + protected WorkflowService workflowService; - @Inject - ZahlungseingangService zahlungseingangService; + @Inject + ZahlungseingangService zahlungseingangService; - @Inject - protected DocumentService documentService; + @Inject + protected DocumentService documentService; - /** - * Diese Methode ist eine Dummy Methode die nur mal 3 Rechnungen simmuliert. - * - * Später wird diese Methode irgend was anderes machen. - * - * - * @return - */ - @SuppressWarnings("unchecked") - public List getInvoices() { - invoiceList = new ArrayList(); + /** + * Diese Methode ist eine Dummy Methode die nur mal 3 Rechnungen simmuliert. + * + * Später wird diese Methode irgend was anderes machen. + * + * + * @return + */ + @SuppressWarnings("unchecked") + public List getInvoices() { + invoiceList = new ArrayList(); - // dummy1 + // dummy1 - invoiceList.add(new ItemCollection() - .setItemValue("invoice.text", "LA-HOL-2401-002") - .setItemValue("invoice.atc", "ATC400058750120242452") - .setItemValue("dbtr.name", "D18317 Big Belly Solar GmbH") - .setItemValue("invoice.ZOLL", 18.45) - .setItemValue("invoice.EUST", 0) - .setItemValue("invoice.number", "")); + invoiceList.add(new ItemCollection() + .setItemValue("invoice.text", "LA-HOL-2401-002") + .setItemValue("invoice.atc", "ATC400058750120242452") + .setItemValue("dbtr.name", "D18317 Big Belly Solar GmbH") + .setItemValue("invoice.ZOLL", 18.45) + .setItemValue("invoice.EUST", 0) + .setItemValue("invoice.number", "")); - invoiceList.add(new ItemCollection() - .setItemValue("invoice.text", "LA-HOL-2401-003") - .setItemValue("invoice.atc", "ATC400058750120242450") - .setItemValue("dbtr.name", "D18317 Big Belly Solar GmbH") - .setItemValue("invoice.ZOLL", 100.45) - .setItemValue("invoice.EUST", 0) - .setItemValue("invoice.number", "")); + invoiceList.add(new ItemCollection() + .setItemValue("invoice.text", "LA-HOL-2401-003") + .setItemValue("invoice.atc", "ATC400058750120242450") + .setItemValue("dbtr.name", "D18317 Big Belly Solar GmbH") + .setItemValue("invoice.ZOLL", 100.45) + .setItemValue("invoice.EUST", 0) + .setItemValue("invoice.number", "")); - invoiceList.add(new ItemCollection() - .setItemValue("invoice.text", "LA-PAP-2401-003") - .setItemValue("invoice.atc", "345345") - .setItemValue("dbtr.name", "D18006 GPI BERLIN GMBH") - .setItemValue("invoice.ZOLL", 253.4) - .setItemValue("invoice.EUST", 0) - .setItemValue("invoice.number", "")); + invoiceList.add(new ItemCollection() + .setItemValue("invoice.text", "LA-PAP-2401-003") + .setItemValue("invoice.atc", "345345") + .setItemValue("dbtr.name", "D18006 GPI BERLIN GMBH") + .setItemValue("invoice.ZOLL", 253.4) + .setItemValue("invoice.EUST", 0) + .setItemValue("invoice.number", "")); - return invoiceList; - } + return invoiceList; + } } diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/api/CargosoftMigrationRestService.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/api/CargosoftMigrationRestService.java index 0771ba1..f69e381 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/api/CargosoftMigrationRestService.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/api/CargosoftMigrationRestService.java @@ -38,8 +38,6 @@ import java.util.List; import java.util.TimeZone; import java.util.logging.Logger; -import javax.ejb.Stateless; -import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; @@ -70,6 +68,9 @@ import org.xml.sax.SAXException; import com.alexanderlogistics.InvoiceUtil; import com.alexanderlogistics.xml.CargosoftXMLInvoiceImportService; +import jakarta.ejb.Stateless; +import jakarta.inject.Inject; + /** ** Dieser Service korrigiert falsch importierte Cargosoft daten. * Ausgangsrechnungen die ein falsches Jahr haben. diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/CargosoftExportController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/CargosoftExportController.java index 640c70b..b2efbf2 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/CargosoftExportController.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/CargosoftExportController.java @@ -1,4 +1,5 @@ package com.alexanderlogistics.datev; + /******************************************************************************* * Imixs Workflow Technology * Copyright (C) 2003, 2008 Imixs Software Solutions GmbH, @@ -25,12 +26,11 @@ package com.alexanderlogistics.datev; import java.util.logging.Logger; -import javax.enterprise.context.RequestScoped; -import javax.inject.Named; - - import org.imixs.workflow.engine.scheduler.SchedulerController; +import jakarta.enterprise.context.RequestScoped; +import jakarta.inject.Named; + /** * The DatevController is used to configure the DatevScheduler. This service is * used to generate datev export workitems. diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/CargosoftExportScheduler.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/CargosoftExportScheduler.java index 0ac881b..7857bb3 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/CargosoftExportScheduler.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/CargosoftExportScheduler.java @@ -33,8 +33,6 @@ import java.util.Date; import java.util.List; import java.util.logging.Logger; -import javax.ejb.EJB; - import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPSClient; @@ -50,6 +48,8 @@ import org.imixs.workflow.engine.scheduler.SchedulerService; import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.exceptions.QueryException; +import jakarta.ejb.EJB; + /** * The CargosoftExportScheduler exportiert eine csv Datei auf eine FTP Laufwerk * mit allen noch offenen Rechnungen. Diese Datei wird von Cargosoft dann diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/DatevCargosoftImportAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/DatevCargosoftImportAdapter.java index 552a37d..857a1c4 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/DatevCargosoftImportAdapter.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/DatevCargosoftImportAdapter.java @@ -12,8 +12,6 @@ import java.util.List; import java.util.Map; import java.util.logging.Logger; -import javax.inject.Inject; - import org.imixs.marty.team.TeamService; import org.imixs.workflow.FileData; import org.imixs.workflow.ItemCollection; @@ -32,6 +30,8 @@ import com.alexanderlogistics.InvoiceUtil; import com.alexanderlogistics.KreditorDebitorService; import com.alexanderlogistics.mahnlauf.MahnlaufService; +import jakarta.inject.Inject; + /** * Der DatevCargosoftImportAdapter liest eine von Cargosoft bereitgestellte * DATEV Datei ein und erzeugt Ausgangsrechnungs Workitems. Die Cargosoft DATEV diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/dwc/SEPAExportAdapterNBD.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/dwc/SEPAExportAdapterNBD.java index 09da9be..ce85ecf 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/dwc/SEPAExportAdapterNBD.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/dwc/SEPAExportAdapterNBD.java @@ -1,19 +1,7 @@ package com.alexanderlogistics.dwc; -import java.io.IOException; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; import java.util.logging.Logger; -import javax.ejb.EJB; -import javax.inject.Inject; -import javax.xml.bind.JAXBException; -import javax.xml.transform.TransformerException; - -import org.imixs.workflow.FileData; import org.imixs.workflow.ItemCollection; import org.imixs.workflow.SignalAdapter; import org.imixs.workflow.engine.ReportService; @@ -21,7 +9,8 @@ import org.imixs.workflow.exceptions.AdapterException; import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.sepa.services.SepaWorkflowService; -import com.alexanderlogistics.OPListExportAdapterByWeek; +import jakarta.ejb.EJB; +import jakarta.inject.Inject; /** * TheSEPAExportAdapterNBD is an extension of the SEPAExportAdapter. @@ -58,95 +47,24 @@ public class SEPAExportAdapterNBD implements SignalAdapter { // Textblock laden // load the text block - FileData fileData = loadTextBlockFileData(textblockRef, template); + // FileData fileData = loadTextBlockFileData(textblockRef, template); - // do we found the document? - if (fileData == null) { - throw new PluginException(OPListExportAdapterByWeek.class.getSimpleName(), ERROR_CONFIG, - "invalid op-list configuration in model event - template=" + template + " not found!"); - } - fileData.setName(targetName); - // append document - logger.info("...append new op-list Template: " + targetName); + // // do we found the document? + // if (fileData == null) { + // throw new PluginException(OPListExportAdapterByWeek.class.getSimpleName(), + // ERROR_CONFIG, + // "invalid op-list configuration in model event - template=" + template + " not + // found!"); + // } + // fileData.setName(targetName); + // // append document + // logger.info("...append new op-list Template: " + targetName); - document.addFileData(fileData); + // document.addFileData(fileData); /* Processing .... */ String key = sepaExport.getItemValueString("name"); - // load the report - ItemCollection report = reportService.findReport(event.getItemValueString("txtReportName")); - if (report == null) { - throw new PluginException(SEPAExportAdapterNBD.class.getName(), SepaWorkflowService.REPORT_ERROR, - "Missing report definition. Unable to load report '" + event.getItemValueString("txtReportName") - + "'. Please check model configuration "); - } - - // get the data source based on the $workitemref .... - List refList = sepaExport.getItemValue("$workitemref"); - List data = new ArrayList(); - ItemCollection configuration = sepaWorkflowService.loadConfiguration(); - - logger.info("...SEPA export started - " + refList.size() + " invoices found..."); - - for (String ref : refList) { - // load invoice - ItemCollection invoice = sepaWorkflowService.loadInvoice(ref); - if (invoice == null) { - logger.warning("Invoice '" + ref + "' not found! SEPA Export can not be executed"); - continue; - } - // avoid unsupported characters in sepa fields - invoice = sepaWorkflowService.harmonizeSEPAItem(invoice, SepaWorkflowService.ITEM_CDTR_NAME); - invoice = sepaWorkflowService.harmonizeSEPAItem(invoice, SepaWorkflowService.ITEM_DBTR_NAME); - data.add(invoice); - } - - // finally we add the sepa export document to the data collection - data.add(sepaExport); - - // create the attachment based on the report definition - // attach a file to the current workitem - // create a harmonized debitor name for the filename..... - String sDepName = sepaExport.getItemValueString(SepaWorkflowService.ITEM_DBTR_NAME); - sDepName = sDepName.replace("&", "_"); - sDepName = sDepName.replace(">", "_"); - sDepName = sDepName.replace("<", "_"); - sDepName = sDepName.replace(" ", "_"); - // build a timestamp for the filename - DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HHmm"); - String sepaFileName = "sepa_" + sDepName + "_" + df.format(new Date()) + ".xml"; - try { - // now we transform the data source - // if an optional report definition was defined, this report is used for XSL - // processing if not, than the main report definition is used - FileData filedata = null; - String optionalSepaReport = sepaExport.getItemValueString(SepaWorkflowService.ITEM_SEPA_REPORT); - ItemCollection reportOptional = reportService.findReport(optionalSepaReport); - if (reportOptional != null) { - // use optional report - filedata = reportService.transformDataSource(reportOptional, data, sepaFileName); - sepaWorkflowService.logMessage( - "...SEPA export report=" + sepaExport.getItemValueString(SepaWorkflowService.ITEM_SEPA_REPORT), - configuration, sepaExport); - } else { - if (!optionalSepaReport.isEmpty()) { - sepaWorkflowService.logMessage("...WARNING - SEPA export report " + optionalSepaReport - + " not found! Default report will be used.", configuration, sepaExport); - } - // use the default report - filedata = reportService.transformDataSource(report, data, sepaFileName); - } - // attach the file - sepaExport.addFileData(filedata); - } catch (JAXBException | IOException | TransformerException e) { - throw new PluginException(SEPAExportAdapterNBD.class.getName(), SepaWorkflowService.REPORT_ERROR, - "Failed to generate SEPA File:" + e.getMessage()); - } - - // write log - logger.info("...SEPA export " + key + " finished."); - return sepaExport; } diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoAppendAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoAppendAdapter.java index 4ca0d58..77f1b35 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoAppendAdapter.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoAppendAdapter.java @@ -3,8 +3,6 @@ package com.alexanderlogistics.mahnlauf; import java.util.List; import java.util.logging.Logger; -import javax.inject.Inject; - import org.imixs.workflow.ItemCollection; import org.imixs.workflow.SignalAdapter; import org.imixs.workflow.engine.WorkflowService; @@ -15,8 +13,11 @@ import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.exceptions.ProcessingErrorException; import org.imixs.workflow.exceptions.QueryException; +import jakarta.inject.Inject; + /** - * Der InkassoAppendAdapter verknüpft eine Rechnung mit einem Inkasso Workflow zum + * Der InkassoAppendAdapter verknüpft eine Rechnung mit einem Inkasso Workflow + * zum * aktuellen Debitor. Existiert aktuell kein Inkasso für diesen * Debitor erzeugt der Adapter automatisch eine neue Prozessinstanz. *

@@ -50,15 +51,16 @@ public class InkassoAppendAdapter implements SignalAdapter { public ItemCollection execute(ItemCollection document, ItemCollection event) throws AdapterException, PluginException { - ItemCollection inkassoWorkitem=appendInvoice(document); - + ItemCollection inkassoWorkitem = appendInvoice(document); + document.setItemValue("debtcollection.ref", inkassoWorkitem.getUniqueID()); return document; } /** - * Diese method hängt eine referenz der aktuellen Rechnung an den Inkasso Workflow an. Gibt es noch keinen, wird einer erzeugt. + * Diese method hängt eine referenz der aktuellen Rechnung an den Inkasso + * Workflow an. Gibt es noch keinen, wird einer erzeugt. * Die method liefert das Inkasso Workitem zurück. * * @param document @@ -72,12 +74,11 @@ public class InkassoAppendAdapter implements SignalAdapter { throw new PluginException(PluginException.class.getName(), ERROR_MISSING_DATA, "Inkasso kann nicht erzeugt werden. Bitte wählen Sie zuerst einen Debitor aus."); } - - + logger.info("......Search Inkasso '" + dbtrNumber + "'..."); ItemCollection inkasso; try { - inkasso = findInkasso(dbtrNumber,currency); + inkasso = findInkasso(dbtrNumber, currency); if (inkasso == null) { // create a new one inkasso = new ItemCollection().workflowGroup("Inkasso").task(1000).event(100); @@ -108,14 +109,13 @@ public class InkassoAppendAdapter implements SignalAdapter { * @return * @throws QueryException */ - private ItemCollection findInkasso(String dbtrNumber,String currency) throws QueryException { + private ItemCollection findInkasso(String dbtrNumber, String currency) throws QueryException { String query = "(type:workitem) AND ($modelversion:inkasso*) "; List resultList = workflowService.getDocumentService().find(query, 999, 0, "$modified", true); for (ItemCollection inkasso : resultList) { if (dbtrNumber.equals(inkasso.getItemValueString(ITEM_DBTR_NUMBER)) - && currency.equals(inkasso.getItemValueString("invoice.currency")) - ) { + && currency.equals(inkasso.getItemValueString("invoice.currency"))) { return inkasso; } } diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoController.java index 9f51d34..20a7533 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoController.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoController.java @@ -4,16 +4,16 @@ import java.io.Serializable; import java.util.List; import java.util.logging.Logger; -import javax.enterprise.context.ConversationScoped; -import javax.inject.Inject; -import javax.inject.Named; - import org.imixs.workflow.ItemCollection; import org.imixs.workflow.engine.DocumentService; import org.imixs.workflow.faces.data.WorkflowController; import com.alexanderlogistics.InvoiceUtil; +import jakarta.enterprise.context.ConversationScoped; +import jakarta.inject.Inject; +import jakarta.inject.Named; + /** * Der InkassoController dient dazu eine bereits zugewiesene Rechnung * wieder aus dem Inkasso zu entfernen. @@ -54,7 +54,7 @@ public class InkassoController implements Serializable { ItemCollection doc = documentService.load(id); if (doc != null) { result = result + doc.getItemValueDouble(item); - + } else { logger.warning("invalid read access to calculate sum"); } diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoExportAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoExportAdapter.java index 4fe6d4a..cdc81a3 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoExportAdapter.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoExportAdapter.java @@ -8,8 +8,6 @@ import java.util.Collection; import java.util.List; import java.util.logging.Logger; -import javax.inject.Inject; - import org.apache.poi.ss.usermodel.CellCopyPolicy; import org.apache.poi.ss.util.CellReference; import org.apache.poi.xssf.usermodel.XSSFRow; @@ -23,9 +21,10 @@ import org.imixs.workflow.engine.WorkflowService; import org.imixs.workflow.exceptions.AdapterException; import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.exceptions.QueryException; - import org.imixs.workflow.poi.POIFindReplaceAdapter; +import jakarta.inject.Inject; + /** * Der ZahlungsavisAdapter importiert eine Excel Datei aus einem Textblock * @@ -43,7 +42,7 @@ import org.imixs.workflow.poi.POIFindReplaceAdapter; *

* Der Adapter kopiert die Rechnungsdaten in neue Zeilen, welche ab Zeilnenummer * 16 eingefügt werden. - *

+ *

* Dabei werden Gutschriften in spalte E und Rechnungen in Spalte F eingetrgen. *

* Abschliessend wird die Zelle 'TOTAL' noch aktualisiert. @@ -139,9 +138,9 @@ public class InkassoExportAdapter extends POIFindReplaceAdapter { XSSFRow referenceRow = sheet.getRow(cr.getRow()); int referenceRowPos = 16; int rowPos = 16; - //int lastRow = sheet.getLastRowNum(); + // int lastRow = sheet.getLastRowNum(); int lastRow = 999; - logger.finest("Last rownum="+lastRow); + logger.finest("Last rownum=" + lastRow); sheet.shiftRows(rowPos, lastRow, invoiceIDs.size(), true, true); for (String invoiceID : invoiceIDs) { diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/MahnlaufExecuteAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/MahnlaufExecuteAdapter.java index 41d3db7..27e7749 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/MahnlaufExecuteAdapter.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/MahnlaufExecuteAdapter.java @@ -2,16 +2,12 @@ package com.alexanderlogistics.mahnlauf; import java.time.LocalDate; import java.util.ArrayList; -import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Map; import java.util.logging.Logger; -import javax.ejb.EJB; -import javax.inject.Inject; - import org.imixs.workflow.ItemCollection; import org.imixs.workflow.Model; import org.imixs.workflow.SignalAdapter; @@ -23,6 +19,9 @@ import org.imixs.workflow.exceptions.PluginException; import com.alexanderlogistics.InvoiceUtil; +import jakarta.ejb.EJB; +import jakarta.inject.Inject; + /** * The MahnlaufExecuteAdapter triggers the event 300 for all linked invoices *

@@ -30,7 +29,7 @@ import com.alexanderlogistics.InvoiceUtil; * processed invoices. This item is used in the Workflow Model to construct a * HTML Table wen sending the mail. *

- * The Adapter also splits the item 'dbtr.mail' into a multi value field if + * The Adapter also splits the item 'dbtr.mail' into a multi value field if * the value contains email addresses separated with new lines. * * @@ -108,9 +107,9 @@ public class MahnlaufExecuteAdapter implements SignalAdapter { Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); cal.add(Calendar.DATE, period); - cal.set(Calendar.HOUR,0); - cal.set(Calendar.MINUTE,0); - cal.set(Calendar.SECOND,0); + cal.set(Calendar.HOUR, 0); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.SECOND, 0); invoice.setItemValue("invoice.reminder", cal.getTime()); } @@ -121,24 +120,24 @@ public class MahnlaufExecuteAdapter implements SignalAdapter { } switch (invoice.getTaskID()) { - case 5200: - case 5201: - if (dunningLevel < 1) - dunningLevel = 1; - break; - case 5210: - case 5211: - if (dunningLevel < 2) - dunningLevel = 2; - break; - case 5220: - if (dunningLevel < 3) - dunningLevel = 3; - break; - default: - if (dunningLevel < 1) - dunningLevel = 1; - break; + case 5200: + case 5201: + if (dunningLevel < 1) + dunningLevel = 1; + break; + case 5210: + case 5211: + if (dunningLevel < 2) + dunningLevel = 2; + break; + case 5220: + if (dunningLevel < 3) + dunningLevel = 3; + break; + default: + if (dunningLevel < 1) + dunningLevel = 1; + break; } // create a workitem stub for the mail message @@ -175,29 +174,29 @@ public class MahnlaufExecuteAdapter implements SignalAdapter { // compute subject switch (dunningLevel) { - case 2: - mahnLaufWorkitem.setItemValue("mail.subject_de", "2. MAHNUNG"); - mahnLaufWorkitem.setItemValue("mail.subject_en", "2. REMINDER"); - break; - case 3: - mahnLaufWorkitem.setItemValue("mail.subject_de", "LETZTE AUSSERGERICHTLICHE MAHNUNG"); - mahnLaufWorkitem.setItemValue("mail.subject_en", "LAST REMINDER"); - break; - default: - mahnLaufWorkitem.setItemValue("mail.subject_de", "1. MAHNUNG"); - mahnLaufWorkitem.setItemValue("mail.subject_en", "1. REMINDER"); - break; + case 2: + mahnLaufWorkitem.setItemValue("mail.subject_de", "2. MAHNUNG"); + mahnLaufWorkitem.setItemValue("mail.subject_en", "2. REMINDER"); + break; + case 3: + mahnLaufWorkitem.setItemValue("mail.subject_de", "LETZTE AUSSERGERICHTLICHE MAHNUNG"); + mahnLaufWorkitem.setItemValue("mail.subject_en", "LAST REMINDER"); + break; + default: + mahnLaufWorkitem.setItemValue("mail.subject_de", "1. MAHNUNG"); + mahnLaufWorkitem.setItemValue("mail.subject_en", "1. REMINDER"); + break; } - // Verify the dbtr.mail item (split into multi value) - List mailListe =mahnLaufWorkitem.getItemValue("dbtr.mail"); - for (String mail: mailListe) { + List mailListe = mahnLaufWorkitem.getItemValue("dbtr.mail"); + for (String mail : mailListe) { logger.info(" teste mail:'" + mail + "'"); if (!InvoiceUtil.validateEmail(mail)) { throw new PluginException(MahnlaufExecuteAdapter.class.getName(), - "INVALID_EMAIL", "Die Daten konnten nicht aktualisiert werden! Bitte geben Sie eine gültige E-Mail Adresse ein!"); - } + "INVALID_EMAIL", + "Die Daten konnten nicht aktualisiert werden! Bitte geben Sie eine gültige E-Mail Adresse ein!"); + } } return mahnLaufWorkitem; } diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/MahnlaufRefAddAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/MahnlaufRefAddAdapter.java index 8dc725c..a2cb6d7 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/MahnlaufRefAddAdapter.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/MahnlaufRefAddAdapter.java @@ -4,9 +4,6 @@ import java.util.Date; import java.util.List; import java.util.logging.Logger; -import javax.ejb.EJB; -import javax.inject.Inject; - import org.imixs.workflow.ItemCollection; import org.imixs.workflow.Model; import org.imixs.workflow.SignalAdapter; @@ -21,6 +18,9 @@ import org.imixs.workflow.sepa.services.SepaWorkflowService; import com.alexanderlogistics.KreditorDebitorService; +import jakarta.ejb.EJB; +import jakarta.inject.Inject; + /** * The MahnlaufRefAddAdapter links an invoice with a Mahnlauf for the * dbtr.number item . If there is currently no open Mahnlauf for this key, the @@ -39,7 +39,7 @@ public class MahnlaufRefAddAdapter implements SignalAdapter { @EJB ModelService modelService; - + @EJB KreditorDebitorService kreditorDebitorService; @@ -60,12 +60,13 @@ public class MahnlaufRefAddAdapter implements SignalAdapter { public ItemCollection execute(ItemCollection invoice, ItemCollection event) throws AdapterException, PluginException { - - if (invoice.getTaskID()MahnlaufService.TASK_MAHNLAUF_END) { + if (invoice.getTaskID() < MahnlaufService.TASK_MAHNLAUF_START + || invoice.getTaskID() > MahnlaufService.TASK_MAHNLAUF_END) { throw new PluginException(MahnlaufRefAddAdapter.class.getName(), - MahnlaufService.ERROR_CONFIG, "Der Mahnlauf kann nur für Rechnungen erstellt werden die bereits die Fälligkeit erreicht haben."); + MahnlaufService.ERROR_CONFIG, + "Der Mahnlauf kann nur für Rechnungen erstellt werden die bereits die Fälligkeit erreicht haben."); } - + String dbtrNumber = invoice.getItemValueString(MahnlaufService.ITEM_DBTR_NUMBER); ItemCollection mahnLaufWorkitem; try { @@ -85,7 +86,7 @@ public class MahnlaufRefAddAdapter implements SignalAdapter { // set event 100 and process ItemCollection mahnlaufConfig = workflowService.evalWorkflowResult(event, "mahnlauf", invoice, true); int eventID = mahnlaufConfig.getItemValueInteger("event"); - + mahnLaufWorkitem.event(eventID); workflowService.processWorkItem(mahnLaufWorkitem); @@ -93,7 +94,7 @@ public class MahnlaufRefAddAdapter implements SignalAdapter { throw new PluginException(MahnlaufRefAddAdapter.class.getName(), MahnlaufService.ERROR_CONFIG, "Unable to create Mahnlauf", e); } - + // set mahnlauf ref invoice.setItemValue("dunning.ref", mahnLaufWorkitem.getUniqueID()); return invoice; @@ -127,11 +128,11 @@ public class MahnlaufRefAddAdapter implements SignalAdapter { * @throws PluginException */ @SuppressWarnings("unused") - public ItemCollection createNewMahnlauf(String key, ItemCollection invoice, ItemCollection event) + public ItemCollection createNewMahnlauf(String key, ItemCollection invoice, ItemCollection event) throws ModelException, PluginException { String modelVersion = null; int taskID = -1; - int eventID=-1; + int eventID = -1; // test if the event provides a sepa export configuration ItemCollection mahnlaufConfig = workflowService.evalWorkflowResult(event, "mahnlauf", invoice, true); if (mahnlaufConfig != null && mahnlaufConfig.hasItem("modelversion") && mahnlaufConfig.hasItem("task")) { @@ -150,17 +151,18 @@ public class MahnlaufRefAddAdapter implements SignalAdapter { mahnlaufWorkitem.setItemValue(WorkflowKernel.UNIQUEID, WorkflowKernel.generateUniqueID()); // copy dbtr_iban - mahnlaufWorkitem.setItemValue(MahnlaufService.ITEM_DBTR_NAME, invoice.getItemValue(MahnlaufService.ITEM_DBTR_NAME)); - - + mahnlaufWorkitem.setItemValue(MahnlaufService.ITEM_DBTR_NAME, + invoice.getItemValue(MahnlaufService.ITEM_DBTR_NAME)); + // lookup email.... - String dbtrNumber=invoice.getItemValueString("dbtr.number"); - ItemCollection dbtrItemCol=kreditorDebitorService.findDebitor("D"+dbtrNumber); - if (dbtrItemCol!=null) { + String dbtrNumber = invoice.getItemValueString("dbtr.number"); + ItemCollection dbtrItemCol = kreditorDebitorService.findDebitor("D" + dbtrNumber); + if (dbtrItemCol != null) { mahnlaufWorkitem.setItemValue(MahnlaufService.ITEM_DBTR_EMAIL, dbtrItemCol.getItemValue("cdtr.mail"));// dbtr.mail } - - mahnlaufWorkitem.setItemValue(MahnlaufService.ITEM_DBTR_NUMBER, invoice.getItemValue(MahnlaufService.ITEM_DBTR_NUMBER)); + + mahnlaufWorkitem.setItemValue(MahnlaufService.ITEM_DBTR_NUMBER, + invoice.getItemValue(MahnlaufService.ITEM_DBTR_NUMBER)); mahnlaufWorkitem.setItemValue("invoice.language", invoice.getItemValue("invoice.language")); // set workflow group name from the Task Element to identify document in xslt diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/MahnlaufService.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/MahnlaufService.java index a696de4..a21d65e 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/MahnlaufService.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/MahnlaufService.java @@ -33,12 +33,6 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.annotation.security.DeclareRoles; -import javax.annotation.security.RolesAllowed; -import javax.annotation.security.RunAs; -import javax.ejb.Singleton; -import javax.inject.Inject; - import org.imixs.marty.team.TeamService; import org.imixs.workflow.ItemCollection; import org.imixs.workflow.engine.DocumentService; @@ -48,6 +42,12 @@ import org.imixs.workflow.exceptions.ModelException; import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.exceptions.ProcessingErrorException; +import jakarta.annotation.security.DeclareRoles; +import jakarta.annotation.security.RolesAllowed; +import jakarta.annotation.security.RunAs; +import jakarta.ejb.Singleton; +import jakarta.inject.Inject; + /** * Der MahnlaufService wird vom MahnlaufExecuteAdapter um * Ausgangsrechnungen zu akutalisieren. diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/xml/CargosoftXMLInvoiceImportService.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/xml/CargosoftXMLInvoiceImportService.java index b4f4feb..ab1ae7a 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/xml/CargosoftXMLInvoiceImportService.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/xml/CargosoftXMLInvoiceImportService.java @@ -43,10 +43,6 @@ import java.util.Properties; import java.util.TimeZone; import java.util.logging.Logger; -import javax.ejb.EJB; -import javax.ejb.Stateless; -import javax.enterprise.event.Observes; -import javax.inject.Inject; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -87,6 +83,11 @@ import com.alexanderlogistics.InvoiceUtil; import com.alexanderlogistics.KreditorDebitorService; import com.alexanderlogistics.mahnlauf.MahnlaufService; +import jakarta.ejb.EJB; +import jakarta.ejb.Stateless; +import jakarta.enterprise.event.Observes; +import jakarta.inject.Inject; + /** * Der CargosoftXMLInvoiceImportImportService erweitert den FTPImportService und * kann XML Invoice Dokumente von Cargosoft importieren. diff --git a/office-alexander-logistics-app/src/main/webapp/WEB-INF/beans.xml b/office-alexander-logistics-app/src/main/webapp/WEB-INF/beans.xml index 51e8caf..5cdd323 100644 --- a/office-alexander-logistics-app/src/main/webapp/WEB-INF/beans.xml +++ b/office-alexander-logistics-app/src/main/webapp/WEB-INF/beans.xml @@ -1,6 +1,5 @@ - - + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/beans_3_0.xsd" + bean-discovery-mode="all" version="3.0"> \ No newline at end of file diff --git a/office-alexander-logistics-app/src/test/java/com/alexanderlogistics/TestIMAPAuhtenticators.java b/office-alexander-logistics-app/src/test/java/com/alexanderlogistics/TestIMAPAuhtenticators.java index 87645fe..5370f9c 100644 --- a/office-alexander-logistics-app/src/test/java/com/alexanderlogistics/TestIMAPAuhtenticators.java +++ b/office-alexander-logistics-app/src/test/java/com/alexanderlogistics/TestIMAPAuhtenticators.java @@ -4,11 +4,7 @@ import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; -import javax.mail.Folder; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.Store; - +import org.eclipse.angus.mail.imap.IMAPFolder; import org.imixs.archive.importer.DocumentImportService; import org.imixs.archive.importer.mail.IMAPBasicAuthenticator; import org.imixs.archive.importer.mail.IMAPOutlookAuthenticator; @@ -16,8 +12,10 @@ import org.imixs.workflow.ItemCollection; import org.junit.Ignore; import org.junit.Test; -import com.sun.mail.imap.IMAPFolder; - +import jakarta.mail.Folder; +import jakarta.mail.Message; +import jakarta.mail.MessagingException; +import jakarta.mail.Store; import junit.framework.Assert; /** diff --git a/office-alexander-logistics-app/src/test/java/com/alexanderlogistics/migration/DueDateBugfix.java b/office-alexander-logistics-app/src/test/java/com/alexanderlogistics/migration/DueDateBugfix.java index 22014c7..bb6cd51 100644 --- a/office-alexander-logistics-app/src/test/java/com/alexanderlogistics/migration/DueDateBugfix.java +++ b/office-alexander-logistics-app/src/test/java/com/alexanderlogistics/migration/DueDateBugfix.java @@ -11,6 +11,7 @@ import java.util.Date; import java.util.List; import org.imixs.melman.FormAuthenticator; +import org.imixs.melman.RestAPIException; import org.imixs.melman.WorkflowClient; import org.imixs.workflow.ItemCollection; import org.imixs.workflow.datev.imports.DatevImportAdapter; @@ -34,8 +35,15 @@ public class DueDateBugfix { public void setup() throws PluginException { // Init Workflow Client workflowCLient = new WorkflowClient(restAPI); - FormAuthenticator formAuth = new FormAuthenticator(restAPI, user, ps); - workflowCLient.registerClientRequestFilter(formAuth); + FormAuthenticator formAuth; + try { + formAuth = new FormAuthenticator(restAPI, user, ps); + workflowCLient.registerClientRequestFilter(formAuth); + } catch (RestAPIException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + Assert.fail(); + } } diff --git a/pom.xml b/pom.xml index bbfe33f..05b6562 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.alexander-logistics office-alexander-logistics - 1.2.21 + 1.3.0 pom Imixs Office Workflow - Custom Build @@ -14,24 +14,28 @@ + 11 + 11 UTF-8 UTF-8 + ${maven.build.timestamp} yyyyMMddHHmmss - - 5.2.18 - 4.2.3 - - 4.6.2 - 2.3.3 - - 2.4.2 - 1.0.22 - 1.1.6 - 2.2 - + + 10.0.0 + 5.0.2-SNAPSHOT + 6.0.7-SNAPSHOT + 5.0.0 + 3.0.2-SNAPSHOT + 3.0.0 + 2.0.0-SNAPSHOT + 6.0 + 9.9.1-4 + 2.0.26 + + 1.1.0-SNAPSHOT src/main/webapp @@ -41,11 +45,12 @@ lucene/office-index office-alexander-logistics + java:/mail/org.imixs.workflow.mail + + war - office-alexander-logistics - java:/mail/org.imixs.workflow.mail @@ -59,14 +64,11 @@ sonatype-snaptshots Sonatype Snapshot repository http://oss.sonatype.org/content/repositories/snapshots - - - - imixs-mvn-repo - https://raw.githubusercontent.com/imixs/imixs-mvn-repo/master/ - + false - always + + + true @@ -96,15 +98,23 @@ + maven-compiler-plugin - 2.3.2 + 3.8.1 - 1.8 - 1.8 + ${java.source} + ${java.target} + + + + org.apache.maven.plugins + maven-resources-plugin + 2.6 + + ${project.build.sourceEncoding} - office-alexander-logistics @@ -146,6 +156,7 @@ org.imixs.workflow imixs-marty ${org.imixs.marty.version} + provided @@ -206,7 +217,7 @@ org.imixs.workflow imixs-archive-documents ${org.imixs.archive.version} - compile + provided @@ -215,17 +226,34 @@ ${org.imixs.archive.version} compile + + + + org.imixs.workflow + imixs-ai-workflow + ${org.imixs.ai.version} + compile + + + + + + net.sf.saxon + Saxon-HE + ${net.sf.saxon.version} + - + - javax - javaee-api - 7.0 + jakarta.platform + jakarta.jakartaee-api + ${jakarta.version} provided + org.eclipse.microprofile @@ -249,4 +277,4 @@ test - \ No newline at end of file + \ No newline at end of file