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 2018/07/03 21:58:32 UTC

svn commit: r1835028 - in /ofbiz/ofbiz-framework/trunk/applications: accounting/groovyScripts/invoice/ accounting/src/main/java/org/apache/ofbiz/accounting/invoice/ accounting/template/invoice/ accounting/widget/ datamodel/entitydef/

Author: nmalin
Date: Tue Jul  3 21:58:32 2018
New Revision: 1835028

URL: http://svn.apache.org/viewvc?rev=1835028&view=rev
Log:
Improved: Resolve shipping address from Invoice
(OFBIZ-10249)
In some country (like european) you need to indicate on your sales invoice where you ship the finish good product related.
To help this case, I added a new worker function (InvoiceWorker.getShippingAddress) to found information from an invoice and improve the generic EditInvoice.groovy and the invoice ftl template to display it as example.
To homogenize postal address displaying with order I use the subscreen PartyScreens.xml#postalAddressPdfFormatter on the invoice ftl template

Modified:
    ofbiz/ofbiz-framework/trunk/applications/accounting/groovyScripts/invoice/EditInvoice.groovy
    ofbiz/ofbiz-framework/trunk/applications/accounting/src/main/java/org/apache/ofbiz/accounting/invoice/InvoiceWorker.java
    ofbiz/ofbiz-framework/trunk/applications/accounting/template/invoice/InvoiceReportContactMechs.fo.ftl
    ofbiz/ofbiz-framework/trunk/applications/accounting/widget/AccountingPrintScreens.xml
    ofbiz/ofbiz-framework/trunk/applications/datamodel/entitydef/accounting-entitymodel.xml

