diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/hr_expense/wizard | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/hr_expense/wizard')
| -rw-r--r-- | addons/hr_expense/wizard/__init__.py | 4 | ||||
| -rw-r--r-- | addons/hr_expense/wizard/account_payment_register.py | 31 | ||||
| -rw-r--r-- | addons/hr_expense/wizard/hr_expense_refuse_reason.py | 45 | ||||
| -rw-r--r-- | addons/hr_expense/wizard/hr_expense_refuse_reason_views.xml | 27 |
4 files changed, 107 insertions, 0 deletions
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 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <record id="hr_expense_refuse_wizard_view_form" model="ir.ui.view"> + <field name="name">hr.expense.refuse.wizard.form</field> + <field name="model">hr.expense.refuse.wizard</field> + <field name="arch" type="xml"> + <form string="Expense refuse reason"> + <separator string="Reason to refuse Expense"/> + <field name="hr_expense_ids" invisible="1"/> + <field name="hr_expense_sheet_id" invisible="1"/> + <field name="reason"/> + <footer> + <button string='Refuse' name="expense_refuse_reason" type="object" class="oe_highlight"/> + <button string="Cancel" class="oe_link" special="cancel"/> + </footer> + </form> + </field> + </record> + + <record id="hr_expense_refuse_wizard_action" model="ir.actions.act_window"> + <field name="name">Refuse Expense</field> + <field name="res_model">hr.expense.refuse.wizard</field> + <field name="view_mode">form</field> + <field name="view_id" ref="hr_expense_refuse_wizard_view_form"/> + <field name="target">new</field> + </record> +</odoo> |
