Kursberechnung AED Zoho Export und neue Modelle für DWC

This commit is contained in:
Ralph Soika 2025-05-15 22:33:39 +02:00
parent 5c7f7746d6
commit d4d57797a3
6 changed files with 392 additions and 744 deletions

View file

@ -131,12 +131,12 @@ public class ZohoAPIService {
* @param invoice
* @throws PluginException
*/
public ZohoInvoice exportInvoice(ItemCollection invoice, String contactID, String currencyID, String accessToken)
public ZohoInvoice exportInvoice(ItemCollection invoice, String contactID, String accessToken)
throws PluginException {
logger.info("├── Zoho Export Invoice " + invoice.getItemValueString("invoice.number") + "...");
// Konvertiere ItemCollection zu ZohoInvoiceDTO
ZohoInvoice zohoInvoice = convertToZohoInvoice(invoice, contactID, currencyID);
ZohoInvoice zohoInvoice = convertToZohoInvoice(invoice, contactID);
try {
String requestBody = jsonb.toJson(zohoInvoice);
@ -202,12 +202,12 @@ public class ZohoAPIService {
* @param invoice
* @throws PluginException
*/
public ZohoBill exportBill(ItemCollection invoice, String contactID, String currencyID, String accountID,
public ZohoBill exportBill(ItemCollection invoice, String contactID, String accountID,
String accessToken) throws PluginException {
logger.info("├── Zoho Export Bill " + invoice.getItemValueString("invoice.number") + "...");
// Konvertiere ItemCollection zu ZohoInvoiceDTO
ZohoBill zohoBill = convertToZohoBill(invoice, contactID, currencyID, accountID);
ZohoBill zohoBill = convertToZohoBill(invoice, contactID, accountID);
try {
String requestBody = jsonb.toJson(zohoBill);
@ -330,7 +330,7 @@ public class ZohoAPIService {
}
private ZohoInvoice convertToZohoInvoice(ItemCollection invoice, String contactID, String currencyID)
private ZohoInvoice convertToZohoInvoice(ItemCollection invoice, String contactID)
throws PluginException {
ZohoInvoice zohoInvoice = new ZohoInvoice();
@ -339,15 +339,14 @@ public class ZohoAPIService {
zohoInvoice.setInvoiceNumber(invoice.getItemValueString("invoice.number"));
zohoInvoice.setDate(
LocalDate.ofInstant(invoice.getItemValueDate("invoice.date").toInstant(), ZoneId.systemDefault()));
zohoInvoice.setDueDate(
LocalDate.ofInstant(invoice.getItemValueDate("invoice.duedate").toInstant(), ZoneId.systemDefault()));
zohoInvoice.setTotal(invoice.getItemValueDouble("invoice.total"));
zohoInvoice.setCustomerId(contactID);
if (currencyID != null && !currencyID.isEmpty()) {
zohoInvoice.setCurrencyId(currencyID);
}
// convert total by rate
zohoInvoice.setTotal(convertInvoiceTotalToAED(invoice, invoice.getItemValueDouble("invoice.total")));
List<ItemCollection> positionen = InvoiceUtil.explodeChildList(invoice);
List<ZohoInvoiceItem> lineItems = positionen.stream().map(item -> {
@ -355,7 +354,7 @@ public class ZohoAPIService {
ZohoInvoiceItem lineItem = new ZohoInvoiceItem();
lineItem.setName(itemCol.getItemValueString("datev.text"));
lineItem.setDescription(itemCol.getItemValueString("billingtext"));
lineItem.setRate(itemCol.getItemValueDouble("datev.umsatz"));
lineItem.setRate(convertInvoiceTotalToAED(invoice, itemCol.getItemValueDouble("datev.umsatz")));
lineItem.setQuantity(1);
return lineItem;
}).collect(Collectors.toList());
@ -364,7 +363,52 @@ public class ZohoAPIService {
return zohoInvoice;
}
private ZohoBill convertToZohoBill(ItemCollection invoice, String contactID, String currencyID, String accountID)
/**
* Diese Hilfsmethode rechnet den Rechnungsbetrag in Fremdwährung auf AED um
*
* es ist eine Fremdwährung
* Herr Heolzl 15.05.2025
* However the backend reports the P&L & Balance sheet will reflect in AED as
* AGL Dubai books are maintained in AED therefore we need to have an
* exchange rate which can be fixed @3.6725 AED for 1 USD.
*
* Aus diesem Grund rechnen wir direkt in AED um!
*
* @return
*/
public double convertInvoiceTotalToAED(ItemCollection invoice, double total) {
// convert total by fixed rate?
String currency = invoice.getItemValueString("invoice.currency");
if (!currency.isEmpty() && !currency.equalsIgnoreCase("AED")) {
// es ist eine Fremdwährung
// Herr Heolzl 15.05.2025
// However the backend reports the P&L & Balance sheet will reflect in AED as
// AGL Dubai books are maintained in AED therefore we need to have an exchange
// rate which can be fixed @3.6725 AED for 1 USD.
//
// Aus diesem Grund rechnen wir direkt in AED um!
// wir verwenden unsere Rate
// double rate=3.6725;
double rate = 0;
if (invoice.getModelVersion().startsWith("rechnungsausgang-")) {
rate = invoice.getItemValueDouble("invoice.rate");
} else {
rate = invoice.getItemValueDouble("invoice.exchangerate");
}
if (rate == 0) {
rate = 0.27229; // (3.6725) = default rate
}
double aedBetrag = total / rate;
logger.info("│ ├── convert into AED=" + aedBetrag);
return aedBetrag;
} else {
return total;
}
}
private ZohoBill convertToZohoBill(ItemCollection invoice, String contactID, String accountID)
throws PluginException {
ZohoBill zohoBill = new ZohoBill();
@ -373,13 +417,12 @@ public class ZohoAPIService {
zohoBill.setInvoiceNumber(invoice.getItemValueString("invoice.number"));
zohoBill.setDate(
LocalDate.ofInstant(invoice.getItemValueDate("invoice.date").toInstant(), ZoneId.systemDefault()));
// convert total by rate
zohoBill.setAmount(convertInvoiceTotalToAED(invoice, invoice.getItemValueDouble("invoice.total")));
zohoBill.setAmount(invoice.getItemValueDouble("invoice.total"));
// Kunden-ID (muss angepasst werden je nachdem wie du sie speicherst)
zohoBill.setVendorId(contactID);
if (currencyID != null && !currencyID.isEmpty()) {
zohoBill.setCurrencyId(currencyID);
}
// zohoBill.setPaid_through_account_id("1700");
List<ItemCollection> positionen = InvoiceUtil.explodeChildList(invoice);
// {amount=[11825.00], total=[11825.00], numpos=[1], name=[AB-DEFGHI-1234-567],
@ -390,7 +433,7 @@ public class ZohoAPIService {
lineItem.setName(itemCol.getItemValueString("name"));
lineItem.setAccountId(accountID);
lineItem.setQuantity(1);
lineItem.setRate(itemCol.getItemValueDouble("amount"));
lineItem.setRate(convertInvoiceTotalToAED(invoice, itemCol.getItemValueDouble("amount")));
return lineItem;
}).collect(Collectors.toList());

View file

@ -86,8 +86,10 @@ public class ZohoExportAdapter implements SignalAdapter {
// find companyID
String contactID = zohoAPIService.lookupContact(document.getItemValueString("dbtr.name"), "customer",
accessToken);
String currencyID = zohoAPIService.lookupCurrency(document.getItemValueString("invoice.currency"), accessToken);
ZohoInvoice zohoInvoice = zohoAPIService.exportInvoice(document, contactID, currencyID, accessToken);
// String currencyID =
// zohoAPIService.lookupCurrency(document.getItemValueString("invoice.currency"),
// accessToken);
ZohoInvoice zohoInvoice = zohoAPIService.exportInvoice(document, contactID, accessToken);
// Attache Files....
List<FileData> files = null;
@ -117,10 +119,12 @@ public class ZohoExportAdapter implements SignalAdapter {
String contactID = zohoAPIService.lookupContact(document.getItemValueString("cdtr.name"), "vendor",
accessToken);
String currencyID = zohoAPIService.lookupCurrency(document.getItemValueString("invoice.currency"), accessToken);
// String currencyID =
// zohoAPIService.lookupCurrency(document.getItemValueString("invoice.currency"),
// accessToken);
String accountID = zohoOAuthManager.getAccountId();
ZohoBill zohoBill = zohoAPIService.exportBill(document, contactID, currencyID, accountID, accessToken);
ZohoBill zohoBill = zohoAPIService.exportBill(document, contactID, accountID, accessToken);
// Attache Files....
List<FileData> files = null;

File diff suppressed because it is too large Load diff

View file

@ -40,11 +40,42 @@
<attachments></attachments>
]]></bpmn2:documentation>
</bpmn2:message>
<bpmn2:message id="Message_8" name="ERROR-Body">
<bpmn2:documentation id="Documentation_8"><![CDATA[Der folgende SEPA Lauf konnte nicht korrekt erstellt werden. Bitte prüfen Sie den Vorgang:
<bpmn2:message id="Message_8" name="Mail-Body">
<bpmn2:documentation id="Documentation_8"><![CDATA[<pre style="font-weight:bold;">
<itemvalue>name</itemvalue>
</pre>
<p>
<strong>Debitor: </strong><itemvalue>dbtr.name</itemvalue> (<itemvalue>dbtr.number</itemvalue>)
</p>
<p>
<strong>Payment details: </strong><itemvalue format="dd.MM.yyyy">payment.date</itemvalue> : <itemvalue format="#,###,##0.00" locale="de_DE">payment.amount</itemvalue> <itemvalue>payment.currency</itemvalue>
</p>
<table>
<theader>
<tr>
<th>No.</th>
<th>Date</th>
<th>Due Date</th>
<th>Total</th>
<th>Balance</th>
<th>Payment</th>
</tr>
<propertyvalue>application.url</propertyvalue>index.jsf?workitem=<itemvalue>$uniqueid</itemvalue>
<attachments></attachments>
</theader>
<tbody>
<for-each item="payment.details.mail">
<tr>
<td><itemvalue>invoice.number</itemvalue></td>
<td style="text-align:center;"><itemvalue format="dd.MM.yyyy">invoice.date</itemvalue></td>
<td style="text-align:center;"><itemvalue format="dd.MM.yyyy">invoice.duedate</itemvalue></td>
<td style="text-align:right;"><itemvalue format="#,###,##0.00" locale="de_DE">invoice.total</itemvalue> <itemvalue>invoice.currency</itemvalue></td>
<td style="text-align:right;"><itemvalue format="#,###,##0.00" locale="de_DE">invoice.saldo</itemvalue> <itemvalue>invoice.currency</itemvalue></td>
<td style="text-align:right;"><itemvalue format="#,###,##0.00" locale="de_DE">payment.amount</itemvalue> <itemvalue>invoice.currency</itemvalue></td>
</tr>
</for-each>
</tbody>
</table>
]]></bpmn2:documentation>
</bpmn2:message>
<bpmn2:collaboration id="Collaboration_1" name="Zahlungseingang">
@ -170,6 +201,8 @@
<bpmn2:flowNodeRef>Task_6</bpmn2:flowNodeRef>
<bpmn2:documentation id="documentation_DIQBSw"/>
<bpmn2:flowNodeRef>DataObject_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>event_rs4HbQ</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>gateway_gSQAJA</bpmn2:flowNodeRef>
</bpmn2:lane>
<bpmn2:lane id="Lane_2" name="Buchhaltung">
<bpmn2:flowNodeRef>Task_2</bpmn2:flowNodeRef>
@ -288,8 +321,8 @@ result.isValid=true;
<bpmn2:documentation id="Documentation_4"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation>
<bpmn2:incoming>SequenceFlow_6</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_10</bpmn2:outgoing>
<bpmn2:incoming>SequenceFlow_3</bpmn2:incoming>
<bpmn2:incoming>sequenceFlow_HyzQdw</bpmn2:incoming>
<bpmn2:incoming>sequenceFlow_s7bTKw</bpmn2:incoming>
</bpmn2:task>
<bpmn2:sequenceFlow id="SequenceFlow_10" sourceRef="Task_2" targetRef="EndEvent_3">
<bpmn2:documentation id="documentation_cCd7qQ"/>
@ -299,6 +332,7 @@ result.isValid=true;
<bpmn2:outgoing>SequenceFlow_13</bpmn2:outgoing>
<bpmn2:outgoing>SequenceFlow_5</bpmn2:outgoing>
<bpmn2:documentation id="documentation_HzoUhQ"/>
<bpmn2:outgoing>sequenceFlow_ck6Btg</bpmn2:outgoing>
</bpmn2:eventBasedGateway>
<bpmn2:endEvent id="EndEvent_3" name="End">
<bpmn2:incoming>SequenceFlow_10</bpmn2:incoming>
@ -611,7 +645,7 @@ result.isValid=true;
</bpmn2:outputSet>
<bpmn2:signalEventDefinition id="SignalEventDefinition_1" signalRef="Signal_2"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="SequenceFlow_3" sourceRef="IntermediateCatchEvent_1" targetRef="Task_2">
<bpmn2:sequenceFlow id="SequenceFlow_3" sourceRef="IntermediateCatchEvent_1" targetRef="gateway_gSQAJA">
<bpmn2:documentation id="documentation_8wos0g"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="SequenceFlow_5" sourceRef="EventBasedGateway_1" targetRef="IntermediateCatchEvent_1">
@ -658,41 +692,7 @@ result.isValid=true;
<imixs:item name="rtfmailbody" type="xs:string">
<imixs:value><![CDATA[<bpmn2:message>Html-Header</bpmn2:message>
<textblock>E-Mail - Receipt of Payment</textblock>
<pre style="font-weight:bold;">
<itemvalue>name</itemvalue>
</pre>
<p>
<strong>Debitor: </strong><itemvalue>dbtr.name</itemvalue> (<itemvalue>dbtr.number</itemvalue>)
</p>
<p>
<strong>Payment details: </strong><itemvalue format="dd.MM.yyyy">payment.date</itemvalue> : <itemvalue format="#,###,##0.00" locale="de_DE">payment.amount</itemvalue> <itemvalue>payment.currency</itemvalue>
</p>
<table>
<theader>
<tr>
<th>No.</th>
<th>Date</th>
<th>Due Date</th>
<th>Total</th>
<th>Balance</th>
<th>Payment</th>
</tr>
</theader>
<tbody>
<for-each item="payment.details.mail">
<tr>
<td><itemvalue>invoice.number</itemvalue></td>
<td style="text-align:center;"><itemvalue format="dd.MM.yyyy">invoice.date</itemvalue></td>
<td style="text-align:center;"><itemvalue format="dd.MM.yyyy">invoice.duedate</itemvalue></td>
<td style="text-align:right;"><itemvalue format="#,###,##0.00" locale="de_DE">invoice.total</itemvalue> <itemvalue>invoice.currency</itemvalue></td>
<td style="text-align:right;"><itemvalue format="#,###,##0.00" locale="de_DE">invoice.saldo</itemvalue> <itemvalue>invoice.currency</itemvalue></td>
<td style="text-align:right;"><itemvalue format="#,###,##0.00" locale="de_DE">payment.amount</itemvalue> <itemvalue>invoice.currency</itemvalue></td>
</tr>
</for-each>
</tbody>
</table>
<bpmn2:message>Mail-Body</bpmn2:message>
<textblock>E-Mail - Receipt of Payment Footer</textblock>
<bpmn2:message>Html-Footer</bpmn2:message>
]]></imixs:value>
@ -757,6 +757,112 @@ result.isValid=true;
<bpmn2:sequenceFlow id="sequenceFlow_HyzQdw" sourceRef="event_OJtddA" targetRef="Task_2">
<bpmn2:documentation id="documentation_B98jKA"/>
</bpmn2:sequenceFlow>
<bpmn2:intermediateCatchEvent id="event_rs4HbQ" imixs:activityid="21" name="Accounting with E-Mail">
<bpmn2:extensionElements>
<imixs:item name="keylogtimeformat" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keyarchive" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="txtmailsubject" type="xs:string">
<imixs:value><![CDATA[Receipt of Payment ]]></imixs:value>
</imixs:item>
<imixs:item name="keyaccessmode" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyscheduledactivity" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyversion" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyaddwritefields" type="xs:string"/>
<imixs:item name="numnextactivityid" type="xs:int">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyfollowup" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keypublicresult" type="xs:string">
<imixs:value><![CDATA[1]]></imixs:value>
</imixs:item>
<imixs:item name="keylogdateformat" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string"/>
<imixs:item name="numnextid" type="xs:int">
<imixs:value><![CDATA[5000]]></imixs:value>
</imixs:item>
<imixs:item name="txtnextprocesstree" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="txtactivityresult" type="xs:string">
<imixs:value><![CDATA[<item name="action">home</item>]]></imixs:value>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Speichern]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipmode" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="rtfresultlog" type="xs:string">
<imixs:value><![CDATA[Invoiced were reconciled and receipt of payment is booked and completed. E-Mail was sent to <itemvalue>dbtr.mail</itemvalue>.]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>false</imixs:value>
</imixs:item>
<imixs:item name="nammailreceiver" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="nammailreceivercc" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="nammailreceiverbcc" type="xs:string">
<imixs:value><![CDATA[ralph.soika@imixs.com]]></imixs:value>
<imixs:value><![CDATA[gaby.heinle@imixs.com]]></imixs:value>
<imixs:value><![CDATA[ohoelzl@alexander-logistics.com]]></imixs:value>
</imixs:item>
<imixs:item name="rtfmailbody" type="xs:string">
<imixs:value><![CDATA[<bpmn2:message>Html-Header</bpmn2:message>
<textblock>E-Mail - Receipt of Payment</textblock>
<bpmn2:message>Mail-Body</bpmn2:message>
<textblock>E-Mail - Receipt of Payment Footer</textblock>
<bpmn2:message>Html-Footer</bpmn2:message>
]]></imixs:value>
</imixs:item>
<imixs:item name="keymailreceiverfields" type="xs:string">
<imixs:value><![CDATA[dbtr.mail]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="documentation_DR3qlA"><![CDATA[Forward the payment capture to accounting and send a confirmation Mail to the vendor.]]></bpmn2:documentation>
<bpmn2:dataOutput id="dataOutput_MbdmAg" name="Signal_1_Output"/>
<bpmn2:dataOutputAssociation id="dataOutputAssociation_3MyzqA">
<bpmn2:sourceRef>DataOutput_1</bpmn2:sourceRef>
</bpmn2:dataOutputAssociation>
<bpmn2:outputSet id="outputSet_7MCgig" name="Output Set 2">
<bpmn2:dataOutputRefs>DataOutput_1</bpmn2:dataOutputRefs>
</bpmn2:outputSet>
<bpmn2:signalEventDefinition id="signalEventDefinition_iJuMWw" signalRef="Signal_2"/>
<bpmn2:incoming>sequenceFlow_ck6Btg</bpmn2:incoming>
<bpmn2:outgoing>sequenceFlow_vDNaXA</bpmn2:outgoing>
<bpmn2:messageEventDefinition id="messageEventDefinition_34PTtQ" messageRef="Message_6"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:exclusiveGateway gatewayDirection="Diverging" id="gateway_gSQAJA" name="">
<bpmn2:documentation id="documentation_XzqYiw"/>
<bpmn2:incoming>SequenceFlow_3</bpmn2:incoming>
<bpmn2:incoming>sequenceFlow_vDNaXA</bpmn2:incoming>
<bpmn2:outgoing>sequenceFlow_s7bTKw</bpmn2:outgoing>
</bpmn2:exclusiveGateway>
<bpmn2:sequenceFlow id="sequenceFlow_ck6Btg" sourceRef="EventBasedGateway_1" targetRef="event_rs4HbQ">
<bpmn2:documentation id="documentation_7dYQKw"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="sequenceFlow_vDNaXA" sourceRef="event_rs4HbQ" targetRef="gateway_gSQAJA">
<bpmn2:documentation id="documentation_6opNXQ"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="sequenceFlow_s7bTKw" sourceRef="gateway_gSQAJA" targetRef="Task_2">
<bpmn2:documentation id="documentation_Ocl6nQ"/>
</bpmn2:sequenceFlow>
</bpmn2:process>
<bpmn2:message id="message_2HzKlA" name="Html-Header">
<bpmn2:documentation id="documentation_GB90VQ"><![CDATA[<html>
@ -801,13 +907,13 @@ th { font-weight: bold;}
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="Default Process Diagram">
<bpmndi:BPMNPlane bpmnElement="Collaboration_1" id="BPMNPlane_1">
<bpmndi:BPMNShape bpmnElement="Participant_1" id="BPMNShape_Participant_1" isHorizontal="true">
<dc:Bounds height="480.0" width="1180.0" x="100.0" y="150.0"/>
<dc:Bounds height="550.0" width="1200.0" x="100.0" y="150.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Lane_1" id="BPMNShape_Lane_1" isHorizontal="true">
<dc:Bounds height="255.0" width="1150.0" x="130.0" y="150.0"/>
<dc:Bounds height="278.0" width="1170.0" x="130.0" y="150.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Lane_2" id="BPMNShape_Lane_2" isHorizontal="true">
<dc:Bounds height="225.0" width="1150.0" x="130.0" y="405.0"/>
<dc:Bounds height="272.0" width="1170.0" x="130.0" y="428.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="StartEvent_1" id="BPMNShape_1">
<dc:Bounds height="36.0" width="36.0" x="177.0" y="257.0"/>
@ -825,7 +931,7 @@ th { font-weight: bold;}
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Task_6" id="BPMNShape_Task_6">
<dc:Bounds height="50.0" width="110.0" x="810.0" y="250.0"/>
<dc:Bounds height="50.0" width="110.0" x="810.0" y="180.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="EndEvent_3" id="BPMNShape_EndEvent_2">
<dc:Bounds height="36.0" width="36.0" x="1127.0" y="337.0"/>
@ -840,24 +946,24 @@ th { font-weight: bold;}
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Message_8" id="BPMNShape_Message_6">
<dc:Bounds height="20.0" width="30.0" x="220.0" y="76.0"/>
<dc:Bounds height="20.0" width="30.0" x="270.0" y="80.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_24">
<dc:Bounds height="20.0" width="100.0" x="185.0" y="96.0"/>
<dc:Bounds height="20.0" width="100.0" x="235.0" y="100.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Task_2" id="BPMNShape_Task_2">
<dc:Bounds height="50.0" width="110.0" x="820.0" y="460.0"/>
<dc:Bounds height="50.0" width="110.0" x="810.0" y="490.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_5" id="BPMNShape_IntermediateCatchEvent_5">
<dc:Bounds height="36.0" width="36.0" x="567.0" y="257.0"/>
<dc:Bounds height="36.0" width="36.0" x="567.0" y="187.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_6" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="539.5" y="297.0"/>
<dc:Bounds height="20.0" width="100.0" x="539.5" y="227.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_6" id="BPMNShape_IntermediateCatchEvent_6">
<dc:Bounds height="36.0" width="36.0" x="897.0" y="547.0"/>
<dc:Bounds height="36.0" width="36.0" x="847.0" y="597.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_10" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="865.0" y="587.0"/>
<dc:Bounds height="20.0" width="100.0" x="815.0" y="637.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_3" id="BPMNShape_IntermediateCatchEvent_3">
@ -873,15 +979,15 @@ th { font-weight: bold;}
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_1" id="BPMNShape_IntermediateCatchEvent_1">
<dc:Bounds height="36.0" width="36.0" x="447.0" y="337.0"/>
<dc:Bounds height="36.0" width="36.0" x="567.0" y="257.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_2" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="415.5" y="375.0"/>
<dc:Bounds height="20.0" width="100.0" x="535.5" y="295.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="DataObject_2" id="BPMNShape_DataObject_2">
<dc:Bounds height="50.0" width="35.0" x="680.0" y="550.0"/>
<dc:Bounds height="50.0" width="35.0" x="700.0" y="490.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_12">
<dc:Bounds height="20.0" width="100.0" x="648.0" y="600.0"/>
<dc:Bounds height="20.0" width="100.0" x="668.0" y="540.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_1" id="BPMNEdge_SequenceFlow_1" sourceElement="BPMNShape_Task_1" targetElement="BPMNShape_EventBasedGateway_1">
@ -891,26 +997,26 @@ th { font-weight: bold;}
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_10" id="BPMNEdge_SequenceFlow_10" sourceElement="BPMNShape_Task_2" targetElement="BPMNShape_EndEvent_2">
<bpmndi:BPMNLabel id="BPMNLabel_26"/>
<di:waypoint x="930.0" y="482.0"/>
<di:waypoint x="1148.0" y="482.0"/>
<di:waypoint x="1148.0" y="373.0"/>
<di:waypoint x="920.0" y="517.0"/>
<di:waypoint x="1145.0" y="517.0"/>
<di:waypoint x="1145.0" y="373.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_13" id="BPMNEdge_SequenceFlow_13" sourceElement="BPMNShape_EventBasedGateway_1" targetElement="BPMNShape_IntermediateCatchEvent_5">
<bpmndi:BPMNLabel id="BPMNLabel_27"/>
<di:waypoint x="490.0" y="275.0"/>
<di:waypoint x="567.0" y="275.0"/>
<di:waypoint x="464.0" y="251.0"/>
<di:waypoint x="464.0" y="205.0"/>
<di:waypoint x="567.0" y="205.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_17" id="BPMNEdge_SequenceFlow_17" sourceElement="BPMNShape_Task_6" targetElement="BPMNShape_EndEvent_2">
<bpmndi:BPMNLabel id="BPMNLabel_36"/>
<di:waypoint x="920.0" y="276.0"/>
<di:waypoint x="1148.0" y="276.0"/>
<di:waypoint x="1148.0" y="337.0"/>
<di:waypoint x="920.0" y="208.0"/>
<di:waypoint x="1145.0" y="208.0"/>
<di:waypoint x="1145.0" y="337.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_6" id="BPMNEdge_SequenceFlow_6" sourceElement="BPMNShape_IntermediateCatchEvent_6" targetElement="BPMNShape_Task_2">
<bpmndi:BPMNLabel id="BPMNLabel_14"/>
<di:waypoint x="897.0" y="569.0"/>
<di:waypoint x="888.0" y="569.0"/>
<di:waypoint x="888.0" y="510.0"/>
<di:waypoint x="865.0" y="597.0"/>
<di:waypoint x="865.0" y="540.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_14" id="BPMNEdge_SequenceFlow_14" sourceElement="BPMNShape_IntermediateCatchEvent_3" targetElement="BPMNShape_Task_1">
<bpmndi:BPMNLabel id="BPMNLabel_22"/>
@ -919,8 +1025,8 @@ th { font-weight: bold;}
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_18" id="BPMNEdge_SequenceFlow_18" sourceElement="BPMNShape_IntermediateCatchEvent_5" targetElement="BPMNShape_Task_6">
<bpmndi:BPMNLabel id="BPMNLabel_38"/>
<di:waypoint x="603.0" y="275.0"/>
<di:waypoint x="810.0" y="275.0"/>
<di:waypoint x="603.0" y="205.0"/>
<di:waypoint x="810.0" y="205.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_4" id="BPMNEdge_SequenceFlow_4" sourceElement="BPMNShape_1" targetElement="BPMNShape_Task_1">
<bpmndi:BPMNLabel id="BPMNLabel_11"/>
@ -933,22 +1039,21 @@ th { font-weight: bold;}
<di:waypoint x="345.0" y="205.0"/>
<di:waypoint x="345.0" y="250.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_3" id="BPMNEdge_SequenceFlow_3" sourceElement="BPMNShape_IntermediateCatchEvent_1" targetElement="BPMNShape_Task_2">
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_3" id="BPMNEdge_SequenceFlow_3" sourceElement="BPMNShape_IntermediateCatchEvent_1" targetElement="BPMNShape_CBkDrA">
<bpmndi:BPMNLabel id="BPMNLabel_7"/>
<di:waypoint x="483.0" y="357.0"/>
<di:waypoint x="875.0" y="357.0"/>
<di:waypoint x="875.0" y="460.0"/>
<di:waypoint x="603.0" y="275.0"/>
<di:waypoint x="865.0" y="275.0"/>
<di:waypoint x="865.0" y="330.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_5" id="BPMNEdge_SequenceFlow_5" sourceElement="BPMNShape_EventBasedGateway_1" targetElement="BPMNShape_IntermediateCatchEvent_1">
<bpmndi:BPMNLabel id="BPMNLabel_9"/>
<di:waypoint x="465.0" y="300.0"/>
<di:waypoint x="465.0" y="337.0"/>
<di:waypoint x="490.0" y="275.0"/>
<di:waypoint x="567.0" y="275.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="Association_1" id="BPMNEdge_Association_1" sourceElement="BPMNShape_DataObject_2" targetElement="BPMNShape_Task_2">
<bpmndi:BPMNLabel id="BPMNLabel_15"/>
<di:waypoint x="715.0" y="576.0"/>
<di:waypoint x="851.0" y="576.0"/>
<di:waypoint x="851.0" y="510.0"/>
<di:waypoint x="735.0" y="515.0"/>
<di:waypoint x="810.0" y="515.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape bpmnElement="event_OJtddA" id="BPMNShape_754PJA">
<dc:Bounds height="36.0" width="36.0" x="997.0" y="547.0"/>
@ -959,13 +1064,13 @@ th { font-weight: bold;}
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_HyzQdw" id="BPMNEdge_bmkgvw" sourceElement="BPMNShape_754PJA" targetElement="BPMNShape_Task_2">
<di:waypoint x="997.0" y="565.0"/>
<di:waypoint x="964.0" y="565.0"/>
<di:waypoint x="964.0" y="498.0"/>
<di:waypoint x="930.0" y="498.0"/>
<di:waypoint x="964.0" y="530.0"/>
<di:waypoint x="920.0" y="530.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape bpmnElement="message_2HzKlA" id="BPMNShape_TeEEyw">
<dc:Bounds height="20.0" width="30.0" x="396.0" y="81.0"/>
<dc:Bounds height="20.0" width="30.0" x="400.0" y="80.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_dyDU8A">
<dc:Bounds height="20.0" width="100.0" x="361.0" y="106.0"/>
<dc:Bounds height="20.0" width="100.0" x="365.0" y="105.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="message_y3UT5g" id="BPMNShape_9IlCkA">
@ -1014,6 +1119,31 @@ th { font-weight: bold;}
<di:waypoint x="703.0" y="-95.0"/>
<di:waypoint x="760.0" y="-95.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape bpmnElement="event_rs4HbQ" id="BPMNShape_PHJ6Lw">
<dc:Bounds height="36.0" width="36.0" x="567.0" y="337.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_rdcTZw">
<dc:Bounds height="20.0" width="100.0" x="535.0" y="376.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="gateway_gSQAJA" id="BPMNShape_CBkDrA">
<dc:Bounds height="50.0" width="50.0" x="840.0" y="330.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_FB8hiA">
<dc:Bounds height="20.0" width="100.0" x="815.0" y="383.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_ck6Btg" id="BPMNEdge_KH85MA" sourceElement="BPMNShape_EventBasedGateway_1" targetElement="BPMNShape_PHJ6Lw">
<di:waypoint x="465.0" y="300.0"/>
<di:waypoint x="465.0" y="355.0"/>
<di:waypoint x="567.0" y="355.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_vDNaXA" id="BPMNEdge_Bs6H3g" sourceElement="BPMNShape_PHJ6Lw" targetElement="BPMNShape_CBkDrA">
<di:waypoint x="603.0" y="355.0"/>
<di:waypoint x="840.0" y="355.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_s7bTKw" id="BPMNEdge_lsNWsw" sourceElement="BPMNShape_CBkDrA" targetElement="BPMNShape_Task_2">
<di:waypoint x="865.0" y="380.0"/>
<di:waypoint x="865.0" y="490.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
<bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1">
<dc:Font name="arial" size="9.0"/>