You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by nm...@apache.org on 2022/05/25 12:03:58 UTC
[ofbiz-framework] branch trunk updated: Implemented: Configure invoice, quote and order templates for an organizational party (OFBIZ-10215) (OFBIZ-10216) (OFBIZ-10217)
This is an automated email from the ASF dual-hosted git repository.
nmalin pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
The following commit(s) were added to refs/heads/trunk by this push:
new 4d035a554b Implemented: Configure invoice, quote and order templates for an organizational party (OFBIZ-10215) (OFBIZ-10216) (OFBIZ-10217)
4d035a554b is described below
commit 4d035a554bf01abfaf1cd99f485d6a1d28c0a647
Author: Nicolas Malin <ni...@nereide.fr>
AuthorDate: Wed May 25 13:58:34 2022 +0200
Implemented: Configure invoice, quote and order templates for an organizational party (OFBIZ-10215) (OFBIZ-10216) (OFBIZ-10217)
Add the possibility to print invoice, quote and order as pdf from the organizational party configuration.
With this you can define your own xslfo template connected to a custom screen and configure it for each organization through PartyPrefDocTypeTpl
Thanks to Ingo Wolfmayr for patch submission
---
.../accounting/widget/AccountingPrintScreens.xml | 13 ++++
.../groovyScripts/template/DocTypeTemplate.groovy | 70 ++++++++++++++++++++++
.../datamodel/data/demo/AccountingDemoData.xml | 4 ++
applications/datamodel/data/demo/OrderDemoData.xml | 10 ++++
.../order/widget/ordermgr/OrderPrintScreens.xml | 13 ++++
.../order/widget/ordermgr/QuoteScreens.xml | 15 +++++
6 files changed, 125 insertions(+)
diff --git a/applications/accounting/widget/AccountingPrintScreens.xml b/applications/accounting/widget/AccountingPrintScreens.xml
index 27bf329d74..763585972c 100644
--- a/applications/accounting/widget/AccountingPrintScreens.xml
+++ b/applications/accounting/widget/AccountingPrintScreens.xml
@@ -25,6 +25,19 @@ under the License.
<!-- generate a PDF for the invoice. Sharing the same script file as the HTML page for viewing invoice -->
<screen name="InvoicePDF">
+ <section>
+ <actions>
+ <set field="defaultTemplateLocation" value="component://accounting/widget/AccountingPrintScreens.xml"/>
+ <set field="defaultTemplateName" value="DefaultInvoicePDF"/>
+ <script location="component://commonext/groovyScripts/template/DocTypeTemplate.groovy"/>
+ </actions>
+ <widgets>
+ <include-screen name="${templateName}" location="${templateLocation}"/>
+ </widgets>
+ </section>
+ </screen>
+
+ <screen name="DefaultInvoicePDF">
<section>
<actions>
<property-map resource="AccountingUiLabels" map-name="uiLabelMap" global="true"/>
diff --git a/applications/commonext/groovyScripts/template/DocTypeTemplate.groovy b/applications/commonext/groovyScripts/template/DocTypeTemplate.groovy
new file mode 100644
index 0000000000..1c5986392d
--- /dev/null
+++ b/applications/commonext/groovyScripts/template/DocTypeTemplate.groovy
@@ -0,0 +1,70 @@
+package org.apache.ofbiz.common.template
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.ofbiz.entity.GenericValue
+import org.apache.ofbiz.entity.model.ModelUtil
+
+def getFieldTypeName(String entityName) {
+ return ModelUtil.lowerFirstChar(entityName) + 'Id'
+}
+
+/**
+ * For a entityTypeName and a value return the matching templating document screen
+ * If no value found, do a recursive search on parentType
+ */
+def getCustomScreenTemplate(String entityTypeName, String fieldTypeValue) {
+ if (! fieldTypeValue) {
+ return null
+ }
+ GenericValue tplCustScreen = from("PartyPrefDocTypeTplAndCustomScreen")
+ .where(getFieldTypeName(entityTypeName), fieldTypeValue)
+ .cache()
+ .queryFirst()
+ if (tplCustScreen) {
+ return tplCustScreen
+ }
+ // No template found for this type, try if the parent had
+ String parentTypeValue = from(entityTypeName).where().cache().queryFirst().parentTypeId
+ return getCustomScreenTemplate(entityTypeName, parentTypeValue)
+}
+
+// first resolve the document reference passed on the context
+String entityName = ""
+String entityTypeName = ""
+if (parameters.orderId) {
+ entityName = "OrderHeader"
+ entityTypeName = "OrderType"
+} else if (parameters.invoiceId) {
+ entityName ="Invoice"
+} else if (parameters.quoteId) {
+ entityName = "Quote"
+}
+
+// second ask for this entity the custom screen to use
+GenericValue tplCustScreen
+if (entityName) {
+ entityTypeName = entityTypeName ?: entityName + 'Type'
+ GenericValue entityValue = from(entityName).where(parameters).queryOne()
+ if (entityValue) {
+ tplCustScreen = getCustomScreenTemplate(entityTypeName, entityValue[getFieldTypeName(entityTypeName)])
+ }
+}
+context.templateLocation = tplCustScreen ? tplCustScreen.customScreenLocation : context.defaultTemplateLocation
+context.templateName = tplCustScreen ? tplCustScreen.customScreenName : context.defaultTemplateName
diff --git a/applications/datamodel/data/demo/AccountingDemoData.xml b/applications/datamodel/data/demo/AccountingDemoData.xml
index 1909d92cf4..7ef3ec5add 100644
--- a/applications/datamodel/data/demo/AccountingDemoData.xml
+++ b/applications/datamodel/data/demo/AccountingDemoData.xml
@@ -1609,5 +1609,9 @@ under the License.
<InventoryItem facilityId="WebStoreWarehouse" locationSeqId="TLTLTLUL01" datetimeReceived="2008-08-01 08:00:00.000"
inventoryItemId="9030" inventoryItemTypeId="NON_SERIAL_INV_ITEM" productId="MAT_B_COST" ownerPartyId="Company" currencyUomId="USD" unitCost="7.0"/>
<InventoryItemDetail inventoryItemId="9030" inventoryItemDetailSeqId="0001" effectiveDate="2001-05-13 12:00:00.0" availableToPromiseDiff="20" quantityOnHandDiff="20" accountingQuantityDiff="20"/>
+
+ <!-- defaut template screen use for Company -->
+ <CustomScreen customScreenId="DEFAULT_INV_TPL" customScreenTypeId="CST_INVOICE_TPL" customScreenName="DefaultInvoicePDF" customScreenLocation="component://accounting/widget/AccountingPrintScreens.xml"/>
+ <PartyPrefDocTypeTpl partyPrefDocTypeTplId="InvTplInvoice" partyId="Company" fromDate="2001-05-13 00:00:00" invoiceTypeId="INVOICE" customScreenId="DEFAULT_INV_TPL"/>
</entity-engine-xml>
diff --git a/applications/datamodel/data/demo/OrderDemoData.xml b/applications/datamodel/data/demo/OrderDemoData.xml
index e0785c2f0e..1cbe72d2a4 100644
--- a/applications/datamodel/data/demo/OrderDemoData.xml
+++ b/applications/datamodel/data/demo/OrderDemoData.xml
@@ -2600,5 +2600,15 @@ under the License.
<AgreementTerm agreementId="AGR_SALES" agreementItemSeqId="00001" agreementTermId="9000" description="Sales test agreement" termDays="30" termTypeId="FIN_PAYMENT_FIXDAY"/>
<!-- An AgreementProductAppls aris related to an AgreementItem. AgreementProductAppls are optional. If a product id and a price are specified the price will override the ProductPrice if the agreement is selected in the order -->
<AgreementProductAppl agreementId="AGR_SALES" agreementItemSeqId="00001" price="10.000" productId="GZ-1000"/>
+
+ <CustomScreen customScreenId="DEFAULT_ORD_TPL" customScreenTypeId="CST_ORDER_TPL" customScreenName="DefaultOrderPDF" customScreenLocation="component://order/widget/ordermgr/OrderPrintScreens.xml"/>
+ <PartyPrefDocTypeTpl partyPrefDocTypeTplId="OrdTplSales" partyId="Company" fromDate="2001-05-13 00:00:00" orderTypeId="SALES_ORDER" customScreenId="DEFAULT_ORD_TPL"/>
+ <PartyPrefDocTypeTpl partyPrefDocTypeTplId="OrdTplPurchase" partyId="Company" fromDate="2001-05-13 00:00:00" orderTypeId="PURCHASE_ORDER" customScreenId="DEFAULT_ORD_TPL"/>
+
+ <CustomScreen customScreenId="DEFAULT_QUOTE_TPL" customScreenTypeId="CST_QUOTE_TPL" customScreenName="DefaultQuotePDF" customScreenLocation="component://order/widget/ordermgr/QuoteScreens.xml"/>
+ <PartyPrefDocTypeTpl partyPrefDocTypeTplId="QuoTplOther" partyId="Company" fromDate="2001-05-13 00:00:00" quoteTypeId="OTHER_QUOTE" customScreenId="DEFAULT_QUOTE_TPL"/>
+ <PartyPrefDocTypeTpl partyPrefDocTypeTplId="QuoTplProposal" partyId="Company" fromDate="2001-05-13 00:00:00" quoteTypeId="PROPOSAL" customScreenId="DEFAULT_QUOTE_TPL"/>
+ <PartyPrefDocTypeTpl partyPrefDocTypeTplId="QuoTplProduct" partyId="Company" fromDate="2001-05-13 00:00:00" quoteTypeId="PRODUCT_QUOTE" customScreenId="DEFAULT_QUOTE_TPL"/>
+ <PartyPrefDocTypeTpl partyPrefDocTypeTplId="QuoTplPurchase" partyId="Company" fromDate="2001-05-13 00:00:00" quoteTypeId="PURCHASE_QUOTE" customScreenId="DEFAULT_QUOTE_TPL"/>
</entity-engine-xml>
diff --git a/applications/order/widget/ordermgr/OrderPrintScreens.xml b/applications/order/widget/ordermgr/OrderPrintScreens.xml
index 079c8126dd..0ed42615bf 100644
--- a/applications/order/widget/ordermgr/OrderPrintScreens.xml
+++ b/applications/order/widget/ordermgr/OrderPrintScreens.xml
@@ -25,6 +25,19 @@ under the License.
<!-- generate a PDF for the order, sharing the same groovy file as the HTML page for viewing the order -->
<screen name="OrderPDF">
+ <section>
+ <actions>
+ <set field="defaultTemplateLocation" value="component://order/widget/ordermgr/OrderPrintScreens.xml"/>
+ <set field="defaultTemplateName" value="DefaultOrderPDF"/>
+ <script location="component://commonext/groovyScripts/template/DocTypeTemplate.groovy"/>
+ </actions>
+ <widgets>
+ <include-screen name="${templateName}" location="${templateLocation}"/>
+ </widgets>
+ </section>
+ </screen>
+
+ <screen name="DefaultOrderPDF">
<section>
<actions>
<set field="titleProperty" value="OrderOrder" />
diff --git a/applications/order/widget/ordermgr/QuoteScreens.xml b/applications/order/widget/ordermgr/QuoteScreens.xml
index b25d31568d..bb12241bc2 100644
--- a/applications/order/widget/ordermgr/QuoteScreens.xml
+++ b/applications/order/widget/ordermgr/QuoteScreens.xml
@@ -156,7 +156,22 @@ under the License.
</widgets>
</section>
</screen>
+
+ <!-- generate a PDF for the quote -->
<screen name="QuoteReport">
+ <section>
+ <actions>
+ <set field="defaultTemplateLocation" value="component://order/widget/ordermgr/QuoteScreens.xml"/>
+ <set field="defaultTemplateName" value="DefaultQuotePDF"/>
+ <script location="component://commonext/groovyScripts/template/DocTypeTemplate.groovy"/>
+ </actions>
+ <widgets>
+ <include-screen name="${templateName}" location="${templateLocation}"/>
+ </widgets>
+ </section>
+ </screen>
+
+ <screen name="DefaultQuotePDF">
<section>
<actions>
<set field="titleProperty" value="OrderOrderQuoteReport"/>