Reviewers: ,


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

Affected files:
  M sale.py
  M tests/scenario_sale.rst


Index: sale.py
===================================================================
--- a/sale.py
+++ b/sale.py
@@ -1378,10 +1378,12 @@
         res['note'] = line.note
         if line.type != 'line':
             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'))):
+                    and ((all(l.quantity >= 0 for l in line.sale.lines
+                                if l.type == 'line')
+                            and invoice_type == 'out_invoice')
+                        or (all(l.quantity <= 0 for l in line.sale.lines
+                                if l.type == 'line')
+                            and invoice_type == 'out_credit_note'))):
                 return [res]
             else:
                 return []
Index: tests/scenario_sale.rst
===================================================================
--- a/tests/scenario_sale.rst
+++ b/tests/scenario_sale.rst
@@ -174,13 +174,17 @@
     >>> sale = Sale()
     >>> sale.party = customer
     >>> sale.payment_term = payment_term
-    >>> sale.invoice_method = 'shipment'
+    >>> sale.invoice_method = 'order'
     >>> sale_line = SaleLine()
     >>> sale.lines.append(sale_line)
     >>> sale_line.product = product
     >>> sale_line.quantity = 2.0
     >>> sale_line = SaleLine()
     >>> sale.lines.append(sale_line)
+    >>> sale_line.type = 'comment'
+    >>> sale_line.description = 'Comment'
+    >>> sale_line = SaleLine()
+    >>> sale.lines.append(sale_line)
     >>> sale_line.product = product
     >>> sale_line.quantity = 3.0
     >>> sale.save()
@@ -189,6 +193,39 @@
     >>> Sale.process([sale.id], config.context)
     >>> sale.state
     u'processing'
+    >>> sale.reload()
+    >>> len(sale.shipments), len(sale.shipment_returns), len(sale.invoices)
+    (1, 0, 1)
+
+Sale 5 products with an invoice method 'on shipment'::
+
+    >>> Sale = Model.get('sale.sale')
+    >>> SaleLine = Model.get('sale.line')
+    >>> sale = Sale()
+    >>> sale.party = customer
+    >>> sale.payment_term = payment_term
+    >>> sale.invoice_method = 'shipment'
+    >>> sale_line = SaleLine()
+    >>> sale.lines.append(sale_line)
+    >>> sale_line.product = product
+    >>> sale_line.quantity = 2.0
+    >>> sale_line = SaleLine()
+    >>> sale.lines.append(sale_line)
+    >>> sale_line.type = 'comment'
+    >>> sale_line.description = 'Comment'
+    >>> sale_line = SaleLine()
+    >>> sale.lines.append(sale_line)
+    >>> sale_line.product = product
+    >>> sale_line.quantity = 3.0
+    >>> sale.save()
+    >>> Sale.quote([sale.id], config.context)
+    >>> Sale.confirm([sale.id], config.context)
+    >>> Sale.process([sale.id], config.context)
+    >>> sale.state
+    u'processing'
+    >>> sale.reload()
+    >>> len(sale.shipments), len(sale.shipment_returns), len(sale.invoices)
+    (1, 0, 0)

 Validate Shipments::

@@ -207,6 +244,8 @@
     >>> invoice, = sale.invoices
     >>> invoice.type
     u'out_invoice'
+    >>> len(invoice.lines)
+    2
     >>> Invoice.open([invoice.id], config.context)
     >>> invoice.reload()
     >>> invoice.state
@@ -230,20 +269,26 @@
     >>> return_.lines.append(return_line)
     >>> return_line.product = product
     >>> return_line.quantity = -4.
+    >>> return_line = SaleLine()
+    >>> return_.lines.append(return_line)
+    >>> return_line.type = 'comment'
+    >>> return_line.description = 'Comment'
     >>> return_.save()
     >>> Sale.quote([return_.id], config.context)
     >>> Sale.confirm([return_.id], config.context)
     >>> Sale.process([return_.id], config.context)
     >>> return_.state
     u'processing'
+    >>> return_.reload()
+    >>> (len(return_.shipments), len(return_.shipment_returns),
+    ...     len(return_.invoices))
+    (0, 1, 0)

 Check Return Shipments::

     >>> return_.reload()
     >>> ShipmentReturn = Model.get('stock.shipment.out.return')
     >>> ship_return, = return_.shipment_returns
-    >>> len(return_.shipments)
-    0
     >>> ShipmentReturn.receive([ship_return.id], config.context)
     >>> move_return, = ship_return.incoming_moves
     >>> move_return.product.name
@@ -257,6 +302,8 @@
     >>> credit_note, = return_.invoices
     >>> credit_note.type
     u'out_credit_note'
+    >>> len(credit_note.lines)
+    1
     >>> Invoice.open([credit_note.id], config.context)
     >>> credit_note.reload()
     >>> credit_note.state
@@ -278,6 +325,10 @@
     >>> mix.lines.append(mixline)
     >>> mixline.product = product
     >>> mixline.quantity = 7.
+    >>> mixline_comment = SaleLine()
+    >>> mix.lines.append(mixline_comment)
+    >>> mixline_comment.type = 'comment'
+    >>> mixline_comment.description = 'Comment'
     >>> mixline2 = SaleLine()
     >>> mix.lines.append(mixline2)
     >>> mixline2.product = product
@@ -288,6 +339,9 @@
     >>> Sale.process([mix.id], config.context)
     >>> mix.state
     u'processing'
+    >>> mix.reload()
+    >>> len(mix.shipments), len(mix.shipment_returns), len(mix.invoices)
+    (1, 1, 2)

 Checking Shipments::

@@ -317,6 +371,8 @@
     ...     key=attrgetter('type'), reverse=True)
     >>> mix_invoice.type, mix_credit_note.type
     (u'out_invoice', u'out_credit_note')
+    >>> len(mix_invoice.lines), len(mix_credit_note.lines)
+    (1, 1)
     >>> Invoice.open([mix_invoice.id], config.context)
     >>> mix_invoice.reload()
     >>> mix_invoice.state
@@ -342,6 +398,10 @@
     >>> mix.lines.append(mixline)
     >>> mixline.product = product
     >>> mixline.quantity = 6.
+    >>> mixline_comment = SaleLine()
+    >>> mix.lines.append(mixline_comment)
+    >>> mixline_comment.type = 'comment'
+    >>> mixline_comment.description = 'Comment'
     >>> mixline2 = SaleLine()
     >>> mix.lines.append(mixline2)
     >>> mixline2.product = product
@@ -352,6 +412,9 @@
     >>> Sale.process([mix.id], config.context)
     >>> mix.state
     u'processing'
+    >>> mix.reload()
+    >>> len(mix.shipments), len(mix.shipment_returns), len(mix.invoices)
+    (1, 1, 0)

 Checking Shipments::



--
[email protected] mailing list

Reply via email to