update opliste

This commit is contained in:
Ralph Soika 2022-08-23 16:22:41 +02:00
parent 88b962b459
commit e27dd87509
6 changed files with 95 additions and 47 deletions

View file

@ -31,6 +31,10 @@ public class OPListController implements Serializable {
private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger(OPListController.class.getName());
private String lastDbtrNumber=null;
private List<ItemCollection> invoiceCache=null;
@Inject
protected WorkflowController workflowController;
@ -38,29 +42,50 @@ public class OPListController implements Serializable {
@Inject
protected DocumentService documentService;
public List<ItemCollection> getInvoices(String dbtrNumber) {
List<ItemCollection> result = new ArrayList<ItemCollection>();
logger.info("....getInvoices for " + dbtrNumber);
if (dbtrNumber == null || dbtrNumber.isEmpty()) {
return result;
/**
* Diese Methode liefert die Rechnungen zur gegebenen dbtrNumber.
* Die Methode nutzt einen lokalen cache um die Zugriffe zu beschleunigen.
*
* @param _dbtrNumber
* @return
*/
public List<ItemCollection> getInvoices(String _dbtrNumber) {
// return empty cache if data is not
if ( _dbtrNumber==null || _dbtrNumber.isEmpty()) {
invoiceCache= new ArrayList<ItemCollection>();
return invoiceCache;
}
// if last dbtr number is equal then return the current cache....
if (invoiceCache!=null && lastDbtrNumber!=null && lastDbtrNumber.equals(_dbtrNumber)) {
return invoiceCache;
}
// refresh cache....
lastDbtrNumber=_dbtrNumber;
invoiceCache= new ArrayList<ItemCollection>();
logger.info("....caching Invoices for " + _dbtrNumber);
// Aus der dbtrNummer muss das führendde D entfernt werden
// wir speichern dieses zwar im Zahlungseingangs Workflow, aber eine
// Ausganksrechnung kennt das nicht
// Das ganze ist ein übles Relikt aus Cargosoft und kann nicht vermieden werden
if (dbtrNumber.startsWith("D")) {
dbtrNumber = dbtrNumber.substring(1);
if (_dbtrNumber.startsWith("D")) {
_dbtrNumber = _dbtrNumber.substring(1);
}
String query = "(type:workitem OR type:workitemarchive) AND ($modelversion:rechnungsausgang-*) AND (dbtr.number:"
+ dbtrNumber + ")";
+ _dbtrNumber + ")";
try {
result = documentService.find(query, 999, 0, "$created", false);
invoiceCache = documentService.find(query, 999, 0, "$created", false);
} catch (QueryException e) {
logger.severe("Failed to get op liste:" + e.getMessage());
}
return result;
return invoiceCache;
}
/**
@ -95,7 +120,10 @@ public class OPListController implements Serializable {
List<String> refids=workflowController.getWorkitem().getItemValueList("$workitemref",String.class);
for (String id : refids) {
ItemCollection doc = documentService.load(id);
if (id.isEmpty()) {
continue;
}
ItemCollection doc = getInvoiceFromCache(id);
if (doc!=null) {
result = result + doc.getItemValueDouble("invoice.total");
}
@ -105,6 +133,23 @@ public class OPListController implements Serializable {
}
/**
* Hilfsmethode holt eine Rechnung aus dem Cache.
* @param id
* @return
*/
private ItemCollection getInvoiceFromCache(String id) {
if (invoiceCache==null) {
return null;
}
for (ItemCollection invoice: invoiceCache) {
if (invoice.getUniqueID().equals(id)) {
return invoice;
}
}
return null;
}
/**
* Berechnet den gesammten OP Saldo
* @return

View file

@ -247,7 +247,7 @@ public class DatevCargosoftImportAdapter implements SignalAdapter {
// berechne Total:
double total=0;
for (ItemCollection zeile: splitBuchungen) {
if ("S".equals(zeile.getItemValueString("datev.shzeichen")) ) {
if ("H".equals(zeile.getItemValueString("datev.shzeichen")) ) {
total=total+zeile.getItemValueDouble("datev.umsatz");
} else {
total=total-zeile.getItemValueDouble("datev.umsatz");

View file

@ -9,6 +9,9 @@
<!-- Shows the op liste fo rthe current dbtr.number -->
<h:commandScript name="calculateOpSummary" execute="invoiceRefHolder_ID" render="opcalculater_id" />
<h:panelGroup layout="block" styleClass="imixs-form-section" id="oplist-table" binding="#{opListContainer}">
<table style="width:100%;margin:5px;">
@ -46,6 +49,7 @@
<td style="text-align: right;"><h:outputText
value="#{invoice.item['invoice.total']}">
<f:convertNumber minFractionDigits="2" locale="de" />
</h:outputText></td>
<td />
@ -68,7 +72,8 @@
<td><strong>#{invoice.item['invoice.currency']}</strong></td>
<td style="text-align: right;"><strong><h:outputText
<td style="text-align: right;"><strong>
<h:outputText id="opcalculater_id"
value="#{opListController.calculateSum()}">
<f:convertNumber minFractionDigits="2" locale="de" />
</h:outputText></strong></td>
@ -80,7 +85,7 @@
</table>
<!-- dieses feld speichert die selection der rechnungen -->
<h:inputTextarea converter="org.imixs.VectorConverter" class="invoice_selection_list"
<h:inputTextarea id="invoiceRefHolder_ID" converter="org.imixs.VectorConverter" class="invoice_selection_list"
style="display:none;" value="#{workitem.itemList['$workitemref']}"/>
@ -127,6 +132,9 @@
//console.log("new selection=" + selectionArr.join(','));
selection = $('.invoice_selection_list').val(
selectionArr.join('\n'));
// refresh the opcalculator...
calculateOpSummary();
});
}

View file

@ -11,24 +11,17 @@
<f:ajax render="oderlist" onevent="updateOrderItems">
<table class="imixsdatatable imixs-orderitems">
<!--
dataItemCol.setItemValue("datev.umsatz", parseBetrag(DatevImportAdapter.csvVal(header1List[0])));
dataItemCol.setItemValue("datev.shzeichen", DatevImportAdapter.csvVal(header1List[1]));
dataItemCol.setItemValue("datev.wkz", DatevImportAdapter.csvVal(header1List[2]));
dataItemCol.setItemValue("datev.kurs", parseBetrag(DatevImportAdapter.csvVal(header1List[3])));
dataItemCol.setItemValue("datev.basisumsatz", parseBetrag(DatevImportAdapter.csvVal(header1List[4])));
dataItemCol.setItemValue("datev.konto", DatevImportAdapter.csvVal(header1List[6]));
-->
<tr>
<th style="">#</th>
<th style="width: 20px;">#</th>
<th style="">Position<span class="imixs-required">
*</span></th>
<th style="width: 100px;">Umsatz</th>
<th style="width: 40px;">S/H</th>
<th style="width: 40px;">Währung</th>
<th style="width: 150px; text-align: right;">Kurs</th>
<th style="width: 150px; text-align: right;">Basisumsatz</th>
<th style="width: 150px; text-align: right;">Gegenkonto</th>
<th style="width: 70px; text-align: right;">Kurs</th>
<th style="width: 100px; text-align: right;">Basisumsatz</th>
<th style="width: 50px; text-align: right;">Gegenkonto</th>
</tr>
<ui:repeat var="orderitem" value="#{childItemController.childItems}">
@ -36,21 +29,27 @@
<tr>
<!-- pos -->
<td><h:outputText value="#{orderitem.item['numpos']}" /></td>
<td style="text-align:center;"><h:outputText value="#{orderitem.item['numpos']}" /></td>
<td><h:outputText value="#{orderitem.item['datev.text']}" /></td>
<!-- Name -->
<td><h:outputText value="#{orderitem.item['datev.umsatz']}" /></td>
<td style="text-align:right;">
<h:outputText value="#{orderitem.item['datev.umsatz']}" >
<f:convertNumber minFractionDigits="2" locale="de" />
</h:outputText>
</td>
<td><h:outputText value="#{orderitem.item['datev.shzeichen']}" /></td>
<td style="text-align:center;"><h:outputText value="#{orderitem.item['datev.shzeichen']}" /></td>
<td><h:outputText value="#{orderitem.item['datev.wkz']}" /></td>
<td><h:outputText value="#{orderitem.item['datev.kurs']}" /></td>
<td style="text-align:right;"><h:outputText value="#{orderitem.item['datev.kurs']}" /></td>
<td style="text-align: right;"><h:outputText
value="#{orderitem.item['datev.basisumsatz']}" /></td>
value="#{orderitem.item['datev.basisumsatz']}" >
<f:convertNumber minFractionDigits="2" locale="de" />
</h:outputText></td>
<td style="text-align: right;"><h:outputText
value="#{orderitem.item['datev.konto']}" /></td>
@ -65,8 +64,10 @@
<td style="text-align: right;">Summe:</td>
<td class="orderlist_summary" style="text-align: right;"><h:outputText
<td class="orderlist_summary" style="text-align: right;">
<h:outputText
value="#{workitem.item['invoice.total']}">
<f:convertNumber minFractionDigits="2" locale="de" />
</h:outputText></td>
<td />
<td /><td /><td /><td />

View file

@ -497,7 +497,7 @@ if (workitem['$file.count'][0]!=1) {
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keypublicresult" type="xs:string">
<imixs:value><![CDATA[1]]></imixs:value>
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_25"><![CDATA[Daten Import starten]]></bpmn2:documentation>
@ -533,7 +533,7 @@ if (workitem['$file.count'][0]!=1) {
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keypublicresult" type="xs:string">
<imixs:value><![CDATA[1]]></imixs:value>
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_27"><![CDATA[Daten Import starten]]></bpmn2:documentation>

View file

@ -15,11 +15,10 @@
<imixs:value><![CDATA[Bereichs-Verantwortliche | space.manager]]></imixs:value>
<imixs:value><![CDATA[Bereichs-Team | space.team]]></imixs:value>
<imixs:value><![CDATA[Bereichs-Assistenz | space.assist]]></imixs:value>
<imixs:value><![CDATA[Verantwortlich | sb.team]]></imixs:value>
</imixs:item>
<imixs:item name="txttimefieldmapping" type="xs:string">
<imixs:value><![CDATA[Fälligkeitsdatum | invoice.duedate]]></imixs:value>
<imixs:value><![CDATA[Bezahldatum | invoice.postingdate]]></imixs:value>
<imixs:value><![CDATA[Wiedervorlage | invoice.reminder]]></imixs:value>
</imixs:item>
<imixs:item name="txtplugins" type="xs:string">
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ResultPlugin]]></imixs:value>
@ -190,14 +189,11 @@ Bei Fragen wenden Sie sich bitte an info@imixs.com
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>true</imixs:value>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string">
<imixs:value><![CDATA[sb.team]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string"/>
<imixs:item name="keyaddwritefields" type="xs:string">
<imixs:value><![CDATA[process.team]]></imixs:value>
<imixs:value><![CDATA[process.manager]]></imixs:value>
<imixs:value><![CDATA[space.manager]]></imixs:value>
<imixs:value><![CDATA[sb.team]]></imixs:value>
</imixs:item>
<imixs:item name="namaddreadaccess" type="xs:string">
<imixs:value><![CDATA[{process:?:member}]]></imixs:value>
@ -295,7 +291,7 @@ Bei Fragen wenden Sie sich bitte an info@imixs.com
<imixs:value><![CDATA[typcn-upload-outline]]></imixs:value>
</imixs:item>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[<itemvalue>invoice.number</itemvalue> <itemvalue>dbtr.number</itemvalue> <itemvalue>dbtr.name</itemvalue> (<itemvalue>invoice.currency</itemvalue> <itemvalue>invoice.total</itemvalue>) ]]></imixs:value>
<imixs:value><![CDATA[<itemvalue>invoice.number</itemvalue> <itemvalue>dbtr.number</itemvalue> <itemvalue>dbtr.name</itemvalue> (<itemvalue>invoice.currency</itemvalue> <itemvalue format="#,###,##0.00" locale="de_DE">invoice.total</itemvalue>) ]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>true</imixs:value>
@ -334,7 +330,9 @@ Bei Fragen wenden Sie sich bitte an info@imixs.com
<item name="invoice.number" type="text" label="Rechnungsnummer:" readonly="true" />
<item name="invoice.date" type="date" label="Rechnungsdatum:" readonly="true" />
<item name="invoice.duedate" type="date" label="Fälligkeit:" readonly="true"/>
<item name="invoice.duedate2" type="custom" path="alexander/datumseingabe_tage" required="true" label="Wiedervorlage:" />
</imixs-form-section>
<imixs-form-section columns="3">
<item name="invoice.reminder" type="date" required="true" label="Wiedervorlage:" />
</imixs-form-section>
@ -1072,14 +1070,11 @@ result.isValid=true;
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>true</imixs:value>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string">
<imixs:value><![CDATA[sb.team]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string"/>
<imixs:item name="keyaddwritefields" type="xs:string">
<imixs:value><![CDATA[process.team]]></imixs:value>
<imixs:value><![CDATA[process.manager]]></imixs:value>
<imixs:value><![CDATA[space.manager]]></imixs:value>
<imixs:value><![CDATA[sb.team]]></imixs:value>
</imixs:item>
<imixs:item name="namaddreadaccess" type="xs:string">
<imixs:value><![CDATA[{process:?:member}]]></imixs:value>
@ -1276,7 +1271,6 @@ Betrag: <itemvalue>_amount</itemvalue> (Brutto € <itemvalue>_amount_brutto</it
<imixs:value><![CDATA[process.manager]]></imixs:value>
<imixs:value><![CDATA[process.team]]></imixs:value>
<imixs:value><![CDATA[space.manager]]></imixs:value>
<imixs:value><![CDATA[sb.team]]></imixs:value>
</imixs:item>
<imixs:item name="numnextactivityid" type="xs:int">
<imixs:value><![CDATA[0]]></imixs:value>