forked from odoo/odoo
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[FIX] sale_{purchase,stock}, stock: decreasing the ordered qty
In a MTO case, when a salesman decreases the ordered quantity, it can lead to an access error To reproduce the issue: (Use demo data) 1. In Users, edit Marc Demo: - Invoicing: None - Purchase: None 2. Create a product P: - Type: Storable - Add a vendor V - Routes: - MTO - Buy 3. Log in as Marc Demo 4. Create a sale order SO with 2 x P 5. Confirm SO 6. Edit SO: - Set the qty of P to 1 - ignore the warning 7. Save the SO Error: There is an access error ("create" on "Activity" (mail.activity)) Because the user decreases the quantity, we want to log this decreasing on the related documents: https://github.com/odoo/odoo/blob/ee9ea35ad218be87564de484470f1c4e9c433977/addons/sale_stock/models/sale_order.py#L91-L94 In the above case, it leads to a write operation on the generated purchase order. However, Marc Demo hasn't any right to perform such an operation. We should bypass the rights checking in such situation. Note: in `/sale_stock:SaleOrder.write`: we need to specify what kind of precision we are using. OPW-2745317 closes odoo#90366 X-original-commit: 12f9691 Signed-off-by: William Henrotin (whe) <[email protected]> Signed-off-by: Adrien Widart <[email protected]>
- Loading branch information
Showing
3 changed files
with
82 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
# -*- coding: utf-8 -*- | ||
# Part of Odoo. See LICENSE file for full copyright and licensing details. | ||
|
||
from odoo.tests import tagged | ||
from odoo.addons.sale_purchase.tests.common import TestCommonSalePurchaseNoChart | ||
|
||
|
||
@tagged('post_install', '-at_install') | ||
class TestAccessRights(TestCommonSalePurchaseNoChart): | ||
|
||
@classmethod | ||
def setUpClass(cls): | ||
super(TestAccessRights, cls).setUpClass() | ||
|
||
group_sale_user = cls.env.ref('sales_team.group_sale_salesman') | ||
|
||
cls.user_salesperson = cls.env['res.users'].with_context(no_reset_password=True).create({ | ||
'name': 'Le Grand Jojo User', | ||
'login': 'grand.jojo', | ||
'email': '[email protected]', | ||
'groups_id': [(6, 0, [group_sale_user.id])] | ||
}) | ||
|
||
def test_access_saleperson_decreases_qty(self): | ||
""" | ||
Suppose a user who has no right on PO | ||
Suppose a PO linked to a SO | ||
The user decreases the qty on the SO | ||
This test ensures that an activity (warning) is added to the PO | ||
""" | ||
mto_route = self.env.ref('stock.route_warehouse0_mto') | ||
buy_route = self.env.ref('purchase_stock.route_warehouse0_buy') | ||
mto_route.active = True | ||
|
||
vendor = self.env['res.partner'].create({'name': 'vendor'}) | ||
seller = self.env['product.supplierinfo'].create({ | ||
'name': vendor.id, | ||
'price': 8, | ||
}) | ||
|
||
product = self.env['product.product'].create({ | ||
'name': 'SuperProduct', | ||
'type': 'product', | ||
'seller_ids': [(6, 0, seller.ids)], | ||
'route_ids': [(6, 0, (mto_route + buy_route).ids)] | ||
}) | ||
|
||
so = self.env['sale.order'].with_user(self.user_salesperson).create({ | ||
'partner_id': self.partner_a.id, | ||
'user_id': self.user_salesperson.id, | ||
}) | ||
so_line, _ = self.env['sale.order.line'].create([{ | ||
'name': product.name, | ||
'product_id': product.id, | ||
'product_uom_qty': 1, | ||
'product_uom': product.uom_id.id, | ||
'price_unit': product.list_price, | ||
'tax_id': False, | ||
'order_id': so.id, | ||
}, { | ||
'name': 'Super Section', | ||
'display_type': 'line_section', | ||
'order_id': so.id, | ||
}]) | ||
|
||
so.action_confirm() | ||
|
||
po = self.env['purchase.order'].search([('partner_id', '=', vendor.id)]) | ||
po.button_confirm() | ||
|
||
# salesperson writes on the SO | ||
so.write({ | ||
'order_line': [(1, so_line.id, {'product_uom_qty': 0.9})] | ||
}) | ||
|
||
self.assertIn(so.name, po.activity_ids.note) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters