Employee Advance and Clearing

hr_expense_advance_clearing
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_advance_clearing
VERSION
VERSION 1.0.6
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, Eduardo de Miguel, Christopher Rogos, David Bañón
WEBSITE
WEBSITEhttps://github.com/OCA/hr-expense
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:16
ODOO DEPENDENCIES
ODOO DEPENDENCIES 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
Standard Expenses module allow employee to do the expense reimbursement
only after the expense has been made. In other world, employee will need
to pay first and reimburse later.

This module, allow company to advance an amount to the employee.
Employee can then use that advance amount to purchase product/service
first, then back to company and do the clearing.

There can be 3 scenarios for advance and clearing

- When clearing amount = advance amount, no other operation is required.
- When clearing amount \> advance amount, company will pay the extra to
  employee.
- When clearing amount \< advance amount, employee will return the
  remain to company.

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
hr_employee_public_view_form hr.employee.public.form hr.employee.public xpath Inherits hr.hr_employee_public_view_form
hr_expense_sheet_view_search hr.expense.sheet.view.search hr.expense.sheet separator Inherits hr_expense.hr_expense_sheet_view_search
hr_expense_view_form hr.expense.view.form hr.expense h1 Inherits hr_expense.hr_expense_view_form
hr_expense_view_search hr.expense.view.search hr.expense separator Inherits hr_expense.hr_expense_view_search
view_account_payment_form account.payment.form account.payment xpath Inherits account.view_account_payment_form
view_account_payment_search account.payment.search account.payment xpath Inherits account.view_account_payment_search
view_employee_form hr.employee.form hr.employee xpath Inherits hr.view_employee_form
view_hr_expense_sheet_form hr.expense.sheet.form hr.expense.sheet xpath Inherits hr_expense.view_hr_expense_sheet_form
view_hr_expense_sheet_list hr.expense.sheet.list hr.expense.sheet field Inherits hr_expense.view_hr_expense_sheet_tree
Models touched (6)

New fields (0)

No new fields.

Public methods (3)
  • action_force_register_payment(self)
    Odoo core does not allow register payment with type 'entry'. However, a payment can be registered when clearing a document, provided the amount cleared exceeds the advance payment.
  • button_cancel(self)
  • button_draft(self)

New fields (1)
  • advance_id Many2one → hr.expense.sheet
    comodel_name='hr.expense.sheet' readonly=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • advance_count Integer
    compute='_compute_advance_count' help='Count advance sheet in expense report' string='# of Advance'
  • advance_sheet_ids One2many → hr.expense.sheet
    comodel_name='hr.expense.sheet' domain=[('advance', '=', True)] inverse_name='employee_id' readonly=True
Public methods (1)
  • action_open_advance_clearing(self)

New fields (3)
  • advance Boolean
    default=False string='Employee Advance'
  • av_line_id Many2one → hr.expense
    comodel_name='hr.expense' help='Expense created from this advance expense line' ondelete='set null' string='Ref: Advance'
  • clearing_product_id Many2one → product.product
    comodel_name='product.product' domain="[('can_be_expensed', '=', True),'|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Optional: On the clear advance, the clearing product will create default product line.' ondelete='restrict' string='Clearing Product' tracking=True
Public methods (1)
  • onchange_advance(self)
    @api.onchange('advance')

