Browse Source

[12.0][IMP] - sale line linked to contracts must not be invoiced from sale order

pull/208/head
sbejaoui 5 years ago
parent
commit
738f53a6c7
  1. 2
      contract_sale/views/contract.xml
  2. 4
      contract_sale_payment_mode/tests/test_sale_order.py
  3. 2
      product_contract/models/sale_order.py
  4. 15
      product_contract/models/sale_order_line.py
  5. 11
      product_contract/tests/test_sale_order.py

2
contract_sale/views/contract.xml

@ -4,7 +4,7 @@
<menuitem <menuitem
id="menu_contract_sale" name="Contracts" id="menu_contract_sale" name="Contracts"
parent="sale.sale_order_menu" parent="sale.sale_order_menu"
action="contract.action_supplier_contract"
action="contract.action_customer_contract"
sequence="2" sequence="2"
groups="sales_team.group_sale_salesman" groups="sales_team.group_sale_salesman"
/> />

4
contract_sale_payment_mode/tests/test_sale_order.py

@ -8,7 +8,9 @@ from odoo.addons.product_contract.tests.test_sale_order import TestSaleOrder
class TestSaleOrderPaymentMode(TestSaleOrder): class TestSaleOrderPaymentMode(TestSaleOrder):
def setUp(self): def setUp(self):
super(TestSaleOrderPaymentMode, self).setUp() super(TestSaleOrderPaymentMode, self).setUp()
self.payment_mode = self.env['account.payment.mode'].search([], limit=1)
self.payment_mode = self.env['account.payment.mode'].search(
[], limit=1
)
self.sale.payment_mode_id = self.payment_mode self.sale.payment_mode_id = self.payment_mode
def test_action_confirm_with_payment_mode(self): def test_action_confirm_with_payment_mode(self):

2
product_contract/models/sale_order.py

@ -107,7 +107,7 @@ class SaleOrder(models.Model):
def action_show_contracts(self): def action_show_contracts(self):
self.ensure_one() self.ensure_one()
action = self.env.ref( action = self.env.ref(
"contract.contract_contract_customer_form_view"
"contract.action_customer_contract"
).read()[0] ).read()[0]
contracts = ( contracts = (
self.env['contract.line'] self.env['contract.line']

15
product_contract/models/sale_order_line.py

@ -231,3 +231,18 @@ class SaleOrderLine(models.Model):
return super( return super(
SaleOrderLine, self.filtered(lambda l: not l.contract_id) SaleOrderLine, self.filtered(lambda l: not l.contract_id)
).invoice_line_create(invoice_id, qty) ).invoice_line_create(invoice_id, qty)
@api.depends(
'qty_invoiced',
'qty_delivered',
'product_uom_qty',
'order_id.state',
'product_id.is_contract',
)
def _get_to_invoice_qty(self):
"""
sale line linked to contracts must not be invoiced from sale order
"""
res = super()._get_to_invoice_qty()
self.filtered('product_id.is_contract').update({'qty_to_invoice': 0.0})
return res

11
product_contract/tests/test_sale_order.py

@ -110,6 +110,17 @@ class TestSaleOrder(TransactionCase):
contract_line.recurring_next_date, Date.to_date('2018-01-31') contract_line.recurring_next_date, Date.to_date('2018-01-31')
) )
def test_sale_order_invoice_status(self):
"""
sale line linked to contracts must not be invoiced from sale order
"""
self.sale.action_confirm()
self.assertEqual(self.order_line1.invoice_status, 'no')
invoice = self.order_line1.contract_id.recurring_create_invoice()
self.assertTrue(invoice)
self.assertEqual(self.order_line1.invoice_qty, 1)
self.assertEqual(self.order_line1.qty_to_invoice, 0)
def test_action_confirm_without_contract_creation(self): def test_action_confirm_without_contract_creation(self):
""" It should create a contract for each contract template used in """ It should create a contract for each contract template used in
order_line """ order_line """

Loading…
Cancel
Save