Expense Exception

hr_expense_exception
REPOSITORY
REPOSITORYOCA/hr-expense
GIT
GIThttps://github.com/OCA/hr-expense.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/hr-expense/tree/18.0/hr_expense_exception
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Ecosoft
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Ecosoft
COMMITTERS
COMMITTERSOCA-git-bot, oca-ci, Saran440
WEBSITE
WEBSITEhttps://github.com/OCA/hr-expense
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:16
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/server-tools:
    - base_exception
odoo/odoo:
    - hr_expense
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - hr
    - phone_validation
    - resource_mail
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module allows you attach several customizable exceptions to your
expense report in a way that you can filter orders by exceptions type
and fix them.

This is especially useful in an scenario for mass expense import,
because it's likely some expenses have errors when you import them (like
product not found in Odoo, wrong line format etc.)

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
hr_expense_sheet_view_search hr_expense_exception.hr_expense_sheet_view_search hr.expense.sheet filter Inherits hr_expense.hr_expense_sheet_view_search
view_hr_expense_sheet_form hr_expense_exception.view_hr_expense_sheet_form hr.expense.sheet sheet Inherits hr_expense.view_hr_expense_sheet_form
view_hr_expense_sheet_tree hr_expense_exception.view_hr_expense_sheet_tree hr.expense.sheet field Inherits hr_expense.view_hr_expense_sheet_tree
Models touched (4)

New fields (2)
  • expense_sheet_ids Many2many → hr.expense.sheet
    comodel_name='hr.expense.sheet' string='Expense Reports'
  • model Selection
    ondelete={'hr.expense.sheet': 'cascade', 'hr.expense': 'cascade'} selection_add=[('hr.expense.sheet', 'Expense Report'), ('hr.expense', 'Expense')]
Public methods (0)

No public methods.

New fields (1)
  • related_model_id Many2one → hr.expense.sheet
    args: 'hr.expense.sheet', 'Expense Report'
Public methods (1)
  • action_confirm(self)

New fields (1)
  • ignore_exception Boolean
    related='sheet_id.ignore_exception' store=True string='Ignore Exceptions'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (6)
  • action_reset_expense_sheets(self)
  • action_submit_sheet(self)
  • detect_exceptions(self)
  • expense_check_exception(self)
    @api.constrains('ignore_exception', 'expense_line_ids', 'state')
  • onchange_ignore_exception(self)
    @api.onchange('expense_line_ids')
  • test_all_draft_expenses(self)
    @api.model
REPOSITORY
REPOSITORYOCA/hr-expense
GIT
GIThttps://github.com/OCA/hr-expense.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/hr-expense/tree/15.0/hr_expense_exception
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Ecosoft
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Ecosoft
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Saran440
WEBSITE
WEBSITEhttps://github.com/OCA/hr-expense
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:39
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/server-tools:
    - base_exception
odoo/odoo:
    - hr_expense
    - hr_contract
    - hr
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
hr_expense_sheet_view_search hr_expense_exception.hr_expense_sheet_view_search hr.expense.sheet filter Inherits hr_expense.hr_expense_sheet_view_search
view_hr_expense_sheet_form hr_expense_exception.view_hr_expense_sheet_form hr.expense.sheet sheet Inherits hr_expense.view_hr_expense_sheet_form
view_hr_expense_sheet_tree hr_expense_exception.view_hr_expense_sheet_tree hr.expense.sheet field Inherits hr_expense.view_hr_expense_sheet_tree
Models touched (4)

New fields (2)
  • expense_sheet_ids Many2many → hr.expense.sheet
    comodel_name='hr.expense.sheet' string='Expense Reports'
  • model Selection
    ondelete={'hr.expense.sheet': 'cascade', 'hr.expense': 'cascade'} selection_add=[('hr.expense.sheet', 'Expense Report'), ('hr.expense', 'Expense')]
Public methods (0)

No public methods.

New fields (1)
  • related_model_id Many2one → hr.expense.sheet
    args: 'hr.expense.sheet', 'Expense Report'
Public methods (1)
  • action_confirm(self)

New fields (1)
  • ignore_exception Boolean
    related='sheet_id.ignore_exception' store=True string='Ignore Exceptions'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (6)
  • action_submit_sheet(self)
  • detect_exceptions(self)
  • expense_check_exception(self)
    @api.constrains('ignore_exception', 'expense_line_ids', 'state')
  • onchange_ignore_exception(self)
    @api.onchange('expense_line_ids')
  • reset_expense_sheets(self)
  • test_all_draft_expenses(self)
    @api.model
REPOSITORY
REPOSITORYOCA/hr-expense
GIT
GIThttps://github.com/OCA/hr-expense.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/hr-expense/tree/14.0/hr_expense_exception
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Ecosoft
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Ecosoft
COMMITTERS
COMMITTERSoca-travis, Weblate, OCA-git-bot, Kitti U, Saran440
WEBSITE
WEBSITEhttps://github.com/OCA/hr-expense
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:07
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/server-tools:
    - base_exception
odoo/odoo:
    - hr_expense
    - hr_contract
    - hr
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
hr_expense_sheet_view_search hr_expense_exception.hr_expense_sheet_view_search hr.expense.sheet filter Inherits hr_expense.hr_expense_sheet_view_search
view_hr_expense_sheet_form hr_expense_exception.view_hr_expense_sheet_form hr.expense.sheet sheet Inherits hr_expense.view_hr_expense_sheet_form
view_hr_expense_sheet_tree hr_expense_exception.view_hr_expense_sheet_tree hr.expense.sheet field Inherits hr_expense.view_hr_expense_sheet_tree
Models touched (4)

New fields (2)
  • expense_sheet_ids Many2many → hr.expense.sheet
    comodel_name='hr.expense.sheet' string='Expense Reports'
  • model Selection
    ondelete={'hr.expense.sheet': 'cascade', 'hr.expense': 'cascade'} selection_add=[('hr.expense.sheet', 'Expense Report'), ('hr.expense', 'Expense')]
Public methods (0)

No public methods.

New fields (1)
  • related_model_id Many2one → hr.expense.sheet
    args: 'hr.expense.sheet', 'Expense Report'
Public methods (1)
  • action_confirm(self)

New fields (1)
  • ignore_exception Boolean
    related='sheet_id.ignore_exception' store=True string='Ignore Exceptions'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (6)
  • action_submit_sheet(self)
  • detect_exceptions(self)
  • expense_check_exception(self)
    @api.constrains('ignore_exception', 'expense_line_ids', 'state')
  • onchange_ignore_exception(self)
    @api.onchange('expense_line_ids')
  • reset_expense_sheets(self)
  • test_all_draft_expenses(self)
    @api.model