New fields (9)
  • advance Boolean
    string='Employee Advance'
  • advance_sheet_id Many2one → hr.expense.sheet
    comodel_name='hr.expense.sheet' domain="[('advance', '=', True), ('employee_id', '=', employee_id), ('clearing_residual', '>', 0.0)]" help='Show remaining advance of this employee' string='Clear Advance'
  • advance_sheet_residual Monetary
    help='Remaining amount to clear the selected advance sheet' related='advance_sheet_id.clearing_residual' store=True string='Advance Remaining'
  • amount_payable Monetary
    compute='_compute_amount_payable' help='Final regiter payment amount even after advance clearing' string='Payable Amount'
  • clearing_count Integer
    compute='_compute_clearing_count'
  • clearing_residual Monetary
    compute='_compute_clearing_residual' help='Amount to clear of this expense sheet in company currency' store=True string='Amount to clear'
  • clearing_sheet_ids One2many → hr.expense.sheet
    comodel_name='hr.expense.sheet' help='Show reference clearing on advance' inverse_name='advance_sheet_id' readonly=True string='Clearing Sheet'
  • payment_return_ids One2many → account.payment
    comodel_name='account.payment' help='Show reference return advance on advance' inverse_name='advance_id' readonly=True string='Payment Return'
  • return_count Integer
    compute='_compute_return_count' compute_sudo=True
Public methods (7)
  • action_open_clearings(self)
  • action_open_payment_return(self)
  • action_register_payment(self)
  • action_sheet_move_post(self)
    Post journal entries with clearing document
  • create_clearing_expense_line(self, line)
  • get_domain_advance_sheet_expense_line(self)
  • open_clear_advance(self)
REPOSITORY
REPOSITORYOCA/hr-expense
GIT
GIThttps://github.com/OCA/hr-expense.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/hr-expense/tree/17.0/hr_expense_advance_clearing
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 19:20:08
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr_expense
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - hr
    - phone_validation
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Standard Expenses module allow employee to do the expense reimbursement
only after the expense has been made. In other world, employee will need
to pay first and reimburse later.

This module, allow company to advance an amount to the employee.
Employee can then use that advance amount to purchase product/service
first, then back to company and do the clearing.

There can be 3 scenarios for advance and clearing

- When clearing amount = advance amount, no other operation is required.
- When clearing amount \> advance amount, company will pay the extra to
  employee.
- When clearing amount \< advance amount, employee will return the
  remain to company.

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
hr_employee_public_view_form hr.employee.public.form hr.employee.public xpath Inherits hr.hr_employee_public_view_form
hr_expense_sheet_view_search hr.expense.sheet.view.search hr.expense.sheet separator Inherits hr_expense.hr_expense_sheet_view_search
hr_expense_view_form hr.expense.view.form hr.expense h1 Inherits hr_expense.hr_expense_view_form
hr_expense_view_search hr.expense.view.search hr.expense separator Inherits hr_expense.hr_expense_view_search
view_account_payment_form account.payment.form account.payment xpath Inherits account.view_account_payment_form
view_account_payment_search account.payment.search account.payment xpath Inherits account.view_account_payment_search
view_employee_form hr.employee.form hr.employee xpath Inherits hr.view_employee_form
view_hr_expense_sheet_form hr.expense.sheet.form hr.expense.sheet field Inherits hr_expense.view_hr_expense_sheet_form
view_hr_expense_sheet_tree hr.expense.sheet.tree hr.expense.sheet field Inherits hr_expense.view_hr_expense_sheet_tree
Models touched (6)

New fields (0)

No new fields.

Public methods (2)
  • button_cancel(self)
  • button_draft(self)

New fields (1)
  • advance_id Many2one → hr.expense.sheet
    comodel_name='hr.expense.sheet' readonly=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • action_create_payments(self)
  • expense_post_return_advance(self)
    This is opposite operation of action_create_payments(), it return remaining advance from employee back to company

New fields (2)
  • advance_count Integer
    compute='_compute_advance_count' help='Count advance sheet in expense report' string='# of Advance'
  • advance_sheet_ids One2many → hr.expense.sheet
    comodel_name='hr.expense.sheet' domain=[('advance', '=', True)] inverse_name='employee_id' readonly=True
Public methods (1)
  • action_open_advance_clearing(self)

New fields (3)
  • advance Boolean
    default=False string='Employee Advance'
  • av_line_id Many2one → hr.expense
    comodel_name='hr.expense' help='Expense created from this advance expense line' ondelete='set null' string='Ref: Advance'
  • clearing_product_id Many2one → product.product
    comodel_name='product.product' domain="[('can_be_expensed', '=', True),'|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Optional: On the clear advance, the clearing product will create default product line.' ondelete='restrict' string='Clearing Product' tracking=True
