Use task queue to process sale and purchase

issue7463
issue7460
review50441002
This commit is contained in:
Cédric Krier committed 2018-07-27 09:27:11 +02:00
1 parent 60f50f8542
commit ff190a1ac6
2 files changed
+9 -31

No files matched your search

+2 -2
View File
@@ -260,7 +260,7 @@ class PurchaseHandleShipmentException(metaclass=PoolMeta):
sales.add(sale_line.sale)
if moves:
Move.cancel(list(moves))
Move.cancel(moves)
if sales:
Sale.process(list(sales))
Sale.__queue__.process(sales)
return 'end'
+7 -29
View File
@@ -14,6 +14,9 @@ from trytond.pool import Pool, PoolMeta
from trytond.transaction import Transaction
from trytond.tools import grouped_slice, cursor_dict
from trytond.modules.sale.stock import process_sale
from trytond.modules.purchase.stock import process_purchase
__all__ = ['Configuration', 'ConfigurationSequence', 'ShipmentDrop', 'Move']
@@ -341,38 +344,9 @@ class ShipmentDrop(Workflow, ModelSQL, ModelView):
@classmethod
def write(cls, *args):
pool = Pool()
Purchase = pool.get('purchase.purchase')
PurchaseLine = pool.get('purchase.line')
Sale = pool.get('sale.sale')
SaleLine = pool.get('sale.line')
super(ShipmentDrop, cls).write(*args)
cls._set_move_planned_date(sum(args[::2], []))
actions = iter(args)
for shipments, values in zip(actions, actions):
if values.get('state', '') not in ('done', 'cancel'):
continue
with Transaction().set_context(_check_access=False):
move_ids = [m.id for s in shipments for m in s.customer_moves]
sale_lines = []
for sub_moves in grouped_slice(move_ids):
sale_lines += SaleLine.search([
('moves', 'in', list(sub_moves)),
])
sales = list(set(l.sale for l in sale_lines or []))
Sale.process(sales)
move_ids = [m.id for s in shipments for m in s.supplier_moves]
purchase_lines = []
for sub_moves in grouped_slice(move_ids):
purchase_lines += PurchaseLine.search([
('moves', 'in', move_ids),
])
purchases = list(set(l.purchase for l in purchase_lines or []))
Purchase.process(purchases)
@classmethod
def copy(cls, shipments, default=None):
if default is None:
@@ -398,6 +372,8 @@ class ShipmentDrop(Workflow, ModelSQL, ModelView):
@classmethod
@ModelView.button
@Workflow.transition('cancel')
@process_sale('customer_moves')
@process_purchase('supplier_moves')
def cancel(cls, shipments):
Move = Pool().get('stock.move')
Move.cancel([m for s in shipments for m in s.supplier_moves])
@@ -558,6 +534,7 @@ class ShipmentDrop(Workflow, ModelSQL, ModelView):
@classmethod
@ModelView.button
@Workflow.transition('shipped')
@process_purchase('supplier_moves')
def ship(cls, shipments):
pool = Pool()
Move = pool.get('stock.move')
@@ -567,6 +544,7 @@ class ShipmentDrop(Workflow, ModelSQL, ModelView):
@classmethod
@ModelView.button
@Workflow.transition('done')
@process_sale('customer_moves')
def done(cls, shipments):
pool = Pool()
Move = pool.get('stock.move')