Modified: ofbiz/ofbiz-framework/trunk/applications/accounting/groovyScripts/invoice/EditInvoice.groovy
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/accounting/groovyScripts/invoice/EditInvoice.groovy?rev=1835028&r1=1835027&r2=1835028&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/applications/accounting/groovyScripts/invoice/EditInvoice.groovy (original)
+++ ofbiz/ofbiz-framework/trunk/applications/accounting/groovyScripts/invoice/EditInvoice.groovy Tue Jul  3 21:58:32 2018
@@ -49,6 +49,8 @@ if (invoice) {
     context.billToParty = billToParty
     sendingParty = InvoiceWorker.getSendFromParty(invoice)
     context.sendingParty = sendingParty
+    shippingAddress = InvoiceWorker.getShippingAddress(invoice)
+    context.shippingAddress = shippingAddress
 
     if (currency && !invoice.getString("currencyUomId").equals(currency)) {
         conversionRate = InvoiceWorker.getInvoiceCurrencyConversionRate(invoice)

Modified: ofbiz/ofbiz-framework/trunk/applications/accounting/src/main/java/org/apache/ofbiz/accounting/invoice/InvoiceWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/accounting/src/main/java/org/apache/ofbiz/accounting/invoice/InvoiceWorker.java?rev=1835028&r1=1835027&r2=1835028&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/applications/accounting/src/main/java/org/apache/ofbiz/accounting/invoice/InvoiceWorker.java (original)
+++ ofbiz/ofbiz-framework/trunk/applications/accounting/src/main/java/org/apache/ofbiz/accounting/invoice/InvoiceWorker.java Tue Jul  3 21:58:32 2018
@@ -316,6 +316,31 @@ public final class InvoiceWorker {
     }
 
     /**
+      * Method to obtain the shipping address from an invoice
+      * first resolve from InvoiceContactMech and if not found try from Shipment if present
+      * @param invoice GenericValue object of the Invoice
+      * @return GenericValue object of the PostalAddress
+      */
+    public static GenericValue getShippingAddress(GenericValue invoice) {
+        GenericValue postalAddress = getInvoiceAddressByType(invoice, "SHIPPING_LOCATION", false);
+        Delegator delegator = invoice.getDelegator();
+        if (postalAddress == null) {
+            try {
+                GenericValue shipmentView = EntityQuery.use(delegator).from("InvoiceItemAndShipmentView")
+                        .where("invoiceId", invoice.get("invoiceId")).queryFirst();
+                if (shipmentView != null) {
+                    GenericValue shipment = EntityQuery.use(delegator).from("Shipment")
+                        .where("shipmentId", shipmentView.get("shipmentId")).queryOne();
+                    postalAddress = shipment.getRelatedOne("DestinationPostalAddress");
+                }
+            } catch (GenericEntityException e) {
+                Debug.logError("Touble getting ContactMech entity from OISG", module);
+            }
+        }
+        return postalAddress;
+    }
+
+    /**
       * Method to obtain the billing address for an invoice
       * @param invoice GenericValue object of the Invoice
       * @return GenericValue object of the PostalAddress

Modified: ofbiz/ofbiz-framework/trunk/applications/accounting/template/invoice/InvoiceReportContactMechs.fo.ftl
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/accounting/template/invoice/InvoiceReportContactMechs.fo.ftl?rev=1835028&r1=1835027&r2=1835028&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/applications/accounting/template/invoice/InvoiceReportContactMechs.fo.ftl (original)
+++ ofbiz/ofbiz-framework/trunk/applications/accounting/template/invoice/InvoiceReportContactMechs.fo.ftl Tue Jul  3 21:58:32 2018
@@ -19,26 +19,24 @@ under the License.
 <#escape x as x?xml>
 <fo:table table-layout="fixed" width="100%" space-after="0.3in">
    <fo:table-column column-width="3.5in"/>
+   <fo:table-column column-width="3.5in"/>
     <fo:table-body>
       <fo:table-row >
         <fo:table-cell>
           <fo:block>_______________________________</fo:block>
       </fo:table-cell>
+        <fo:table-cell>
+          <fo:block>_______________________________</fo:block>
+      </fo:table-cell>
     </fo:table-row>
       <fo:table-row >
         <fo:table-cell>
           <fo:block>${uiLabelMap.CommonTo}: </fo:block>
-            <#if billingAddress?has_content>
+            <#if billingAddress??>
                 <#assign billToPartyNameResult = dispatcher.runSync("getPartyNameForDate", Static["org.apache.ofbiz.base.util.UtilMisc"].toMap("partyId", billToParty.partyId, "compareDate", invoice.invoiceDate, "userLogin", userLogin))/>
                 <fo:block>${billToPartyNameResult.fullName?default(billingAddress.toName)?default("Billing Name Not Found")}</fo:block>
-                <#if billingAddress.attnName??>
-                    <fo:block>${billingAddress.attnName}</fo:block>
-                </#if>
-                    <fo:block>${billingAddress.address1!}</fo:block>
-                <#if billingAddress.address2??>
-                    <fo:block>${billingAddress.address2}</fo:block>
-                </#if>
-                <fo:block>${billingAddress.city!} ${billingAddress.stateProvinceGeoId!} ${billingAddress.postalCode!}</fo:block>
+                ${setContextField("postalAddress", billingAddress)}
+                ${screens.render("component://party/widget/partymgr/PartyScreens.xml#postalAddressPdfFormatter")}
                 <#if billToPartyTaxId?has_content>
                     <fo:block>${uiLabelMap.PartyTaxId}: ${billToPartyTaxId}</fo:block>
                 </#if>
@@ -46,6 +44,16 @@ under the License.
                 <fo:block>${uiLabelMap.AccountingNoGenBilAddressFound}${billToParty.partyId}</fo:block>
             </#if>
        </fo:table-cell>
+        <fo:table-cell>
+            <#if shippingAddress??>
+                <fo:block>${uiLabelMap.OrderShipTo}: </fo:block>
+                ${setContextField("postalAddress", shippingAddress)}
+                ${screens.render("component://party/widget/partymgr/PartyScreens.xml#postalAddressPdfFormatter")}
+            <#else>
+                <fo:block/>
+            </#if>
+       </fo:table-cell>
+
     </fo:table-row>
   </fo:table-body>
 </fo:table>

Modified: ofbiz/ofbiz-framework/trunk/applications/accounting/widget/AccountingPrintScreens.xml
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/accounting/widget/AccountingPrintScreens.xml?rev=1835028&r1=1835027&r2=1835028&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/applications/accounting/widget/AccountingPrintScreens.xml (original)
+++ ofbiz/ofbiz-framework/trunk/applications/accounting/widget/AccountingPrintScreens.xml Tue Jul  3 21:58:32 2018
@@ -30,6 +30,7 @@ under the License.
                 <property-map resource="AccountingUiLabels" map-name="uiLabelMap" global="true"/>
                 <property-map resource="ProductUiLabels" map-name="uiLabelMap" global="true"/>
                 <property-map resource="PartyUiLabels" map-name="uiLabelMap" global="true"/>
+                <property-map resource="OrderUiLabels" map-name="uiLabelMap" global="true"/>
                 <property-map resource="CommonUiLabels" map-name="uiLabelMap" global="true"/>
                 <set field="titleProperty" value="AccountingInvoice"/>
                 <script location="component://accounting/groovyScripts/invoice/EditInvoice.groovy"/>

Modified: ofbiz/ofbiz-framework/trunk/applications/datamodel/entitydef/accounting-entitymodel.xml
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/datamodel/entitydef/accounting-entitymodel.xml?rev=1835028&r1=1835027&r2=1835028&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/applications/datamodel/entitydef/accounting-entitymodel.xml (original)
+++ ofbiz/ofbiz-framework/trunk/applications/datamodel/entitydef/accounting-entitymodel.xml Tue Jul  3 21:58:32 2018
@@ -1707,6 +1707,24 @@ under the License.
             <key-map field-name="invoiceItemSeqId"/>
         </view-link>
     </view-entity>
+    <view-entity entity-name="InvoiceItemAndShipmentView" package-name="org.apache.ofbiz.accounting.invoice">
+        <member-entity entity-alias="INVITM" entity-name="InvoiceItem"/>
+        <member-entity entity-alias="ORDBIL" entity-name="OrderItemBilling"/>
+        <member-entity entity-alias="ITMISS" entity-name="ItemIssuance"/>
+        <member-entity entity-alias="SHIP" entity-name="Shipment"/>
+        <alias-all entity-alias="INVITM"/>
+        <alias-all entity-alias="SHIP"/>
+        <view-link entity-alias="INVITM" rel-entity-alias="ORDBIL">
+            <key-map field-name="invoiceId"/>
+            <key-map field-name="invoiceItemSeqId"/>
+        </view-link>
+        <view-link entity-alias="ORDBIL" rel-entity-alias="ITMISS">
+            <key-map field-name="itemIssuanceId"/>
+        </view-link>
+        <view-link entity-alias="ITMISS" rel-entity-alias="SHIP">
+            <key-map field-name="shipmentId"/>
+        </view-link>
+    </view-entity>
 
     <view-entity entity-name="InvoiceContentAndInfo"
             package-name="org.apache.ofbiz.accounting.invoice"