Public methods (1)
  • onchange_advance(self)
    @api.onchange('advance')

New fields (7)
  • advance Boolean
    string='Employee Advance'
  • advance_sheet_id Many2one → hr.expense.sheet
    comodel_name='hr.expense.sheet' domain="[('advance', '=', True), ('employee_id', '=', employee_id), ('clearing_residual', '>', 0.0)]" help='Show remaining advance of this employee' string='Clear Advance'
  • advance_sheet_residual Monetary
    help='Remaining amount to clear the selected advance sheet' related='advance_sheet_id.clearing_residual' store=True string='Advance Remaining'
  • amount_payable Monetary
    compute='_compute_amount_payable' help='Final regiter payment amount even after advance clearing' string='Payable Amount'
  • clearing_count Integer
    compute='_compute_clearing_count'
  • clearing_residual Monetary
    compute='_compute_clearing_residual' help='Amount to clear of this expense sheet in company currency' store=True string='Amount to clear'
  • clearing_sheet_ids One2many → hr.expense.sheet
    comodel_name='hr.expense.sheet' help='Show reference clearing on advance' inverse_name='advance_sheet_id' readonly=True string='Clearing Sheet'
Public methods (6)
  • action_open_clearings(self)
  • action_register_payment(self)
  • action_sheet_move_create(self)
  • create_clearing_expense_line(self, line)
  • get_domain_advance_sheet_expense_line(self)
  • open_clear_advance(self)
REPOSITORY
REPOSITORYOCA/hr-expense
GIT
GIThttps://github.com/OCA/hr-expense.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/hr-expense/tree/16.0/hr_expense_advance_clearing
VERSION
VERSION 1.0.3
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
COMMITTERSVíctor Martínez, Weblate, OCA-git-bot, oca-ci, Saran440, Marcel Savegnago
WEBSITE
WEBSITEhttps://github.com/OCA/hr-expense
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:53
ODOO DEPENDENCIES
ODOO DEPENDENCIES 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 (9)
XML IDNameModelTypeStatus
hr_employee_public_view_form hr.employee.public.form hr.employee.public xpath Inherits hr.hr_employee_public_view_form
hr_expense_sheet_view_search hr.expense.sheet.view.search hr.expense.sheet separator Inherits hr_expense.hr_expense_sheet_view_search
hr_expense_view_form hr.expense.view.form hr.expense h1 Inherits hr_expense.hr_expense_view_form
hr_expense_view_search hr.expense.view.search hr.expense separator Inherits hr_expense.hr_expense_view_search
view_account_payment_form account.payment.form account.payment xpath Inherits account.view_account_payment_form
view_account_payment_search account.payment.search account.payment xpath Inherits account.view_account_payment_search
view_employee_form hr.employee.form hr.employee xpath Inherits hr.view_employee_form
view_hr_expense_sheet_form hr.expense.sheet.form hr.expense.sheet field Inherits hr_expense.view_hr_expense_sheet_form
view_hr_expense_sheet_tree hr.expense.sheet.tree hr.expense.sheet field Inherits hr_expense.view_hr_expense_sheet_tree
Models touched (6)

New fields (0)

No new fields.

Public methods (2)
  • button_cancel(self)
  • button_draft(self)

New fields (1)
  • advance_id Many2one → hr.expense.sheet
    comodel_name='hr.expense.sheet' readonly=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • action_create_payments(self)
  • default_get(self, fields_list)
    @api.model
  • expense_post_return_advance(self)
    This is opposite operation of action_create_payments(), it return remaining advance from employee back to company

New fields (2)
  • advance_count Integer
    compute='_compute_advance_count' help='Count advance sheet in expense report' string='# of Advance'
  • advance_sheet_ids One2many → hr.expense.sheet
    comodel_name='hr.expense.sheet' domain=[('advance', '=', True)] inverse_name='employee_id' readonly=True
