Grok says… (note there may be errors in this, but after a quick read it does 
seem pretty accurate)


------
In Apache OFBiz 18, the Event-Condition-Action (ECA) rule you’ve referenced for 
the updateReturnHeader service is designed to handle sales returns (customer 
returns) when the status changes to RETURN_COMPLETED. This ECA triggers several 
actions, including createInvoiceFromReturn, which generates a sales return 
invoice (typically a credit note) to reflect the financial adjustment for the 
returned goods. However, you’ve noticed that there doesn’t appear to be an 
equivalent ECA for SUP_RETURN_COMPLETED, which is the status associated with 
purchase returns (returns to suppliers), and you want to generate a debit note 
(referred to as a Purchase Return Invoice in OFBiz) when this status is reached.
Let’s break this down and address your question and objective step-by-step:
Why Isn’t There an Equivalent ECA for SUP_RETURN_COMPLETED?
The absence of an equivalent ECA for SUP_RETURN_COMPLETED in the out-of-the-box 
(OOTB) OFBiz 18 configuration stems from differences in the business processes 
and control dynamics between sales returns and purchase returns:
Sales Returns (Customer Returns):
When a customer returns goods, the business is in full control of the process. 
Once the return is approved and completed (RETURN_COMPLETED), OFBiz can 
confidently generate a credit note (via createInvoiceFromReturn) to adjust the 
customer’s account in Accounts Receivable (AR).
The ECA ensures automation of this adjustment because the business dictates the 
terms and outcome of the return.
Purchase Returns (Supplier Returns):
For purchase returns, the supplier is in control of the process. The business 
(the buyer) initiates a return, but the supplier must approve it and decide the 
resolution—typically issuing a credit note to the buyer or agreeing to a 
refund/replacement.
Unlike sales returns, the financial adjustment (e.g., a debit note or credit 
from the supplier) depends on the supplier’s response, not just the internal 
status change to SUP_RETURN_COMPLETED. This external dependency means OFBiz 
cannot assume the return is fully resolved at this stage and automatically 
generate a debit note.
OOTB Behavior:
In OFBiz, the SUP_RETURN_COMPLETED status indicates that the return process has 
been finalized internally (e.g., goods shipped back to the supplier), but it 
doesn’t inherently trigger an invoice or debit note because the supplier’s 
acknowledgment or credit note is typically required first.
Instead of an ECA, the OOTB expectation might be that the user manually creates 
a Purchase Return Invoice or records a supplier-issued credit note in the 
Accounting module once the supplier confirms the return.
Debit Note vs. Credit Note:
In accounting terms, a debit note is issued by the buyer to the supplier to 
request a credit or adjustment (e.g., for defective goods). However, in OFBiz, 
the Purchase Return Invoice (an invoice of type PURCHASE_RETURN_INVOICE) acts 
as the mechanism to record this adjustment in Accounts Payable (AP), often 
linked to a supplier credit note.
The lack of an ECA for SUP_RETURN_COMPLETED suggests that OFBiz assumes this 
step involves manual intervention or supplier-driven documentation rather than 
automatic generation.
Is There an Equivalent ECA for SUP_RETURN_COMPLETED?
In the standard OFBiz 18 configuration, there is no direct equivalent ECA for 
SUP_RETURN_COMPLETED that mirrors the RETURN_COMPLETED behavior. The 
updateReturnHeader service handles both sales and purchase returns (via the 
ReturnHeader entity), but the ECA is specifically conditioned on 
RETURN_COMPLETED, which applies to customer returns. No analogous ECA exists 
for SUP_RETURN_COMPLETED in the OOTB entity-eca.xml or service-eca.xml files 
under the applications/order or applications/accounting components.
However, the equivalent process for purchase returns involves:
Completing the return process in the Order Manager (e.g., marking the return as 
SUP_RETURN_COMPLETED).
Manually creating a Purchase Return Invoice in the Accounting Manager under 
Accounts Payable, which adjusts the supplier’s account and reflects the 
debit/credit as needed.
Achieving Your Objective: Triggering Debit Note Generation for 
SUP_RETURN_COMPLETED
To automate the generation of a Purchase Return Invoice (functionally a debit 
note in your context) when the status changes to SUP_RETURN_COMPLETED, you’ll 
need to customize OFBiz by adding a new ECA. Here’s how you can do it:
Step 1: Understand the Existing Mechanism
The createInvoiceFromReturn service generates invoices based on the 
ReturnHeader and ReturnItem entities. For sales returns (RETURN_COMPLETED), it 
creates a CUST_RETURN_INVOICE (credit note). For purchase returns 
(SUP_RETURN_COMPLETED), it can create a PURCHASE_RETURN_INVOICE if invoked 
correctly.
You’ll leverage this service but trigger it specifically for 
SUP_RETURN_COMPLETED.
Step 2: Add a Custom ECA
Create or modify an ECA definition in a custom component or override the 
existing entity-eca.xml or service-eca.xml file. For example:
xml

