getDunnings() {
+ if (dunnings == null) {
+ dunnings = new ArrayList<>();
+ }
+ return dunnings;
+ }
+
+ /**
+ * This method searches a text phrase within the list of DATEV kreditoren
+ *
+ * JSF Integration:
+ *
+ * {@code
+
+ * }
+ */
+ public void search(String regexPattern) {
+ List resultList = null;
+ searchResult = new ArrayList();
+ // 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 + "'");
+ if (phrase == null || phrase.length() < 2) {
+ return;
+ }
+ logger.fine("search for=" + phrase);
+ resultList = businessPartnerService.search(phrase);
+ // Compile the regex pattern
+ logger.fine("regex=" + regexPattern);
+ Pattern pattern = null;
+ if (regexPattern != null && !regexPattern.isEmpty()) {
+ pattern = Pattern.compile(regexPattern);
+ }
+
+ // Filter by Regex and convert ItemCollection into a BusinessPartnerSearchEntry
+ for (ItemCollection businessPartner : resultList) {
+ String name = businessPartner.getItemValueString("name");
+ // Prüfen, ob der name der Regex entspricht
+ if (pattern != null) {
+ Matcher matcher = pattern.matcher(name);
+ if (!matcher.matches()) {
+ // Kein passendes Konto
+ continue;
+ }
+ }
+ String display = businessPartner.getItemValueString("$workflowsummary");
+
+ display = display.replace("\"", "");
+ display = display.replace("'", "");
+
+ searchResult.add(new BusinessPartnerSearchEntry(name, display, buildJsonData(businessPartner)));
+
+ }
+ }
+
+ /**
+ * Die Resultliste wird als eine Liste einen Arrays zurückgegeben. Der Erste
+ * Eintrag
+ *
+ * @return
+ */
+ public List getSearchResult() {
+ return searchResult;
+ }
+
/**
* WorkflowEvent listener to convert the IBAN child list embeded HashMaps into
- * ItemCollections and
- * reconvert them before processing
+ * ItemCollections and reconvert them before processing
*
* @param workflowEvent
* @throws AccessDeniedException
@@ -74,24 +174,64 @@ public class BusinessPartnerController implements Serializable {
int eventType = workflowEvent.getEventType();
ItemCollection workitem = workflowEvent.getWorkitem();
- if (workitem == null) {
+ if (workitem == null || !workitem.getModelVersion().startsWith("businesspartner-")) {
return;
}
// reset orderItems if workItem has changed
if (WorkflowEvent.WORKITEM_CHANGED == eventType || WorkflowEvent.WORKITEM_CREATED == eventType) {
// reset state
- explodeIBANList(workitem);
+ ibanList = BusinessPartnerService.explodeBanks(workitem);
+ loadStats(workitem);
}
// before the workitem is saved we update the field txtOrderItems
if (WorkflowEvent.WORKITEM_BEFORE_PROCESS == eventType) {
- implodeIBANList(workitem);
+ BusinessPartnerService.implodeBanks(workitem, ibanList);
}
if (WorkflowEvent.WORKITEM_AFTER_PROCESS == eventType) {
// reset state
- explodeIBANList(workitem);
+ ibanList = BusinessPartnerService.explodeBanks(workitem);
+ }
+
+ }
+
+ /**
+ * Hilfsmethode die die offenen Rechnungen läd. Wird von WorktiemChanged Event
+ * aufgerufen.
+ *
+ * @param workitem
+ */
+ private void loadStats(ItemCollection workitem) {
+
+ try {
+ // Ausgangsrechnungen
+ String dbtrNumber = workitem.getItemValueString("dbtr.number");
+ if (!dbtrNumber.isEmpty()) {
+ if (dbtrNumber.startsWith("D")) {
+ dbtrNumber = dbtrNumber.substring(1);
+ }
+ String query = "(type:workitem) AND ($modelversion:rechnungsausgang-*) "
+ + " AND (dbtr.number:" + dbtrNumber + ")";
+ invoicesOut = documentService.findStubs(query, 999, 0, "invoice.number", false);
+
+ // Mahnungen
+ query = "(type:workitem) AND ($modelversion:mahnlauf-*) "
+ + " AND (dbtr.number:" + dbtrNumber + ")";
+ dunnings = documentService.findStubs(query, 999, 0, "invoice.number", false);
+ }
+
+ // Eingangsrechnungen
+ String cdtrNumber = workitem.getItemValueString("cdtr.number");
+ if (!cdtrNumber.isEmpty()) {
+ String query = "(type:workitem) AND ($modelversion:rechnungseingang-*) "
+ + " AND (cdtr.number:" + cdtrNumber + ")";
+ invoicesIn = documentService.findStubs(query, 999, 0, "invoice.number", false);
+ }
+
+ } catch (QueryException e) {
+ logger.severe("failed to load stats: " + e.getMessage());
}
}
@@ -113,10 +253,10 @@ public class BusinessPartnerController implements Serializable {
*
* @param name - name of dbtr
*/
- public void removeIBAN(String name) {
- if (name != null && ibanList != null) {
+ public void removeIBAN(String id) {
+ if (id != null && ibanList != null) {
for (ItemCollection cdtr : ibanList) {
- if (name.equals(cdtr.getItemValueString("name"))) {
+ if (id.equals(cdtr.getItemValueString("id"))) {
ibanList.remove(cdtr);
break;
}
@@ -124,36 +264,50 @@ public class BusinessPartnerController implements Serializable {
}
}
- protected void implodeIBANList(ItemCollection workitem) {
- List