For anyone who is interested, here is my solutions:

/applications/accounting/widget/AccountingPrintScreens.xml add:

<screen name="InvoicePDF">
   <section>
   <actions>    
     <script
location="component://accounting/webapp/accounting/WEB-INF/actions/invoice/InvoiceTemplate.groovy"/>
   </actions>           
   <widgets>                            
       <include-screen name="${template}" location="${templatepath}"/>
   </widgets>
   </section>           
</screen>

Then rename the existing <screen name="InvoicePDF"> to <screen
name="InvoicePDF_default">

Add the following script
accounting/webapp/accounting/WEB-INF/actions/invoice/InvoiceTemplate.groovy

##START
import org.ofbiz.accounting.invoice.*;

invoiceId = parameters.get("invoiceId");
templatepath = "component://accounting/widget/AccountingPrintScreens.xml"
template = "InvoicePDF_default";

if (invoiceId) {
    invoice = delegator.findOne("Invoice", [invoiceId : invoiceId], false);

        billingParty = InvoiceWorker.getBillToParty(invoice);
    sendingParty = InvoiceWorker.getSendFromParty(invoice);
        
        if (billingParty) {
                partyId = billingParty.partyId;
                
                                // get the template     
                partyContents = delegator.findByAndCache("PartyContent", 
[partyId :
partyId]) 
                templateattr = delegator.findByAnd("PartyAttribute", [partyId : 
partyId,
attrName :"invoiceTemplate"], null, false);
        }
        if (templateattr.size()==0){
                partyId = sendingParty.partyId;
                partyContents = delegator.findByAndCache("PartyContent", 
[partyId :
partyId]) 
                templateattr = delegator.findByAnd("PartyAttribute", [partyId : 
partyId,
attrName :"invoiceTemplate"], null, false);
        }
        
        if(templateattr.size()>0){
                tmp_template = templateattr[0].get("attrValue").split("#");
                templatepath = tmp_template[0]
                template = tmp_template[1]
        }
        context.templatepath = templatepath
        context.template = template
}
###END

I use the partyAttributes pointing to the screen definition. For example:

attribute Name = invoiceTemplate
attribute Value =
component://accounting/widget/AccountingPrintScreens.xml#InvoicePDF_default 

If no template is defined it falls back to the default default screen
definition.

Again thanks to Nicolas for pointing me here!



--
View this message in context: 
http://ofbiz.135035.n4.nabble.com/Multiple-invoice-templates-tp4654897p4656631.html
Sent from the OFBiz - User mailing list archive at Nabble.com.

Reply via email to