This commit is contained in:
Ralph Soika 2020-12-14 11:42:53 +01:00
parent e0f68071f6
commit 4e886dacfb
7 changed files with 139 additions and 57 deletions

View file

@ -30,9 +30,18 @@ Die Zugangsdaten lauten:
### Cargosoft Schnittstelle ### Cargosoft Schnittstelle
Für cargosoft verwenden wir einen Subaccoutn der auf das Verzeichns:
/office-alexander-logistics/cargosoft
zeigt.
Benutzername: u248962-sub2 Benutzername: u248962-sub2
Passwort: aXa61n9Un3jDNQlL Passwort: aXa61n9Un3jDNQlL
Schnittstellen Details siehe unten
## E-Mail Schnittstelle ## E-Mail Schnittstelle
Es gibt ein Email Konto das wir für den Import von Rechnungen nutzen Es gibt ein Email Konto das wir für den Import von Rechnungen nutzen
@ -49,8 +58,24 @@ Es gibt ein Email Konto das wir f
$ mvn clean install -Pdocker $ mvn clean install -Pdocker
## Push to Ixchel Cloud ### Push to Ixchel Cloud
$ mvn clean install -Pkubernetes $ mvn clean install -Pkubernetes
# Cargosoft
Die Cargosoft Schnittstelle besteht aus einem eigenen Export modell "cargosoft-export-1.0.0". In diesem wird der CargoosftExportAdapter getriggert, der
die Daten einer Rechnung an den FTP Server übermittelt.
Die Konfiguration der FTP Schnittstelle erfolgt über den Konfigurationsdialog im Office-Workflow mit den folgenden Werten:
cargosoft.export.ftp.host=u248962.your-storagebox.de
cargosoft.export.ftp.path=/
cargosoft.export.ftp.user=u248962-sub2
cargosoft.export.ftp.password=aXa61n9Un3jDNQlL

View file

@ -71,7 +71,7 @@ public class FTPConnector {
@Inject @Inject
@ConfigProperty(name = ENV_EXPORT_FTP_PORT, defaultValue = "21") @ConfigProperty(name = ENV_EXPORT_FTP_PORT, defaultValue = "21")
int ftpPort; Optional<Integer> ftpPort;
@Inject @Inject
@ConfigProperty(name = ENV_EXPORT_FTP_USER) @ConfigProperty(name = ENV_EXPORT_FTP_USER)
@ -93,7 +93,7 @@ public class FTPConnector {
throw new PluginException(CargosoftExportAdapter.class.getSimpleName(), FTP_ERROR, throw new PluginException(CargosoftExportAdapter.class.getSimpleName(), FTP_ERROR,
"FTP file transfer failed: no ftp host name provided (" + ENV_EXPORT_FTP_HOST + ")!"); "FTP file transfer failed: no ftp host name provided (" + ENV_EXPORT_FTP_HOST + ")!");
} }
String fileName = fileData.getName(); String fileName = fileData.getName();
// Compute file path // Compute file path
@ -110,16 +110,14 @@ public class FTPConnector {
try { try {
logger.finest("......put " + fileName + " to FTP server: " + ftpServer + "..."); logger.finest("......put " + fileName + " to FTP server: " + ftpServer + "...");
ftpClient = new FTPSClient("TLS", false); ftpClient = new FTPSClient("TLS", false);
ftpClient.setControlEncoding("UTF-8"); ftpClient.setBufferSize(8192);
ftpClient.connect(ftpServer.get(), ftpPort); ftpClient.connect(ftpServer.get(), ftpPort.get().intValue());
if (ftpClient.login(ftpUser.get(), ftpPassword.get()) == false) { if (ftpClient.login(ftpUser.get(), ftpPassword.get()) == false) {
throw new PluginException(CargosoftExportAdapter.class.getSimpleName(), FTP_ERROR, throw new PluginException(CargosoftExportAdapter.class.getSimpleName(), FTP_ERROR,
"FTP file transfer failed: login failed!"); "FTP file transfer failed: login failed!");
} }
ftpClient.enterLocalPassiveMode(); ftpClient.enterLocalPassiveMode();
// ftpClient.setFileType(FTP.ASCII_FILE_TYPE); ftpClient.setFileType(FTP.ASCII_FILE_TYPE);
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.setControlEncoding("UTF-8"); ftpClient.setControlEncoding("UTF-8");
// verify directories // verify directories
@ -221,4 +219,5 @@ public class FTPConnector {
"FTP file transfer failed: " + e.getMessage(), e); "FTP file transfer failed: " + e.getMessage(), e);
} }
} }
} }

