From 3751379f1e9a4c215fb6eb898b4ccc67659b9ace Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Tue, 10 May 2022 21:51:50 +0700 Subject: initial commit 2 --- addons/hr_expense/wizard/__init__.py | 4 ++ .../hr_expense/wizard/account_payment_register.py | 31 +++++++++++++++ .../hr_expense/wizard/hr_expense_refuse_reason.py | 45 ++++++++++++++++++++++ .../wizard/hr_expense_refuse_reason_views.xml | 27 +++++++++++++ 4 files changed, 107 insertions(+) create mode 100644 addons/hr_expense/wizard/__init__.py create mode 100644 addons/hr_expense/wizard/account_payment_register.py create mode 100644 addons/hr_expense/wizard/hr_expense_refuse_reason.py create mode 100644 addons/hr_expense/wizard/hr_expense_refuse_reason_views.xml (limited to 'addons/hr_expense/wizard') diff --git a/addons/hr_expense/wizard/__init__.py b/addons/hr_expense/wizard/__init__.py new file mode 100644 index 00000000..71e37e58 --- /dev/null +++ b/addons/hr_expense/wizard/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- + +from . import hr_expense_refuse_reason +from . import account_payment_register diff --git a/addons/hr_expense/wizard/account_payment_register.py b/addons/hr_expense/wizard/account_payment_register.py new file mode 100644 index 00000000..f2235daf --- /dev/null +++ b/addons/hr_expense/wizard/account_payment_register.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- + +from odoo import models, fields, api, _ + + +class AccountPaymentRegister(models.TransientModel): + _inherit = 'account.payment.register' + + # ------------------------------------------------------------------------- + # BUSINESS METHODS + # ------------------------------------------------------------------------- + + @api.model + def _get_line_batch_key(self, line): + # OVERRIDE to set the bank account defined on the employee + res = super()._get_line_batch_key(line) + expense_sheet = self.env['hr.expense.sheet'].search([('payment_mode', '=', 'own_account'), ('account_move_id', 'in', line.move_id.ids)]) + if expense_sheet.employee_id.bank_account_id and not line.move_id.partner_bank_id: + res['partner_bank_id'] = expense_sheet.employee_id.bank_account_id.id + return res + + def _create_payments(self): + # OVERRIDE to set the 'done' state on expense sheets. + payments = super()._create_payments() + + expense_sheets = self.env['hr.expense.sheet'].search([('account_move_id', 'in', self.line_ids.move_id.ids)]) + for expense_sheet in expense_sheets: + if expense_sheet.currency_id.is_zero(expense_sheet.amount_residual): + expense_sheet.state = 'done' + + return payments diff --git a/addons/hr_expense/wizard/hr_expense_refuse_reason.py b/addons/hr_expense/wizard/hr_expense_refuse_reason.py new file mode 100644 index 00000000..f457c039 --- /dev/null +++ b/addons/hr_expense/wizard/hr_expense_refuse_reason.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models + + +class HrExpenseRefuseWizard(models.TransientModel): + """This wizard can be launched from an he.expense (an expense line) + or from an hr.expense.sheet (En expense report) + 'hr_expense_refuse_model' must be passed in the context to differentiate + the right model to use. + """ + + _name = "hr.expense.refuse.wizard" + _description = "Expense Refuse Reason Wizard" + + reason = fields.Char(string='Reason', required=True) + hr_expense_ids = fields.Many2many('hr.expense') + hr_expense_sheet_id = fields.Many2one('hr.expense.sheet') + + @api.model + def default_get(self, fields): + res = super(HrExpenseRefuseWizard, self).default_get(fields) + active_ids = self.env.context.get('active_ids', []) + refuse_model = self.env.context.get('hr_expense_refuse_model') + if refuse_model == 'hr.expense': + res.update({ + 'hr_expense_ids': active_ids, + 'hr_expense_sheet_id': False, + }) + elif refuse_model == 'hr.expense.sheet': + res.update({ + 'hr_expense_sheet_id': active_ids[0] if active_ids else False, + 'hr_expense_ids': [], + }) + return res + + def expense_refuse_reason(self): + self.ensure_one() + if self.hr_expense_ids: + self.hr_expense_ids.refuse_expense(self.reason) + if self.hr_expense_sheet_id: + self.hr_expense_sheet_id.refuse_sheet(self.reason) + + return {'type': 'ir.actions.act_window_close'} diff --git a/addons/hr_expense/wizard/hr_expense_refuse_reason_views.xml b/addons/hr_expense/wizard/hr_expense_refuse_reason_views.xml new file mode 100644 index 00000000..0e16cca3 --- /dev/null +++ b/addons/hr_expense/wizard/hr_expense_refuse_reason_views.xml @@ -0,0 +1,27 @@ + + + + hr.expense.refuse.wizard.form + hr.expense.refuse.wizard + +
+ + + + +
+
+ +
+
+ + + Refuse Expense + hr.expense.refuse.wizard + form + + new + +
-- cgit v1.2.3