Use unique shipment and origin on Move
issue2642 review717002
This commit is contained in:
1 parent
e218026cd2
commit
62cfe860e1
2 files changed
+56
-16
No files matched your search
@@ -22,8 +22,9 @@ class Sale:
|
||||
'get_drop_shipments')
|
||||
|
||||
def get_drop_shipments(self, name):
|
||||
return list(set(m.shipment_drop.id for l in self.lines for m in l.moves
|
||||
if m.shipment_drop))
|
||||
DropShipment = Pool().get('stock.shipment.drop')
|
||||
return list(set(m.shipment.id for l in self.lines for m in l.moves
|
||||
if isinstance(m.shipment, DropShipment)))
|
||||
|
||||
def create_shipment(self, shipment_type):
|
||||
shipments = super(Sale, self).create_shipment(shipment_type)
|
||||
@@ -147,7 +148,38 @@ class SaleLine:
|
||||
if line.purchase_request.purchase_line:
|
||||
moves = [m
|
||||
for m in line.purchase_request.purchase_line.moves
|
||||
if m.state == 'draft' and not m.shipment_drop]
|
||||
for move in moves:
|
||||
move.sale_line = self
|
||||
if m.state == 'draft' and not m.shipment]
|
||||
return moves
|
||||
|
||||
@classmethod
|
||||
def read(cls, ids, fields_names=None):
|
||||
# Add moves from purchase_request as they can have only one origin
|
||||
PurchaseRequest = Pool().get('purchase.request')
|
||||
added = False
|
||||
if 'moves' in fields_names or []:
|
||||
if 'purchase_request' not in fields_names:
|
||||
fields_names = fields_names[:]
|
||||
fields_names.append('purchase_request')
|
||||
added = True
|
||||
values = super(SaleLine, cls).read(ids, fields_names=fields_names)
|
||||
if 'moves' in fields_names or []:
|
||||
with Transaction().set_user(0, set_context=True):
|
||||
purchase_requests = PurchaseRequest.browse(
|
||||
list(set(v['purchase_request']
|
||||
for v in values if v['purchase_request'])))
|
||||
id2purchase_requests = dict((p.id, p)
|
||||
for p in purchase_requests)
|
||||
for value in values:
|
||||
if value['purchase_request']:
|
||||
purchase_request = id2purchase_requests[
|
||||
value['purchase_request']]
|
||||
if purchase_request.purchase_line:
|
||||
move_ids = tuple(m.id
|
||||
for m in purchase_request.purchase_line.moves)
|
||||
if value['moves'] is None:
|
||||
value['moves'] = move_ids
|
||||
else:
|
||||
value['moves'] += move_ids
|
||||
if added:
|
||||
del value['purchase_request']
|
||||
return values
|
||||
@@ -67,9 +67,9 @@ class ShipmentDrop(Workflow, ModelSQL, ModelView):
|
||||
},
|
||||
domain=[('party', '=', Eval('customer'))],
|
||||
depends=['state', 'customer'])
|
||||
moves = fields.One2Many('stock.move', 'shipment_drop', 'Moves',
|
||||
moves = fields.One2Many('stock.move', 'shipment', 'Moves',
|
||||
add_remove=[
|
||||
('shipment_drop', '=', False),
|
||||
('shipment', '=', None),
|
||||
('state', '=', 'draft'),
|
||||
('supplier', '=', Eval('supplier')),
|
||||
('customer_drop', '=', Eval('customer')),
|
||||
@@ -229,12 +229,14 @@ class ShipmentDrop(Workflow, ModelSQL, ModelView):
|
||||
@ModelView.button
|
||||
@Workflow.transition('draft')
|
||||
def draft(cls, shipments):
|
||||
Move = Pool().get('stock.move')
|
||||
pool = Pool()
|
||||
Move = pool.get('stock.move')
|
||||
PurchaseLine = pool.get('purchase.line')
|
||||
SaleLine = pool.get('sale.line')
|
||||
for shipment in shipments:
|
||||
for move in shipment.moves:
|
||||
if (move.state == 'cancel'
|
||||
and (move.purchase_line
|
||||
or move.sale_line)):
|
||||
and isinstance(move.origin, (PurchaseLine, SaleLine))):
|
||||
cls.raise_user_error('reset_move', (move.rec_name,))
|
||||
Move.draft([m for s in shipments for m in s.moves])
|
||||
|
||||
@@ -260,17 +262,23 @@ class ShipmentDrop(Workflow, ModelSQL, ModelView):
|
||||
class Move:
|
||||
__name__ = 'stock.move'
|
||||
|
||||
shipment_drop = fields.Many2One('stock.shipment.drop', 'Drop Shipment',
|
||||
readonly=True, select=1, ondelete='CASCADE',
|
||||
domain=[('company', '=', Eval('company'))], depends=['company'])
|
||||
customer_drop = fields.Function(fields.Many2One('party.party',
|
||||
'Drop Customer'), 'get_customer_drop',
|
||||
searcher='search_customer_drop')
|
||||
|
||||
@classmethod
|
||||
def _get_shipment(cls):
|
||||
models = super(Move, cls)._get_shipment()
|
||||
models.append('stock.shipment.drop')
|
||||
return models
|
||||
|
||||
def get_customer_drop(self, name):
|
||||
if self.purchase_line and self.purchase_line.purchase.customer:
|
||||
return self.purchase_line.purchase.customer.id
|
||||
PurchaseLine = Pool().get('purchase.line')
|
||||
if (isinstance(self.origin, PurchaseLine)
|
||||
and self.origin.purchase.customer):
|
||||
return self.origin.purchase.customer.id
|
||||
|
||||
@classmethod
|
||||
def search_customer_drop(cls, name, clause):
|
||||
return [('purchase_line.purchase.customer',) + tuple(clause[1:])]
|
||||
return [('origin.purchase.customer',) + tuple(clause[1:])
|
||||
+ ('purchase.line',)]
|
||||
Reference in new issue
Block a user