An error occurred while fetching folder content.
David (dafr)
authored
To reproduce the issue: 1. Create a product: - Type: Storable - Category: - Costing Method: AVCO 2. IN 2 @ 4.63/u 3. IN 5 @ 3.04/u 4. OUT 0.1 5. Repeat step 4 70 time in total, so that the final quantity is 0 6. Open the inventory valuation of the product Error: the total value is $-0.04 instead of $0. The compensation of rounding issue is stuck by a check that ensure we don't erase a valuation error. However, this check can never succeed with small quantities, here is the mathematical proof: °Current check: rounding_error <= qty * curr_rounding / 2 With: 1) rounding_error >= curr_rounding 2) 0 < qty < 2 3) v1 = rounding_error / curr_rounding 4) v2 = qty / 2 We can be sure that: 5) v1 >= 1 because of 1) 6) v2 < 1 because of 2) 7) v1 > v2 because of 5) and 6) ° rounding_error <= qty * curr_rounding / 2 ° rounding_error * curr_rounding <= qty * curr_rounding / 2 * curr_rounding ° rounding_error / curr_rounding <= qty / 2 ° v1 <= v2 ==>> This contradict 7), hence this check can never be True for qty < 2 To fix this issue, we change the check to: ° rounding_error <= qty * curr_rounding / 2 OR rounding_error <= curr_rounding Where the 1st part doesn't change, but the second one is true when rounding_error == curr_rounding closes odoo/odoo#115606 X-original-commit: a76fb7ff Signed-off-by:William Henrotin (whe) <whe@odoo.com> Signed-off-by:
David <dafr@odoo.com>
Name | Last commit | Last update |
---|