summaryrefslogtreecommitdiff
path: root/addons/hr_expense/wizard
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/hr_expense/wizard
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/hr_expense/wizard')
-rw-r--r--addons/hr_expense/wizard/__init__.py4
-rw-r--r--addons/hr_expense/wizard/account_payment_register.py31
-rw-r--r--addons/hr_expense/wizard/hr_expense_refuse_reason.py45
-rw-r--r--addons/hr_expense/wizard/hr_expense_refuse_reason_views.xml27
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>