Use unique shipment and origin on Move

issue2642
review717002
This commit is contained in:
Cédric Krier committed 2013-03-23 15:41:42 +01:00
1 parent e218026cd2
commit 62cfe860e1
2 files changed
+56 -16

No files matched your search

+37 -5
View File
@@ -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
+19 -11
View File
@@ -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',)]