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
|
||||
|
||||
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
|
||||
Ü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:
|
||||
|
||||
###############################################
|
||||
# Postgres DB
|
||||
###############################################
|
||||
|
|
@ -9,9 +8,9 @@ services:
|
|||
environment:
|
||||
POSTGRES_PASSWORD: adminadmin
|
||||
POSTGRES_DB: office-alexander-logistics
|
||||
volumes:
|
||||
volumes:
|
||||
- dbdata:/var/lib/postgresql/data
|
||||
|
||||
|
||||
###############################################
|
||||
# Office
|
||||
###############################################
|
||||
|
|
@ -24,7 +23,7 @@ services:
|
|||
POSTGRES_USER: "postgres"
|
||||
POSTGRES_PASSWORD: "adminadmin"
|
||||
POSTGRES_CONNECTION: "jdbc:postgresql://db/office-alexander-logistics"
|
||||
TZ: "CET"
|
||||
TZ: "CET"
|
||||
LANG: "en_US.UTF-8"
|
||||
MAILGATEWAY: "mailgateway"
|
||||
|
||||
|
|
@ -34,7 +33,7 @@ services:
|
|||
OCR_SERVICE_ENDPOINT: "http://tika:9998/tika"
|
||||
OCR_SERVICE_MODE: "MODEL"
|
||||
#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"
|
||||
|
||||
LLM_SERVICE_ENDPOINT_USER: "admin"
|
||||
|
|
@ -48,21 +47,40 @@ services:
|
|||
- "8787:8787"
|
||||
volumes:
|
||||
- ./docker/deployments:/opt/jboss/wildfly/standalone/deployments/
|
||||
|
||||
|
||||
###############################################
|
||||
# Tika OCR Service
|
||||
###############################################
|
||||
tika:
|
||||
tika:
|
||||
#image: apache/tika:latest
|
||||
#image: apache/tika:1.24.1-full
|
||||
image: apache/tika:2.4.1-full
|
||||
environment:
|
||||
TZ: "Europe/Berlin"
|
||||
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
|
||||
|
|
@ -80,26 +98,21 @@ services:
|
|||
environment:
|
||||
EXIM_SMARTHOST: "www149.your-server.de:25"
|
||||
EXIM_PASSWORD: "www149.your-server.de:webmaster@imixs.com:$MAILPASSWORD"
|
||||
EXIM_ALLOWED_SENDERS: "10.0.0.0/8:172.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:
|
||||
image: prom/prometheus:latest
|
||||
ports:
|
||||
- "9090:9090"
|
||||
volumes:
|
||||
- ./docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
||||
- ./docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
||||
- prometheusdata:/prometheus/
|
||||
|
||||
|
||||
grafana:
|
||||
image: grafana/grafana:latest
|
||||
ports:
|
||||
- "3000:3000"
|
||||
ports:
|
||||
- "3000:3000"
|
||||
|
||||
volumes:
|
||||
dbdata:
|
||||
dbdata:
|
||||
prometheusdata:
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -242,4 +242,18 @@ public class InvoiceUtil {
|
|||
}
|
||||
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