[IMP] contract_variable_qty_timesheet: black, isort

This commit is contained in:
Fernando La Chica
2020-11-23 16:56:51 +01:00
parent 71e8f306d1
commit 8e4163de5f
3 changed files with 86 additions and 93 deletions

View File

@@ -2,22 +2,16 @@
# Copyright 2019 Tecnativa - Pedro M. Baeza # Copyright 2019 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{ {
'name': 'Contract Variable Qty Timesheet', "name": "Contract Variable Qty Timesheet",
'summary': 'Add formula to invoice ', "summary": "Add formula to invoice ",
'version': '12.0.1.0.0', "version": "12.0.1.0.0",
'category': 'Contract Management', "category": "Contract Management",
'website': 'https://github.com/oca/contract', "website": "https://github.com/oca/contract",
'author': 'Tecnativa, ' "author": "Tecnativa, " "Odoo Community Association (OCA)",
'Odoo Community Association (OCA)', "license": "AGPL-3",
'license': 'AGPL-3', "installable": True,
'installable': True, "development_status": "Production/Stable",
'development_status': 'Production/Stable', "depends": ["contract_variable_quantity", "hr_timesheet",],
'depends': [ "data": ["data/contract_line_qty_formula_data.xml",],
'contract_variable_quantity', "maintainers": ["carlosdauden", "pedrobaeza"],
'hr_timesheet',
],
'data': [
'data/contract_line_qty_formula_data.xml',
],
'maintainers': ['carlosdauden', 'pedrobaeza'],
} }

View File

@@ -1,12 +1,14 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2018 Tecnativa - Carlos Dauden <!-- Copyright 2018 Tecnativa - Carlos Dauden
Copyright 2019 Tecnativa - Pedro M. Baeza Copyright 2019 Tecnativa - Pedro M. Baeza
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo> <odoo>
<record
<record id="contract_line_qty_formula_project_timesheet" model="contract.line.qty.formula"> id="contract_line_qty_formula_project_timesheet"
<field name='name'>Project Timesheets</field> model="contract.line.qty.formula"
<field name="code">group = env['account.analytic.line'].read_group([ >
<field name='name'>Project Timesheets</field>
<field name="code">group = env['account.analytic.line'].read_group([
('account_id', '=', line.analytic_account_id.id), ('account_id', '=', line.analytic_account_id.id),
('product_id', '=', False), ('product_id', '=', False),
('project_id', '!=', False), ('project_id', '!=', False),
@@ -15,11 +17,13 @@
], fields=['unit_amount'], groupby=[]) ], fields=['unit_amount'], groupby=[])
result = group and group[0]['unit_amount'] or 0.0 result = group and group[0]['unit_amount'] or 0.0
</field> </field>
</record> </record>
<record
<record id="contract_line_qty_formula_task_timesheet" model="contract.line.qty.formula"> id="contract_line_qty_formula_task_timesheet"
<field name='name'>Task Timesheets</field> model="contract.line.qty.formula"
<field name="code">group = env['account.analytic.line'].read_group([ >
<field name='name'>Task Timesheets</field>
<field name="code">group = env['account.analytic.line'].read_group([
('account_id', '=', line.analytic_account_id.id), ('account_id', '=', line.analytic_account_id.id),
('product_id', '=', False), ('product_id', '=', False),
('task_id', '!=', False), ('task_id', '!=', False),
@@ -28,11 +32,13 @@ result = group and group[0]['unit_amount'] or 0.0
], fields=['unit_amount'], groupby=[]) ], fields=['unit_amount'], groupby=[])
result = group and group[0]['unit_amount'] or 0.0 result = group and group[0]['unit_amount'] or 0.0
</field> </field>
</record> </record>
<record
<record id="contract_line_qty_formula_analytic_same_product" model="contract.line.qty.formula"> id="contract_line_qty_formula_analytic_same_product"
<field name='name'>Analytic Same Product</field> model="contract.line.qty.formula"
<field name="code">group = env['account.analytic.line'].read_group([ >
<field name='name'>Analytic Same Product</field>
<field name="code">group = env['account.analytic.line'].read_group([
('account_id', '=', line.analytic_account_id.id), ('account_id', '=', line.analytic_account_id.id),
('product_id', '=', line.product_id.id), ('product_id', '=', line.product_id.id),
('date', '&gt;=', period_first_date), ('date', '&gt;=', period_first_date),
@@ -40,6 +46,5 @@ result = group and group[0]['unit_amount'] or 0.0
], fields=['unit_amount'], groupby=[]) ], fields=['unit_amount'], groupby=[])
result = group and group[0]['unit_amount'] or 0.0 result = group and group[0]['unit_amount'] or 0.0
</field> </field>
</record> </record>
</odoo> </odoo>

View File