View file

@ -1,3 +1,9 @@
# Custom resource bundle # Custom resource bundle
app.application_title=Alexander Global Logistics app.application_title=Alexander Global Logistics
alexander_form_basic=
alexander_form_basic_read=
alexander_sub_positionen=
alexander_sub_positionen_read=
alexander_sub_responsible=

View file

@ -1,3 +1,9 @@
# Custom resource bundle # Custom resource bundle
app.application_title=Alexander Global Logistics app.application_title=Alexander Global Logistics
alexander_form_basic=
alexander_form_basic_read=
alexander_sub_positionen=
alexander_sub_positionen_read=
alexander_sub_responsible=

View file

@ -12,14 +12,12 @@
<table class="imixsdatatable imixs-orderitems"> <table class="imixsdatatable imixs-orderitems">
<tr> <tr>
<th style="width: 50px;">Pos.</th> <th style="">#</th>
<th>Leistungsbezeichnung</th> <th style="">Positionsnummer<span class="imixs-required"> *</span></th>
<th style="width: 70px;">Einheit</th> <th style="width: 50px;">Buchungsperiode</th>
<th style="width: 70px;">Menge</th> <th style="width: 150px;">Steuer</th>
<th style="width: 140px;">Netto-Preis / ME in €</th> <th style="width: 150px;text-align:right;">Netto</th>
<th style="width: 90px;">Gesamt in €</th> <th style="width: 150px;text-align:right;">Brutto</th>
</tr> </tr>
<ui:repeat var="orderitem" value="#{childItemController.childItems}"> <ui:repeat var="orderitem" value="#{childItemController.childItems}">
@ -33,23 +31,17 @@
<td><h:outputText value="#{orderitem.item['name']}" /></td> <td><h:outputText value="#{orderitem.item['name']}" /></td>
<td><h:outputText value="#{orderitem.item['unit']}" /></td> <td><h:outputText value="#{orderitem.item['period']}" /></td>
<td><h:outputText value="#{orderitem.item['ammount']}"
id="orderitem_ammount" onchange="calculateSummary()" /></td>
<td style="text-align: right;"><h:outputText value="#{orderitem.item['price']}"
id="orderitem_price"
onchange="calculateSummary()">
<f:convertNumber minFractionDigits="2" locale="de" />
</h:outputText></td>
<td class="orderitem_summary" style="text-align: right;">
<h:outputText value="#{orderitem.item['_capacity_dsp']}"> <td><h:outputText value="#{orderitem.item['tax']}" /></td>
<td style="text-align: right;"><h:outputText value="#{orderitem.item['amount']}"
/></td>
</h:outputText> <td style="text-align: right;"><h:outputText value="#{orderitem.item['total']}"
/></td>
</td>
</tr> </tr>
@ -63,9 +55,9 @@
<td /> <td />
<td /> <td />
<td /> <td />
<td /> <td style="text-align: right;">Summe:</td>
<td class="orderlist_summary" style="text-align: right;"> <td class="orderlist_summary" style="text-align: right;">
<h:outputText value="#{workitem.item['_capacity_dsp']}"> <h:outputText value="#{workitem.item['order.total']}">
</h:outputText> </h:outputText>
</td> </td>
@ -82,28 +74,9 @@
<script type="text/javascript"> <script type="text/javascript">
/*<![CDATA[*/ /*<![CDATA[*/
// display summary
$(document).ready(function() {
});
// This method refreshs the layout
function updateOrderItems(data) {
if (data.status === 'success') {
$('[id$=oderlist]').imixsLayout();
}
}
function convertToCurrency(sum) {
sum = ("" + sum).replace('.', ',');
if (sum.indexOf(',') == -1)
sum = sum + ",00";
if (sum.indexOf(',') == sum.length - 2)
sum = sum + "0";
return sum;
}
/*]]>*/ /*]]>*/
</script> </script>

