Hr expense sheet
hr_expense_sheet · OCA/hr-expense
Health
57/100
fair
-
Security22/251 minor finding
-
Activity25/25Human commit this month
-
Required by5/250 modules depend on it
-
Maturity5/25In 1 Odoo series since 19.0
Heuristic over the facts below, not an audit · How it's computed
Required by
0
Modules depending on it
External deps
0 pip · 0 bin
Python packages / system binaries
License
AGPL-3
No conflicts with its dependencies
Folder size
0.26 MB
Module directory on disk
Code analysis
1 migration note
7 models
16 views
0 HTTP endpoints
Migration considerations
- Raw `cr.execute()` INSERT/UPDATE/DELETE bypasses the ORM (no compute/constrains/tracking/mail): `UPDATE hr_expense_sheet SET state = 'submitted' WHERE state = 'submit'` - re-check the table/column names still match after upgrading. (11 occurrences in this file) migration-raw-sql-write · source
Migration review checklist, not a compatibility verdict. "Migrating to X.0" applies once you upgrade to that version; "Since X.0" means this version already ignores or rejects that code. Methodology
Description
This module adds the ability to define expense sheets.
Dependencies
Code analysis
Extracted from the source by best-effort static analysis (no code is executed); details may be incomplete.
Views touched 16
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | kanban | Inherits hr_expense.hr_department_view_kanban |
hr_expense_sheet_view_activity |
hr.expense.sheet.activity | hr.expense.sheet | activity | New |
hr_expense_sheet_view_search |
hr.expense.sheet.view.search | hr.expense.sheet | search | New |
hr_expense_sheet_view_search_with_panel |
hr.expense.sheet.view.search.with.panel | hr.expense.sheet | search | Inherits hr_expense_sheet_view_search |
hr_expense_view_expenses_analysis_tree |
hr.expense | tree | Inherits hr_expense.hr_expense_view_expenses_analysis_tree | |
hr_expense_view_form |
hr.expense | form | Inherits hr_expense.hr_expense_view_form | |
hr_expense_view_search |
hr.expense | search | Inherits hr_expense.hr_expense_view_search | |
report_expense_sheet |
report_expense_sheet | ir.ui.view | qweb | New |
view_hr_expense_clean_tree |
hr.expense.list.without.dashboard | hr.expense | list | Inherits hr_expense.hr_expense_view_expenses_analysis_tree |
view_hr_expense_sheet_form |
hr.expense.sheet.form | hr.expense.sheet | form | New |
view_hr_expense_sheet_graph |
hr.expense.sheet.graph | hr.expense.sheet | graph | New |
view_hr_expense_sheet_kanban |
hr.expense.sheet.kanban | hr.expense.sheet | kanban | New |
view_hr_expense_sheet_pivot |
hr.expense.sheet.pivot | hr.expense.sheet | pivot | New |
view_hr_expense_sheet_tree |
hr.expense.sheet.list | hr.expense.sheet | list | New |
view_move_form_inherit_expense |
account.move.form.inherit | account.move | form | Inherits hr_expense.view_move_form_inherit_expense |
view_payment_form_inherit_expense |
account.payment.form.inherit | account.payment | form | Inherits hr_expense.view_payment_form_inherit_expense |
HTTP endpoints 0
No HTTP endpoints found for this module.
Models touched 7
New fields (2)
-
expense_sheet_idMany2one → hr.expense.sheetcomodel_name='hr.expense.sheet'copy=Falseindex='btree_not_null'ondelete='set null' -
show_commercial_partner_warningBooleancompute='_compute_show_commercial_partner_warning'
-
action_open_expense_report(self)
New fields (1)
-
expense_sheet_idMany2onerelated='move_id.expense_sheet_id'
-
action_open_expense_report(self)
New fields (1)
-
expense_sheets_to_approve_countIntegercompute='_compute_expense_sheets_to_approve'string='Expenses Reports to Approve'
No public methods.
New fields (4)
-
approval_dateDatetimecompute='_compute_approval_date'store=True -
employee_idMany2oneinverse='_inverse_employee_id' -
journal_idMany2onecompute='_compute_journal_id'store=True -
sheet_idMany2one → hr.expense.sheetcomodel_name='hr.expense.sheet'copy=Falsedomain="[('employee_id', '=', employee_id), ('company_id', '=', company_id)]"index=Truereadonly=Truestring='Expense Report'
-
action_get_attachment_view(self) -
action_show_same_receipt_expense_ids(self) -
action_submit_expenses(self) -
action_view_sheet(self) -
get_expenses_to_submit(self) -
unlink(self) -
update_activities_and_mails(self) -
write(self, vals)
New fields (35)
-
account_move_idsOne2many → account.movecomodel_name='account.move'inverse_name='expense_sheet_id'readonly=Truestring='Journal Entries' -
accounting_dateDatehelp='Specify the bill date of the related vendor bill.'string='Expense Report Date' -
amount_residualMonetarycompute='_compute_amount_residual'currency_field='company_currency_id'readonly=Truestore=Truestring='Amount Due' -
approval_dateDatetimereadonly=True -
approval_stateSelectioncopy=Falsereadonly=Trueselection=EXPENSE_APPROVAL_STATE -
attachment_idsOne2many → ir.attachmentcomodel_name='ir.attachment'domain="[('res_model', '=', 'hr.expense.sheet')]"inverse_name='res_id'string='Attachments of expenses' -
can_approveBooleancompute='_compute_can_approve' -
can_resetBooleancompute='_compute_can_reset' -
cannot_approve_reasonCharcompute='_compute_cannot_approve_reason' -
company_currency_idMany2one → res.currencycomodel_name='res.currency'related='company_id.currency_id'string='Report Company Currency' -
company_idMany2one → res.companycomodel_name='res.company'default=<expr>readonly=Truerequired=True -
currency_idMany2one → res.currencycomodel_name='res.currency'compute='_compute_currency_id'readonly=Truestore=True -
department_idMany2one → hr.departmentcomodel_name='hr.department'copy=Falserelated='employee_id.department_id'store=Truestring='Department' -
employee_idMany2one → hr.employeecheck_company=Truecomodel_name='hr.employee'default=<expr>domain=[('filter_for_expense', '=', True)]readonly=Truerequired=Truetracking=True -
employee_journal_idMany2one → account.journalcheck_company=Truecomodel_name='account.journal'default=<expr>domain=[('type', '=', 'purchase')]help='The journal used when the expense is paid by employee.'string='Journal' -
expense_line_idsOne2many → hr.expensecomodel_name='hr.expense'copy=Falseinverse_name='sheet_id'string='Expense Lines' -
is_editableBooleancompute='_compute_is_editable'string='Expense Lines Are Editable By Current User' -
is_multiple_currencyBooleancompute='_compute_is_multiple_currency'string='Handle lines with different currencies' -
journal_idMany2one → account.journalcheck_company=Truecomodel_name='account.journal'compute='_compute_journal_id'store=Truestring='Expense Journal' -
manager_idMany2one → res.userscomodel_name='res.users'compute='_compute_manager_id'copy=Falsedomain=<expr>store=Truetracking=True -
nameCharrequired=Truestring='Expense Report Summary'tracking=True -
nb_account_moveIntegercompute='_compute_nb_account_move'string='Number of Journal Entries' -
nb_expenseIntegercompute='_compute_nb_expense'string='Number of Expenses' -
payment_method_line_idMany2one → account.payment.method.linecomodel_name='account.payment.method.line'compute='_compute_payment_method_line_id'domain="[('id', 'in', selectable_payment_method_line_ids)]"help='The payment method used when the expense is paid by the company.'readonly=Falsestore=Truestring='Payment Method' -
payment_modeSelectionreadonly=Truerelated='expense_line_ids.payment_mode'string='Paid By'tracking=True -
payment_stateSelectioncompute='_compute_payment_state'copy=Falsereadonly=Trueselection=<expr>store=Truestring='Payment Status'tracking=True -
product_idsMany2many → product.productcheck_company=Truecomodel_name='product.product'compute='_compute_product_ids'search='_search_product_ids'string='Categories' -
selectable_payment_method_line_idsMany2many → account.payment.method.linecomodel_name='account.payment.method.line'compute='_compute_selectable_payment_method_line_ids' -
stateSelectioncompute='_compute_state'copy=Falsedefault='draft'index=Truereadonly=Truerequired=Trueselection=[('draft', 'To Submit'), ('submitted', 'Submitted'), ('approved', 'Approved'), ('posted', 'Posted'), ('in_payment', 'In Payment'), ('paid', 'Paid'), ('refused', 'Refused')]store=Truestring='Status'tracking=True -
tax_amountMonetarycompute='_compute_tax_amount'currency_field='company_currency_id'help='Tax amount in company currency'precompute=Truestore=Truestring='Tax amount' -
tax_amount_currencyMonetarycompute='_compute_tax_amount_currency'currency_field='currency_id'help='Tax amount in currency'precompute=Truestore=Truestring='Tax amount in Currency' -
total_amountMonetarycompute='_compute_total_amount'currency_field='company_currency_id'precompute=Truereadonly=Falsestore=Truestring='Total'tracking=True -
total_amount_currencyMonetarycompute='_compute_total_amount_currency'currency_field='currency_id'precompute=Truereadonly=Falsestore=Truestring='Total In Currency'tracking=True -
untaxed_amountMonetarycompute='_compute_untaxed_amount'currency_field='currency_id'precompute=Truestore=Truestring='Total Untaxed Amount' -
untaxed_amount_currencyMonetarycompute='_compute_untaxed_amount_currency'currency_field='currency_id'precompute=Truestore=Truestring='Total Untaxed Amount In Currency'
-
action_approve(self) -
action_open_account_moves(self) -
action_open_expense_view(self) -
action_post(self) -
action_refuse(self) -
action_reset(self) -
action_submit(self) -
activity_update(self) -
create(self, vals_list)@api.model_create_multi -
write(self, values)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (0)
No new fields.
Public methods (2)-
create(self, vals_list)@api.model_create_multi -
unlink(self)