From a6da31054808422b72fc8a070e28a2bdd3ce561c Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Wed, 16 May 2018 10:08:45 -0700 Subject: [PATCH 1/5] Initial commit of `hr_expense_lead` for 11.0 --- hr_expense_lead/__init__.py | 1 + hr_expense_lead/__manifest__.py | 21 +++++++++++++++++++ hr_expense_lead/models/__init__.py | 2 ++ hr_expense_lead/models/crm_lead.py | 14 +++++++++++++ hr_expense_lead/models/hr_expense_lead.py | 7 +++++++ hr_expense_lead/tests/__init__.py | 1 + hr_expense_lead/tests/test_expenses.py | 16 +++++++++++++++ hr_expense_lead/views/crm_views.xml | 18 ++++++++++++++++ hr_expense_lead/views/hr_expense_views.xml | 24 ++++++++++++++++++++++ 9 files changed, 104 insertions(+) create mode 100644 hr_expense_lead/__init__.py create mode 100644 hr_expense_lead/__manifest__.py create mode 100644 hr_expense_lead/models/__init__.py create mode 100644 hr_expense_lead/models/crm_lead.py create mode 100644 hr_expense_lead/models/hr_expense_lead.py create mode 100644 hr_expense_lead/tests/__init__.py create mode 100644 hr_expense_lead/tests/test_expenses.py create mode 100644 hr_expense_lead/views/crm_views.xml create mode 100644 hr_expense_lead/views/hr_expense_views.xml diff --git a/hr_expense_lead/__init__.py b/hr_expense_lead/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/hr_expense_lead/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/hr_expense_lead/__manifest__.py b/hr_expense_lead/__manifest__.py new file mode 100644 index 00000000..8dd9de9f --- /dev/null +++ b/hr_expense_lead/__manifest__.py @@ -0,0 +1,21 @@ +{ + 'name': 'HR Expense Lead', + 'version': '11.0.1.0.0', + 'author': 'Hibou Corp. ', + 'category': 'Human Resources', + 'summary': 'Assign Opportunity/Lead to expenses for reporting.', + 'description': """ +Assign Opportunity/Lead to expenses for reporting. +""", + 'website': 'https://hibou.io/', + 'depends': [ + 'hr_expense', + 'crm', + ], + 'data': [ + 'views/hr_expense_views.xml', + 'views/crm_views.xml' + ], + 'installable': True, + 'auto_install': False, +} diff --git a/hr_expense_lead/models/__init__.py b/hr_expense_lead/models/__init__.py new file mode 100644 index 00000000..0192f659 --- /dev/null +++ b/hr_expense_lead/models/__init__.py @@ -0,0 +1,2 @@ +from . import crm_lead +from . import hr_expense_lead diff --git a/hr_expense_lead/models/crm_lead.py b/hr_expense_lead/models/crm_lead.py new file mode 100644 index 00000000..b71bc060 --- /dev/null +++ b/hr_expense_lead/models/crm_lead.py @@ -0,0 +1,14 @@ +from odoo import api, fields, models + + +class CRMLead(models.Model): + _inherit = 'crm.lead' + + expense_total_amount = fields.Float(string='Expenses Total', compute='_compute_expense_total_amount') + expense_ids = fields.One2many('hr.expense', 'lead_id', string='Expenses') + + @api.multi + @api.depends('expense_ids.unit_amount') + def _compute_expense_total_amount(self): + for lead in self.sudo(): + lead.expense_total_amount = sum(lead.expense_ids.mapped('total_amount')) diff --git a/hr_expense_lead/models/hr_expense_lead.py b/hr_expense_lead/models/hr_expense_lead.py new file mode 100644 index 00000000..71656ea5 --- /dev/null +++ b/hr_expense_lead/models/hr_expense_lead.py @@ -0,0 +1,7 @@ +from odoo import api, fields, models + + +class HRExpenseLead(models.Model): + _inherit = 'hr.expense' + + lead_id = fields.Many2one('crm.lead', string='Lead') diff --git a/hr_expense_lead/tests/__init__.py b/hr_expense_lead/tests/__init__.py new file mode 100644 index 00000000..bf77393e --- /dev/null +++ b/hr_expense_lead/tests/__init__.py @@ -0,0 +1 @@ +from . import test_expenses diff --git a/hr_expense_lead/tests/test_expenses.py b/hr_expense_lead/tests/test_expenses.py new file mode 100644 index 00000000..61972079 --- /dev/null +++ b/hr_expense_lead/tests/test_expenses.py @@ -0,0 +1,16 @@ +from odoo.tests import common + + +class TestCheckVendor(common.TransactionCase): + def test_fields(self): + lead = self.env['crm.lead'].create({'name': 'Test Lead'}) + expense = self.env['hr.expense'].create({ + 'name': 'Test Expense', + 'product_id': self.env['product.product'].search([('can_be_expensed', '=', True)], limit=1).id, + 'unit_amount': 34.0, + }) + self.assertFalse(lead.expense_ids) + self.assertEqual(lead.expense_total_amount, 0.0) + expense.lead_id = lead + self.assertTrue(lead.expense_ids) + self.assertEqual(lead.expense_total_amount, 34.0) diff --git a/hr_expense_lead/views/crm_views.xml b/hr_expense_lead/views/crm_views.xml new file mode 100644 index 00000000..aa6878b4 --- /dev/null +++ b/hr_expense_lead/views/crm_views.xml @@ -0,0 +1,18 @@ + + + + crm.lead.form.opportunity.inherit + crm.lead + + + + + + + + \ No newline at end of file diff --git a/hr_expense_lead/views/hr_expense_views.xml b/hr_expense_lead/views/hr_expense_views.xml new file mode 100644 index 00000000..7bb69189 --- /dev/null +++ b/hr_expense_lead/views/hr_expense_views.xml @@ -0,0 +1,24 @@ + + + + hr.expense.form.inherit + hr.expense + + + + + + + + + + hr.expense.filter.inherit + hr.expense + + + + + + + + \ No newline at end of file From b49d47887d846bb4f9d18a3cda8ecc56bd3cc380 Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Wed, 16 May 2018 11:43:08 -0700 Subject: [PATCH 2/5] Move 'Lead' field on Expense form. --- hr_expense_lead/views/hr_expense_views.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hr_expense_lead/views/hr_expense_views.xml b/hr_expense_lead/views/hr_expense_views.xml index 7bb69189..be8ef68a 100644 --- a/hr_expense_lead/views/hr_expense_views.xml +++ b/hr_expense_lead/views/hr_expense_views.xml @@ -5,7 +5,7 @@ hr.expense - + From d28ab5f9ed8e1dd8d563de05d7c35c50c598daea Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Tue, 5 Jun 2018 12:44:20 -0700 Subject: [PATCH 3/5] FIX: `hr_expense_lead` watch field used in calculation. --- hr_expense_lead/models/crm_lead.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hr_expense_lead/models/crm_lead.py b/hr_expense_lead/models/crm_lead.py index b71bc060..4f785609 100644 --- a/hr_expense_lead/models/crm_lead.py +++ b/hr_expense_lead/models/crm_lead.py @@ -8,7 +8,7 @@ class CRMLead(models.Model): expense_ids = fields.One2many('hr.expense', 'lead_id', string='Expenses') @api.multi - @api.depends('expense_ids.unit_amount') + @api.depends('expense_ids.total_amount') def _compute_expense_total_amount(self): for lead in self.sudo(): lead.expense_total_amount = sum(lead.expense_ids.mapped('total_amount')) From 03f45f5736600b9db20d303f284107a04885837f Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Fri, 15 Jun 2018 09:09:07 -0700 Subject: [PATCH 4/5] IMP `hr_expense_lead` Better computation and display as monetary field. --- hr_expense_lead/models/crm_lead.py | 6 ++++-- hr_expense_lead/views/crm_views.xml | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/hr_expense_lead/models/crm_lead.py b/hr_expense_lead/models/crm_lead.py index 4f785609..84025847 100644 --- a/hr_expense_lead/models/crm_lead.py +++ b/hr_expense_lead/models/crm_lead.py @@ -4,11 +4,13 @@ from odoo import api, fields, models class CRMLead(models.Model): _inherit = 'crm.lead' - expense_total_amount = fields.Float(string='Expenses Total', compute='_compute_expense_total_amount') + expense_total_amount = fields.Float(string='Expenses Total', + compute='_compute_expense_total_amount', + compute_sudo=True) expense_ids = fields.One2many('hr.expense', 'lead_id', string='Expenses') @api.multi @api.depends('expense_ids.total_amount') def _compute_expense_total_amount(self): - for lead in self.sudo(): + for lead in self: lead.expense_total_amount = sum(lead.expense_ids.mapped('total_amount')) diff --git a/hr_expense_lead/views/crm_views.xml b/hr_expense_lead/views/crm_views.xml index aa6878b4..511209e2 100644 --- a/hr_expense_lead/views/crm_views.xml +++ b/hr_expense_lead/views/crm_views.xml @@ -8,7 +8,7 @@ From 4695077160b812617d6c6688e7bad187f29c9dd1 Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Mon, 20 May 2019 12:38:32 -0700 Subject: [PATCH 5/5] MIG `hr_expense_lead` to 12.0 --- hr_expense_lead/__manifest__.py | 2 +- hr_expense_lead/tests/test_expenses.py | 1 + hr_expense_lead/views/hr_expense_views.xml | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/hr_expense_lead/__manifest__.py b/hr_expense_lead/__manifest__.py index 8dd9de9f..f8d23d77 100644 --- a/hr_expense_lead/__manifest__.py +++ b/hr_expense_lead/__manifest__.py @@ -1,6 +1,6 @@ { 'name': 'HR Expense Lead', - 'version': '11.0.1.0.0', + 'version': '12.0.1.0.0', 'author': 'Hibou Corp. ', 'category': 'Human Resources', 'summary': 'Assign Opportunity/Lead to expenses for reporting.', diff --git a/hr_expense_lead/tests/test_expenses.py b/hr_expense_lead/tests/test_expenses.py index 61972079..8ad505dd 100644 --- a/hr_expense_lead/tests/test_expenses.py +++ b/hr_expense_lead/tests/test_expenses.py @@ -7,6 +7,7 @@ class TestCheckVendor(common.TransactionCase): expense = self.env['hr.expense'].create({ 'name': 'Test Expense', 'product_id': self.env['product.product'].search([('can_be_expensed', '=', True)], limit=1).id, + 'employee_id': self.env['hr.employee'].search([], limit=1).id, 'unit_amount': 34.0, }) self.assertFalse(lead.expense_ids) diff --git a/hr_expense_lead/views/hr_expense_views.xml b/hr_expense_lead/views/hr_expense_views.xml index be8ef68a..366efc28 100644 --- a/hr_expense_lead/views/hr_expense_views.xml +++ b/hr_expense_lead/views/hr_expense_views.xml @@ -3,7 +3,7 @@ hr.expense.form.inherit hr.expense - +