Public methods (1)
  • action_open_advance_clearing(self)

New fields (3)
  • advance Boolean
    default=False string='Employee Advance'
  • av_line_id Many2one → hr.expense
    comodel_name='hr.expense' help='Expense created from this advance expense line' ondelete='set null' string='Ref: Advance'
  • clearing_product_id Many2one → product.product
    comodel_name='product.product' domain="[('can_be_expensed', '=', True),'|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Optional: On the clear advance, the clearing product will create default product line.' ondelete='restrict' string='Clearing Product' tracking=True
Public methods (1)
  • onchange_advance(self)
    @api.onchange('advance')

New fields (7)
  • advance Boolean
    string='Employee Advance'
  • advance_sheet_id Many2one → hr.expense.sheet
    comodel_name='hr.expense.sheet' domain="[('advance', '=', True), ('employee_id', '=', employee_id), ('clearing_residual', '>', 0.0)]" help='Show remaining advance of this employee' readonly=True states={'draft': [('readonly', False)], 'submit': [('readonly', False)], 'approve': [('readonly', False)]} string='Clear Advance'
  • advance_sheet_residual Monetary
    help='Remaining amount to clear the selected advance sheet' related='advance_sheet_id.clearing_residual' store=True string='Advance Remaining'
  • amount_payable Monetary
    compute='_compute_amount_payable' help='Final regiter payment amount even after advance clearing' string='Payable Amount'
  • clearing_count Integer
    compute='_compute_clearing_count'
  • clearing_residual Monetary
    compute='_compute_clearing_residual' help='Amount to clear of this expense sheet in company currency' store=True string='Amount to clear'
  • clearing_sheet_ids One2many → hr.expense.sheet
    comodel_name='hr.expense.sheet' help='Show reference clearing on advance' inverse_name='advance_sheet_id' readonly=True string='Clearing Sheet'
Public methods (6)
  • action_open_clearings(self)
  • action_register_payment(self)
  • action_sheet_move_create(self)
  • create_clearing_expense_line(self, line)
  • get_domain_advance_sheet_expense_line(self)
  • open_clear_advance(self)
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_advance_clearing
VERSION
VERSION 1.3.2
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
COMMITTERSPedro M. Baeza, Weblate, OCA-git-bot, oca-ci, Saran440, Marcel Savegnago, ps-tubtim
WEBSITE
WEBSITEhttps://github.com/OCA/hr-expense
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:39
ODOO DEPENDENCIES
ODOO DEPENDENCIES 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 (9)
XML IDNameModelTypeStatus
hr_employee_public_view_form hr.employee.public.form hr.employee.public xpath Inherits hr.hr_employee_public_view_form
hr_expense_sheet_view_search hr.expense.sheet.view.search hr.expense.sheet separator Inherits hr_expense.hr_expense_sheet_view_search
hr_expense_view_form hr.expense.view.form hr.expense h1 Inherits hr_expense.hr_expense_view_form
hr_expense_view_search hr.expense.view.search hr.expense separator Inherits hr_expense.hr_expense_view_search
view_account_payment_form account.payment.form account.payment xpath Inherits account.view_account_payment_form
view_account_payment_search account.payment.search account.payment xpath Inherits account.view_account_payment_search
view_employee_form hr.employee.form hr.employee xpath Inherits hr.view_employee_form
view_hr_expense_sheet_form hr.expense.sheet.form hr.expense.sheet field Inherits hr_expense.view_hr_expense_sheet_form
view_hr_expense_sheet_tree hr.expense.sheet.tree hr.expense.sheet field Inherits hr_expense.view_hr_expense_sheet_tree
Models touched (6)

New fields (0)

No new fields.

Public methods (2)
  • button_cancel(self)
  • button_draft(self)

