anpassung invoice bp sync
This commit is contained in:
parent
5aa7113d7f
commit
ac4127e353
10 changed files with 6271 additions and 29 deletions
|
|
@ -20,6 +20,11 @@
|
|||
ACHTUNG kann sehr sehr sehr!! lange laufen (3 Stunde)
|
||||
kann aber auch dann mehrfach aufgerufen werden so dass sich das alles zum guten wendet
|
||||
|
||||
- Modelle Anpassen
|
||||
|
||||
in allen Rechnungsmodellen müssen die alten form parts `alexander/cdtreingabe` und `alexander/dbtreingabe` mit dem neuen `alexander/businesspartner_search` ausgetauscht werden.
|
||||
Der `BusinessPartnerController` bzw. das `InvoicePlugin` bzw. `InvoiceOutgoingPlugin` kümmert sich automatisch um die Migration
|
||||
|
||||
### 1.3.3
|
||||
|
||||
- Imixs-Archive 3.1.1. Compactor Sevrvice
|
||||
|
|
|
|||
|
|
@ -124,15 +124,46 @@ public class BusinessPartnerService {
|
|||
* Die Methode wirft eine PluginException falls das BusinessPartner Objekt
|
||||
* gesperrt oder in verification ist!
|
||||
*
|
||||
* Gleichzeitig wird bei Rechnungen in Abhängigkeit der Rechnungsart die
|
||||
* dbtr./cdtr. items sowie mail und country aktualisiert.
|
||||
*
|
||||
* @param partnerID
|
||||
* @param workitem
|
||||
* @throws PluginException
|
||||
*/
|
||||
public void updateBusinessPartner(String partnerID, ItemCollection workitem) throws PluginException {
|
||||
public void updateBusinessPartnerData(ItemCollection workitem) throws PluginException {
|
||||
String partnerID = workitem.getItemValueString("partner.id");
|
||||
// Migration wenn keine partner.id existier!
|
||||
if (partnerID.isEmpty()) {
|
||||
if (InvoiceUtil.isCreditorInvoice(workitem)) {
|
||||
partnerID = InvoiceUtil.buildBPID(workitem.getItemValueString("cdtr.number"));
|
||||
}
|
||||
if (InvoiceUtil.isDebitorInvoice(workitem)) {
|
||||
partnerID = InvoiceUtil.buildBPID(workitem.getItemValueString("dbtr.number"));
|
||||
}
|
||||
workitem.setItemValue("partner.id", partnerID);
|
||||
}
|
||||
|
||||
// load Business Partner
|
||||
ItemCollection businessPartner = getBusinessPartnerByID(partnerID);
|
||||
if (businessPartner != null) {
|
||||
workitem.setItemValue("partner.name", businessPartner.getItemValueString("partner.name"));
|
||||
|
||||
// Update Invoice Partner Meta Data
|
||||
if (InvoiceUtil.isDebitorInvoice(workitem)) {
|
||||
workitem.setItemValue("dbtr.number", businessPartner.getItemValueString("dbtr.number"));
|
||||
workitem.setItemValue("dbtr.name", businessPartner.getItemValueString("partner.name"));
|
||||
workitem.setItemValue("dbtr.mail", businessPartner.getItemValueString("dbtr.mail"));
|
||||
workitem.setItemValue("invoice.country", businessPartner.getItemValueString("_vendor_country"));
|
||||
}
|
||||
if (InvoiceUtil.isCreditorInvoice(workitem)) {
|
||||
workitem.setItemValue("cdtr.number", businessPartner.getItemValueString("cdtr.number"));
|
||||
workitem.setItemValue("cdtr.name", businessPartner.getItemValueString("partner.name"));
|
||||
workitem.setItemValue("cdtr.mail", businessPartner.getItemValueString("cdtr.mail"));
|
||||
workitem.setItemValue("invoice.country", businessPartner.getItemValueString("_vendor_country"));
|
||||
}
|
||||
|
||||
// Validate Business Partner Status!
|
||||
if (businessPartner.getTaskID() == TASK_VERIFICATION) {
|
||||
throw new PluginException(InvoicePlugin.class.getName(),
|
||||
ERROR_BUSINESSPARTNER_VERIFICATION,
|
||||
|
|
@ -143,7 +174,7 @@ public class BusinessPartnerService {
|
|||
ERROR_BUSINESSPARTNER_LOCKED,
|
||||
"Businesspartner is locked. Invoice can't be processed!");
|
||||
}
|
||||
// update business partner object...
|
||||
// update business partner status...
|
||||
try {
|
||||
if (businessPartner.getTaskID() == TASK_INACTIVE) {
|
||||
// Workitem erneut aktivieren
|
||||
|
|
|
|||
|
|
@ -31,17 +31,12 @@ public class InvoiceOutgoingPlugin extends AbstractPlugin {
|
|||
@Override
|
||||
public ItemCollection run(ItemCollection workitem, ItemCollection event) throws PluginException {
|
||||
|
||||
// Update BUsiness Partner Data
|
||||
businessPartnerService.updateBusinessPartnerData(workitem);
|
||||
|
||||
// Update Invoice.positions
|
||||
InvoiceUtil.updateInvoicePositions(workitem);
|
||||
|
||||
String dbtrNumber = workitem.getItemValueString("dbtr.number");
|
||||
ItemCollection debitor = kreditorService.findDebitor(dbtrNumber);
|
||||
if (debitor != null) {
|
||||
// update mail and country
|
||||
workitem.setItemValue("dbtr.mail", debitor.getItemValueString("cdtr.mail"));
|
||||
workitem.setItemValue("invoice.country", debitor.getItemValueString("_vendor_country"));
|
||||
}
|
||||
|
||||
String img = "";
|
||||
if (workitem.getItemValueBoolean("invoice.protest")) {
|
||||
img = img + "<img title='Reklamiert' src=\"/layout/icons/icon106.png\">";
|
||||
|
|
@ -49,10 +44,6 @@ public class InvoiceOutgoingPlugin extends AbstractPlugin {
|
|||
}
|
||||
workitem.setItemValue("_img", img);
|
||||
|
||||
// Update BUsiness Partner Data
|
||||
String partnerID = InvoiceUtil.buildBPID(workitem.getItemValueString("dbtr.number"));
|
||||
businessPartnerService.updateBusinessPartner(partnerID, workitem);
|
||||
|
||||
return workitem;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ import jakarta.inject.Inject;
|
|||
* 2.2.22 - Das Plugin erzeugt auch das Feld _img welches die Images von
|
||||
* Sofortüberweisung, Mahnung und Ablehnung anzeigt.
|
||||
*
|
||||
* 26.4.25 - Das Plugin setzt nun auch bpid.name und bpid
|
||||
* 26.4.25 - Das Plugin setzt nun auch partner.name und partner.id
|
||||
* zusätzlich processed es das BP Workitem
|
||||
*
|
||||
* @author rsoika
|
||||
|
|
@ -87,6 +87,9 @@ public class InvoicePlugin extends AbstractPlugin {
|
|||
@Override
|
||||
public ItemCollection run(ItemCollection workitem, ItemCollection event) throws PluginException {
|
||||
|
||||
// Update BUsiness Partner Data
|
||||
businessPartnerService.updateBusinessPartnerData(workitem);
|
||||
|
||||
updateImg(workitem);
|
||||
|
||||
// Update Invoice.positions
|
||||
|
|
@ -208,10 +211,6 @@ public class InvoicePlugin extends AbstractPlugin {
|
|||
|
||||
}
|
||||
|
||||
// Update BUsiness Partner Data
|
||||
String partnerID = InvoiceUtil.buildBPID(workitem.getItemValueString("cdtr.number"));
|
||||
businessPartnerService.updateBusinessPartner(partnerID, workitem);
|
||||
|
||||
return workitem;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -249,4 +249,19 @@ public class InvoiceUtil {
|
|||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gibt true zurück wenn es sich um eine Debitoren Rechnung/Gutschrift handelt.
|
||||
*
|
||||
* @param invoice
|
||||
* @return
|
||||
*/
|
||||
public static boolean isDebitorInvoice(ItemCollection invoice) {
|
||||
boolean result = false;
|
||||
if (invoice.getModelVersion().startsWith("rechnungsausgang")) {
|
||||
result = true;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
<!-- businsspartner Search integration
|
||||
|
||||
This subform is a custom form part.
|
||||
This subform is a custom form part for the items 'item.id' and 'item.name'
|
||||
|
||||
The subform provides a jsf commandScript which calls the businessPartnerController.search method in the backend.
|
||||
|
||||
|
|
@ -18,12 +18,12 @@
|
|||
https://www.w3schools.com/howto/howto_js_autocomplete.asp
|
||||
-->
|
||||
|
||||
<ui:param name="item_konto_name" value="#{item.name}.name"></ui:param>
|
||||
|
||||
<ui:fragment rendered="#{!readonly}">
|
||||
<h:inputText value="#{workitem.item[item.name]}" pt:data-item="#{item.name}" />
|
||||
<h:inputHidden value="#{workitem.item[item_konto_name]}" pt:data-item="#{item_konto_name}" />
|
||||
<h:inputText value="#{workitem.item['partner.id']}" pt:data-item="partner.id" />
|
||||
<h:inputHidden value="#{workitem.item['partner.name']}" pt:data-item="partner.name" />
|
||||
<br />
|
||||
<span id='businsspartner-konto-id' class='small'>#{workitem.item[item_konto_name]}</span>
|
||||
<span id='businsspartner-konto-id' class='small'>#{workitem.item['partner.name']}</span>
|
||||
<h:commandScript name="businsspartnerSearch" action="#{businessPartnerController.search(options)}"
|
||||
render="autocomplete-resultlist-businsspartner" onevent="autocompleteShowResult" />
|
||||
|
||||
|
|
@ -33,20 +33,21 @@
|
|||
// init input fields...
|
||||
$(document).ready(function () {
|
||||
// add autocomplete feature ..
|
||||
var creditorField = $("input[data-item='#{item.name}']");
|
||||
var creditorField = $("input[data-item='partner.id']");
|
||||
$(creditorField).each(function () {
|
||||
$(this).addClass("imixs-ml");
|
||||
autocompleteInitInput(this, businsspartnerSearch, 'autocomplete-resultlist-businsspartner', selectDebitorCreditorCallback);
|
||||
});
|
||||
});
|
||||
|
||||
// Hier bekommen wir die JSON Struktur mit allen daten.
|
||||
// Hier bekommen wir die JSON Struktur mit allen Daten.
|
||||
// diese Daten werden auf die einzelnen Felder verteilt.
|
||||
function selectDebitorCreditorCallback(selection) {
|
||||
const kontoData = JSON.parse(selection);
|
||||
// fill data into the fields....
|
||||
var inputElementKonto = $("input[data-item='#{item.name}']");
|
||||
var inputElementKreditor = $("input[data-item='#{item_konto_name}']");
|
||||
var inputElementKonto = $("input[data-item='partner.id']");
|
||||
var inputElementKreditor = $("input[data-item='partner.name']");
|
||||
|
||||
inputElementKonto.val(kontoData.name);
|
||||
inputElementKreditor.val(kontoData['partner.name']);
|
||||
// remove old konto name
|
||||
|
|
|
|||
|
|
@ -89,6 +89,9 @@
|
|||
<imixs:item name="namaddwriteaccess" type="xs:string">
|
||||
<imixs:value/>
|
||||
</imixs:item>
|
||||
<imixs:item name="txttype" type="xs:string">
|
||||
<imixs:value><![CDATA[workitem]]></imixs:value>
|
||||
</imixs:item>
|
||||
</bpmn2:extensionElements>
|
||||
<bpmn2:documentation id="documentation_a83GTA"/>
|
||||
<bpmn2:incoming>sequenceFlow_25otUg</bpmn2:incoming>
|
||||
|
|
@ -140,6 +143,9 @@
|
|||
<imixs:item name="keyaddwritefields" type="xs:string">
|
||||
<imixs:value><![CDATA[process.team]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="txttype" type="xs:string">
|
||||
<imixs:value><![CDATA[workitem]]></imixs:value>
|
||||
</imixs:item>
|
||||
</bpmn2:extensionElements>
|
||||
<bpmn2:documentation id="documentation_M7b42w"/>
|
||||
<bpmn2:incoming>sequenceFlow_avahXg</bpmn2:incoming>
|
||||
|
|
@ -374,6 +380,9 @@
|
|||
<imixs:item name="keyaddwritefields" type="xs:string">
|
||||
<imixs:value><![CDATA[process.team]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="txttype" type="xs:string">
|
||||
<imixs:value><![CDATA[workitem]]></imixs:value>
|
||||
</imixs:item>
|
||||
</bpmn2:extensionElements>
|
||||
<bpmn2:documentation id="documentation_1TuLXg"/>
|
||||
<bpmn2:outgoing>sequenceFlow_NNbMhg</bpmn2:outgoing>
|
||||
|
|
|
|||
|
|
@ -89,6 +89,9 @@
|
|||
<imixs:item name="namaddwriteaccess" type="xs:string">
|
||||
<imixs:value/>
|
||||
</imixs:item>
|
||||
<imixs:item name="txttype" type="xs:string">
|
||||
<imixs:value><![CDATA[workitem]]></imixs:value>
|
||||
</imixs:item>
|
||||
</bpmn2:extensionElements>
|
||||
<bpmn2:documentation id="documentation_a83GTA"/>
|
||||
<bpmn2:incoming>sequenceFlow_25otUg</bpmn2:incoming>
|
||||
|
|
@ -140,6 +143,9 @@
|
|||
<imixs:item name="keyaddwritefields" type="xs:string">
|
||||
<imixs:value><![CDATA[process.team]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="txttype" type="xs:string">
|
||||
<imixs:value><![CDATA[workitem]]></imixs:value>
|
||||
</imixs:item>
|
||||
</bpmn2:extensionElements>
|
||||
<bpmn2:documentation id="documentation_M7b42w"/>
|
||||
<bpmn2:incoming>sequenceFlow_avahXg</bpmn2:incoming>
|
||||
|
|
@ -377,6 +383,9 @@
|
|||
<imixs:item name="keyaddwritefields" type="xs:string">
|
||||
<imixs:value><![CDATA[process.team]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="txttype" type="xs:string">
|
||||
<imixs:value><![CDATA[workitem]]></imixs:value>
|
||||
</imixs:item>
|
||||
</bpmn2:extensionElements>
|
||||
<bpmn2:documentation id="documentation_1TuLXg"/>
|
||||
<bpmn2:outgoing>sequenceFlow_NNbMhg</bpmn2:outgoing>
|
||||
|
|
|
|||
|
|
@ -1611,6 +1611,9 @@ result.isValid=true;
|
|||
<bpmn2:sequenceFlow id="sequenceFlow_OttgXA" sourceRef="event_iUSXSg" targetRef="Task_2">
|
||||
<bpmn2:documentation id="documentation_W9nXJQ"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:association id="association_xVkeww" sourceRef="DataObject_2" targetRef="Task_1">
|
||||
<bpmn2:documentation id="documentation_euQGuA"/>
|
||||
</bpmn2:association>
|
||||
</bpmn2:process>
|
||||
<bpmn2:process id="process_2" name="Default Process" processType="Public">
|
||||
<bpmn2:documentation id="documentation_J67Rkw"/>
|
||||
|
|
@ -2096,6 +2099,12 @@ result.isValid=true;
|
|||
<di:waypoint x="766.0" y="257.0"/>
|
||||
<di:waypoint x="766.0" y="280.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="association_xVkeww" id="BPMNEdge_dHIjPw" sourceElement="BPMNShape_DataObject_1" targetElement="BPMNShape_Task_3">
|
||||
<di:waypoint x="605.0" y="195.0"/>
|
||||
<di:waypoint x="648.0" y="195.0"/>
|
||||
<di:waypoint x="648.0" y="755.0"/>
|
||||
<di:waypoint x="690.0" y="755.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
</bpmndi:BPMNPlane>
|
||||
<bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1">
|
||||
<dc:Font name="arial" size="9.0"/>
|
||||
|
|
|
|||
6173
workflow/dwc/rechnungseingang-dwc-1.0.4-draft.bpmn
Normal file
6173
workflow/dwc/rechnungseingang-dwc-1.0.4-draft.bpmn
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue