erweiterete Krediotrenverwaltung mit mehreren IBAN/BIC

This commit is contained in:
Ralph Soika 2022-06-07 14:11:06 +02:00
parent eee7a96913
commit 90beebd5c0
7 changed files with 355 additions and 151 deletions

View file

@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>office-alexander-logistics</artifactId> <artifactId>office-alexander-logistics</artifactId>
<groupId>com.alexander-logistics</groupId> <groupId>com.alexander-logistics</groupId>
<version>1.2.6</version> <version>1.2.7</version>
</parent> </parent>
<artifactId>office-alexander-logistics-app</artifactId> <artifactId>office-alexander-logistics-app</artifactId>
<packaging>war</packaging> <packaging>war</packaging>

View file

@ -1,6 +1,9 @@
package com.alexanderlogistics; package com.alexanderlogistics;
import java.io.IOException;
import java.io.Serializable; import java.io.Serializable;
import java.io.StringWriter;
import java.io.Writer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -9,6 +12,9 @@ import javax.enterprise.context.ConversationScoped;
import javax.faces.context.FacesContext; import javax.faces.context.FacesContext;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; 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.ItemCollection;
import org.imixs.workflow.engine.DocumentService; import org.imixs.workflow.engine.DocumentService;
@ -21,6 +27,14 @@ import org.imixs.workflow.exceptions.QueryException;
* The method search provides a suggest list searching a phrase within the * The method search provides a suggest list searching a phrase within the
* cargosoft creditor list (type=cargosoftkreditor). * cargosoft creditor list (type=cargosoftkreditor).
* *
* <p>
* Besonderheit
* <p>
* Wir transportieren in der Resutl Liste eine versteckte JSON Struktur mit
* allen IBAN Informationen Das ist im Grunde etwas irre aber durch die
* JSF-Ajax-JavaScript Hölle kommern wir derzeit aus der Nummer nicht mehr
* anders raus.
*
* @author rsoika * @author rsoika
* *
*/ */
@ -28,140 +42,235 @@ import org.imixs.workflow.exceptions.QueryException;
@ConversationScoped @ConversationScoped
public class CargosoftController implements Serializable { public class CargosoftController implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger(CargosoftController.class.getName()); private static Logger logger = Logger.getLogger(CargosoftController.class.getName());
public static final String TYPE_CARGOSOFTKREDITOR = "cargosoftkreditor"; public static final String TYPE_CARGOSOFTKREDITOR = "cargosoftkreditor";
@Inject @Inject
protected DocumentService documentService; protected DocumentService documentService;
private List<String> searchResult = null; private List<KreditorSearchEntry> searchResult = null;
private ItemCollection kreditor = null; // used for zahlungsziel (kreidtor.xhtml) private ItemCollection kreditor = null; // used for zahlungsziel (kreidtor.xhtml)
/** /**
* This method searches a text phrase within the list of cargosoft kreditor * This method searches a text phrase within the list of cargosoft kreditor
* objects (type=cargosoftkreditor). * objects (type=cargosoftkreditor).
* <p> * <p>
* JSF Integration: * JSF Integration:
* *
* {@code * {@code
* *
* <h:commandScript name="imixsOfficeWorkflow.mlSearch" action= * <h:commandScript name="imixsOfficeWorkflow.mlSearch" action=
* "#{cargosoftController.search()}" rendered="#{cargosoftController!=null}" * "#{cargosoftController.search()}" rendered="#{cargosoftController!=null}"
* render= "cargosoft-results" /> } * render= "cargosoft-results" /> }
* *
* <p> * <p>
* JavaScript Example: * JavaScript Example:
* *
* <pre> * <pre>
* {@code * {@code
* imixsOfficeWorkflow.cargosoftSearch({ item: '_invoicenumber' }) * imixsOfficeWorkflow.cargosoftSearch({ item: '_invoicenumber' })
* } * }
* </pre> * </pre>
* *
*/ * @param searchmode - if 'multi', display multiple IBANs in seperate lines
public void searchCreditor() { */
public void searchCreditor(String searchmode) {
boolean bMulitMode = "multi".equalsIgnoreCase(searchmode);
searchResult = new ArrayList<KreditorSearchEntry>();
// get the param from faces context....
FacesContext fc = FacesContext.getCurrentInstance();
String phrase = fc.getExternalContext().getRequestParameterMap().get("phrase");
if (phrase == null) {
return;
}
searchResult = new ArrayList<String>(); logger.fine("search prase '" + phrase + "'");
// get the param from faces context....
FacesContext fc = FacesContext.getCurrentInstance();
String phrase = fc.getExternalContext().getRequestParameterMap().get("phrase");
if (phrase == null) {
return;
}
logger.fine("search prase '" + phrase + "'"); // String input =workflowController.getWorkitem().getItemValueString(itemName);
if (phrase == null || phrase.length() < 2) {
return;
}
// String input =workflowController.getWorkitem().getItemValueString(itemName); // die cargosoft Kreditornummer beginnt seltsamerweise mit einem K
if (phrase == null || phrase.length() < 2) { // und die Debitoren mit einem D.....
return; String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ") AND ( (name:K" + phrase + "*) OR (name:D" + phrase
} + "*) OR (" + phrase.toLowerCase() + "*) )";
// die cargosoft Kreditornummer beginnt seltsamerweise mit einem K try {
// und die Debitoren mit einem D..... List<ItemCollection> result = documentService.find(query, 20, 0, "$modified", true);
String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ") AND ( (name:K" + phrase + "*) OR (name:D" + phrase logger.info("found " + result.size() + " creditors...");
+ "*) OR (" + phrase.toLowerCase() + "*) )"; if (result != null) {
for (ItemCollection cdtr : result) {
try { // Aenderugn 22. Jun wir geben das K/D direkt witer
List<ItemCollection> result = documentService.find(query, 20, 0); String cdtrNo = cdtr.getItemValueString("_VENDOR_NUM");
logger.info("found " + result.size() + " creditors..."); String display = cdtrNo + " - " + cdtr.getItemValueString("_VENDOR_Name");
if (result != null) {
for (ItemCollection cdtr : result) {
// Aenderugn 22. Jun wir geben das K/D direkt witer // Im MulitMode zeigen wir pro IBAN (1-4) eine eigene Zeile an. Dieser
String cdtrNo = cdtr.getItemValueString("_VENDOR_NUM"); // Modus wird für die Rechnungserfassung benötigt.
String data=cdtrNo + " - " + cdtr.getItemValueString("_VENDOR_Name"); // im SingleMode wird hingegen nur ein Datensatz in der Trefferliste angezeigt.
// Aenderung 11. Mai - wir geben nun creditperiod iban und bic mit | Zeichen getrennt weieter // (Ein Kreditoren Eintrag kann bis zu 4 IBANs / BICs haben
data=data + " |"+cdtr.getItemValueString("cdtr.creditperiod"); if (bMulitMode) {
data=data + "|"+cdtr.getItemValueString("cdtr.iban"); // in der JSON Struktur werden alle IBANS übertragen
data=data + "|"+cdtr.getItemValueString("cdtr.bic"); display = display + " |" + cdtr.getItemValueString("cdtr.creditperiod");
display = display + "|" + cdtr.getItemValueString("cdtr.iban");
display = display + "|" + cdtr.getItemValueString("cdtr.bic");
searchResult.add(new KreditorSearchEntry(cdtrNo, display, buildJsonData(cdtr,
cdtr.getItemValueString("cdtr.iban"), cdtr.getItemValueString("cdtr.bic"))));
// haben wir noch weitere IBAN/BIC kombis?
for (int j = 1; j < 4; j++) {
if (!cdtr.getItemValueString("cdtr.iban" + j).isEmpty()) {
// Dublette mit alternativer IBAN erzeugen
display = cdtrNo + " - " + cdtr.getItemValueString("_VENDOR_Name");
display = display + " |" + cdtr.getItemValueString("cdtr.creditperiod");
display = display + "|" + cdtr.getItemValueString("cdtr.iban" + j);
display = display + "|" + cdtr.getItemValueString("cdtr.bic" + j);
searchResult.add(new KreditorSearchEntry(cdtrNo, display,
buildJsonData(cdtr, cdtr.getItemValueString("cdtr.iban" + j),
cdtr.getItemValueString("cdtr.bic" + j))));
}
}
} else {
// Modus für Kreditoren Verwaltung
searchResult.add(new KreditorSearchEntry(cdtrNo, display, buildJsonData(cdtr)));
}
searchResult.add(data); }
} }
} } catch (QueryException e) {
} catch (QueryException e) { e.printStackTrace();
e.printStackTrace(); }
}
} }
public List<String> getSearchResult() { /**
return searchResult; * Hilfsmethode die eine JSON Struktur mit einer IBAN/BIC kombinatuion erzeugt.
} * Diese JSON Struktur wird von der Rechnungserfassungs Maske benötigt
*
* @return
*/
private String buildJsonData(ItemCollection cdtr, String iban, String bic) {
/** JsonObjectBuilder objectBuilder = Json.createObjectBuilder(). //
* This method reset the search and input state. add("no", cdtr.getItemValueString("_VENDOR_NUM")). //
*/ add("name", cdtr.getItemValueString("_VENDOR_Name")). //
public void reset() { add("creditperiod", cdtr.getItemValueString("cdtr.creditperiod")). //
searchResult = new ArrayList<String>(); add("iban", iban). //
logger.fine("reset"); add("bic", bic);
} JsonObject jsonObject = objectBuilder.build();
public ItemCollection getKreditor() { String jsonString = "{}";
if (kreditor == null) { try (Writer writer = new StringWriter()) {
kreditor = new ItemCollection(); Json.createWriter(writer).write(jsonObject);
} jsonString = writer.toString();
return kreditor; } catch (IOException e) {
} logger.warning("Unable to build json structure");
}
return jsonString;
}
public void setKreditor(ItemCollection kreditor) { /**
this.kreditor = kreditor; * Hilfsmethode die eine JSON Struktur mit allen IBN/BIC kombinationen erzeugt.
} * Diese JSON Strukur wird dann von der Kreitoren.xhtml Maske wieder ausgelesen.
*
* @return
*/
private String buildJsonData(ItemCollection cdtr) {
/** JsonObjectBuilder objectBuilder = Json.createObjectBuilder(). //
* Diese Method überträgt die geänderten Daten in das Kreidtoren Objekt (cdtr.creditperiod,cdtr.iban,cdtr.bic) add("no", cdtr.getItemValueString("_VENDOR_NUM")). //
*/ add("name", cdtr.getItemValueString("_VENDOR_Name")). //
public void updateZahlungsziel() { add("creditperiod", cdtr.getItemValueString("cdtr.creditperiod")). //
add("iban", cdtr.getItemValueString("cdtr.iban")). //
add("bic", cdtr.getItemValueString("cdtr.bic")). //
// add ibans für kreditoren verwaltung
add("iban3", cdtr.getItemValueString("cdtr.iban3")). //
add("iban4", cdtr.getItemValueString("cdtr.iban4")). //
add("bic2", cdtr.getItemValueString("cdtr.bic2")). //
add("bic3", cdtr.getItemValueString("cdtr.bic3")). //
add("bic4", cdtr.getItemValueString("cdtr.bic4")); //
String cdtrNumber = kreditor.getItemValueString("cdtr.number"); JsonObject jsonObject = objectBuilder.build();
String period = kreditor.getItemValueString("cdtr.creditperiod");
String iban = kreditor.getItemValueString("cdtr.iban");
String bic = kreditor.getItemValueString("cdtr.bic");
logger.fine("Zahlungsziel = " + cdtrNumber + " / " + period);
// search workitem String jsonString = "{}";
String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ") AND (name:" + cdtrNumber + ")"; try (Writer writer = new StringWriter()) {
Json.createWriter(writer).write(jsonObject);
jsonString = writer.toString();
} catch (IOException e) {
logger.warning("Unable to build json structure");
}
return jsonString;
}
List<ItemCollection> result; /**
try { * Die Resultliste wird als eine Liste einen Arrays zurückgegeben. Der Erste
result = documentService.find(query, 1, 0); * Eintrag
if (result.size() == 1) { *
ItemCollection cargoCreditor = result.get(0); * @return
try { */
cargoCreditor.setItemValue("cdtr.creditperiod", Integer.parseInt(period)); public List<KreditorSearchEntry> getSearchResult() {
} catch (NumberFormatException nfe) { return searchResult;
// no op }
}
cargoCreditor.setItemValue("cdtr.iban", iban);
cargoCreditor.setItemValue("cdtr.bic", bic);
documentService.save(cargoCreditor);
}
} catch (QueryException e) {
logger.severe("Unable to find cargosoft kreditor "+e.getMessage());
}
} /**
* This method reset the search and input state.
*/
public void reset() {
searchResult = new ArrayList<KreditorSearchEntry>();
logger.fine("reset");
}
public ItemCollection getKreditor() {
if (kreditor == null) {
kreditor = new ItemCollection();
}
return kreditor;
}
public void setKreditor(ItemCollection kreditor) {
this.kreditor = kreditor;
}
/**
* Diese Method überträgt die geänderten Daten in das Kreidtoren Objekt
* (cdtr.creditperiod,cdtr.iban,cdtr.bic)
*/
public void updateZahlungsziel() {
String cdtrNumber = kreditor.getItemValueString("cdtr.number");
logger.fine("Zahlungsziel = " + cdtrNumber);
// search workitem
String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ") AND (name:" + cdtrNumber + ")";
List<ItemCollection> result;
try {
result = documentService.find(query, 1, 0);
if (result.size() == 1) {
ItemCollection cargoCreditor = result.get(0);
try {
cargoCreditor.setItemValue("cdtr.creditperiod",
Integer.parseInt(kreditor.getItemValueString("cdtr.creditperiod")));
} catch (NumberFormatException nfe) {
// no op
}
cargoCreditor.setItemValue("cdtr.iban", kreditor.getItemValueString("cdtr.iban"));
cargoCreditor.setItemValue("cdtr.bic", kreditor.getItemValueString("cdtr.bic"));
cargoCreditor.setItemValue("cdtr.iban2", kreditor.getItemValueString("cdtr.iban2"));
cargoCreditor.setItemValue("cdtr.bic2", kreditor.getItemValueString("cdtr.bic2"));
cargoCreditor.setItemValue("cdtr.iban3", kreditor.getItemValueString("cdtr.iban3"));
cargoCreditor.setItemValue("cdtr.bic3", kreditor.getItemValueString("cdtr.bic3"));
cargoCreditor.setItemValue("cdtr.iban4", kreditor.getItemValueString("cdtr.iban4"));
cargoCreditor.setItemValue("cdtr.bic4", kreditor.getItemValueString("cdtr.bic4"));
documentService.save(cargoCreditor);
}
} catch (QueryException e) {
logger.severe("Unable to find cargosoft kreditor " + e.getMessage());
}
}
} }

View file

@ -0,0 +1,48 @@
package com.alexanderlogistics;
/**
* Diese Kleine Hilfsklasse dient als DTO für die Übertragugn eines
* Sucheregenisses nach kreditoren an das Frontend. Die Klasse besteht aus einem
* Key, einer DisplayZeile für die Darstellung und einen JSON String der
* beliebige Daten enthalten kann.
*
* @author rsoika
*
*/
public class KreditorSearchEntry {
private String key;
private String display;
private String data;
public KreditorSearchEntry(String key, String display, String data) {
super();
this.key = key;
this.display = display;
this.data = data;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getDisplay() {
return display;
}
public void setDisplay(String display) {
this.display = display;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}

View file

@ -20,6 +20,7 @@
<ui:include <ui:include
src="/pages/workitems/forms/alexander/cargsoft-creditor-search.xhtml"> src="/pages/workitems/forms/alexander/cargsoft-creditor-search.xhtml">
<ui:param name="workitem" value="#{cargosoftController.kreditor}" /> <ui:param name="workitem" value="#{cargosoftController.kreditor}" />
<ui:param name="searchmode" value="single" />
</ui:include> </ui:include>
<div class="imixs-form"> <div class="imixs-form">
<div class="imixs-header"> <div class="imixs-header">
@ -79,6 +80,51 @@
</dd> </dd>
</dl> </dl>
<!-- IBAN 1-5 -->
<dl>
<dd>
<h:inputText
value="#{cargosoftController.kreditor.item['cdtr.iban2']}" pt:data-item="cdtr.iban2"/>
</dd>
</dl>
<dl>
<dd>
<h:inputText
value="#{cargosoftController.kreditor.item['cdtr.bic2']}" pt:data-item="cdtr.bic2"/>
</dd>
</dl>
<dl>
<dd>
<h:inputText
value="#{cargosoftController.kreditor.item['cdtr.iban3']}" pt:data-item="cdtr.iban3"/>
</dd>
</dl>
<dl>
<dd>
<h:inputText
value="#{cargosoftController.kreditor.item['cdtr.bic3']}" pt:data-item="cdtr.bic3"/>
</dd>
</dl>
<dl>
<dd>
<h:inputText
value="#{cargosoftController.kreditor.item['cdtr.iban4']}" pt:data-item="cdtr.iban4"/>
</dd>
</dl>
<dl>
<dd>
<h:inputText
value="#{cargosoftController.kreditor.item['cdtr.bic4']}" pt:data-item="cdtr.bic4"/>
</dd>
</dl>
</div> </div>

View file

@ -21,7 +21,7 @@
https://dzone.com/articles/execute-a-jsf-ajax-request-by-just-a-function-call https://dzone.com/articles/execute-a-jsf-ajax-request-by-just-a-function-call
https://www.w3schools.com/howto/howto_js_autocomplete.asp https://www.w3schools.com/howto/howto_js_autocomplete.asp
--> -->
<h:commandScript name="cargosoftSearch" action="#{cargosoftController.searchCreditor()}" <h:commandScript name="cargosoftSearch" action="#{cargosoftController.searchCreditor(searchmode)}"
render="autocomplete-resultlist-cargosoft" onevent="autocompleteShowResult" /> render="autocomplete-resultlist-cargosoft" onevent="autocompleteShowResult" />
@ -35,65 +35,63 @@
var creditorField= $("input[data-item='cdtr.number']"); var creditorField= $("input[data-item='cdtr.number']");
$(creditorField).each(function() { $(creditorField).each(function() {
$(this).addClass("imixs-ml"); $(this).addClass("imixs-ml");
//$(creditorField).attr('data-resultlist', 'autocomplete-resultlist-cargosoft');
autocompleteInitInput(this,cargosoftSearch,'autocomplete-resultlist-cargosoft',selectCdtrCallback); autocompleteInitInput(this,cargosoftSearch,'autocomplete-resultlist-cargosoft',selectCdtrCallback);
}); });
// add cargsoft label if available // add cargsoft label if available
var cdtrName="#{workflowController.workitem.item['cdtr.name.cargosoft']}"; var cdtrName="#{workflowController.workitem.item['cdtr.name.cargosoft']}";
//alert(cdtrName);
var inputElement=$("input[data-item='cdtr.number']"); var inputElement=$("input[data-item='cdtr.number']");
inputElement.after( "<span id='cdtr-name-id' class='small'>" + cdtrName + "</p>" ); //inputElement.after( "<span id='cdtr-name-id' class='small'>" + cdtrName + "</p>" );
// on change auf rechnugnsdatum ändert das fälligkeitsdatum
}); });
// schneide die kreditornnummer aus dem selectierten Text aus (wir brauchen nur die) // Hier bekommen wir die JSON Struktur mit allen daten.
function selectCdtrCallback(selection) { // diese Daten werden auf die einzelnen Felder verteilt.
// extract the number between start and ' - ' function selectCdtrCallback(selection) {
var cdtrNo=selection.substring(0,selection.indexOf(' - '));
var cdtrName=selection.substring(selection.indexOf(' - ')+3,selection.indexOf('|') );
const cdtrData = JSON.parse(selection);
// fill data into the fields....
var inputElement=$("input[data-item='cdtr.number']"); var inputElement=$("input[data-item='cdtr.number']");
inputElement.val(cdtrNo); inputElement.val(cdtrData.no);
// remove old cdtr.name // remove old cdtr.name
$('#cdtr-name-id').remove(); $('#cdtr-name-id').remove();
// append span with cdtr.name.... // append span with cdtr.name....
inputElement.after( "<span id='cdtr-name-id' class='small'>" + cdtrName + "</p>" ); inputElement.after( "<span id='cdtr-name-id' class='small'>" + cdtrData.name + "</p>" );
// Data format
// K00000 - Kreditorenname |3|00000IBAN|000BIC
// zahlungsziel
var paramsData=selection.substring(selection.indexOf('|')+1);
var params=paramsData.split('|');
var cdtrPaymentPeriod=params[0];
var cdtrIBAN=params[1];
var cdtrBIC=params[2];
var inputElementZahlungsziel=$("input[data-item='cdtr.creditperiod']"); var inputElementZahlungsziel=$("input[data-item='cdtr.creditperiod']");
var inputElementZahlungszielCdtr=$("input[id$='cdtr_creditperiod']"); var inputElementZahlungszielCdtr=$("input[id$='cdtr_creditperiod']");
var inputElementInvoiceDate=$("input[id$='date_invoice']"); var inputElementInvoiceDate=$("input[id$='date_invoice']");
var inputElementIban=$("input[data-item='cdtr.iban']"); var inputElementIban=$("input[data-item='cdtr.iban']");
var inputElementBic=$("input[data-item='cdtr.bic']"); var inputElementBic=$("input[data-item='cdtr.bic']");
if (inputElementZahlungszielCdtr && cdtrPaymentPeriod!='') { if (inputElementZahlungszielCdtr && cdtrData.creditperiod!='') {
inputElementZahlungszielCdtr.val(cdtrPaymentPeriod); inputElementZahlungszielCdtr.val(cdtrData.creditperiod);
} }
// nur wenn ein Rechnugnsdatum eingegeben wurde // nur wenn ein Rechnugnsdatum eingegeben wurde
if (inputElementInvoiceDate && inputElementInvoiceDate.val()!='' && inputElementZahlungsziel && cdtrPaymentPeriod!='') { if (inputElementInvoiceDate && inputElementInvoiceDate.val()!='' && inputElementZahlungsziel && cdtrData.creditperiod!='') {
inputElementZahlungsziel.val(cdtrPaymentPeriod); inputElementZahlungsziel.val(cdtrData.creditperiod);
inputElementZahlungsziel.change(); inputElementZahlungsziel.change();
//$('.alexander-logistic-date').focus().select(); //$('.alexander-logistic-date').focus().select();
$("input[data-item='invoice.number']").focus().select(); $("input[data-item='invoice.number']").focus().select();
} }
// update iban/bic // update iban/bic
if (inputElementIban && cdtrIBAN!='') { if (inputElementIban && cdtrData.iban!='') {
inputElementIban.val(cdtrIBAN); inputElementIban.val(cdtrData.iban);
} }
if (inputElementBic && cdtrBIC!='') { if (inputElementBic && cdtrData.bic!='') {
inputElementBic.val(cdtrBIC); inputElementBic.val(cdtrData.bic);
} }
// update all possible data fields von kredorenverwaltung
if ($("input[data-item='cdtr.iban']")) {
$("input[data-item='cdtr.iban2']").val(cdtrData.iban2);
$("input[data-item='cdtr.bic2']").val(cdtrData.bic2);
$("input[data-item='cdtr.iban3']").val(cdtrData.iban3);
$("input[data-item='cdtr.bic3']").val(cdtrData.bic3);
$("input[data-item='cdtr.iban4']").val(cdtrData.iban4);
$("input[data-item='cdtr.bic4']").val(cdtrData.bic4);
}
} }
/*]]>*/ /*]]>*/
@ -101,12 +99,14 @@
<!-- Hier speichern das von Kreditor vorgeschlagene zahlungsziel --> <!-- Hier speichern das von Kreditor vorgeschlagene zahlungsziel -->
<h:inputHidden id="cdtr_creditperiod" value="#{workflowController.workitem.item['cdtr.creditperiod']}" /> <h:inputHidden id="cdtr_creditperiod" value="#{workflowController.workitem.item['cdtr.creditperiod']}" />
<!-- cargosoft creditor suggest list --> <!-- cargosoft creditor suggest list -->
<h:panelGroup id="autocomplete-resultlist-cargosoft" layout="block" class="autocomplete-resultlist"> <h:panelGroup id="autocomplete-resultlist-cargosoft" layout="block" class="autocomplete-resultlist">
<ui:repeat var="suggest" value="#{cargosoftController.searchResult}"> <ui:repeat var="suggest" value="#{cargosoftController.searchResult}">
<div class="autocomplete-resultlist-element" onclick="autocompleteSelectElement('#{suggest}')"> <div class="autocomplete-resultlist-element" onclick="autocompleteSelectElement('#{suggest.data}')">
<a href="#"> <a href="#">
<h:outputText value="#{suggest}" escape="false"/> <h:outputText value="#{suggest.display}" escape="false"/>
</a> </a>
</div> </div>
</ui:repeat> </ui:repeat>

View file

@ -11,6 +11,7 @@
<!-- Cargosoft Creditor Search integration --> <!-- Cargosoft Creditor Search integration -->
<ui:include src="/pages/workitems/forms/alexander/cargsoft-creditor-search.xhtml"> <ui:include src="/pages/workitems/forms/alexander/cargsoft-creditor-search.xhtml">
<ui:param name="workitem" value="#{workflowController.workitem}" /> <ui:param name="workitem" value="#{workflowController.workitem}" />
<ui:param name="searchmode" value="multi" /> <!-- display multiple ibans in separate lines -->
</ui:include> </ui:include>

View file

@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.alexander-logistics</groupId> <groupId>com.alexander-logistics</groupId>
<artifactId>office-alexander-logistics</artifactId> <artifactId>office-alexander-logistics</artifactId>
<version>1.2.6</version> <version>1.2.7</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<name>Imixs Office Workflow - Custom Build</name> <name>Imixs Office Workflow - Custom Build</name>