New fields (1)
  • advance_id Many2one → hr.expense.sheet
    comodel_name='hr.expense.sheet' readonly=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • action_create_payments(self)
  • default_get(self, fields_list)
    @api.model
  • expense_post_return_advance(self)
    This is opposite operation of action_create_payments(), it return remaining advance from employee back to company

New fields (2)
  • advance_count Integer
    compute='_compute_advance_count' help='Count advance sheet in expense report' string='# of Advance'
  • advance_sheet_ids One2many → hr.expense.sheet
    comodel_name='hr.expense.sheet' domain=[('advance', '=', True)] inverse_name='employee_id' readonly=True
Public methods (1)
  • action_open_advance_clearing(self)

New fields (3)
  • advance Boolean
    default=False string='Employee Advance'
  • av_line_id Many2one → hr.expense
    comodel_name='hr.expense' help='Expense created from this advance expense line' ondelete='set null' string='Ref: Advance'
  • clearing_product_id Many2one → product.product
    comodel_name='product.product' domain="[('can_be_expensed', '=', True),'|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Optional: On the clear advance, the clearing product will create default product line.' ondelete='restrict' string='Clearing Product' tracking=True
Public methods (1)
  • onchange_advance(self)
    @api.onchange('advance')

New fields (7)
  • advance Boolean
    string='Employee Advance'
  • advance_sheet_id Many2one → hr.expense.sheet
    comodel_name='hr.expense.sheet' domain="[('advance', '=', True), ('employee_id', '=', employee_id), ('clearing_residual', '>', 0.0)]" help='Show remaining advance of this employee' readonly=True states={'draft': [('readonly', False)], 'submit': [('readonly', False)], 'approve': [('readonly', False)]} string='Clear Advance'
  • advance_sheet_residual Monetary
    help='Remaining amount to clear the selected advance sheet' related='advance_sheet_id.clearing_residual' store=True string='Advance Remaining'
  • amount_payable Monetary
    compute='_compute_amount_payable' help='Final regiter payment amount even after advance clearing' string='Payable Amount'
  • clearing_count Integer
    compute='_compute_clearing_count'
  • clearing_residual Monetary
    compute='_compute_clearing_residual' help='Amount to clear of this expense sheet in company currency' store=True string='Amount to clear'
  • clearing_sheet_ids One2many → hr.expense.sheet
    comodel_name='hr.expense.sheet' help='Show reference clearing on advance' inverse_name='advance_sheet_id' readonly=True string='Clearing Sheet'
Public methods (6)
  • action_open_clearings(self)
  • action_register_payment(self)
  • action_sheet_move_create(self)
  • create_clearing_expense_line(self, line)
  • get_domain_advance_sheet_expense_line(self)
  • open_clear_advance(self)
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_advance_clearing
VERSION
VERSION 1.5.8
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, oca-ci, Kitti U, Saran440, Marcel Savegnago, ps-tubtim, oca-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/hr-expense
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:07
ODOO DEPENDENCIES
ODOO DEPENDENCIES 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 (7)
XML IDNameModelTypeStatus
hr_employee_public_view_form hr.employee.public.form hr.employee.public xpath Inherits hr.hr_employee_public_view_form
hr_expense_sheet_view_search hr.expense.sheet.view.search hr.expense.sheet separator Inherits hr_expense.hr_expense_sheet_view_search
hr_expense_view_form hr.expense.view.form hr.expense h1 Inherits hr_expense.hr_expense_view_form
hr_expense_view_search hr.expense.view.search hr.expense separator Inherits hr_expense.hr_expense_view_search
view_employee_form hr.employee.form hr.employee xpath Inherits hr.view_employee_form
view_hr_expense_sheet_form hr.expense.sheet.form hr.expense.sheet field Inherits hr_expense.view_hr_expense_sheet_form
view_hr_expense_sheet_tree hr.expense.sheet.tree hr.expense.sheet field Inherits hr_expense.view_hr_expense_sheet_tree
Models touched (5)

