From 9cd7dbe22d6edf7a057c08f1103d7cc3451d1a97 Mon Sep 17 00:00:00 2001 From: Yannick Tivisse Date: Tue, 27 Nov 2018 13:33:23 +0100 Subject: [PATCH] [IMP] hr_payroll: Remove 'Details By Salary Rules Category' This field brings nothing more than the payslip lines. Btw the term is badly chosen, it doesn't display the lines by salary rules category, it displays the payslip lines that have a category. The printed report is not very useful too. The only interesting part is the contribution register at the end of the report, and there is already a dedicated report for that. --- addons/hr_payroll/__manifest__.py | 1 - addons/hr_payroll/models/hr_payslip.py | 7 -- addons/hr_payroll/report/__init__.py | 1 - .../report/report_payslip_details.py | 99 ----------------- addons/hr_payroll/tests/test_payslip_flow.py | 3 - addons/hr_payroll/views/hr_payroll_report.xml | 9 -- addons/hr_payroll/views/hr_payslip_views.xml | 14 +-- .../views/report_payslipdetails_templates.xml | 101 ------------------ .../models/hr_payroll_account.py | 2 +- addons/l10n_in_hr_payroll/report/__init__.py | 1 - .../report/report_payslip_details.py | 20 ---- 11 files changed, 3 insertions(+), 255 deletions(-) delete mode 100644 addons/hr_payroll/report/report_payslip_details.py delete mode 100644 addons/hr_payroll/views/report_payslipdetails_templates.xml delete mode 100644 addons/l10n_in_hr_payroll/report/report_payslip_details.py diff --git a/addons/hr_payroll/__manifest__.py b/addons/hr_payroll/__manifest__.py index e26ea532ab9..5483d60de8c 100644 --- a/addons/hr_payroll/__manifest__.py +++ b/addons/hr_payroll/__manifest__.py @@ -27,7 +27,6 @@ 'views/res_config_settings_views.xml', 'views/report_contributionregister_templates.xml', 'views/report_payslip_templates.xml', - 'views/report_payslipdetails_templates.xml', 'views/hr_benefit_views.xml', 'views/hr_benefit_views.xml', 'views/hr_leave_views.xml', diff --git a/addons/hr_payroll/models/hr_payslip.py b/addons/hr_payroll/models/hr_payslip.py index d42782c3202..f6f6bf39521 100644 --- a/addons/hr_payroll/models/hr_payslip.py +++ b/addons/hr_payroll/models/hr_payslip.py @@ -59,8 +59,6 @@ class HrPayslip(models.Model): note = fields.Text(string='Internal Note', readonly=True, states={'draft': [('readonly', False)]}) contract_id = fields.Many2one('hr.contract', string='Contract', readonly=True, states={'draft': [('readonly', False)]}) - details_by_salary_rule_category = fields.One2many('hr.payslip.line', - compute='_compute_details_by_salary_rule_category', string='Details by Salary Rule Category') credit_note = fields.Boolean(string='Credit Note', readonly=True, states={'draft': [('readonly', False)]}, help="Indicates this payslip has a refund of another") @@ -68,11 +66,6 @@ class HrPayslip(models.Model): copy=False, states={'draft': [('readonly', False)]}) payslip_count = fields.Integer(compute='_compute_payslip_count', string="Payslip Computation Details") - @api.multi - def _compute_details_by_salary_rule_category(self): - for payslip in self: - payslip.details_by_salary_rule_category = payslip.mapped('line_ids').filtered(lambda line: line.category_id) - @api.multi def _compute_payslip_count(self): for payslip in self: diff --git a/addons/hr_payroll/report/__init__.py b/addons/hr_payroll/report/__init__.py index 308f6ee3cf1..f05ddd9597b 100644 --- a/addons/hr_payroll/report/__init__.py +++ b/addons/hr_payroll/report/__init__.py @@ -2,5 +2,4 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. -from . import report_payslip_details from . import report_contribution_register diff --git a/addons/hr_payroll/report/report_payslip_details.py b/addons/hr_payroll/report/report_payslip_details.py deleted file mode 100644 index db8e7717c1b..00000000000 --- a/addons/hr_payroll/report/report_payslip_details.py +++ /dev/null @@ -1,99 +0,0 @@ -#-*- coding:utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -from odoo import api, models - -class PayslipDetailsReport(models.AbstractModel): - _name = 'report.hr_payroll.report_payslipdetails' - _description = 'Payslip Details Report' - - def get_details_by_rule_category(self, payslip_lines): - PayslipLine = self.env['hr.payslip.line'] - RuleCateg = self.env['hr.salary.rule.category'] - - def get_recursive_parent(current_rule_category, rule_categories=None): - if rule_categories: - rule_categories = current_rule_category | rule_categories - else: - rule_categories = current_rule_category - - if current_rule_category.parent_id: - return get_recursive_parent(current_rule_category.parent_id, rule_categories) - else: - return rule_categories - - res = {} - result = {} - - if payslip_lines: - self.env.cr.execute(""" - SELECT pl.id, pl.category_id, pl.slip_id FROM hr_payslip_line as pl - LEFT JOIN hr_salary_rule_category AS rc on (pl.category_id = rc.id) - WHERE pl.id in %s - GROUP BY rc.parent_id, pl.sequence, pl.id, pl.category_id - ORDER BY pl.sequence, rc.parent_id""", - (tuple(payslip_lines.ids),)) - for x in self.env.cr.fetchall(): - result.setdefault(x[2], {}) - result[x[2]].setdefault(x[1], []) - result[x[2]][x[1]].append(x[0]) - for payslip_id, lines_dict in result.items(): - res.setdefault(payslip_id, []) - for rule_categ_id, line_ids in lines_dict.items(): - rule_categories = RuleCateg.browse(rule_categ_id) - lines = PayslipLine.browse(line_ids) - level = 0 - for parent in get_recursive_parent(rule_categories): - res[payslip_id].append({ - 'rule_category': parent.name, - 'name': parent.name, - 'code': parent.code, - 'level': level, - 'total': sum(lines.mapped('total')), - }) - level += 1 - for line in lines: - res[payslip_id].append({ - 'rule_category': line.name, - 'name': line.name, - 'code': line.code, - 'total': line.total, - 'level': level - }) - return res - - def get_lines_by_contribution_register(self, payslip_lines): - result = {} - res = {} - for line in payslip_lines.filtered('register_id'): - result.setdefault(line.slip_id.id, {}) - result[line.slip_id.id].setdefault(line.register_id, line) - result[line.slip_id.id][line.register_id] |= line - for payslip_id, lines_dict in result.items(): - res.setdefault(payslip_id, []) - for register, lines in lines_dict.items(): - res[payslip_id].append({ - 'register_name': register.name, - 'total': sum(lines.mapped('total')), - }) - for line in lines: - res[payslip_id].append({ - 'name': line.name, - 'code': line.code, - 'quantity': line.quantity, - 'amount': line.amount, - 'total': line.total, - }) - return res - - @api.model - def _get_report_values(self, docids, data=None): - payslips = self.env['hr.payslip'].browse(docids) - return { - 'doc_ids': docids, - 'doc_model': 'hr.payslip', - 'docs': payslips, - 'data': data, - 'get_details_by_rule_category': self.get_details_by_rule_category(payslips.mapped('details_by_salary_rule_category').filtered(lambda r: r.appears_on_payslip)), - 'get_lines_by_contribution_register': self.get_lines_by_contribution_register(payslips.mapped('line_ids').filtered(lambda r: r.appears_on_payslip)), - } diff --git a/addons/hr_payroll/tests/test_payslip_flow.py b/addons/hr_payroll/tests/test_payslip_flow.py index 3245148d93c..a1b2e301cbe 100644 --- a/addons/hr_payroll/tests/test_payslip_flow.py +++ b/addons/hr_payroll/tests/test_payslip_flow.py @@ -71,9 +71,6 @@ class TestPayslipFlow(TestPayslipBase): # I print the payslip report data, data_format = self.env.ref('hr_payroll.action_report_payslip').render(richard_payslip.ids) - # I print the payslip details report - data, data_format = self.env.ref('hr_payroll.payslip_details_report').render(richard_payslip.ids) - # I print the contribution register report context = {'model': 'hr.contribution.register', 'active_ids': [self.ref('hr_payroll.hr_houserent_register')]} test_reports.try_report_action(self.env.cr, self.env.uid, 'action_payslip_lines_contribution_register', context=context, our_module='hr_payroll') diff --git a/addons/hr_payroll/views/hr_payroll_report.xml b/addons/hr_payroll/views/hr_payroll_report.xml index e9c4ac11ccf..f37c1462f3e 100644 --- a/addons/hr_payroll/views/hr_payroll_report.xml +++ b/addons/hr_payroll/views/hr_payroll_report.xml @@ -19,13 +19,4 @@ print_report_name="'Payslip - %s' % (object.employee_id.name)" /> - diff --git a/addons/hr_payroll/views/hr_payslip_views.xml b/addons/hr_payroll/views/hr_payslip_views.xml index 8dbc78f0274..6cb0c62a4ec 100644 --- a/addons/hr_payroll/views/hr_payslip_views.xml +++ b/addons/hr_payroll/views/hr_payslip_views.xml @@ -230,17 +230,7 @@ - - - - - - - - - - - + @@ -253,7 +243,7 @@
-
+
diff --git a/addons/hr_payroll/views/report_payslipdetails_templates.xml b/addons/hr_payroll/views/report_payslipdetails_templates.xml deleted file mode 100644 index ee6a99af5dd..00000000000 --- a/addons/hr_payroll/views/report_payslipdetails_templates.xml +++ /dev/null @@ -1,101 +0,0 @@ - - - - diff --git a/addons/hr_payroll_account/models/hr_payroll_account.py b/addons/hr_payroll_account/models/hr_payroll_account.py index 989d5f260f4..1e21ae1a83a 100644 --- a/addons/hr_payroll_account/models/hr_payroll_account.py +++ b/addons/hr_payroll_account/models/hr_payroll_account.py @@ -69,7 +69,7 @@ class HrPayslip(models.Model): 'journal_id': slip.journal_id.id, 'date': date, } - for line in slip.details_by_salary_rule_category: + for line in slip.line_ids.filtered(lambda line: line.category_id): amount = slip.credit_note and -line.total or line.total if float_is_zero(amount, precision_digits=precision): continue diff --git a/addons/l10n_in_hr_payroll/report/__init__.py b/addons/l10n_in_hr_payroll/report/__init__.py index 9c4069ac8b5..464af19911a 100644 --- a/addons/l10n_in_hr_payroll/report/__init__.py +++ b/addons/l10n_in_hr_payroll/report/__init__.py @@ -1,7 +1,6 @@ # -*- coding:utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from . import report_payslip_details from . import report_payroll_advice from . import report_hr_salary_employee_bymonth from . import payment_advice_report diff --git a/addons/l10n_in_hr_payroll/report/report_payslip_details.py b/addons/l10n_in_hr_payroll/report/report_payslip_details.py deleted file mode 100644 index 373ddd89ebb..00000000000 --- a/addons/l10n_in_hr_payroll/report/report_payslip_details.py +++ /dev/null @@ -1,20 +0,0 @@ -#-*- coding:utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -from odoo import api, models - - -class PayslipDetailsReportIN(models.AbstractModel): - _name = 'report.l10n_in_hr_payroll.report_payslipdetails' - _inherit = 'report.hr_payroll.report_payslipdetails' - - @api.model - def _get_report_values(self, docids, data=None): - payslips = self.env['hr.payslip'].browse(docids) - return { - 'doc_ids': docids, - 'doc_model': 'hr.payslip', - 'docs': payslips, - 'data': data, - 'get_details_by_rule_category': self.get_details_by_rule_category(payslips.mapped('details_by_salary_rule_category')) - }