View file

@ -0,0 +1,65 @@
package com.alexanderlogistics;
import java.util.Optional;
import java.util.logging.Logger;
import org.imixs.workflow.FileData;
import org.imixs.workflow.exceptions.PluginException;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import junit.framework.Assert;
/**
* This test generates random test data
*
* @author rsoika
*
*/
public class TestFTP {
final static String FILE = "/DTVF_SKBeschrift_21010.csv";
private final static Logger logger = Logger.getLogger(TestFTP.class.getName());
@Before
public void setUp() throws Exception {
}
/**
* Test Kreditoren import
*/
@Ignore
@Test
public void testPutFileToFTP() {
FTPConnector ftpc=new FTPConnector();
ftpc.ftpServer=Optional.ofNullable("u248962.your-storagebox.de");
ftpc.ftpPort=Optional.ofNullable(21);
ftpc.ftpUser=Optional.ofNullable("u248962-sub2");
ftpc.ftpPassword=Optional.ofNullable("aXa61n9Un3jDNQlL");
ftpc.ftpPath=Optional.ofNullable("/");
FileData fileData=new FileData("test.txt","some data...".getBytes(),"text",null);
try {
ftpc.put(fileData);
logger.info("test finished...");
} catch ( PluginException e) {
e.printStackTrace();
Assert.fail();
}
}
}

View file

@ -387,7 +387,15 @@ Betrag: <itemvalue>_amount</itemvalue> (Brutto € <itemvalue>_amount_brutto</it
</imixs:item> </imixs:item>
<imixs:item name="txtactivityresult" type="xs:string"> <imixs:item name="txtactivityresult" type="xs:string">
<imixs:value><![CDATA[<item name="action">home</item> <imixs:value><![CDATA[<item name="action">home</item>
<item name="space.lastname"><itemvalue>space.name</itemvalue></item>]]></imixs:value> <item name="space.lastname"><itemvalue>space.name</itemvalue></item>
<item name="subprocess_create">
<modelversion>cargosoft-export-1.0</modelversion>
<task>1000</task>
<event>100</event>
<items>(?!txtworkflowhistory)(^[a-zA-Z]|^_)</items>
</item>
]]></imixs:value>
</imixs:item> </imixs:item>
<imixs:item name="txtname" type="xs:string"> <imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Freigabe einholen]]></imixs:value> <imixs:value><![CDATA[Freigabe einholen]]></imixs:value>
@ -417,7 +425,7 @@ var b= workitem.get("order.total")[0];
<bpmn2:documentation id="Documentation_23"><![CDATA[Rechnung geprüft, weiterleiten an Buchhaltung.]]></bpmn2:documentation> <bpmn2:documentation id="Documentation_23"><![CDATA[Rechnung geprüft, weiterleiten an Buchhaltung.]]></bpmn2:documentation>
<bpmn2:incoming>SequenceFlow_8</bpmn2:incoming> <bpmn2:incoming>SequenceFlow_8</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_51</bpmn2:outgoing> <bpmn2:outgoing>SequenceFlow_51</bpmn2:outgoing>
<bpmn2:signalEventDefinition id="SignalEventDefinition_4"/> <bpmn2:outputSet id="OutputSet_2" name="Output Set 2"/>
</bpmn2:intermediateCatchEvent> </bpmn2:intermediateCatchEvent>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_5005-10" imixs:activityid="10" name="Speichern"> <bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_5005-10" imixs:activityid="10" name="Speichern">
<bpmn2:extensionElements> <bpmn2:extensionElements>