You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ofbiz.apache.org by "Nicolas Malin (Jira)" <ji...@apache.org> on 2026/06/26 15:34:00 UTC

[jira] [Assigned] (OFBIZ-13449) Incorrect unit price calculation during PO receiving due to Locale issues (String to BigDecimal parsing bug in ShipmentReceiptServices.xml)

     [ https://issues.apache.org/jira/browse/OFBIZ-13449?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Nicolas Malin reassigned OFBIZ-13449:
-------------------------------------

    Assignee: Nicolas Malin

> Incorrect unit price calculation during PO receiving due to Locale issues (String to BigDecimal parsing bug in ShipmentReceiptServices.xml)
> -------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: OFBIZ-13449
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-13449
>             Project: OFBiz
>          Issue Type: Bug
>            Reporter: Tomek
>            Assignee: Nicolas Malin
>            Priority: Major
>
> I have encountered a significant localization bug during the purchase order receiving process in Apache OFBiz. When using non-US regional settings (specifically Polish locale, where the decimal separator is a comma `,` instead of a dot `.`), the unit price of an item gets multiplied incorrectly (e.g., 7.410 becomes 741.00) after completing the receipt. 
> Steps to reproduce: 
> 1. Set the system/user profile locale to Polish (pl_PL). 
> 2. Create a new Purchase Order: select an organization, vendor, currency (PLN), and a product catalog. 
> 3. Add a test product to the order with a quantity of 1 and a unit price of 7.410. 
> 4. Click "Finalize order" -> "Continue" -> select a warehouse location -> click "Continue" and finalize with "Create Order". 
> 5. Approve the order. The order details screen correctly shows the unit price as 7,41 PLN and Total Due as 7,41 PLN. 
> 6. Click "Quick Receive Purchase Order". 
> 7. Choose the shipment to receive and click "Receive Selected Shipment". 
> 8. On the receiving form, verify the fields: Qty Accepted: 1, Per Unit Price: 7,41 PLN. Click "Receive Selected Product(s)". 
> 9. In the "Receipt(s) For Purchase Order" screen, the "Per Unit Price" is displayed as 7.410. Click the PO identifier link to return to the order view. 
> 10. Review the order items: the "Unit / List" column now incorrectly displays 741.00 PLN (multiplied by 100). The Items SubTotal and Total Due are also bloated to 741.00 PLN. 
> Root Cause: 
> In the `updateIssuanceShipmentAndPoOnReceiveInventory` service definition, the attributes `unitCost` and `orderCurrencyUnitPrice` are defined as `String`. When the Groovy service parses these string values into numerical objects, it encounters a formatting mismatch due to the active regional settings (Locale), shifting the decimal threshold and corrupting the monetary values. 
> Proposed Solution: 
> Change the data type of `unitCost` and `orderCurrencyUnitPrice` attributes from `String` to `BigDecimal` directly in the service definition. This forces the OFBiz framework to handle the type conversion natively and safely before passing it to the Groovy implementation layer. 
> File: applications/product/servicedef/services_shipment.xml 
> Modified Fragment: 
> <service name="updateIssuanceShipmentAndPoOnReceiveInventory" engine="groovy" 
> location="component://product/src/main/groovy/org/apache/ofbiz/product/shipment/ShipmentReceiptServices.groovy" invoke="updateIssuanceShipmentAndPoOnReceiveInventory"> 
>         <description>Update issuance, shipment and order items if quantity received is higher than quantity on purchase order</description> 
>         ... 
>         <attribute name="unitCost" type="BigDecimal" mode="IN" optional="true"/> 
>         <attribute name="orderCurrencyUnitPrice" type="BigDecimal" mode="IN" optional="true"/> 
> </service> 
> This modification resolves the issue completely and ensures robust handling across different Locales. 
> Best regards, 
> Tomek



--
This message was sent by Atlassian Jira
(v8.20.10#820010)