New fields (0)

No new fields.

Public methods (2)
  • button_cancel(self)
  • button_draft(self)

New fields (0)

No new fields.

Public methods (3)
  • action_create_payments(self)
  • default_get(self, fields_list)
    @api.model
  • expense_post_return_advance(self)
    This is opposite operation of action_create_payments(), it return remaining advance from employee back to company

New fields (2)
  • advance_count Integer
    compute='_compute_advance_count' help='Count advance sheet in expense report' string='# of Advance'
  • advance_sheet_ids One2many → hr.expense.sheet
    comodel_name='hr.expense.sheet' domain=[('advance', '=', True)] inverse_name='employee_id' readonly=True
Public methods (1)
  • action_open_advance_clearing(self)

New fields (3)
  • advance Boolean
    default=False string='Employee Advance'
  • av_line_id Many2one → hr.expense
    comodel_name='hr.expense' help='Expense created from this advance expense line' ondelete='set null' string='Ref: Advance'
  • clearing_product_id Many2one → product.product
    comodel_name='product.product' domain="[('can_be_expensed', '=', True),'|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Optional: On the clear advance, the clearing product will create default product line.' ondelete='restrict' string='Clearing Product' tracking=True
Public methods (1)
  • onchange_advance(self)
    @api.onchange('advance')

New fields (6)
  • advance Boolean
    compute='_compute_advance' store=True string='Employee Advance'
  • advance_sheet_id Many2one → hr.expense.sheet
    comodel_name='hr.expense.sheet' domain="[('advance', '=', True), ('employee_id', '=', employee_id), ('clearing_residual', '>', 0.0)]" help='Show remaining advance of this employee' readonly=True states={'draft': [('readonly', False)], 'submit': [('readonly', False)], 'approve': [('readonly', False)]} string='Clear Advance'
  • advance_sheet_residual Monetary
    help='Remaining amount to clear the selected advance sheet' related='advance_sheet_id.clearing_residual' store=True string='Advance Remaining'
  • amount_payable Monetary
    compute='_compute_amount_payable' help='Final regiter payment amount even after advance clearing' string='Payable Amount'
  • clearing_residual Monetary
    compute='_compute_clearing_residual' help='Amount to clear of this expense sheet in company currency' store=True string='Amount to clear'
  • clearing_sheet_ids One2many → hr.expense.sheet
    comodel_name='hr.expense.sheet' help='Show reference clearing on advance' inverse_name='advance_sheet_id' readonly=True string='Clearing Sheet'
Public methods (5)
  • action_register_payment(self)
  • action_sheet_move_create(self)
  • create_clearing_expense_line(self, line)
  • get_domain_advance_sheet_expense_line(self)
  • open_clear_advance(self)
REPOSITORY
REPOSITORYOCA/hr-expense
GIT
GIThttps://github.com/OCA/hr-expense.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/hr-expense/tree/13.0/hr_expense_advance_clearing
VERSION
VERSION 1.2.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-travis, Weblate, OCA-git-bot, Kitti U, newtratip, Saran440
WEBSITE
WEBSITEhttps://github.com/OCA/hr-expense
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:17
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr_expense
    - hr_contract
    - hr
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
    - mail_bot
    - 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.sheet.view.search hr.expense.sheet separator Inherits hr_expense.hr_expense_sheet_view_search
hr_expense_view_view hr.expense.form hr.expense h1 Inherits hr_expense.hr_expense_view_form
view_hr_expense_sheet_form view.hr.expense.sheet.form hr.expense.sheet field Inherits hr_expense.view_hr_expense_sheet_form
Models touched (3)

New fields (1)
  • advance Boolean
    default=False string='Employee Advance'
Public methods (1)
  • onchange_advance(self)
    @api.onchange('advance')

