neuer File Export DWC
This commit is contained in:
parent
66b674afaf
commit
d2a2d506d2
7 changed files with 11974 additions and 72 deletions
|
|
@ -1,14 +1,11 @@
|
||||||
|
# Cargosoft Schnittstelle
|
||||||
|
|
||||||
|
Für den Austausch von Daten mit Cargosoft verwenden wir verschiedene Subaccounts auf unseren FTP Servern.
|
||||||
|
|
||||||
# Cargosoft Schnittstelle (Bremen - Mandant 001)
|
## Server Verbindungsdaten
|
||||||
|
|
||||||
Für den Austasuch von Daten mit Cargosoft verwenden wir einen Subaccount `u248962-sub2` der auf das Verzeichnis `/office-alexander-logistics/cargosoft` zeigt:
|
Details siehe [FTP Server](FTP.md)
|
||||||
|
|
||||||
Server: u248962.your-storagebox.de
|
|
||||||
Pfad: /office-alexander-logistics/cargosoft
|
|
||||||
Benutzername: u248962-sub2
|
|
||||||
Passwort: aXa61n9Un3jDNQlL
|
|
||||||
|
|
||||||
## Ausgangsrechnungen
|
## Ausgangsrechnungen
|
||||||
|
|
||||||
Ausgansrechnungen werden von Cargosoft im Verzeichnis `/fromCargosoft/imixs_invoices/` bereitgestellt
|
Ausgansrechnungen werden von Cargosoft im Verzeichnis `/fromCargosoft/imixs_invoices/` bereitgestellt
|
||||||
|
|
@ -21,48 +18,3 @@ Technisch wird das über die CDI Bean `com.alexanderlogistics.xml.CargosoftXMLIn
|
||||||
|
|
||||||
Die Kreditoren/Debitoren Stammdaten werden von Cargosoft im Verzeichnis `/fromCargosoft/stammdaten/` über die Datei `Vendors.csv` bereitgestellt
|
Die Kreditoren/Debitoren Stammdaten werden von Cargosoft im Verzeichnis `/fromCargosoft/stammdaten/` über die Datei `Vendors.csv` bereitgestellt
|
||||||
Über den Document Importer `CSV` werden die Dokumente regelmäßig importiert bzw. aktualisert
|
Über den Document Importer `CSV` werden die Dokumente regelmäßig importiert bzw. aktualisert
|
||||||
|
|
||||||
|
|
||||||
# Cargosoft Schnittstelle (Bremen Mandant 001)
|
|
||||||
|
|
||||||
Server: u248962.your-storagebox.de
|
|
||||||
Pfad: /office-alexander-logistics/cargosoft
|
|
||||||
Benutzername: u248962-sub2
|
|
||||||
Passwort: aXa61n9Un3jDNQlL
|
|
||||||
|
|
||||||
|
|
||||||
# Cargosoft Schnittstelle (Bremerhaven Mandant 005)
|
|
||||||
|
|
||||||
Server: u248962.your-storagebox.de
|
|
||||||
Pfad: /office-alexander-logistics/cargosoft-bhv
|
|
||||||
Benutzername: u248962-sub5
|
|
||||||
Passwort: 5hKKzv6TFCKRrAdR
|
|
||||||
|
|
||||||
|
|
||||||
# Cargosoft Schnittstelle (Polen Mandant 003)
|
|
||||||
|
|
||||||
Server: u248962.your-storagebox.de
|
|
||||||
Pfad: /office-alexander-logistics/cargosoft-pl
|
|
||||||
Benutzername: u248962-sub7
|
|
||||||
Passwort: PGPzzqmtZ8BSxkbs
|
|
||||||
|
|
||||||
# Cargosoft Schnittstelle (Dubai Mandant 006)
|
|
||||||
|
|
||||||
Server: u248962.your-storagebox.de
|
|
||||||
Pfad: /office-alexander-logistics/cargosoft-dwc
|
|
||||||
Benutzername: u248962-sub3
|
|
||||||
Passwort: enHjxs9h4nJ6EgsZ
|
|
||||||
|
|
||||||
# Cargosoft Schnittstelle (USA Mandant 004)
|
|
||||||
|
|
||||||
Server: u248962.your-storagebox.de
|
|
||||||
Pfad: /office-alexander-logistics/cargosoft-usa
|
|
||||||
Benutzername: u248962-sub9
|
|
||||||
Passwort: GMk7NgDBrmb2QqXg
|
|
||||||
|
|
||||||
# Cargosoft Schnittstelle (China Mandant 007)
|
|
||||||
|
|
||||||
Server: u248962.your-storagebox.de
|
|
||||||
Pfad: /office-alexander-logistics/cargosoft-chn
|
|
||||||
Benutzername: u248962-sub10
|
|
||||||
Passwort: yswBeN83jMqkMqJa
|
|
||||||
76
doc/FTP.md
Normal file
76
doc/FTP.md
Normal file
|
|
@ -0,0 +1,76 @@
|
||||||
|
# FTP Server
|
||||||
|
|
||||||
|
Wir stellen verschiedene FTP Laufwerke auf dem Hetzner bereit um Daten mit Cargosoft und anderen Partnern auszutauschen
|
||||||
|
|
||||||
|
# Cargosoft
|
||||||
|
|
||||||
|
## Cargosoft Schnittstelle (Bremen - Mandant 001)
|
||||||
|
|
||||||
|
Server: u248962.your-storagebox.de
|
||||||
|
Pfad: /office-alexander-logistics/cargosoft
|
||||||
|
Benutzername: u248962-sub2
|
||||||
|
Passwort: aXa61n9Un3jDNQlL
|
||||||
|
|
||||||
|
## Cargosoft Schnittstelle (Bremerhaven Mandant 005)
|
||||||
|
|
||||||
|
Server: u248962.your-storagebox.de
|
||||||
|
Pfad: /office-alexander-logistics/cargosoft-bhv
|
||||||
|
Benutzername: u248962-sub5
|
||||||
|
Passwort: 5hKKzv6TFCKRrAdR
|
||||||
|
|
||||||
|
## Cargosoft Schnittstelle (Polen Mandant 003)
|
||||||
|
|
||||||
|
Server: u248962.your-storagebox.de
|
||||||
|
Pfad: /office-alexander-logistics/cargosoft-pl
|
||||||
|
Benutzername: u248962-sub7
|
||||||
|
Passwort: PGPzzqmtZ8BSxkbs
|
||||||
|
|
||||||
|
## Cargosoft Schnittstelle (Dubai Mandant 006)
|
||||||
|
|
||||||
|
Server: u248962.your-storagebox.de
|
||||||
|
Pfad: /office-alexander-logistics/cargosoft-dwc
|
||||||
|
Benutzername: u248962-sub3
|
||||||
|
Passwort: enHjxs9h4nJ6EgsZ
|
||||||
|
|
||||||
|
## Cargosoft Schnittstelle (USA Mandant 004)
|
||||||
|
|
||||||
|
Server: u248962.your-storagebox.de
|
||||||
|
Pfad: /office-alexander-logistics/cargosoft-usa
|
||||||
|
Benutzername: u248962-sub9
|
||||||
|
Passwort: GMk7NgDBrmb2QqXg
|
||||||
|
|
||||||
|
## Cargosoft Schnittstelle (China Mandant 007)
|
||||||
|
|
||||||
|
Server: u248962.your-storagebox.de
|
||||||
|
Pfad: /office-alexander-logistics/cargosoft-chn
|
||||||
|
Benutzername: u248962-sub10
|
||||||
|
Passwort: yswBeN83jMqkMqJa
|
||||||
|
|
||||||
|
# Dubai
|
||||||
|
|
||||||
|
Wir stellen Herrn Hoelzl in Dubai ein eigenes FTP Laufwerk bereit, in das wir die Rechnungen per Imixs-Exporter verschieben. Herr Hoelzl überträgt dann die Daten in eine app von einer Steuerkanzlei.
|
||||||
|
|
||||||
|
Es wird dazu ein FTP Server bereitgestellt der von Herrn Hölzl und Frau Geisler lokal eingebunden werden kann.
|
||||||
|
|
||||||
|
Der aktuelle Workflow für Eingangs- und Ausgangsrechnungen wird dahingehend angepasst, dass die Belege automatisch nach folgenden Format exportiert werden:
|
||||||
|
|
||||||
|
```
|
||||||
|
├── invoice-out
|
||||||
|
│ ├── 2024
|
||||||
|
│ │ ├── 06
|
||||||
|
│ │ │ ├── 198_EX-DWC-2406-013.pdf
|
||||||
|
│ │ │ ├── 199_EX-DWC-2406-013.pdf
|
||||||
|
│ │ ├── 07
|
||||||
|
│ │ │ ├── 200_IM-DWC-2407-010.pdf
|
||||||
|
├── invoice-in
|
||||||
|
│ ├── 2024
|
||||||
|
│ │ ├── 06
|
||||||
|
│ │ │ ├── 700045_EX-DWC-2406-005.pdf
|
||||||
|
│ │ │ ├── 700045_59475.pdf
|
||||||
|
```
|
||||||
|
|
||||||
|
sequencenumer +
|
||||||
|
|
||||||
|
firmename + positionsnummer + rechnungsnummer +
|
||||||
|
|
||||||
|
Der Export erfolgt automatisch nach Empfang der Rechnung bzw. nach Prüfung der Rechnung (Review->Approved). Die Dateinamen werden vom System berechnet (siehe oben). Bei Sachrechnungen wird das Rechnungsdatum verwendet um die Buchungsperiode zu berechnen.
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
version: '3.6'
|
version: "3.6"
|
||||||
services:
|
services:
|
||||||
|
|
||||||
###############################################
|
###############################################
|
||||||
# Postgres DB
|
# Postgres DB
|
||||||
###############################################
|
###############################################
|
||||||
|
|
@ -9,9 +8,9 @@ services:
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_PASSWORD: adminadmin
|
POSTGRES_PASSWORD: adminadmin
|
||||||
POSTGRES_DB: office-alexander-logistics
|
POSTGRES_DB: office-alexander-logistics
|
||||||
volumes:
|
volumes:
|
||||||
- dbdata:/var/lib/postgresql/data
|
- dbdata:/var/lib/postgresql/data
|
||||||
|
|
||||||
###############################################
|
###############################################
|
||||||
# Office
|
# Office
|
||||||
###############################################
|
###############################################
|
||||||
|
|
@ -24,7 +23,7 @@ services:
|
||||||
POSTGRES_USER: "postgres"
|
POSTGRES_USER: "postgres"
|
||||||
POSTGRES_PASSWORD: "adminadmin"
|
POSTGRES_PASSWORD: "adminadmin"
|
||||||
POSTGRES_CONNECTION: "jdbc:postgresql://db/office-alexander-logistics"
|
POSTGRES_CONNECTION: "jdbc:postgresql://db/office-alexander-logistics"
|
||||||
TZ: "CET"
|
TZ: "CET"
|
||||||
LANG: "en_US.UTF-8"
|
LANG: "en_US.UTF-8"
|
||||||
MAILGATEWAY: "mailgateway"
|
MAILGATEWAY: "mailgateway"
|
||||||
|
|
||||||
|
|
@ -34,7 +33,7 @@ services:
|
||||||
OCR_SERVICE_ENDPOINT: "http://tika:9998/tika"
|
OCR_SERVICE_ENDPOINT: "http://tika:9998/tika"
|
||||||
OCR_SERVICE_MODE: "MODEL"
|
OCR_SERVICE_MODE: "MODEL"
|
||||||
#OCR_SERVICE_MAXFILESIZE: "1048576"
|
#OCR_SERVICE_MAXFILESIZE: "1048576"
|
||||||
#OCR_PDF_MODE: "OCR_ONLY | TEXT_ONLY | TEXT_AND_OCR (default)"
|
#OCR_PDF_MODE: "OCR_ONLY | TEXT_ONLY | TEXT_AND_OCR (default)"
|
||||||
OCR_PDF_MODE: "OCR_ONLY"
|
OCR_PDF_MODE: "OCR_ONLY"
|
||||||
|
|
||||||
LLM_SERVICE_ENDPOINT_USER: "admin"
|
LLM_SERVICE_ENDPOINT_USER: "admin"
|
||||||
|
|
@ -48,21 +47,40 @@ services:
|
||||||
- "8787:8787"
|
- "8787:8787"
|
||||||
volumes:
|
volumes:
|
||||||
- ./docker/deployments:/opt/jboss/wildfly/standalone/deployments/
|
- ./docker/deployments:/opt/jboss/wildfly/standalone/deployments/
|
||||||
|
|
||||||
|
|
||||||
###############################################
|
###############################################
|
||||||
# Tika OCR Service
|
# Tika OCR Service
|
||||||
###############################################
|
###############################################
|
||||||
tika:
|
tika:
|
||||||
#image: apache/tika:latest
|
#image: apache/tika:latest
|
||||||
#image: apache/tika:1.24.1-full
|
#image: apache/tika:1.24.1-full
|
||||||
image: apache/tika:2.4.1-full
|
image: apache/tika:2.4.1-full
|
||||||
environment:
|
environment:
|
||||||
TZ: "Europe/Berlin"
|
TZ: "Europe/Berlin"
|
||||||
ports:
|
ports:
|
||||||
- "9998:9998"
|
- "9998:9998"
|
||||||
|
|
||||||
|
|
||||||
|
##################
|
||||||
|
# Exporter Service
|
||||||
|
##################
|
||||||
|
imixsexporter-app:
|
||||||
|
image: imixs/imixs-archive-exporter
|
||||||
|
environment:
|
||||||
|
# EXAMPLE SETUP
|
||||||
|
WORKFLOW_SERVICE_ENDPOINT: "http://app:8080/api"
|
||||||
|
WORKFLOW_SERVICE_USER: "admin"
|
||||||
|
WORKFLOW_SERVICE_PASSWORD: "adminadmin"
|
||||||
|
WORKFLOW_SERVICE_AUTHMETHOD: "form"
|
||||||
|
METRICS_ENDPOINT: "http://localhost:9991/metrics"
|
||||||
|
HEALTH_ENDPOINT: "http://localhost:9991/health"
|
||||||
|
EXPORT_PATH: "/agl/dwc-test"
|
||||||
|
EXPORT_FTP_HOST: "u248962.your-storagebox.de"
|
||||||
|
EXPORT_FTP_PORT: "21"
|
||||||
|
EXPORT_FTP_USER: "u248962-sub4"
|
||||||
|
EXPORT_FTP_PASSWORD: "en4g3f1Jw0WlQ9Yb"
|
||||||
|
ports:
|
||||||
|
- "8081:8080"
|
||||||
|
- "8788:8787"
|
||||||
|
|
||||||
###############################################
|
###############################################
|
||||||
# Imixs-Admin
|
# Imixs-Admin
|
||||||
|
|
@ -80,26 +98,21 @@ services:
|
||||||
environment:
|
environment:
|
||||||
EXIM_SMARTHOST: "www149.your-server.de:25"
|
EXIM_SMARTHOST: "www149.your-server.de:25"
|
||||||
EXIM_PASSWORD: "www149.your-server.de:webmaster@imixs.com:$MAILPASSWORD"
|
EXIM_PASSWORD: "www149.your-server.de:webmaster@imixs.com:$MAILPASSWORD"
|
||||||
EXIM_ALLOWED_SENDERS: "10.0.0.0/8:172.18.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"
|
||||||
|
|
||||||
prometheus:
|
prometheus:
|
||||||
image: prom/prometheus:latest
|
image: prom/prometheus:latest
|
||||||
ports:
|
ports:
|
||||||
- "9090:9090"
|
- "9090:9090"
|
||||||
volumes:
|
volumes:
|
||||||
- ./docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
- ./docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
||||||
- prometheusdata:/prometheus/
|
- prometheusdata:/prometheus/
|
||||||
|
|
||||||
|
|
||||||
grafana:
|
grafana:
|
||||||
image: grafana/grafana:latest
|
image: grafana/grafana:latest
|
||||||
ports:
|
ports:
|
||||||
- "3000:3000"
|
- "3000:3000"
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
dbdata:
|
dbdata:
|
||||||
prometheusdata:
|
prometheusdata:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -242,4 +242,18 @@ public class InvoiceUtil {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gibt true zurück wenn es sich um eine Kreditoren Sachrechnung handelt.
|
||||||
|
*
|
||||||
|
* @param invoice
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean isSachrechnung(ItemCollection invoice) {
|
||||||
|
boolean result = false;
|
||||||
|
if (invoice.getModelVersion().startsWith("rechnungseingang-sachrechnung")) {
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,134 @@
|
||||||
|
package com.alexanderlogistics;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import org.imixs.archive.core.SnapshotService;
|
||||||
|
import org.imixs.workflow.FileData;
|
||||||
|
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 RenameFilenamesAdapter kann optional eingesetzt werden. Dieser Adapter
|
||||||
|
* verändert den Dateinamen von angehangenen Rechnungen
|
||||||
|
*
|
||||||
|
* Der Adapter wir beispielweise in DWC eingesetzt bevor die Dateien in einen
|
||||||
|
* FTP Server hochgeladen werden.
|
||||||
|
*
|
||||||
|
* Die Dateinamen werden vom System berechnet.
|
||||||
|
*
|
||||||
|
* sequencenumber + "_" +invoice.positions+".pdf"
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Bei Sachrechnungen
|
||||||
|
*
|
||||||
|
* sequencenumber + "_" + invoice.number.stripped + ".pdf"
|
||||||
|
* wird das Rechnungsdatum verwendet um die Buchungsperiode zu berechnen.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author rsoika
|
||||||
|
* @version 1.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class RenameFilenamesAdapter implements SignalAdapter {
|
||||||
|
|
||||||
|
private static Logger logger = Logger.getLogger(RenameFilenamesAdapter.class.getName());
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
SnapshotService snapshotService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rename Filenames
|
||||||
|
*
|
||||||
|
* @throws PluginException
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
@Override
|
||||||
|
public ItemCollection execute(ItemCollection workitem, ItemCollection event)
|
||||||
|
throws AdapterException, PluginException {
|
||||||
|
|
||||||
|
int fileNameCounter = 0; // for multiple files
|
||||||
|
List<FileData> fileDataSet = workitem.getFileData();
|
||||||
|
for (FileData fileData : fileDataSet) {
|
||||||
|
String fileName = fileData.getName();
|
||||||
|
// only PDF files and X-Rechnung
|
||||||
|
if ((fileName.toLowerCase().endsWith(".pdf")
|
||||||
|
|| fileName.toLowerCase().endsWith(".xml"))) {
|
||||||
|
|
||||||
|
// Build new Filename
|
||||||
|
String newFileName = buildFileName(fileName, workitem, fileNameCounter);
|
||||||
|
if (!newFileName.equals(fileName)) {
|
||||||
|
logger.info("Rename file name " + fileName + " -> " + newFileName);
|
||||||
|
// do we have content
|
||||||
|
if (fileData.getContent().length < 10) {
|
||||||
|
// fetch snaphot data
|
||||||
|
FileData snapShotFileData = snapshotService.getWorkItemFile(workitem.getUniqueID(), fileName);
|
||||||
|
// remove old data
|
||||||
|
workitem.removeFile(fileName);
|
||||||
|
snapShotFileData.setName(newFileName);
|
||||||
|
workitem.addFileData(snapShotFileData);
|
||||||
|
} else {
|
||||||
|
fileData.setName(newFileName);
|
||||||
|
}
|
||||||
|
fileNameCounter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update FTP Target path information
|
||||||
|
String targetPath = "";
|
||||||
|
if (InvoiceUtil.isCreditorInvoice(workitem)) {
|
||||||
|
targetPath = "invoice-in/";
|
||||||
|
String bookingPath = workitem.getItemValueString("invoice.period");
|
||||||
|
// Sachrechnung
|
||||||
|
if (bookingPath.isEmpty()) {
|
||||||
|
// build period from invoice.date
|
||||||
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMM");
|
||||||
|
LocalDate invoiceDate = workitem.getItemValueLocalDate("invoice.date");
|
||||||
|
bookingPath = invoiceDate.format(formatter);
|
||||||
|
}
|
||||||
|
if (bookingPath.length() > 4) {
|
||||||
|
targetPath = targetPath + bookingPath.substring(0, 4) + "/" + bookingPath.substring(4);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
targetPath = "invoice-out/";
|
||||||
|
String bookingPath = workitem.getItemValueString("invoice.bookingperiod");
|
||||||
|
targetPath = targetPath + bookingPath.substring(0, 4) + "/" + bookingPath.substring(5);
|
||||||
|
}
|
||||||
|
|
||||||
|
workitem.setItemValue("ftp.target.path", targetPath + "/");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return workitem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Baut einen Filenamen aus verschiedenen Attributen zusammen.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param workitem
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private String buildFileName(String fileName, ItemCollection workitem, int counter) {
|
||||||
|
String result = workitem.getItemValueString("sequencenumber") + "_";
|
||||||
|
|
||||||
|
if (InvoiceUtil.isSachrechnung(workitem)) {
|
||||||
|
result = result + workitem.getItemValueString("invoice.number.stripped");
|
||||||
|
} else {
|
||||||
|
result = result + workitem.getItemValueString("invoice.positions");
|
||||||
|
}
|
||||||
|
if (counter > 0) {
|
||||||
|
result = result + "_" + counter;
|
||||||
|
}
|
||||||
|
result = result + fileName.substring(fileName.lastIndexOf("."));
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
6173
workflow/dwc/rechnungseingang-dwc-1.0.3.bpmn
Normal file
6173
workflow/dwc/rechnungseingang-dwc-1.0.3.bpmn
Normal file
File diff suppressed because it is too large
Load diff
5540
workflow/dwc/rechnungseingang-sachrechnung-dwc-1.0.2.bpmn
Normal file
5540
workflow/dwc/rechnungseingang-sachrechnung-dwc-1.0.2.bpmn
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue