TIP: You can type at any time to perform a new search.
Stay
stay · OCA/vertical-abbey
- Repository
- OCA/vertical-abbey · module folder · Try on Runboat
- Module version
- 1.0.0
- Category
- Lodging
- Folder size
- 0.59 MB
- License
- AGPL-3
- Application
- Yes
- Auto-installable
- No
- Website
- https://github.com/OCA/vertical-abbey
- Last tracking update
- 2026-08-07 08:43:07
- Authors
- Akretion, Odoo Community Association (OCA), Barroux Abbey
- Maintainers
- Akretion, Odoo Community Association (OCA), Barroux Abbey
- Committers
- Alexis de Lattre, OCA-git-bot, oca-ci
- Odoo dependencies
- Python dependencies
- xlsxwriter
- System dependencies
- None
- Required by
- donation_stay, stay_api, stay_report_py3o
- Description
This module manages stays ; it handles lunches, dinners and bed nights. It allows the booking of rooms and dormitories with capacity check. It has been initially developped by the [Barroux Abbey](https://www.barroux.org/) to manage the stays of the guests at the abbey and has been adopted by several other French abbeys.
Code Analysis ⓘ
Views touched (54)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
report_stayjournalmeal |
report_stayjournalmeal | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings | form | Inherits base.res_config_settings_view_form | |
stay.report_stayjournalmeal_document |
stay.report_stayjournalmeal_document | ir.ui.view | qweb | New |
stay_building_form |
stay.building | form | New | |
stay_building_search |
stay.building | search | New | |
stay_building_tree |
stay.building | list | New | |
stay_calendar |
stay.calendar | stay.stay | calendar | New |
stay_date_label_calendar |
stay.date.label.calendar | stay.date.label | calendar | New |
stay_date_label_form |
stay.date.label.form | stay.date.label | form | New |
stay_date_label_search |
stay.date.label.search | stay.date.label | search | New |
stay_date_label_tree |
stay.date.label.list | stay.date.label | list | New |
stay_fire_print_form |
stay_fire_print.form | stay.fire.print | form | New |
stay_form |
stay.form | stay.stay | form | New |
stay_graph |
stay.graph | stay.stay | graph | New |
stay_group_form |
stay.group.form | stay.group | form | New |
stay_group_search |
stay.group.search | stay.group | search | New |
stay_group_tree |
stay.group.list | stay.group | list | New |
stay_journal_print_form |
stay_journal_print.form | stay.journal.print | form | New |
stay_line_form |
stay.line.form | stay.line | form | New |
stay_line_graph |
stay.line.graph | stay.line | graph | New |
stay_line_mass_update_form |
stay.line.mass.update | form | New | |
stay_line_pivot |
stay.line.pivot | stay.line | pivot | New |
stay_line_reset |
stay.line.reset | form | New | |
stay_line_search |
stay.line.search | stay.line | search | New |
stay_line_tree |
stay.line.list | stay.line | list | New |
stay_multi_duplicate_form |
stay.multi.duplicate | form | New | |
stay_pivot |
stay.graph | stay.stay | pivot | New |
stay_refectory_form |
stay.refectory.form | stay.refectory | form | New |
stay_refectory_search |
stay.refectory.search | stay.refectory | search | New |
stay_refectory_tree |
stay.refectory.list | stay.refectory | list | New |
stay_room_assign_calendar |
stay.room.assign | calendar | New | |
stay_room_assign_detailed_form |
stay.room.assign | form | New | |
stay_room_assign_form |
stay.room.assign | form | New | |
stay_room_assign_pivot |
stay.room.assign | pivot | New | |
stay_room_assign_search |
stay.room.assign.search | stay.room.assign | search | New |
stay_room_assign_timeline |
stay.room.assign.timeline | stay.room.assign | New | |
stay_room_assign_tree |
stay.room.assign | list | New | |
stay_room_form |
stay.room.form | stay.room | form | New |
stay_room_mass_assign_form |
stay.room.mass.assign | form | New | |
stay_room_search |
stay.room.search | stay.room | search | New |
stay_room_to_clean_tree |
stay.room.list | stay.room | list | New |
stay_room_tree |
stay.room.list | stay.room | list | New |
stay_search |
stay.search | stay.stay | search | New |
stay_stay_xlsx_form |
stay.stay.xlsx.form | stay.stay.xlsx | form | New |
stay_tag_form |
stay.tag | form | New | |
stay_tag_search |
stay.tag | search | New | |
stay_tag_tree |
stay.tag | list | New | |
stay_toclean_print_form |
stay_toclean_print.form | stay.toclean.print | form | New |
stay_tree |
stay.list | stay.stay | list | New |
stay_tree_reverse_order |
stay.list.reverse.order | stay.stay | list | New |
stay_tree_with_kpis |
stay.list | stay.stay | list | New |
view_partner_form |
stay.button.res.partner.form | res.partner | form | Inherits base.view_partner_form |
view_users_form |
donation.res.users.form | res.users | form | Inherits base.view_users_form |
view_users_form_simple_modif |
donation.preferences.res.users.form | res.users | form | Inherits base.view_users_form_simple_modif |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (21)
New fields (2)
-
default_refectory_idMany2one → stay.refectorycheck_company=Trueondelete='restrict'string='Default Refectory' args: 'stay.refectory' -
stay_notify_user_idsMany2many → res.userscolumn1='res_company_id'column2='res_users_id'relation='stay_notify_company_user_rel'string='Users Notified by E-mail for Stays without Group' args: 'res.users'
No public methods.
New fields (6)
-
group_stay_breakfastBooleanimplied_group='stay.group_stay_breakfast'string='Manage Breakfast' -
group_stay_groupBooleanimplied_group='stay.group_stay_group'string='Manage Stay Groups' -
group_stay_picnicBooleanimplied_group='stay.group_stay_picnic'string='Manage Picnic' -
stay_default_refectory_idMany2onereadonly=Falserelated='company_id.default_refectory_id' -
stay_notify_user_idsMany2manyreadonly=Falserelated='company_id.stay_notify_user_ids' -
stay_room_transitionSelectionconfig_parameter='stay.room_transition'string='Room Transition' args: [('one_empty_period', 'One Empty Period'), ('immediate', 'Immediate'), ('night', 'Night')]
No public methods.
New fields (2)
-
stay_countIntegercompute='_compute_stay_count'compute_sudo=Truestring='# of Stays' -
stay_idsOne2many → stay.staystring='Stays' args: 'stay.stay', 'partner_id'
No public methods.
New fields (1)
-
context_stay_group_idMany2one → stay.groupargs: 'stay.group', 'Stay Group'
No public methods.
New fields (4)
-
activeBooleandefault=True -
nameCharrequired=True -
room_idsOne2many → stay.roomstring='Rooms' args: 'stay.room', 'building_id' -
sequenceInteger
No public methods.
New fields (2)
-
dateDateindex=Truerequired=True -
nameCharstring='Label'
No public methods.
New fields (2)
-
company_idMany2one → res.companydefault=<expr>required=True args: 'res.company' -
dateDatedefault=<expr>required=True
-
run(self)
New fields (7)
-
company_idMany2one → res.companydefault=<expr>index=Trueondelete='cascade'required=Truestring='Company' args: 'res.company' -
default_no_mealsBooleanstring='No Meals by Default' -
default_refectory_idMany2one → stay.refectorycheck_company=Trueondelete='restrict'string='Default Refectory' args: 'stay.refectory' -
nameCharrequired=Truestring='Group Name' -
notify_user_idsMany2many → res.usersstring='Users Notified by E-mail' args: 'res.users' -
room_idsOne2many → stay.roomstring='Rooms' args: 'stay.room', 'group_id' -
sequenceInteger
No public methods.
New fields (4)
-
company_idMany2one → res.companydefault=<expr>required=True args: 'res.company' -
dateDatedefault=_default_daterequired=True -
date_labelCharcompute='_compute_date_label' -
report_typeSelectiondefault='general'required=True args: [('general', 'General'), ('meal', 'Meals'), ('arrival', 'Arrivals')]
-
get_report_by_refectory(self)Method for the report (replace report parser) -
print_journal(self) -
print_journal_arrival(self) -
print_journal_general(self) -
print_journal_meal(self) -
report_arrival_data(self) -
report_date_formatted(self) -
report_edit_datetime(self) -
report_general_data(self)
New fields (14)
-
bed_night_qtyIntegerstring='Bed Nights' -
breakfast_qtyIntegerstring='Breakfast' -
company_idMany2one → res.companydefault=<expr>index=Truerequired=True args: 'res.company' -
dateDatedefault=fields.Date.context_todayindex=Truerequired=True -
dinner_qtyIntegerstring='Dinners' -
group_idMany2one → stay.groupcompute='_compute_group_id'index=Truereadonly=Falsestore=True args: 'stay.group' -
lunch_qtyIntegerstring='Lunches' -
my_stay_groupBooleancompute='_compute_my_stay_group'search='_search_my_stay_group' -
partner_idMany2one → res.partnerhelp='If guest is anonymous, leave this field empty.'string='Guest' args: 'res.partner' -
partner_nameTextcompute='_compute_partner_name'precompute=Truereadonly=Falserequired=Truestore=Truestring='Guest Names' -
picnic_lunch_qtyIntegerstring='Picnic' -
refectory_idMany2one → stay.refectorycheck_company=Truedefault=<expr> args: 'stay.refectory' -
rooms_display_nameCharrelated='stay_id.rooms_display_name'store=True -
stay_idMany2one → stay.staycheck_company=Trueondelete='cascade' args: 'stay.stay'
No public methods.
New fields (9)
-
convert_lunch_to_picnicBooleanstring='Convert Lunches to Picnics' -
end_dateDaterequired=True -
no_bed_nightBooleanstring='No Bed Nights' -
no_breakfastBooleanstring='No Breakfasts' -
no_dinnerBooleanstring='No Dinners' -
no_lunchBooleanstring='No Lunches' -
refectory_idMany2one → stay.refectorystring='New Refectory' args: 'stay.refectory' -
start_dateDaterequired=True -
stay_idMany2one → stay.stayreadonly=Truerequired=True args: 'stay.stay'
-
apply(self) -
default_get(self, fields_list)@api.model
New fields (1)
-
stay_idMany2one → stay.stayreadonly=Truerequired=True args: 'stay.stay'
-
default_get(self, fields_list)@api.model -
reset_lines(self)
New fields (7)
-
create_stateSelectiondefault='draft'required=True args: [('draft', 'Draft'), ('confirm', 'Confirmed')] -
end_dateDaterequired=True -
frequencySelectiondefault='weekly'required=True args: [('weekly', 'Weekly')] -
keep_assignmentsBooleandefault=Truestring='Keep assignments?' -
keep_notesBooleanstring='Keep Notes?' -
start_dateDatedefault=fields.Date.context_todayrequired=True -
stay_idMany2one → stay.stayreadonly=Truerequired=True args: 'stay.stay'
-
default_get(self, fields_list)@api.model -
run(self)
New fields (6)
-
activeBooleandefault=True -
capacityInteger -
codeCharsize=10 -
company_idMany2one → res.companydefault=<expr>index=Trueondelete='cascade'required=True args: 'res.company' -
nameCharrequired=True -
sequenceIntegerdefault=10
No public methods.
New fields (18)
-
activeBooleandefault=True -
allow_simultaneousBooleancompute='_compute_allow_simultaneous'help='This option applies for rooms where bed quantity > 1. You should enable this option if you allow to have several stays at the same time in the room.'precompute=Truereadonly=Falsestore=True -
bed_qtyIntegerdefault=1string='Number of beds' -
building_idMany2one → stay.buildingindex=Trueondelete='restrict' args: 'stay.building' -
codeCharcopy=Falsesize=10 -
company_idMany2one → res.companydefault=<expr>index=Trueondelete='cascade'required=True args: 'res.company' -
fire_report_excludeBooleanstring='Exclude from Fire Report' -
fire_report_sequenceIntegerstring='Order for Fire Report' -
group_idMany2one → stay.groupcheck_company=Truedomain="[('company_id', '=', company_id)]"index=True args: 'stay.group' -
my_stay_groupBooleancompute='_compute_my_stay_group'search='_search_my_stay_group' -
nameCharcopy=Falserequired=True -
next_stay_arrival_dateDatecompute='_compute_next_stay' -
next_stay_arrival_timeSelectioncompute='_compute_next_stay' args: [('morning', 'Morning'), ('afternoon', 'Afternoon'), ('evening', 'Evening'), ('unknown', 'Unknown')] -
next_stay_idMany2one → stay.staycompute='_compute_next_stay' args: 'stay.stay' -
next_stay_partner_nameCharcompute='_compute_next_stay' -
notesText -
sequenceIntegerdefault=10 -
to_cleanCharhelp='When the field has a value, it means the room must be cleaned (when a stay is terminated, this field is auto-set with the stay description). When the room is cleaned, the field is emptied.'
-
action_archive(self) -
mark_as_cleaned(self)
New fields (24)
-
activeBooleanrelated='room_id.active'store=True -
arrival_dateDatereadonly=Falserelated='stay_id.arrival_date'store=True -
arrival_datetimeDatetimerelated='stay_id.arrival_datetime'store=True -
arrival_noteCharreadonly=Falserelated='stay_id.arrival_note'store=True -
arrival_timeSelectionreadonly=Falserelated='stay_id.arrival_time'store=True -
company_idMany2oneindex=Truerelated='stay_id.company_id'store=True -
conflict_room_idsMany2many → stay.roomcompute='_compute_conflict_room_ids'string='Conflict Rooms' args: 'stay.room' -
constructionBooleanrelated='stay_id.construction'store=True -
departure_dateDatereadonly=Falserelated='stay_id.departure_date'store=True -
departure_datetimeDatetimerelated='stay_id.departure_datetime'store=True -
departure_noteCharreadonly=Falserelated='stay_id.departure_note'store=True -
departure_timeSelectionreadonly=Falserelated='stay_id.departure_time'store=True -
group_idMany2oneindex=Truerelated='room_id.group_id'store=True -
guest_qtyIntegerrequired=Truestring='Guest Quantity' -
my_stay_groupBooleancompute='_compute_my_stay_group'search='_search_my_stay_group' -
notesTextreadonly=Falserelated='stay_id.notes'store=True -
partner_idMany2onerelated='stay_id.partner_id'store=True -
partner_nameTextrelated='stay_id.partner_name'store=True -
partner_name_roomCharstring='Guest (optional)' -
room_idMany2one → stay.roomcheck_company=Truedomain="[('id', 'not in', conflict_room_ids), ('company_id', '=', company_id), ('group_id', 'in', (False, stay_group_id))]"index=Trueondelete='restrict'required=True args: 'stay.room' -
stateSelectionrelated='stay_id.state'store=True -
stay_group_idMany2onerelated='stay_id.group_id'store=Truestring='Stay Group' -
stay_idMany2one → stay.stayindex=Trueondelete='cascade' args: 'stay.stay' -
tag_idsMany2manyreadonly=Falserelated='stay_id.tag_ids'
-
room_id_change(self)@api.onchange('room_id') -
show_stay(self)
New fields (6)
-
assign_typeSelectiondefault='single'required=Truestring='Assignation' args: [('single', 'One Guest per Room'), ('full', 'Maximum Capacity')] -
company_idMany2onerelated='stay_id.company_id' -
conflict_room_idsMany2many → stay.roomcompute='_compute_conflict_room_ids'string='Conflict Rooms' args: 'stay.room' -
group_idMany2onerelated='stay_id.group_id' -
room_idsMany2many → stay.roomdomain="[('id', 'not in', conflict_room_ids), ('company_id', '=', company_id), ('group_id', 'in', (False, group_id))]"required=Truestring='Rooms' args: 'stay.room' -
stay_idMany2one → stay.stayreadonly=True args: 'stay.stay'
-
default_get(self, fields_list)@api.model -
run(self)
New fields (30)
-
arrival_dateDateindex=Truerequired=Truetracking=True -
arrival_datetimeDatetimecompute='_compute_arrival_datetime'inverse='_inverse_arrival_datetime'store=Truestring='Arrival Date and Time' -
arrival_noteChar -
arrival_timeSelectionrequired=Truetracking=True args: [('morning', 'Morning'), ('afternoon', 'Afternoon'), ('evening', 'Evening'), ('unknown', 'Unknown')] -
assign_statusSelectioncompute='_compute_room_assignment'store=True args: [('none', 'Waiting Assignation'), ('no_night', 'No Nights'), ('partial', 'Partial'), ('assigned', 'Assigned'), ('over-assigned', 'Over Assigned'), ('error', 'Error')] -
clash_time_next_stay_idMany2one → stay.staycompute='_compute_preceding_next_stay_id'help='Next stay which arrives before the departure in the same room(s)'string='Next Stay which arrives before' args: 'stay.stay' -
clash_time_preceding_stay_idMany2one → stay.staycompute='_compute_preceding_next_stay_id'help='Preceding stay which leaves later that the arrival in the same room(s)'string='Preceding Stay which leaves later' args: 'stay.stay' -
company_idMany2one → res.companydefault=<expr>index=Truereadonly=Truerequired=True args: 'res.company' -
constructionBoolean -
departure_dateDateindex=Truerequired=Truetracking=True -
departure_datetimeDatetimecompute='_compute_departure_datetime'inverse='_inverse_departure_datetime'store=Truestring='Departure Date and Time' -
departure_noteChar -
departure_timeSelectionrequired=Truetracking=True args: [('morning', 'Morning'), ('afternoon', 'Afternoon'), ('evening', 'Evening'), ('unknown', 'Unknown')] -
group_idMany2one → stay.groupcheck_company=Truecopy=Falsedefault=<expr>domain="[('company_id', '=', company_id)]"index=Trueondelete='restrict'tracking=True args: 'stay.group' -
guest_qtyIntegerdefault=1string='Guest Quantity'tracking=True -
guest_qty_to_assignIntegercompute='_compute_room_assignment'store=True -
line_idsOne2many → stay.linestring='Stay Lines' args: 'stay.line', 'stay_id' -
my_stay_groupBooleancompute='_compute_my_stay_group'search='_search_my_stay_group' -
nameCharcopy=Falsedefault=<expr>string='Stay Number' -
no_mealsBooleancompute='_compute_refectory_id'help='The stay lines generated from this stay will not have breakfast/lunch/dinner by default.'precompute=Truereadonly=Falsestore=Truetracking=True -
notesText -
partner_idMany2one → res.partnerhelp='If guest is anonymous, leave this field empty.'ondelete='restrict'string='Guest' args: 'res.partner' -
partner_nameTextcompute='_compute_partner_name'precompute=Truereadonly=Falserequired=Truestore=Truestring='Guest Names'tracking=True -
refectory_idMany2one → stay.refectorycheck_company=Truecompute='_compute_refectory_id'precompute=Truereadonly=Falsestore=True args: 'stay.refectory' -
room_assign_idsOne2many → stay.room.assigncopy=Truestring='Room Assignments' args: 'stay.room.assign', 'stay_id' -
rooms_display_nameCharcompute='_compute_room_assignment'store=Truestring='Rooms' -
same_time_next_stay_idMany2one → stay.staycompute='_compute_preceding_next_stay_id'help='Next stay which arrives on the same time slot in the same room(s)'string='Next Stay which arrives on same time slot' args: 'stay.stay' -
same_time_preceding_stay_idMany2one → stay.staycompute='_compute_preceding_next_stay_id'help='Preceding stay which leaves on the same time slot in the same room(s)'string='Preceding Stay which leaves on same time slot' args: 'stay.stay' -
stateSelectioncopy=Falsedefault='draft'readonly=Truetracking=True args: [('draft', 'Draft'), ('confirm', 'Confirmed'), ('current', 'Current'), ('done', 'Finished'), ('cancel', 'Cancelled')] -
tag_idsMany2many → stay.tagstring='Tags' args: 'stay.tag'
-
arrival_date_change(self)@api.onchange('arrival_date') -
cancel(self) -
cancel2draft(self) -
create(self, vals_list)@api.model_create_multi -
default_get(self, fields_list)@api.model -
draft2confirm(self) -
get_dashboard_data(self)@api.model -
guest_has_left(self) -
stay_notify_selection_button(self) -
unlink(self) -
write(self, vals)
New fields (6)
-
company_idMany2one → res.companyrequired=True args: 'res.company' -
end_dateDaterequired=True -
file_xlsxBinaryreadonly=True -
filenameCharreadonly=True -
group_idsMany2many → stay.groupdomain="[('company_id', '=', company_id)]"string='Groups' args: 'stay.group' -
start_dateDaterequired=True
-
default_get(self, fields_list)@api.model -
prepare_tab(self) -
run(self)
New fields (4)
-
activeBooleandefault=True -
colorIntegerdefault=<expr> -
nameCharrequired=True -
sequenceInteger
No public methods.
New fields (1)
-
company_idMany2one → res.companydefault=<expr>required=Truestring='Company' args: 'res.company'
-
report_toclean_data(self)
Loading…
Loading…
Loading…
Loading…
Loading…