New fields (5)
  • advance Boolean
    compute='_compute_advance' store=True string='Employee Advance'
  • advance_sheet_id Many2one → hr.expense.sheet
    comodel_name='hr.expense.sheet' domain="[('advance', '=', True), ('employee_id', '=', employee_id), ('clearing_residual', '>', 0.0)]" help='Show remaining advance of this employee' readonly=True states={'draft': [('readonly', False)], 'submit': [('readonly', False)], 'approve': [('readonly', False)]} string='Clear Advance'
  • advance_sheet_residual Monetary
    help='Remaining amount to clear the selected advance sheet' related='advance_sheet_id.clearing_residual' store=True string='Advance Remaining'
  • amount_payable Monetary
    compute='_compute_amount_payable' help='Final regiter payment amount even after advance clearing' string='Payable Amount'
  • clearing_residual Monetary
    compute='_compute_clearing_residual' help='Amount to clear of this expense sheet in company currency' store=True string='Amount to clear'
Public methods (2)
  • action_sheet_move_create(self)
  • open_clear_advance(self)

New fields (0)

No new fields.

Public methods (3)
  • default_get(self, field_list)
    @api.model
  • expense_post_payment(self)
  • expense_post_return_advance(self)
    This is opposite operation of expense_post_payment(), it return remaining advance from employee back to company
REPOSITORY
REPOSITORYOCA/hr
GIT
GIThttps://github.com/OCA/hr.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/hr/tree/12.0/hr_expense_advance_clearing
VERSION
VERSION 1.3.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
COMMITTERSdavid, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Kitti U, Saran440, kittiu
WEBSITE
WEBSITEhttps://github.com/OCA/hr
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:19
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr_expense
    - hr_contract
    - hr
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
    - account
    - product
    - decimal_precision
    - uom
    - analytic
    - portal
    - http_routing
    - digest
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
hr_expense_view_view hr.expense.form hr.expense h1 Inherits hr_expense.hr_expense_view_form
view_hr_expense_sheet_filter hr.expense.sheet.filter hr.expense.sheet separator Inherits hr_expense.view_hr_expense_sheet_filter
view_hr_expense_sheet_form view.hr.expense.sheet.form hr.expense.sheet field Inherits hr_expense.view_hr_expense_sheet_form
Models touched (4)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • advance Boolean
    default=False string='Employee Advance'
Public methods (1)
  • onchange_advance(self)
    @api.onchange('advance')

New fields (5)
  • advance Boolean
    compute='_compute_advance' store=True string='Employee Advance'
  • advance_sheet_id Many2one → hr.expense.sheet
    comodel_name='hr.expense.sheet' domain="[('advance', '=', True), ('employee_id', '=', employee_id), ('clearing_residual', '>', 0.0)]" help='Show remaining advance of this employee' readonly=True states={'draft': [('readonly', False)], 'submit': [('readonly', False)], 'approve': [('readonly', False)]} string='Clear Advance'
  • advance_sheet_residual Monetary
    help='Remaining amount to clear the selected advance sheet' related='advance_sheet_id.clearing_residual' store=True string='Advance Remaining'
  • amount_payable Monetary
    compute='_compute_amount_payable' help='Final regiter payment amount even after advance clearing' string='Payable Amount'
  • clearing_residual Monetary
    compute='_compute_clearing_residual' help='Amount to clear of this expense sheet in company currency' store=True string='Amount to clear'
Public methods (2)
  • action_sheet_move_create(self)
    @api.multi
  • open_clear_advance(self)
    @api.multi

New fields (0)

No new fields.

Public methods (3)
  • default_get(self, field_list)
    @api.model
  • expense_post_payment(self)
    @api.multi
  • expense_post_return_advance(self)
    @api.multi
    This is opposite operation of expense_post_payment(), it return remaining advance from employee back to company
STATUS
STATUSOpen migration PR - not merged yet for this version
REPOSITORY
REPOSITORYOCA/hr-expense
PULL REQUEST
PULL REQUEST[19.0][MIG] hr_expense_advance_clearing: Migration to 19.0 (#358)