<eca service="updateReturnHeader" event="commit">
    <condition field-name="statusId" operator="equals" 
value="SUP_RETURN_COMPLETED"/>
    <condition field-name="oldStatusId" operator="not-equals" 
value="SUP_RETURN_COMPLETED"/>
    <action service="createInvoiceFromReturn" mode="sync"/>
</eca>
Explanation:
service="updateReturnHeader": Ties the ECA to the same service used for sales 
returns.
statusId="SUP_RETURN_COMPLETED": Triggers only for purchase returns.
oldStatusId condition: Ensures the action runs only on a status change to 
SUP_RETURN_COMPLETED.
createInvoiceFromReturn: Generates the Purchase Return Invoice.
Step 3: Test the Invoice Type
The createInvoiceFromReturn service checks the returnTypeId of the 
ReturnHeader. For purchase returns (returnTypeId="VENDOR_RETURN"), it should 
generate a PURCHASE_RETURN_INVOICE. Verify this behavior in your environment, 
as it depends on the return setup.
Step 4: Deploy and Validate
Place the ECA in your custom component’s servicedef/secas.xml file (e.g., 
hot-deploy/mycomponent/servicedef/secas.xml).
Reload the service definitions (./ant load-seca or restart OFBiz).
Test the purchase return process by creating a return, completing it 
(SUP_RETURN_COMPLETED), and confirming that a Purchase Return Invoice is 
generated in the Accounting Manager.
Optional Enhancements
Add conditions to ensure the supplier has approved the return (e.g., a custom 
field or status).
Include additional actions like notifications (sendReturnCompleteNotification) 
if needed.
Customize createInvoiceFromReturn (via a service override) if you need specific 
debit note formatting or logic.
Considerations
Supplier Dependency: If your business process requires supplier approval before 
generating a debit note, you might need to introduce a custom status (e.g., 
SUP_RETURN_APPROVED) and trigger the ECA there instead.
Accounting Impact: Ensure the generated Purchase Return Invoice correctly 
debits the supplier’s AP account and aligns with your accounting practices.
OFBiz Version: This solution is based on OFBiz 18’s general architecture. Minor 
adjustments might be needed depending on your specific release or 
customizations.
Conclusion
There’s no OOTB ECA for SUP_RETURN_COMPLETED because purchase returns involve 
supplier-driven steps that OFBiz doesn’t automate by default. However, you can 
achieve your objective by adding a custom ECA to trigger 
createInvoiceFromReturn for SUP_RETURN_COMPLETED, effectively generating a 
Purchase Return Invoice (debit note) when the status changes. 



--P

> On Mar 3, 2025, at 8:51 AM, Jacques Le Roux <[email protected]> 
> wrote:
> 
> Hi Stephen,
> 
> It could be interesting to ask Grok3 as suggested by Paul. 
> https://lists.apache.org/thread/76f1551z1v2z245p9gs2q8ffqp3rjpsf
> 
> HTH
> 
> Jacques
> 
> 
> Le 24/02/2025 à 21:44, S Munene a écrit :
>> The sales return processing  has an eca defined for service 
>> updateReturnHeader for RETURN_COMPLETED status
>> The last part of that eca is createInvoiceFromReturn
>> 
>>     <eca service="updateReturnHeader" event="commit">
>>         <condition field-name="statusId" operator="equals" 
>> value="RETURN_COMPLETED"/>
>>         <condition field-name="oldStatusId" operator="not-equals" 
>> value="RETURN_COMPLETED"/>
>>         <action service="sendReturnCompleteNotification" mode="async" 
>> persist="true"/>
>>         <action service="processSubscriptionReturn" mode="sync"/>
>>         <action service="createReturnStatus" mode="sync"/>
>>         <action service="createInvoiceFromReturn" mode="sync"/>
>>     </eca>
>>            Why isn't there an equivalent eca (or maybe a better question is 
>> what is the equivalent)    for SUP_RETURN_COMPLETED (i believe it is the 
>> purchase return equivalent of RETURN_COMPLETED )?
>>  My objective is to trigger  debit note generation (Purchase Return Invoice) 
>> when status changes to SUP_RETURN_COMPLETED
>>  Kindly help
>> 
>> Regards
>> Stephen

Reply via email to