logging, configuraiton BR

This commit is contained in:
Ralph Soika 2026-07-27 20:03:05 +02:00
parent 3f15b3a11b
commit b6e56958ec
5 changed files with 496 additions and 5 deletions

View file

@ -96,4 +96,4 @@ Der Export erfolgt automatisch nach Empfang der Rechnung bzw. nach Prüfung der
Server: u248962.your-storagebox.de Server: u248962.your-storagebox.de
Pfad: /office-alexander-logistics/cargosoft-br Pfad: /office-alexander-logistics/cargosoft-br
Benutzername: u248962-sub13 Benutzername: u248962-sub13
Passwort: ~AXh§#6n9XJPk~Z Passwort: YjQ5u5Nzz535-eGR

View file

@ -113,7 +113,10 @@ public class FTPConnector {
FTPClient ftpClient = null; FTPClient ftpClient = null;
try { try {
logger.info("├── 🔜 uploading " + fileName + " to FTP server: " + ftpServer + " ..."); logger.info("├── 🔜 uploading " + fileName + " to FTP server: " + ftpServer + " ...");
logger.info("│ ├── port=" + ftpPort.get().intValue());
logger.info("│ ├── working directory=" + ftpWorkingPath); logger.info("│ ├── working directory=" + ftpWorkingPath);
logger.info("│ ├── user=" + ftpUser.get());
// logger.info("│ ├── password=" + ftpPassword.get());
ftpClient = new FTPSClient("TLS", false); ftpClient = new FTPSClient("TLS", false);
ftpClient.setBufferSize(8192); ftpClient.setBufferSize(8192);
ftpClient.connect(ftpServer.get(), ftpPort.get().intValue()); ftpClient.connect(ftpServer.get(), ftpPort.get().intValue());
@ -150,11 +153,17 @@ public class FTPConnector {
} }
logger.info("│ └── ✓ ftp transfer completed."); logger.info("│ └── ✓ ftp transfer completed.");
} catch (IOException e) { } catch (IOException | PluginException e) {
// Log the real cause immediately, before the finally block runs -
// otherwise a cleanup failure could overwrite/hide this exception.
logger.warning("│ ├── ⚠️ FTP connection error: " + e.getMessage());
if (e instanceof PluginException) {
throw (PluginException) e;
}
throw new PluginException(CargosoftExportAdapter.class.getSimpleName(), FTP_ERROR, throw new PluginException(CargosoftExportAdapter.class.getSimpleName(), FTP_ERROR,
"FTP file transfer failed: " + e.getMessage(), e); "FTP file transfer failed: " + e.getMessage(), e);
} finally { } finally {
// Cleanup // Cleanup - never let a cleanup failure mask the primary exception
try { try {
if (writer != null) { if (writer != null) {
writer.close(); writer.close();
@ -163,9 +172,10 @@ public class FTPConnector {
ftpClient.logout(); ftpClient.logout();
ftpClient.disconnect(); ftpClient.disconnect();
} }
} catch (IOException e) { } catch (IOException cleanupException) {
throw new PluginException(CargosoftExportAdapter.class.getSimpleName(), FTP_ERROR, throw new PluginException(CargosoftExportAdapter.class.getSimpleName(), FTP_ERROR,
"FTP file transfer failed during cleanup: " + e.getMessage(), e); "FTP file transfer failed during cleanup: " + cleanupException.getMessage(),
cleanupException);
} }
} }
} }

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,231 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="2.0">
<xsl:strip-space elements="*" />
<xsl:output method="xml" indent="yes" encoding="UTF-8"
standalone="yes" />
<xsl:template match="/">
<xsl:variable name="date"
select="/data/document/item[@name='$modified']/value" />
<Invoices version="2020.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Message>
<SenderID>Imixs-Office-Workflow</SenderID>
<ReceiverID>Cargosoft</ReceiverID>
<MessageID>
<xsl:value-of select="/data/document/item[@name='$uniqueid']/value" />
</MessageID>
<MessageDate>
<DateTime>
<xsl:value-of select="$date" />
</DateTime>
</MessageDate>
</Message>
<xsl:apply-templates
select="/data/document[normalize-space(item[@name = '$workflowgroup']/value) =
'Cargosoft-Export']" />
</Invoices>
</xsl:template>
<!-- This template builds invoice info -->
<xsl:template
match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) =
'Cargosoft-Export']">
<xsl:variable name="date" select="item[@name='$modified']/value" />
<xsl:variable
name="currency" select="item[@name='invoice.currency']/value" />
<Invoice>
<InvoiceHeader>
<Client>
<Codes>
<!-- Als Typ muss „cs“ übermittelt werden und im Code wird
dann der Cargosoft Mandant erwartet. -->
<Code Type="cs">008</Code>
</Codes>
</Client>
<!-- Hier muss eine eindeutige Belegnummer für jeden einzelnen
Beleg übermittelt werden. Es muss sich um eine Nummer
handeln, die pro Beleg hochgezählt wird und darf sich nicht
überschneiden mit dem CargoSoft Belegnummernkreis.
Daher den Nummernkreis vorher mit CargoSoft absprechen. -->
<InvoiceNumber>
<xsl:value-of select="item[@name='numsequencenumber']/value" />
</InvoiceNumber>
<!-- Belegart - bei Gutschriften 'CREDIT' andernfalls 'INVOICE -->
<InvoiceType>
<Codes>
<xsl:choose>
<xsl:when test="item[@name='payment.type']/value = 'credit'">
<Code Type="cs">CREDIT</Code>
</xsl:when>
<xsl:otherwise>
<Code Type="cs">INVOICE</Code>
</xsl:otherwise>
</xsl:choose>
</Codes>
</InvoiceType>
<InvoiceCurrency>
<Codes>
<Code Type="cs">
<xsl:value-of select="$currency" />
</Code>
</Codes>
</InvoiceCurrency>
<InvoiceAmount>
<NetAmount>
<Amount>
<Currency>
<Codes>
<Code Type="cs">
<xsl:value-of select="$currency" />
</Code>
</Codes>
</Currency>
<Value>
<xsl:value-of select="item[@name='order.total.netto']/value"
/>
</Value>
<!-- exchange rate nur ausgeben wenn vorhanden -->
<xsl:if
test="string-length(item[@name='invoice.exchangerate']/value) >0">
<ExchangeRate>
<xsl:value-of select="item[@name='invoice.exchangerate']/value" />
</ExchangeRate>
</xsl:if>
</Amount>
</NetAmount>
<VATInformation>
<VATAmount>
<Amount>
<Currency>
<Codes>
<Code Type="cs">
<xsl:value-of select="$currency" />
</Code>
</Codes>
</Currency>
<Value>
<xsl:value-of select="item[@name='order.total.tax']/value" />
</Value>
<!-- exchange rate nur ausgeben wenn vorhanden -->
<xsl:if
test="string-length(item[@name='invoice.exchangerate']/value) >0">
<ExchangeRate>
<xsl:value-of
select="item[@name='invoice.exchangerate']/value" />
</ExchangeRate>
</xsl:if>
</Amount>
</VATAmount>
</VATInformation>
</InvoiceAmount>
<CollectionInvoice>false</CollectionInvoice>
<xsl:if test="string-length(item[@name='invoice.period']/value) > 0">
<BookingPeriod>
<xsl:value-of select="item[@name='invoice.period']/value" />
</BookingPeriod>
</xsl:if>
<Booked>false</Booked>
<InvoiceDate>
<xsl:value-of select="item[@name='invoice.date']/value" />
</InvoiceDate>
<InvoiceAddress type="CN">
<Codes>
<Code Type="cs">
<xsl:value-of select="item[@name='cdtr.number']/value" />
</Code>
</Codes>
</InvoiceAddress>
<References>
<Reference type="cs">
<xsl:value-of select="item[@name='invoice.number']/value" />
</Reference>
</References>
<!-- Attachements -->
<xsl:if test="item[@name='$file.count']/value > 0">
<Attachments>
<xsl:for-each
select="item[@name='$file']/value/item">
<Attachment>
<xsl:attribute name="id"><xsl:value-of
select="./value/item[@name='md5checksum']/value" /></xsl:attribute>
<xsl:attribute name="version">1</xsl:attribute>
<Filename>
<xsl:value-of select="lower-case(./@name)" />
</Filename>
<Description>Imixs-Office-Workflow</Description>
<Content>
<xsl:value-of select="./value[2]" />
</Content>
</Attachment>
</xsl:for-each>
</Attachments>
</xsl:if>
</InvoiceHeader>
<InvoiceRows>
<xsl:for-each
select="item[@name='_childitems']/value">
<InvoiceRow>
<Row>
<xsl:value-of select="./item[@name='numpos']/value" />
</Row>
<FileNumber>
<xsl:value-of select="./item[@name='name']/value"
/>
</FileNumber>
<InvoiceAmount>
<NetAmount>
<Amount>
<Currency>
<Codes>
<Code Type="cs">
<xsl:value-of select="$currency" />
</Code>
</Codes>
</Currency>
<Value>
<xsl:value-of select="./item[@name='amount']/value" />
</Value>
</Amount>
</NetAmount>
<VATInformation>
<VAT>
<Codes>
<Code Type="cs">
<xsl:value-of select="./item[@name='tax']/value" />
</Code>
</Codes>
</VAT>
</VATInformation>
</InvoiceAmount>
<ActivityType>
<Codes>
<Code Type="cs">
<xsl:value-of select="./item[@name='category']/value" />
</Code>
</Codes>
</ActivityType>
</InvoiceRow>
</xsl:for-each>
</InvoiceRows>
</Invoice>
</xsl:template>
</xsl:stylesheet>

BIN
templates/sepa/sepa-br.xlsx Normal file

Binary file not shown.