details: https://code.tryton.org/tryton/commit/eda700aaa0c7
branch: 7.0
user: Cédric Krier <[email protected]>
date: Thu Sep 10 14:22:34 2026 +0200
description:
Replace typing of stock move origin by sale and purchase Function field
The origin may not always be a sale or purchase line like with product
kit.
So such test must be extendable by other modules implicitly. This can be
achieved by using the Function fields.
Closes #15084
(grafted from 84761faccad43bc56a11a2e8bb8cf2977ba8e8db)
diffstat:
modules/purchase/stock.py | 8 ++------
modules/sale/stock.py | 8 ++------
modules/sale_advance_payment/stock.py | 9 ++++-----
3 files changed, 8 insertions(+), 17 deletions(-)
diffs (78 lines):
diff -r cab4ef5c7c83 -r eda700aaa0c7 modules/purchase/stock.py
--- a/modules/purchase/stock.py Thu Sep 10 08:11:03 2026 +0200
+++ b/modules/purchase/stock.py Thu Sep 10 14:22:34 2026 +0200
@@ -52,11 +52,9 @@
@ModelView.button
@Workflow.transition('draft')
def draft(cls, shipments):
- PurchaseLine = Pool().get('purchase.line')
for shipment in shipments:
for move in shipment.incoming_moves:
- if (move.state == 'cancelled'
- and isinstance(move.origin, PurchaseLine)):
+ if move.state == 'cancelled' and move.purchase:
raise AccessError(
gettext('purchase.msg_purchase_move_reset_draft',
move=move.rec_name))
@@ -91,11 +89,9 @@
@ModelView.button
@Workflow.transition('draft')
def draft(cls, shipments):
- PurchaseLine = Pool().get('purchase.line')
for shipment in shipments:
for move in shipment.moves:
- if (move.state == 'cancelled'
- and isinstance(move.origin, PurchaseLine)):
+ if move.state == 'cancelled' and move.purchase:
raise AccessError(
gettext('purchase.msg_purchase_move_reset_draft',
move=move.rec_name))
diff -r cab4ef5c7c83 -r eda700aaa0c7 modules/sale/stock.py
--- a/modules/sale/stock.py Thu Sep 10 08:11:03 2026 +0200
+++ b/modules/sale/stock.py Thu Sep 10 14:22:34 2026 +0200
@@ -38,11 +38,9 @@
@ModelView.button
@Workflow.transition('draft')
def draft(cls, shipments):
- SaleLine = Pool().get('sale.line')
for shipment in shipments:
for move in shipment.outgoing_moves:
- if (move.state == 'cancelled'
- and isinstance(move.origin, SaleLine)):
+ if move.state == 'cancelled' and move.sale:
raise AccessError(
gettext('sale.msg_sale_move_reset_draft',
move=move.rec_name))
@@ -71,11 +69,9 @@
@ModelView.button
@Workflow.transition('draft')
def draft(cls, shipments):
- SaleLine = Pool().get('sale.line')
for shipment in shipments:
for move in shipment.incoming_moves:
- if (move.state == 'cancelled'
- and isinstance(move.origin, SaleLine)):
+ if move.state == 'cancelled' and move.sale:
raise AccessError(
gettext('sale.msg_sale_move_reset_draft',
move=move.rec_name))
diff -r cab4ef5c7c83 -r eda700aaa0c7 modules/sale_advance_payment/stock.py
--- a/modules/sale_advance_payment/stock.py Thu Sep 10 08:11:03 2026 +0200
+++ b/modules/sale_advance_payment/stock.py Thu Sep 10 14:22:34 2026 +0200
@@ -17,12 +17,11 @@
def pack(cls, shipments):
pool = Pool()
Sale = pool.get('sale.sale')
- SaleLine = pool.get('sale.line')
- sales = {move.origin.sale
- for shipment in shipments for move in shipment.moves
- if isinstance(move.origin, SaleLine)}
- for sale in Sale.browse([s.id for s in sales]):
+ sales = {
+ move.sale for shipment in shipments for move in shipment.moves
+ if move.sale}
+ for sale in Sale.browse(sales):
if sale.shipping_blocked:
raise ShippingBlocked(
gettext('sale_advance_payment.msg_shipping_blocked',