zahlungsavis - gutschriften
This commit is contained in:
parent
9fc18496bd
commit
fa8d6b9990
5 changed files with 7566 additions and 17 deletions
|
|
@ -0,0 +1,80 @@
|
||||||
|
package com.alexanderlogistics;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import javax.enterprise.context.ConversationScoped;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
|
|
||||||
|
import org.imixs.workflow.ItemCollection;
|
||||||
|
import org.imixs.workflow.engine.DocumentService;
|
||||||
|
import org.imixs.workflow.faces.data.WorkflowController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Der ZahlungsavisController dient dazu eine bereits zugewiesene Rechnung
|
||||||
|
* wieder aus dem Zahlugnsavis zu entfernen.
|
||||||
|
* <p>
|
||||||
|
* Zusätzlich bietet er die Summenberechnung an, bei der die Gutschriften
|
||||||
|
* abgezogen werden.
|
||||||
|
*
|
||||||
|
* @author rsoika
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Named
|
||||||
|
@ConversationScoped
|
||||||
|
public class ZahlungsavisController implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private static Logger logger = Logger.getLogger(ZahlungsavisController.class.getName());
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
protected WorkflowController workflowController;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
protected DocumentService documentService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method computes the sum for a given item in a list of workitems. The
|
||||||
|
* result is rounded to 2 digits.
|
||||||
|
* <p>
|
||||||
|
* Gutschriften werden abgezogen
|
||||||
|
*
|
||||||
|
* @param refids - list of workitem uniqueIds
|
||||||
|
* @param item - name of the item to summarize
|
||||||
|
* @return sum rounded to 2 digits
|
||||||
|
*/
|
||||||
|
public double calculateSum(List<String> refids, String item) {
|
||||||
|
double result = 0;
|
||||||
|
for (String id : refids) {
|
||||||
|
ItemCollection doc = documentService.load(id);
|
||||||
|
if (doc != null) {
|
||||||
|
if ("credit".equals(doc.getItemValueString("payment.type"))) {
|
||||||
|
result = result + doc.getItemValueDouble(item);
|
||||||
|
} else {
|
||||||
|
result = result - doc.getItemValueDouble(item);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logger.warning("invalid read access to calculate sum");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// rond with 2 digits
|
||||||
|
return Math.round(result * 100.0) / 100.0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method removes an uniqueid form the item $workitemref
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public void removeInvoice(String id) {
|
||||||
|
|
||||||
|
List<String> refList = workflowController.getWorkitem().getItemValue("$workitemref");
|
||||||
|
|
||||||
|
refList.remove(id);
|
||||||
|
workflowController.getWorkitem().setItemValue("$workitemref", refList);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -41,8 +41,10 @@ import org.imixs.workflow.poi.POIFindReplaceAdapter;
|
||||||
* (siehe POIFineReplaceAdapter).
|
* (siehe POIFineReplaceAdapter).
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* Der Adapter copiert die Rechnungsdaten in neue Zeilen, welche ab Zeilnenummer
|
* Der Adapter kopiert die Rechnungsdaten in neue Zeilen, welche ab Zeilnenummer
|
||||||
* 16 eingefügt werden.
|
* 16 eingefügt werden.
|
||||||
|
* <p>
|
||||||
|
* Dabei werden Gutschriften in spalte E und Rechnungen in Spalte F eingetrgen.
|
||||||
* <p>
|
* <p>
|
||||||
* Abschliessend wird die Zelle 'TOTAL' noch aktualisiert.
|
* Abschliessend wird die Zelle 'TOTAL' noch aktualisiert.
|
||||||
*
|
*
|
||||||
|
|
@ -151,8 +153,16 @@ public class ZahlungsavisExportAdapter extends POIFindReplaceAdapter {
|
||||||
row.getCell(1).setCellValue(invoice.getItemValueDate("invoice.date"));
|
row.getCell(1).setCellValue(invoice.getItemValueDate("invoice.date"));
|
||||||
row.getCell(2).setCellValue(invoice.getItemValueString("invoice.number"));
|
row.getCell(2).setCellValue(invoice.getItemValueString("invoice.number"));
|
||||||
row.getCell(3).setCellValue(invoice.getItemValueDate("invoice.duedate"));
|
row.getCell(3).setCellValue(invoice.getItemValueDate("invoice.duedate"));
|
||||||
row.getCell(4).setCellValue(0.00);
|
|
||||||
row.getCell(5).setCellValue(invoice.getItemValueDouble("invoice.total"));
|
if ("credit".equals(invoice.getItemValueString("payment.type"))) {
|
||||||
|
// Gutschrift
|
||||||
|
row.getCell(4).setCellValue(invoice.getItemValueDouble("invoice.total"));
|
||||||
|
row.getCell(5).setCellValue(0.00);
|
||||||
|
} else {
|
||||||
|
// Rechnung
|
||||||
|
row.getCell(4).setCellValue(0.00);
|
||||||
|
row.getCell(5).setCellValue(invoice.getItemValueDouble("invoice.total"));
|
||||||
|
}
|
||||||
|
|
||||||
rowPos++;
|
rowPos++;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,8 @@
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<h:panelGroup styleClass="imixs-form-section" id="zahlungsavis-table" binding="#{zahlungsavislistContainer}">
|
||||||
|
|
||||||
<div class="imixs-form-section">
|
|
||||||
<h3>Invoices</h3>
|
<h3>Invoices</h3>
|
||||||
|
|
||||||
<table class="" style="width:100%">
|
<table class="" style="width:100%">
|
||||||
|
|
@ -35,10 +35,12 @@
|
||||||
<th style="text-align: left;">#{message['form.invoicenumber']}</th>
|
<th style="text-align: left;">#{message['form.invoicenumber']}</th>
|
||||||
<th style="text-align: left;">#{message['form.date']}</th>
|
<th style="text-align: left;">#{message['form.date']}</th>
|
||||||
<th style="text-align: left;">#{message['form.deadline']}</th>
|
<th style="text-align: left;">#{message['form.deadline']}</th>
|
||||||
<th style="text-align: right;">#{message['form.amount']}</th>
|
<th style="text-align: right;">Debit</th>
|
||||||
|
<th style="text-align: right;">Credit</th>
|
||||||
<th style=""></th>
|
<th style=""></th>
|
||||||
|
<th style="width:40px;"></th>
|
||||||
</tr>
|
</tr>
|
||||||
<c:forEach items="#{workitem.itemList['$workitemref']}" var="id">
|
<ui:repeat value="#{workitem.itemList['$workitemref']}" var="id">
|
||||||
<!-- load inovice data by documentController: #{documentController.load(id)} -->
|
<!-- load inovice data by documentController: #{documentController.load(id)} -->
|
||||||
<ui:param name="invoice" value="#{documentController.getDocument()}"></ui:param>
|
<ui:param name="invoice" value="#{documentController.getDocument()}"></ui:param>
|
||||||
<tr>
|
<tr>
|
||||||
|
|
@ -61,29 +63,79 @@
|
||||||
timeZone="#{message.timeZone}" />
|
timeZone="#{message.timeZone}" />
|
||||||
</h:outputText>
|
</h:outputText>
|
||||||
</td>
|
</td>
|
||||||
<td style="text-align: right;"><h:outputText
|
<!-- debit -->
|
||||||
|
<ui:fragment rendered="#{invoice.item['payment.type'] eq 'credit'}">
|
||||||
|
<td style="text-align: right;"><h:outputText
|
||||||
value="#{invoice.item['invoice.total']}">
|
value="#{invoice.item['invoice.total']}">
|
||||||
<f:convertNumber minFractionDigits="2" locale="de" />
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
</h:outputText></td>
|
</h:outputText></td>
|
||||||
|
<td />
|
||||||
<td>#{invoice.item['invoice.currency']}</td>
|
</ui:fragment>
|
||||||
|
|
||||||
|
<!-- credit -->
|
||||||
|
<ui:fragment rendered="#{invoice.item['payment.type'] ne 'credit'}">
|
||||||
|
<td />
|
||||||
|
<td style="text-align: right;"><h:outputText
|
||||||
|
value="#{invoice.item['invoice.total']}">
|
||||||
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
|
</h:outputText></td>
|
||||||
|
</ui:fragment>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<td><h:commandLink
|
||||||
|
actionListener="#{zahlungsavisController.removeInvoice(id)}">
|
||||||
|
<span class="typcn typcn-trash imixs-state-info"></span>
|
||||||
|
<f:ajax render="#{zahlungsavislistContainer.clientId}" />
|
||||||
|
</h:commandLink>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</c:forEach>
|
</ui:repeat>
|
||||||
|
|
||||||
<tr style="border-top: 1px solid #ccc;">
|
<tr style="border-top: 1px solid #ccc;">
|
||||||
|
<td />
|
||||||
|
<td />
|
||||||
<td />
|
<td />
|
||||||
<td />
|
<td />
|
||||||
<td><strong>Summary</strong></td>
|
<td><strong>Summary</strong></td>
|
||||||
<td style="text-align: right;"><strong><h:outputText
|
<td style="text-align: right;"><strong><h:outputText
|
||||||
value="#{sepaController.calculateSum(workitem.itemList['$workitemref'], 'invoice.total')}">
|
value="#{zahlungsavisController.calculateSum(workitem.itemList['$workitemref'], 'invoice.total')}">
|
||||||
<f:convertNumber minFractionDigits="2" locale="de" />
|
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||||
</h:outputText></strong></td>
|
</h:outputText></strong></td>
|
||||||
<td><strong>#{invoice.item['invoice.currency']}</strong></td>
|
<td><strong>#{invoice.item['invoice.currency']}</strong></td>
|
||||||
|
<td />
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
|
||||||
|
<h:inputTextarea converter="org.imixs.VectorConverter"
|
||||||
|
style="display:none;"
|
||||||
|
value="#{workitem.itemList['$workitemref']}">
|
||||||
|
</h:inputTextarea>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</h:panelGroup>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/*<![CDATA[*/
|
||||||
|
|
||||||
|
|
||||||
|
// This method refreshs the layout
|
||||||
|
function updateItems(data) {
|
||||||
|
if (data.status === 'success') {
|
||||||
|
$('form').imixsLayout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*]]>*/
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</ui:composition>
|
</ui:composition>
|
||||||
|
|
|
||||||
7407
workflow/rechnungseingang-de-1.2.21.bpmn
Normal file
7407
workflow/rechnungseingang-de-1.2.21.bpmn
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -152,7 +152,7 @@ result.isValid=true;
|
||||||
<bpmn2:task id="Task_2" imixs:processid="1900" name="Abgeschlossen">
|
<bpmn2:task id="Task_2" imixs:processid="1900" name="Abgeschlossen">
|
||||||
<bpmn2:extensionElements>
|
<bpmn2:extensionElements>
|
||||||
<imixs:item name="txtworkflowsummary" type="xs:string">
|
<imixs:item name="txtworkflowsummary" type="xs:string">
|
||||||
<imixs:value><![CDATA[<itemvalue>cdtr.name</itemvalue> <itemvalue format="EEEE, d. MMMM yyyy" locale="de_DE">$created</itemvalue> (<itemvalue>cdtr.number</itemvalue>)]]></imixs:value>
|
<imixs:value><![CDATA[<itemvalue>cdtr.name.cargosoft</itemvalue> <itemvalue format="EEEE, d. MMMM yyyy" locale="de_DE">$modified</itemvalue> (<itemvalue>cdtr.number</itemvalue>)]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
<imixs:item name="keyupdateacl" type="xs:boolean">
|
<imixs:item name="keyupdateacl" type="xs:boolean">
|
||||||
<imixs:value>true</imixs:value>
|
<imixs:value>true</imixs:value>
|
||||||
|
|
@ -195,7 +195,7 @@ result.isValid=true;
|
||||||
<bpmn2:task id="Task_1" imixs:processid="1000" name="Offen">
|
<bpmn2:task id="Task_1" imixs:processid="1000" name="Offen">
|
||||||
<bpmn2:extensionElements>
|
<bpmn2:extensionElements>
|
||||||
<imixs:item name="txtworkflowsummary" type="xs:string">
|
<imixs:item name="txtworkflowsummary" type="xs:string">
|
||||||
<imixs:value><![CDATA[<itemvalue>cdtr.name</itemvalue> <itemvalue format="EEEE, d. MMMM yyyy" locale="de_DE">$created</itemvalue> (<itemvalue>cdtr.number</itemvalue>)]]></imixs:value>
|
<imixs:value><![CDATA[<itemvalue>cdtr.name.cargosoft</itemvalue> <itemvalue format="EEEE, d. MMMM yyyy" locale="de_DE">$modified</itemvalue> (<itemvalue>cdtr.number</itemvalue>)]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
<imixs:item name="txteditorid" type="xs:string">
|
<imixs:item name="txteditorid" type="xs:string">
|
||||||
<imixs:value><![CDATA[form_basic#zahlungsavis]]></imixs:value>
|
<imixs:value><![CDATA[form_basic#zahlungsavis]]></imixs:value>
|
||||||
|
|
@ -233,7 +233,7 @@ result.isValid=true;
|
||||||
<bpmn2:task id="Task_6" imixs:processid="1800" name="Storniert">
|
<bpmn2:task id="Task_6" imixs:processid="1800" name="Storniert">
|
||||||
<bpmn2:extensionElements>
|
<bpmn2:extensionElements>
|
||||||
<imixs:item name="txtworkflowsummary" type="xs:string">
|
<imixs:item name="txtworkflowsummary" type="xs:string">
|
||||||
<imixs:value><![CDATA[<itemvalue>cdtr.name</itemvalue> <itemvalue format="EEEE, d. MMMM yyyy" locale="de_DE">$created</itemvalue> (<itemvalue>cdtr.number</itemvalue>)]]></imixs:value>
|
<imixs:value><![CDATA[<itemvalue>cdtr.name.cargosoft</itemvalue> <itemvalue format="EEEE, d. MMMM yyyy" locale="de_DE">$modified</itemvalue> (<itemvalue>cdtr.number</itemvalue>)]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
<imixs:item name="keyupdateacl" type="xs:boolean">
|
<imixs:item name="keyupdateacl" type="xs:boolean">
|
||||||
<imixs:value>true</imixs:value>
|
<imixs:value>true</imixs:value>
|
||||||
|
|
@ -330,7 +330,7 @@ result.isValid=true;
|
||||||
<imixs:value><![CDATA[]]></imixs:value>
|
<imixs:value><![CDATA[]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
<imixs:item name="txtactivityresult" type="xs:string">
|
<imixs:item name="txtactivityresult" type="xs:string">
|
||||||
<imixs:value><![CDATA[ <zahlungsavis name="textblock">Zahlugnsavis Template</zahlungsavis>
|
<imixs:value><![CDATA[<zahlungsavis name="textblock">Zahlugnsavis Template</zahlungsavis>
|
||||||
<zahlungsavis name="template">zahlungsavis_template.xlsx</zahlungsavis>
|
<zahlungsavis name="template">zahlungsavis_template.xlsx</zahlungsavis>
|
||||||
<zahlungsavis name="target-name">zahlungsavis_<itemvalue>numsequencenumber</itemvalue>.xlsx</zahlungsavis>
|
<zahlungsavis name="target-name">zahlungsavis_<itemvalue>numsequencenumber</itemvalue>.xlsx</zahlungsavis>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue