sale: Fix invoicing non-line type (issue334001)

2 views
Skip to first unread message

cedric...@b2ck.com

unread,
Apr 19, 2012, 2:22:03 PM4/19/12
to cedric...@b2ck.com, re...@tryton-rietveld.appspotmail.com, tryto...@googlegroups.com
Reviewers: ,

Please review this at http://codereview.tryton.org/334001/

Affected files:
M sale.py


Index: sale.py
===================================================================
--- a/sale.py
+++ b/sale.py
@@ -699,9 +699,7 @@
line_obj = Pool().get('sale.line')
res = {}
for line in sale.lines:
- if (invoice_type == 'out_invoice') != (line.quantity >= 0):
- continue
- val = line_obj.get_invoice_line(line)
+ val = line_obj.get_invoice_line(line, invoice_type)
if val:
res[line.id] = val
return res
@@ -779,13 +777,8 @@
line_obj = Pool().get('sale.line')
res = {}
for line in sale.lines:
- val = line_obj.get_move(line)
- if not val:
- continue
- out_move = (val['to_location']
- == line.sale.party.customer_location.id)
- out_shipment = shipment_type == 'out'
- if out_move == out_shipment:
+ val = line_obj.get_move(line, shipment_type)
+ if val:
res[line.id] = val
return res

@@ -1344,13 +1337,10 @@
line.sale.sale_date)
return dates

- def get_invoice_line(self, line):
+ def get_invoice_line(self, line, invoice_type):
'''
- Return invoice line values for sale line
-
- :param line: the BrowseRecord of the line
-
- :return: a list of invoice line values
+ Return a list of invoice line values for sale line according to
+ invoice_type
'''
uom_obj = Pool().get('product.uom')
property_obj = Pool().get('ir.property')
@@ -1361,7 +1351,17 @@
res['description'] = line.description
res['note'] = line.note
if line.type != 'line':
- return [res]
+ if (line.sale.invoice_method == 'order'
+ and (all(l.quantity >= 0 for l in line.sale.lines
+ if l.type == 'line')
+ or all(l.quantity <= 0 for l in line.sale.lines
+ if l.type == 'line'))):
+ return [res]
+ else:
+ return []
+
+ if (invoice_type == 'out_invoice') != (line.quantity >= 0):
+ return []

if (line.sale.invoice_method == 'order'
or not line.product
@@ -1416,13 +1416,9 @@
default['invoice_lines'] = None
return super(SaleLine, self).copy(ids, default=default)

- def get_move(self, line):
+ def get_move(self, line, shipment_type):
'''
- Return move values for the sale line
-
- :param line: the BrowseRecord of the line
-
- :return: a dictionary of values of move
+ Return move values for the sale line according ot shipment_type
'''
uom_obj = Pool().get('product.uom')

@@ -1433,6 +1429,8 @@
return
if line.product.type == 'service':
return
+ if (shipment_type == 'out') != (line.quantity >= 0):
+ return
skip_ids = set(x.id for x in line.moves_recreated)
quantity = abs(line.quantity)
for move in line.moves:


Reply all
Reply to author
Forward
0 new messages