@@ -9,88 +9,82 @@ class TestContractVariableQtyTimesheet(common.SavepointCase):
@classmethod @classmethod
def setUpClass(cls): def setUpClass(cls):
super().setUpClass() super().setUpClass()
cls.partner = cls.env['res.partner'].create({'name': 'Test partner'}) cls.partner = cls.env["res.partner"].create({"name": "Test partner"})
cls.analytic_account = cls.env['account.analytic.account'].create({ cls.analytic_account = cls.env["account.analytic.account"].create(
'name': 'Test analytic account'}) {"name": "Test analytic account"}
cls.contract = cls.env['contract.contract'].create({ )
'name': 'Test contract', cls.contract = cls.env["contract.contract"].create(
'partner_id': cls.partner.id}) {"name": "Test contract", "partner_id": cls.partner.id}
cls.product = cls.env['product.product'].create({ )
'name': 'Test product'}) cls.product = cls.env["product.product"].create({"name": "Test product"})
contract_line_vals = { contract_line_vals = {
'contract_id': cls.contract.id, "contract_id": cls.contract.id,
'analytic_account_id': cls.analytic_account.id, "analytic_account_id": cls.analytic_account.id,
'product_id': cls.product.id, "product_id": cls.product.id,
'uom_id': cls.product.uom_id.id, "uom_id": cls.product.uom_id.id,
'name': 'Test line contract', "name": "Test line contract",
'recurring_interval': 1, "recurring_interval": 1,
'recurring_rule_type': 'monthly', "recurring_rule_type": "monthly",
'recurring_invoicing_type': 'pre-paid', "recurring_invoicing_type": "pre-paid",
'date_start': '2020-01-01', "date_start": "2020-01-01",
'recurring_next_date': '2020-01-01', "recurring_next_date": "2020-01-01",
'qty_type': 'variable', "qty_type": "variable",
'qty_formula_id': cls.env.ref( "qty_formula_id": cls.env.ref(
'contract_variable_qty_timesheet.' "contract_variable_qty_timesheet."
'contract_line_qty_formula_project_timesheet').id, "contract_line_qty_formula_project_timesheet"
).id,
} }
cls.contract_line = cls.env['contract.line'].create( cls.contract_line = cls.env["contract.line"].create(contract_line_vals)
contract_line_vals) cls.project = cls.env["project.project"].create(
cls.project = cls.env['project.project'].create({ {"name": "Test project", "analytic_account_id": cls.analytic_account.id,}
'name': 'Test project', )
'analytic_account_id': cls.analytic_account.id, cls.task = cls.env["project.task"].create(
}) {"project_id": cls.project.id, "name": "Test task",}
cls.task = cls.env['project.task'].create({ )
'project_id': cls.project.id,
'name': 'Test task',
})
def _contract_invoicing(self, contract): def _contract_invoicing(self, contract):
date_ref = fields.Date.from_string('2020-01-01') date_ref = fields.Date.from_string("2020-01-01")
contract._recurring_create_invoice(date_ref) contract._recurring_create_invoice(date_ref)
return contract._get_related_invoices() return contract._get_related_invoices()
def _create_analytic_line(self, project, task, date, product, unit_amount): def _create_analytic_line(self, project, task, date, product, unit_amount):
return self.env['account.analytic.line'].create({ return self.env["account.analytic.line"].create(
'account_id': self.analytic_account.id, {
'project_id': project and project.id, "account_id": self.analytic_account.id,
'task_id': task and task.id, "project_id": project and project.id,
'name': 'Test %s %s' % (date, unit_amount), "task_id": task and task.id,
'date': date, "name": "Test {} {}".format(date, unit_amount),
'product_id': product and product.id, "date": date,
'unit_amount': unit_amount, "product_id": product and product.id,
}) "unit_amount": unit_amount,
}
)
def test_project_timesheet(self): def test_project_timesheet(self):
self._create_analytic_line( self._create_analytic_line(self.project, self.task, "2020-01-01", False, 3)
self.project, self.task, '2020-01-01', False, 3) self._create_analytic_line(False, False, "2020-01-01", False, 1)
self._create_analytic_line(
False, False, '2020-01-01', False, 1)
invoice = self._contract_invoicing(self.contract) invoice = self._contract_invoicing(self.contract)
self.assertEqual(len(invoice.invoice_line_ids), 1) self.assertEqual(len(invoice.invoice_line_ids), 1)
self.assertAlmostEqual(invoice.invoice_line_ids.quantity, 3) self.assertAlmostEqual(invoice.invoice_line_ids.quantity, 3)
def test_task_timesheet(self): def test_task_timesheet(self):
self.contract_line.qty_formula_id = self.env.ref( self.contract_line.qty_formula_id = self.env.ref(
'contract_variable_qty_timesheet.' "contract_variable_qty_timesheet."
'contract_line_qty_formula_task_timesheet' "contract_line_qty_formula_task_timesheet"
).id ).id
self._create_analytic_line( self._create_analytic_line(self.project, self.task, "2020-01-01", False, 3)
self.project, self.task, '2020-01-01', False, 3) self._create_analytic_line(self.project, False, "2020-01-01", False, 1)
self._create_analytic_line(
self.project, False, '2020-01-01', False, 1)
invoice = self._contract_invoicing(self.contract) invoice = self._contract_invoicing(self.contract)
self.assertEqual(len(invoice.invoice_line_ids), 1) self.assertEqual(len(invoice.invoice_line_ids), 1)
self.assertAlmostEqual(invoice.invoice_line_ids.quantity, 3) self.assertAlmostEqual(invoice.invoice_line_ids.quantity, 3)
def test_same_product(self): def test_same_product(self):
self.contract_line.qty_formula_id = self.env.ref( self.contract_line.qty_formula_id = self.env.ref(
'contract_variable_qty_timesheet.' "contract_variable_qty_timesheet."
'contract_line_qty_formula_analytic_same_product' "contract_line_qty_formula_analytic_same_product"
).id ).id
self._create_analytic_line( self._create_analytic_line(False, False, "2020-01-01", self.product, 3)
False, False, '2020-01-01', self.product, 3) self._create_analytic_line(self.project, False, "2020-01-01", False, 1)
self._create_analytic_line(
self.project, False, '2020-01-01', False, 1)
invoice = self._contract_invoicing(self.contract) invoice = self._contract_invoicing(self.contract)
self.assertEqual(len(invoice.invoice_line_ids), 1) self.assertEqual(len(invoice.invoice_line_ids), 1)
self.assertAlmostEqual(invoice.invoice_line_ids.quantity, 3) self.assertAlmostEqual(invoice.invoice_line_ids.quantity, 3)