mirror of
https://github.com/OCA/contract.git
synced 2025-02-13 17:57:24 +02:00
[MIG] contract: Migration to 12.0
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
|
||||
{
|
||||
'name': 'Contracts Management - Recurring',
|
||||
'version': '11.0.4.0.0',
|
||||
'version': '12.0.1.0.0',
|
||||
'category': 'Contract Management',
|
||||
'license': 'AGPL-3',
|
||||
'author': "OpenERP SA, "
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright 2015-2017 Tecnativa - Pedro M. Baeza
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
|
||||
def migrate(cr, version):
|
||||
"""Rename column for specific price for keeping backwards compatibility."""
|
||||
if not version:
|
||||
return
|
||||
cr.execute("""SELECT column_name
|
||||
FROM information_schema.columns
|
||||
WHERE table_name='account_analytic_invoice_line' AND
|
||||
column_name='price_unit'""")
|
||||
if cr.fetchone():
|
||||
cr.execute(
|
||||
"ALTER TABLE account_analytic_invoice_line "
|
||||
"RENAME price_unit TO specific_price"
|
||||
)
|
||||
@@ -10,6 +10,7 @@ from odoo import api, fields, models
|
||||
|
||||
class AccountAnalyticContract(models.Model):
|
||||
_name = 'account.analytic.contract'
|
||||
_description = "Account Analytic Contract"
|
||||
|
||||
# These fields will not be synced to the contract
|
||||
NO_SYNC = [
|
||||
|
||||
@@ -38,7 +38,7 @@ class AccountAnalyticContractLine(models.Model):
|
||||
required=True,
|
||||
)
|
||||
uom_id = fields.Many2one(
|
||||
'product.uom',
|
||||
'uom.uom',
|
||||
string='Unit of Measure',
|
||||
required=True,
|
||||
)
|
||||
|
||||
@@ -4,3 +4,4 @@
|
||||
* Dave Lasley <dave@laslabs.com>
|
||||
* Vicent Cubells <vicent.cubells@tecnativa.com>
|
||||
* Miquel Raïch <miquel.raich@eficent.com>
|
||||
* Souheil Bejaoui <souheil.bejaoui@acsone.eu>
|
||||
|
||||
@@ -90,6 +90,7 @@ class TestContract(TestContractBase):
|
||||
self.assertEqual(self.acct_line.price_unit, 10)
|
||||
|
||||
def test_contract(self):
|
||||
recurring_next_date = fields.Date.to_date('2016-03-29')
|
||||
self.assertAlmostEqual(self.acct_line.price_subtotal, 50.0)
|
||||
res = self.acct_line._onchange_product_id()
|
||||
self.assertIn('uom_id', res['domain'])
|
||||
@@ -101,7 +102,8 @@ class TestContract(TestContractBase):
|
||||
self.invoice_monthly = self.env['account.invoice'].search(
|
||||
[('contract_id', '=', self.contract.id)])
|
||||
self.assertTrue(self.invoice_monthly)
|
||||
self.assertEqual(self.contract.recurring_next_date, '2016-03-29')
|
||||
self.assertEqual(self.contract.recurring_next_date,
|
||||
recurring_next_date)
|
||||
self.inv_line = self.invoice_monthly.invoice_line_ids[0]
|
||||
self.assertTrue(self.inv_line.invoice_line_tax_ids)
|
||||
self.assertAlmostEqual(self.inv_line.price_subtotal, 50.0)
|
||||
@@ -109,6 +111,7 @@ class TestContract(TestContractBase):
|
||||
self.invoice_monthly.user_id)
|
||||
|
||||
def test_contract_daily(self):
|
||||
recurring_next_date = fields.Date.to_date('2016-03-01')
|
||||
self.contract.recurring_next_date = '2016-02-29'
|
||||
self.contract.recurring_rule_type = 'daily'
|
||||
self.contract.pricelist_id = False
|
||||
@@ -116,9 +119,11 @@ class TestContract(TestContractBase):
|
||||
invoice_daily = self.env['account.invoice'].search(
|
||||
[('contract_id', '=', self.contract.id)])
|
||||
self.assertTrue(invoice_daily)
|
||||
self.assertEqual(self.contract.recurring_next_date, '2016-03-01')
|
||||
self.assertEqual(self.contract.recurring_next_date,
|
||||
recurring_next_date)
|
||||
|
||||
def test_contract_weekly(self):
|
||||
recurring_next_date = fields.Date.to_date('2016-03-07')
|
||||
self.contract.recurring_next_date = '2016-02-29'
|
||||
self.contract.recurring_rule_type = 'weekly'
|
||||
self.contract.recurring_invoicing_type = 'post-paid'
|
||||
@@ -127,9 +132,10 @@ class TestContract(TestContractBase):
|
||||
[('contract_id', '=', self.contract.id)])
|
||||
self.assertTrue(invoices_weekly)
|
||||
self.assertEqual(
|
||||
self.contract.recurring_next_date, '2016-03-07')
|
||||
self.contract.recurring_next_date, recurring_next_date)
|
||||
|
||||
def test_contract_yearly(self):
|
||||
recurring_next_date = fields.Date.to_date('2017-02-28')
|
||||
self.contract.recurring_next_date = '2016-02-29'
|
||||
self.contract.recurring_rule_type = 'yearly'
|
||||
self.contract.recurring_create_invoice()
|
||||
@@ -137,9 +143,10 @@ class TestContract(TestContractBase):
|
||||
[('contract_id', '=', self.contract.id)])
|
||||
self.assertTrue(invoices_weekly)
|
||||
self.assertEqual(
|
||||
self.contract.recurring_next_date, '2017-02-28')
|
||||
self.contract.recurring_next_date, recurring_next_date)
|
||||
|
||||
def test_contract_monthly_lastday(self):
|
||||
recurring_next_date = fields.Date.to_date('2016-03-31')
|
||||
self.contract.recurring_next_date = '2016-02-29'
|
||||
self.contract.recurring_invoicing_type = 'post-paid'
|
||||
self.contract.recurring_rule_type = 'monthlylastday'
|
||||
@@ -147,7 +154,8 @@ class TestContract(TestContractBase):
|
||||
invoices_monthly_lastday = self.env['account.invoice'].search(
|
||||
[('contract_id', '=', self.contract.id)])
|
||||
self.assertTrue(invoices_monthly_lastday)
|
||||
self.assertEqual(self.contract.recurring_next_date, '2016-03-31')
|
||||
self.assertEqual(self.contract.recurring_next_date,
|
||||
recurring_next_date)
|
||||
|
||||
def test_onchange_partner_id(self):
|
||||
self.contract._onchange_partner_id()
|
||||
@@ -155,13 +163,14 @@ class TestContract(TestContractBase):
|
||||
self.contract.partner_id.property_product_pricelist)
|
||||
|
||||
def test_onchange_date_start(self):
|
||||
date = '2016-01-01'
|
||||
self.contract.date_start = date
|
||||
recurring_next_date = fields.Date.to_date('2016-01-01')
|
||||
self.contract.date_start = recurring_next_date
|
||||
self.contract._onchange_date_start()
|
||||
self.assertEqual(self.contract.recurring_next_date, date)
|
||||
self.assertEqual(self.contract.recurring_next_date,
|
||||
recurring_next_date)
|
||||
|
||||
def test_uom(self):
|
||||
uom_litre = self.env.ref('product.product_uom_litre')
|
||||
uom_litre = self.env.ref('uom.product_uom_litre')
|
||||
self.acct_line.uom_id = uom_litre.id
|
||||
self.acct_line._onchange_product_id()
|
||||
self.assertEqual(self.acct_line.uom_id,
|
||||
@@ -273,9 +282,9 @@ class TestContract(TestContractBase):
|
||||
def test_contract_onchange_product_id_uom(self):
|
||||
"""It should update the UoM for the line."""
|
||||
line = self._add_template_line(
|
||||
{'uom_id': self.env.ref('product.product_uom_litre').id}
|
||||
{'uom_id': self.env.ref('uom.product_uom_litre').id}
|
||||
)
|
||||
line.product_id.uom_id = self.env.ref('product.product_uom_day').id
|
||||
line.product_id.uom_id = self.env.ref('uom.product_uom_day').id
|
||||
line._onchange_product_id()
|
||||
self.assertEqual(line.uom_id,
|
||||
line.product_id.uom_id)
|
||||
@@ -292,13 +301,14 @@ class TestContract(TestContractBase):
|
||||
|
||||
def test_contract_count(self):
|
||||
"""It should return sale contract count."""
|
||||
count = self.partner.sale_contract_count + 2
|
||||
sale_count = self.partner.sale_contract_count + 2
|
||||
self.contract.copy()
|
||||
self.contract.copy()
|
||||
self.assertEqual(self.partner.sale_contract_count, count)
|
||||
count = self.partner.purchase_contract_count + 1
|
||||
purchase_count = self.partner.purchase_contract_count + 1
|
||||
self.contract2.copy()
|
||||
self.assertEqual(self.partner.purchase_contract_count, count)
|
||||
self.partner.refresh()
|
||||
self.assertEqual(self.partner.sale_contract_count, sale_count)
|
||||
self.assertEqual(self.partner.purchase_contract_count, purchase_count)
|
||||
|
||||
def test_same_date_start_and_date_end(self):
|
||||
"""It should create one invoice with same start and end date."""
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
<field name="automatic_price"/>
|
||||
<field name="price_unit" attrs="{'readonly': [('automatic_price', '=', True)]}"/>
|
||||
<field name="specific_price" invisible="1"/>
|
||||
<field name="discount" groups="sale.group_discount_per_so_line" />
|
||||
<field name="discount" groups="base.group_no_one" />
|
||||
<field name="price_subtotal"/>
|
||||
</tree>
|
||||
</field>
|
||||
@@ -188,11 +188,13 @@
|
||||
domain="[('date_end', '<', time.strftime('%Y-%m-%d'))]"
|
||||
/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Next Invoice"
|
||||
<filter name="next_invoice"
|
||||
string="Next Invoice"
|
||||
domain="[]"
|
||||
context="{'group_by':'recurring_next_date'}"
|
||||
/>
|
||||
<filter string="Date End"
|
||||
<filter name="date_end"
|
||||
string="Date End"
|
||||
domain="[]"
|
||||
context="{'group_by':'date_end'}"
|
||||
/>
|
||||
@@ -232,7 +234,7 @@
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_action_account_analytic_sale_overdue_all"
|
||||
parent="account.menu_finance_receivables_documents"
|
||||
parent="account.menu_finance_receivables"
|
||||
action="action_account_analytic_sale_overdue_all"
|
||||
sequence="99"
|
||||
/>
|
||||
@@ -268,7 +270,7 @@
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_action_account_analytic_purchase_overdue_all"
|
||||
parent="account.menu_finance_payables_documents"
|
||||
parent="account.menu_finance_payables"
|
||||
action="action_account_analytic_purchase_overdue_all"
|
||||
sequence="99"
|
||||
/>
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
<field name="automatic_price" attrs="{'column_invisible': [('parent.contract_type','=','purchase')]}"/>
|
||||
<field name="price_unit" attrs="{'readonly': [('automatic_price', '=', True)]}"/>
|
||||
<field name="specific_price" invisible="1"/>
|
||||
<field name="discount" groups="sale.group_discount_per_so_line" />
|
||||
<field name="discount" groups="base.group_no_one" />
|
||||
<field name="price_subtotal" />
|
||||
</tree>
|
||||
</field>
|
||||
@@ -84,19 +84,24 @@
|
||||
<field name="recurring_invoicing_type" />
|
||||
<field name="pricelist_id" />
|
||||
<field name="journal_id" />
|
||||
<filter string="Contract Type"
|
||||
<filter name="contract_type"
|
||||
string="Contract Type"
|
||||
context="{'group_by': 'contract_type'}"
|
||||
/>
|
||||
<filter string="Recurrence"
|
||||
<filter name="recurring_rule_type"
|
||||
string="Recurrence"
|
||||
context="{'group_by': 'recurring_rule_type'}"
|
||||
/>
|
||||
<filter string="Invoicing type"
|
||||
<filter name="recurring_invoicing_type"
|
||||
string="Invoicing type"
|
||||
context="{'group_by': 'recurring_invoicing_type'}"
|
||||
/>
|
||||
<filter string="Pricelist"
|
||||
<filter name="pricelist_id"
|
||||
string="Pricelist"
|
||||
context="{'group_by': 'pricelist_id'}"
|
||||
/>
|
||||
<filter string="Journal"
|
||||
<filter name="journal_id"
|
||||
string="Journal"
|
||||
context="{'group_by': 'journal_id'}"
|
||||
/>
|
||||
</search>
|
||||
|
||||
Reference in New Issue
Block a user