Stay

stay
REPOSITORY
REPOSITORYOCA/vertical-abbey
GIT
GIThttps://github.com/OCA/vertical-abbey.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/vertical-abbey/tree/18.0/stay
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYLodging
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Barroux Abbey
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Barroux Abbey
COMMITTERS
COMMITTERSAlexis de Lattre, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/vertical-abbey
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:19
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/web:
    - web_timeline
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES xlsxwriter
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 IDNameModelTypeStatus
report_stayjournalmeal report_stayjournalmeal ir.ui.view qweb New
res_config_settings_view_form res.config.settings xpath 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 timeline 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 xpath Inherits base.view_partner_form
view_users_form donation.res.users.form res.users group Inherits base.view_users_form
view_users_form_simple_modif donation.preferences.res.users.form res.users field Inherits base.view_users_form_simple_modif
Models touched (21)

New fields (2)
  • default_refectory_id Many2one → stay.refectory
    check_company=True ondelete='restrict' string='Default Refectory' args: 'stay.refectory'
  • stay_notify_user_ids Many2many → res.users
    column1='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'
Public methods (0)

No public methods.

New fields (6)
  • group_stay_breakfast Boolean
    implied_group='stay.group_stay_breakfast' string='Manage Breakfast'
  • group_stay_group Boolean
    implied_group='stay.group_stay_group' string='Manage Stay Groups'
  • group_stay_picnic Boolean
    implied_group='stay.group_stay_picnic' string='Manage Picnic'
  • stay_default_refectory_id Many2one
    readonly=False related='company_id.default_refectory_id'
  • stay_notify_user_ids Many2many
    readonly=False related='company_id.stay_notify_user_ids'
  • stay_room_transition Selection
    config_parameter='stay.room_transition' string='Room Transition' args: [('one_empty_period', 'One Empty Period'), ('immediate', 'Immediate'), ('night', 'Night')]
Public methods (0)

No public methods.

New fields (2)
  • stay_count Integer
    compute='_compute_stay_count' compute_sudo=True string='# of Stays'
  • stay_ids One2many → stay.stay
    string='Stays' args: 'stay.stay', 'partner_id'
Public methods (0)

No public methods.

New fields (1)
  • context_stay_group_id Many2one → stay.group
    args: 'stay.group', 'Stay Group'
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • name Char
    required=True
  • room_ids One2many → stay.room
    string='Rooms' args: 'stay.room', 'building_id'
  • sequence Integer
Public methods (0)

No public methods.

New fields (2)
  • date Date
    index=True required=True
  • name Char
    string='Label'
Public methods (0)

No public methods.

New fields (2)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • date Date
    default=<expr> required=True
Public methods (1)
  • run(self)

New fields (7)
  • company_id Many2one → res.company
    default=<expr> index=True ondelete='cascade' required=True string='Company' args: 'res.company'
  • default_no_meals Boolean
    string='No Meals by Default'
  • default_refectory_id Many2one → stay.refectory
    check_company=True ondelete='restrict' string='Default Refectory' args: 'stay.refectory'
  • name Char
    required=True string='Group Name'
  • notify_user_ids Many2many → res.users
    string='Users Notified by E-mail' args: 'res.users'
  • room_ids One2many → stay.room
    string='Rooms' args: 'stay.room', 'group_id'
  • sequence Integer
Public methods (0)

No public methods.

New fields (4)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • date Date
    default=_default_date required=True
  • date_label Char
    compute='_compute_date_label'
  • report_type Selection
    default='general' required=True args: [('general', 'General'), ('meal', 'Meals'), ('arrival', 'Arrivals')]
Public methods (9)
  • 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_qty Integer
    string='Bed Nights'
  • breakfast_qty Integer
    string='Breakfast'
  • company_id Many2one → res.company
    default=<expr> index=True required=True args: 'res.company'
  • date Date
    default=fields.Date.context_today index=True required=True
  • dinner_qty Integer
    string='Dinners'
  • group_id Many2one → stay.group
    compute='_compute_group_id' index=True readonly=False store=True args: 'stay.group'
  • lunch_qty Integer
    string='Lunches'
  • my_stay_group Boolean
    compute='_compute_my_stay_group' search='_search_my_stay_group'
  • partner_id Many2one → res.partner
    help='If guest is anonymous, leave this field empty.' string='Guest' args: 'res.partner'
  • partner_name Text
    compute='_compute_partner_name' precompute=True readonly=False required=True store=True string='Guest Names'
  • picnic_lunch_qty Integer
    string='Picnic'
  • refectory_id Many2one → stay.refectory
    check_company=True default=<expr> args: 'stay.refectory'
  • rooms_display_name Char
    related='stay_id.rooms_display_name' store=True
  • stay_id Many2one → stay.stay
    check_company=True ondelete='cascade' args: 'stay.stay'
Public methods (0)

No public methods.

New fields (9)
  • convert_lunch_to_picnic Boolean
    string='Convert Lunches to Picnics'
  • end_date Date
    required=True
  • no_bed_night Boolean
    string='No Bed Nights'
  • no_breakfast Boolean
    string='No Breakfasts'
  • no_dinner Boolean
    string='No Dinners'
  • no_lunch Boolean
    string='No Lunches'
  • refectory_id Many2one → stay.refectory
    string='New Refectory' args: 'stay.refectory'
  • start_date Date
    required=True
  • stay_id Many2one → stay.stay
    readonly=True required=True args: 'stay.stay'
Public methods (2)
  • apply(self)
  • default_get(self, fields_list)
    @api.model

New fields (1)
  • stay_id Many2one → stay.stay
    readonly=True required=True args: 'stay.stay'
Public methods (2)
  • default_get(self, fields_list)
    @api.model
  • reset_lines(self)

New fields (7)
  • create_state Selection
    default='draft' required=True args: [('draft', 'Draft'), ('confirm', 'Confirmed')]
  • end_date Date
    required=True
  • frequency Selection
    default='weekly' required=True args: [('weekly', 'Weekly')]
  • keep_assignments Boolean
    default=True string='Keep assignments?'
  • keep_notes Boolean
    string='Keep Notes?'
  • start_date Date
    default=fields.Date.context_today required=True
  • stay_id Many2one → stay.stay
    readonly=True required=True args: 'stay.stay'
Public methods (2)
  • default_get(self, fields_list)
    @api.model
  • run(self)

New fields (6)
  • active Boolean
    default=True
  • capacity Integer
  • code Char
    size=10
  • company_id Many2one → res.company
    default=<expr> index=True ondelete='cascade' required=True args: 'res.company'
  • name Char
    required=True
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (18)
  • active Boolean
    default=True
  • allow_simultaneous Boolean
    compute='_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=True readonly=False store=True
  • bed_qty Integer
    default=1 string='Number of beds'
  • building_id Many2one → stay.building
    index=True ondelete='restrict' args: 'stay.building'
  • code Char
    copy=False size=10
  • company_id Many2one → res.company
    default=<expr> index=True ondelete='cascade' required=True args: 'res.company'
  • fire_report_exclude Boolean
    string='Exclude from Fire Report'
  • fire_report_sequence Integer
    string='Order for Fire Report'
  • group_id Many2one → stay.group
    check_company=True domain="[('company_id', '=', company_id)]" index=True args: 'stay.group'
  • my_stay_group Boolean
    compute='_compute_my_stay_group' search='_search_my_stay_group'
  • name Char
    copy=False required=True
  • next_stay_arrival_date Date
    compute='_compute_next_stay'
  • next_stay_arrival_time Selection
    compute='_compute_next_stay' args: [('morning', 'Morning'), ('afternoon', 'Afternoon'), ('evening', 'Evening'), ('unknown', 'Unknown')]
  • next_stay_id Many2one → stay.stay
    compute='_compute_next_stay' args: 'stay.stay'
  • next_stay_partner_name Char
    compute='_compute_next_stay'
  • notes Text
  • sequence Integer
    default=10
  • to_clean Char
    help='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.'
Public methods (2)
  • action_archive(self)
  • mark_as_cleaned(self)

New fields (24)
  • active Boolean
    related='room_id.active' store=True
  • arrival_date Date
    readonly=False related='stay_id.arrival_date' store=True
  • arrival_datetime Datetime
    related='stay_id.arrival_datetime' store=True
  • arrival_note Char
    readonly=False related='stay_id.arrival_note' store=True
  • arrival_time Selection
    readonly=False related='stay_id.arrival_time' store=True
  • company_id Many2one
    index=True related='stay_id.company_id' store=True
  • conflict_room_ids Many2many → stay.room
    compute='_compute_conflict_room_ids' string='Conflict Rooms' args: 'stay.room'
  • construction Boolean
    related='stay_id.construction' store=True
  • departure_date Date
    readonly=False related='stay_id.departure_date' store=True
  • departure_datetime Datetime
    related='stay_id.departure_datetime' store=True
  • departure_note Char
    readonly=False related='stay_id.departure_note' store=True
  • departure_time Selection
    readonly=False related='stay_id.departure_time' store=True
  • group_id Many2one
    index=True related='room_id.group_id' store=True
  • guest_qty Integer
    required=True string='Guest Quantity'
  • my_stay_group Boolean
    compute='_compute_my_stay_group' search='_search_my_stay_group'
  • notes Text
    readonly=False related='stay_id.notes' store=True
  • partner_id Many2one
    related='stay_id.partner_id' store=True
  • partner_name Text
    related='stay_id.partner_name' store=True
  • partner_name_room Char
    string='Guest (optional)'
  • room_id Many2one → stay.room
    check_company=True domain="[('id', 'not in', conflict_room_ids), ('company_id', '=', company_id), ('group_id', 'in', (False, stay_group_id))]" index=True ondelete='restrict' required=True args: 'stay.room'
  • state Selection
    related='stay_id.state' store=True
  • stay_group_id Many2one
    related='stay_id.group_id' store=True string='Stay Group'
  • stay_id Many2one → stay.stay
    index=True ondelete='cascade' args: 'stay.stay'
  • tag_ids Many2many
    readonly=False related='stay_id.tag_ids'
Public methods (2)
  • room_id_change(self)
    @api.onchange('room_id')
  • show_stay(self)

New fields (6)
  • assign_type Selection
    default='single' required=True string='Assignation' args: [('single', 'One Guest per Room'), ('full', 'Maximum Capacity')]
  • company_id Many2one
    related='stay_id.company_id'
  • conflict_room_ids Many2many → stay.room
    compute='_compute_conflict_room_ids' string='Conflict Rooms' args: 'stay.room'
  • group_id Many2one
    related='stay_id.group_id'
  • room_ids Many2many → stay.room
    domain="[('id', 'not in', conflict_room_ids), ('company_id', '=', company_id), ('group_id', 'in', (False, group_id))]" required=True string='Rooms' args: 'stay.room'
  • stay_id Many2one → stay.stay
    readonly=True args: 'stay.stay'
Public methods (2)
  • default_get(self, fields_list)
    @api.model
  • run(self)

New fields (30)
  • arrival_date Date
    index=True required=True tracking=True
  • arrival_datetime Datetime
    compute='_compute_arrival_datetime' inverse='_inverse_arrival_datetime' store=True string='Arrival Date and Time'
  • arrival_note Char
  • arrival_time Selection
    required=True tracking=True args: [('morning', 'Morning'), ('afternoon', 'Afternoon'), ('evening', 'Evening'), ('unknown', 'Unknown')]
  • assign_status Selection
    compute='_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_id Many2one → stay.stay
    compute='_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_id Many2one → stay.stay
    compute='_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_id Many2one → res.company
    default=<expr> index=True readonly=True required=True args: 'res.company'
  • construction Boolean
  • departure_date Date
    index=True required=True tracking=True
  • departure_datetime Datetime
    compute='_compute_departure_datetime' inverse='_inverse_departure_datetime' store=True string='Departure Date and Time'
  • departure_note Char
  • departure_time Selection
    required=True tracking=True args: [('morning', 'Morning'), ('afternoon', 'Afternoon'), ('evening', 'Evening'), ('unknown', 'Unknown')]
  • group_id Many2one → stay.group
    check_company=True copy=False default=<expr> domain="[('company_id', '=', company_id)]" index=True ondelete='restrict' tracking=True args: 'stay.group'
  • guest_qty Integer
    default=1 string='Guest Quantity' tracking=True
  • guest_qty_to_assign Integer
    compute='_compute_room_assignment' store=True
  • line_ids One2many → stay.line
    string='Stay Lines' args: 'stay.line', 'stay_id'
  • my_stay_group Boolean
    compute='_compute_my_stay_group' search='_search_my_stay_group'
  • name Char
    copy=False default=<expr> string='Stay Number'
  • no_meals Boolean
    compute='_compute_refectory_id' help='The stay lines generated from this stay will not have breakfast/lunch/dinner by default.' precompute=True readonly=False store=True tracking=True
  • notes Text
  • partner_id Many2one → res.partner
    help='If guest is anonymous, leave this field empty.' ondelete='restrict' string='Guest' args: 'res.partner'
  • partner_name Text
    compute='_compute_partner_name' precompute=True readonly=False required=True store=True string='Guest Names' tracking=True
  • refectory_id Many2one → stay.refectory
    check_company=True compute='_compute_refectory_id' precompute=True readonly=False store=True args: 'stay.refectory'
  • room_assign_ids One2many → stay.room.assign
    copy=True string='Room Assignments' args: 'stay.room.assign', 'stay_id'
  • rooms_display_name Char
    compute='_compute_room_assignment' store=True string='Rooms'
  • same_time_next_stay_id Many2one → stay.stay
    compute='_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_id Many2one → stay.stay
    compute='_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'
  • state Selection
    copy=False default='draft' readonly=True tracking=True args: [('draft', 'Draft'), ('confirm', 'Confirmed'), ('current', 'Current'), ('done', 'Finished'), ('cancel', 'Cancelled')]
  • tag_ids Many2many → stay.tag
    string='Tags' args: 'stay.tag'
Public methods (11)
  • 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_id Many2one → res.company
    required=True args: 'res.company'
  • end_date Date
    required=True
  • file_xlsx Binary
    readonly=True
  • filename Char
    readonly=True
  • group_ids Many2many → stay.group
    domain="[('company_id', '=', company_id)]" string='Groups' args: 'stay.group'
  • start_date Date
    required=True
Public methods (3)
  • default_get(self, fields_list)
    @api.model
  • prepare_tab(self)
  • run(self)

New fields (4)
  • active Boolean
    default=True
  • color Integer
    default=<expr>
  • name Char
    required=True
  • sequence Integer
Public methods (0)

No public methods.

New fields (1)
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
Public methods (1)
  • report_toclean_data(self)
REPOSITORY
REPOSITORYOCA/vertical-abbey
GIT
GIThttps://github.com/OCA/vertical-abbey.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/vertical-abbey/tree/16.0/stay
VERSION
VERSION 2.1.0
CATEGORY
CATEGORYLodging
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Barroux Abbey
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Barroux Abbey
COMMITTERS
COMMITTERSAlexis de Lattre, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/vertical-abbey
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:58
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/web:
    - web_timeline
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES xlsxwriter
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (53)
XML IDNameModelTypeStatus
report_stayjournalprint report_stayjournalprint ir.ui.view qweb New
res_config_settings_view_form res.config.settings xpath Inherits base.res_config_settings_view_form
stay.report_stayjournalprint_document stay.report_stayjournalprint_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 tree 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.tree stay.date.label tree 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.tree stay.group tree 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.tree stay.line tree 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.tree stay.refectory tree 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 timeline New
stay_room_assign_tree stay.room.assign tree 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.tree stay.room tree New
stay_room_tree stay.room.tree stay.room tree 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 tree New
stay_toclean_print_form stay_toclean_print.form stay.toclean.print form New
stay_tree stay.tree stay.stay tree New
stay_tree_reverse_order stay.tree.reverse.order stay.stay tree New
view_partner_form stay.button.res.partner.form res.partner xpath Inherits base.view_partner_form
view_users_form donation.res.users.form res.users group Inherits base.view_users_form
view_users_form_simple_modif donation.preferences.res.users.form res.users field Inherits base.view_users_form_simple_modif
Models touched (21)

New fields (2)
  • default_refectory_id Many2one → stay.refectory
    check_company=True ondelete='restrict' string='Default Refectory' args: 'stay.refectory'
  • stay_notify_user_ids Many2many → res.users
    column1='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'
Public methods (0)

No public methods.

New fields (4)
  • group_stay_breakfast Boolean
    implied_group='stay.group_stay_breakfast' string='Manage Breakfast'
  • stay_default_refectory_id Many2one
    readonly=False related='company_id.default_refectory_id'
  • stay_notify_user_ids Many2many
    readonly=False related='company_id.stay_notify_user_ids'
  • stay_room_transition Selection
    config_parameter='stay.room_transition' string='Room Transition' args: [('one_empty_period', 'One Empty Period'), ('immediate', 'Immediate'), ('night', 'Night')]
Public methods (0)

No public methods.

New fields (2)
  • stay_count Integer
    compute='_compute_stay_count' compute_sudo=True readonly=True string='# of Stays'
  • stay_ids One2many → stay.stay
    string='Stays' args: 'stay.stay', 'partner_id'
Public methods (0)

No public methods.

New fields (1)
  • context_stay_group_id Many2one → stay.group
    args: 'stay.group', 'Stay Group'
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • name Char
    required=True
  • room_ids One2many → stay.room
    string='Rooms' args: 'stay.room', 'building_id'
  • sequence Integer
Public methods (0)

No public methods.

New fields (2)
  • date Date
    index=True required=True
  • name Char
    string='Label'
Public methods (0)

No public methods.

New fields (2)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • date Date
    default=<expr> required=True
Public methods (1)
  • run(self)

New fields (7)
  • company_id Many2one → res.company
    default=<expr> index=True ondelete='cascade' required=True string='Company' args: 'res.company'
  • default_no_meals Boolean
    string='No Meals by Default'
  • default_refectory_id Many2one → stay.refectory
    check_company=True ondelete='restrict' string='Default Refectory' args: 'stay.refectory'
  • name Char
    required=True string='Group Name'
  • notify_user_ids Many2many → res.users
    string='Users Notified by E-mail' args: 'res.users'
  • room_ids One2many → stay.room
    string='Rooms' args: 'stay.room', 'group_id'
  • sequence Integer
Public methods (0)

No public methods.

New fields (4)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • date Date
    default=_default_date required=True
  • date_label Char
    compute='_compute_date_label'
  • report_type Selection
    default='general' required=True args: [('general', 'General'), ('meal', 'Meals'), ('arrival', 'Arrivals')]
Public methods (9)
  • 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 (13)
  • bed_night_qty Integer
    string='Bed Nights'
  • breakfast_qty Integer
    string='Breakfast'
  • company_id Many2one → res.company
    default=<expr> index=True required=True args: 'res.company'
  • date Date
    default=fields.Date.context_today index=True required=True
  • dinner_qty Integer
    string='Dinners'
  • group_id Many2one → stay.group
    compute='_compute_group_id' index=True readonly=False store=True args: 'stay.group'
  • lunch_qty Integer
    string='Lunches'
  • my_stay_group Boolean
    compute='_compute_my_stay_group' search='_search_my_stay_group'
  • partner_id Many2one → res.partner
    help='If guest is anonymous, leave this field empty.' string='Guest' args: 'res.partner'
  • partner_name Text
    compute='_compute_partner_name' precompute=True readonly=False required=True store=True string='Guest Names'
  • refectory_id Many2one → stay.refectory
    check_company=True default=<expr> args: 'stay.refectory'
  • rooms_display_name Char
    related='stay_id.rooms_display_name' store=True
  • stay_id Many2one → stay.stay
    check_company=True ondelete='cascade' args: 'stay.stay'
Public methods (0)

No public methods.

New fields (8)
  • end_date Date
    required=True
  • no_bed_night Boolean
    string='No Bed Nights'
  • no_breakfast Boolean
    string='No Breakfasts'
  • no_dinner Boolean
    string='No Dinners'
  • no_lunch Boolean
    string='No Lunches'
  • refectory_id Many2one → stay.refectory
    string='New Refectory' args: 'stay.refectory'
  • start_date Date
    required=True
  • stay_id Many2one → stay.stay
    readonly=True required=True args: 'stay.stay'
Public methods (2)
  • apply(self)
  • default_get(self, fields_list)
    @api.model

New fields (1)
  • stay_id Many2one → stay.stay
    readonly=True required=True args: 'stay.stay'
Public methods (2)
  • default_get(self, fields_list)
    @api.model
  • reset_lines(self)

New fields (7)
  • create_state Selection
    default='draft' required=True args: [('draft', 'Draft'), ('confirm', 'Confirmed')]
  • end_date Date
    required=True
  • frequency Selection
    default='weekly' required=True args: [('weekly', 'Weekly')]
  • keep_assignments Boolean
    default=True string='Keep assignments?'
  • keep_notes Boolean
    string='Keep Notes?'
  • start_date Date
    default=fields.Date.context_today required=True
  • stay_id Many2one → stay.stay
    readonly=True required=True args: 'stay.stay'
Public methods (2)
  • default_get(self, fields_list)
    @api.model
  • run(self)

New fields (6)
  • active Boolean
    default=True
  • capacity Integer
  • code Char
    size=10
  • company_id Many2one → res.company
    default=<expr> index=True ondelete='cascade' required=True args: 'res.company'
  • name Char
    required=True
  • sequence Integer
    default=10
Public methods (1)
  • name_get(self)
    @api.depends('name', 'code')

New fields (18)
  • active Boolean
    default=True
  • allow_simultaneous Boolean
    compute='_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=True readonly=False store=True
  • bed_qty Integer
    default=1 string='Number of beds'
  • building_id Many2one → stay.building
    index=True ondelete='restrict' args: 'stay.building'
  • code Char
    copy=False size=10
  • company_id Many2one → res.company
    default=<expr> index=True ondelete='cascade' required=True args: 'res.company'
  • fire_report_exclude Boolean
    string='Exclude from Fire Report'
  • fire_report_sequence Integer
    string='Order for Fire Report'
  • group_id Many2one → stay.group
    check_company=True domain="[('company_id', '=', company_id)]" index=True args: 'stay.group'
  • my_stay_group Boolean
    compute='_compute_my_stay_group' search='_search_my_stay_group'
  • name Char
    copy=False required=True
  • next_stay_arrival_date Date
    compute='_compute_next_stay'
  • next_stay_arrival_time Selection
    compute='_compute_next_stay' args: [('morning', 'Morning'), ('afternoon', 'Afternoon'), ('evening', 'Evening'), ('unknown', 'Unknown')]
  • next_stay_id Many2one → stay.stay
    compute='_compute_next_stay' args: 'stay.stay'
  • next_stay_partner_name Char
    compute='_compute_next_stay'
  • notes Text
  • sequence Integer
    default=10
  • to_clean Char
    help='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.'
Public methods (3)
  • action_archive(self)
  • mark_as_cleaned(self)
  • name_get(self)
    @api.depends('name', 'code')

New fields (23)
  • active Boolean
    related='room_id.active' store=True
  • arrival_date Date
    readonly=False related='stay_id.arrival_date' store=True
  • arrival_datetime Datetime
    related='stay_id.arrival_datetime' store=True
  • arrival_note Char
    readonly=False related='stay_id.arrival_note' store=True
  • arrival_time Selection
    readonly=False related='stay_id.arrival_time' store=True
  • company_id Many2one
    index=True related='stay_id.company_id' store=True
  • conflict_room_ids Many2many → stay.room
    compute='_compute_conflict_room_ids' string='Conflict Rooms' args: 'stay.room'
  • construction Boolean
    related='stay_id.construction' store=True
  • departure_date Date
    readonly=False related='stay_id.departure_date' store=True
  • departure_datetime Datetime
    related='stay_id.departure_datetime' store=True
  • departure_note Char
    readonly=False related='stay_id.departure_note' store=True
  • departure_time Selection
    readonly=False related='stay_id.departure_time' store=True
  • group_id Many2one
    index=True related='room_id.group_id' store=True
  • guest_qty Integer
    required=True string='Guest Quantity'
  • my_stay_group Boolean
    compute='_compute_my_stay_group' search='_search_my_stay_group'
  • notes Text
    readonly=False related='stay_id.notes' store=True
  • partner_id Many2one
    related='stay_id.partner_id' store=True
  • partner_name Text
    related='stay_id.partner_name' store=True
  • room_id Many2one → stay.room
    check_company=True domain="[('id', 'not in', conflict_room_ids), ('company_id', '=', company_id), ('group_id', 'in', (False, stay_group_id))]" index=True ondelete='restrict' required=True args: 'stay.room'
  • state Selection
    related='stay_id.state' store=True
  • stay_group_id Many2one
    related='stay_id.group_id' store=True string='Stay Group'
  • stay_id Many2one → stay.stay
    index=True ondelete='cascade' args: 'stay.stay'
  • tag_ids Many2many
    readonly=False related='stay_id.tag_ids'
Public methods (3)
  • name_get(self)
    @api.depends('partner_name', 'arrival_time', 'departure_time', 'room_id')
  • room_id_change(self)
    @api.onchange('room_id')
  • show_stay(self)

New fields (6)
  • assign_type Selection
    default='single' required=True string='Assignation' args: [('single', 'One Guest per Room'), ('full', 'Maximum Capacity')]
  • company_id Many2one
    related='stay_id.company_id'
  • conflict_room_ids Many2many → stay.room
    compute='_compute_conflict_room_ids' string='Conflict Rooms' args: 'stay.room'
  • group_id Many2one
    related='stay_id.group_id'
  • room_ids Many2many → stay.room
    domain="[('id', 'not in', conflict_room_ids), ('company_id', '=', company_id), ('group_id', 'in', (False, group_id))]" required=True string='Rooms' args: 'stay.room'
  • stay_id Many2one → stay.stay
    readonly=True args: 'stay.stay'
Public methods (2)
  • default_get(self, fields_list)
    @api.model
  • run(self)

New fields (30)
  • arrival_date Date
    index=True required=True tracking=True
  • arrival_datetime Datetime
    compute='_compute_arrival_datetime' inverse='_inverse_arrival_datetime' store=True string='Arrival Date and Time'
  • arrival_note Char
  • arrival_time Selection
    required=True tracking=True args: [('morning', 'Morning'), ('afternoon', 'Afternoon'), ('evening', 'Evening'), ('unknown', 'Unknown')]
  • assign_status Selection
    compute='_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_id Many2one → stay.stay
    compute='_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_id Many2one → stay.stay
    compute='_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_id Many2one → res.company
    default=<expr> index=True readonly=True required=True states={'draft': [('readonly', False)]} args: 'res.company'
  • construction Boolean
  • departure_date Date
    index=True required=True tracking=True
  • departure_datetime Datetime
    compute='_compute_departure_datetime' inverse='_inverse_departure_datetime' store=True string='Departure Date and Time'
  • departure_note Char
  • departure_time Selection
    required=True tracking=True args: [('morning', 'Morning'), ('afternoon', 'Afternoon'), ('evening', 'Evening'), ('unknown', 'Unknown')]
  • group_id Many2one → stay.group
    check_company=True copy=False default=<expr> domain="[('company_id', '=', company_id)]" index=True ondelete='restrict' tracking=True args: 'stay.group'
  • guest_qty Integer
    default=1 string='Guest Quantity' tracking=True
  • guest_qty_to_assign Integer
    compute='_compute_room_assignment' store=True
  • line_ids One2many → stay.line
    states={'draft': [('readonly', True)], 'cancel': [('readonly', True)]} string='Stay Lines' args: 'stay.line', 'stay_id'
  • my_stay_group Boolean
    compute='_compute_my_stay_group' search='_search_my_stay_group'
  • name Char
    copy=False default=<expr> string='Stay Number'
  • no_meals Boolean
    compute='_compute_refectory_id' help='The stay lines generated from this stay will not have breakfast/lunch/dinner by default.' precompute=True readonly=False store=True tracking=True
  • notes Text
  • partner_id Many2one → res.partner
    help='If guest is anonymous, leave this field empty.' ondelete='restrict' string='Guest' args: 'res.partner'
  • partner_name Text
    compute='_compute_partner_name' precompute=True readonly=False required=True store=True string='Guest Names' tracking=True
  • refectory_id Many2one → stay.refectory
    check_company=True compute='_compute_refectory_id' precompute=True readonly=False store=True args: 'stay.refectory'
  • room_assign_ids One2many → stay.room.assign
    copy=True states={'cancel': [('readonly', True)]} string='Room Assignments' args: 'stay.room.assign', 'stay_id'
  • rooms_display_name Char
    compute='_compute_room_assignment' store=True string='Rooms'
  • same_time_next_stay_id Many2one → stay.stay
    compute='_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_id Many2one → stay.stay
    compute='_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'
  • state Selection
    copy=False default='draft' readonly=True tracking=True args: [('draft', 'Draft'), ('confirm', 'Confirmed'), ('current', 'Current'), ('done', 'Finished'), ('cancel', 'Cancelled')]
  • tag_ids Many2many → stay.tag
    string='Tags' args: 'stay.tag'
Public methods (11)
  • 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)
  • guest_has_left(self)
  • name_get(self)
    @api.depends('partner_name', 'name', 'rooms_display_name', 'state')
  • stay_notify_selection_button(self)
  • unlink(self)
  • write(self, vals)

New fields (6)
  • company_id Many2one → res.company
    required=True args: 'res.company'
  • end_date Date
    required=True
  • file_xlsx Binary
    readonly=True
  • filename Char
    readonly=True
  • group_ids Many2many → stay.group
    domain="[('company_id', '=', company_id)]" string='Groups' args: 'stay.group'
  • start_date Date
    required=True
Public methods (3)
  • default_get(self, fields_list)
    @api.model
  • prepare_tab(self)
  • run(self)

New fields (4)
  • active Boolean
    default=True
  • color Integer
    default=<expr>
  • name Char
    required=True
  • sequence Integer
Public methods (0)

No public methods.

New fields (1)
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
Public methods (1)
  • report_toclean_data(self)
REPOSITORY
REPOSITORYOCA/vertical-abbey
GIT
GIThttps://github.com/OCA/vertical-abbey.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/vertical-abbey/tree/14.0/stay
VERSION
VERSION 5.1.0
CATEGORY
CATEGORYLodging
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Barroux Abbey
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Barroux Abbey
COMMITTERS
COMMITTERSAlexis de Lattre, oca-travis, Weblate, OCA-git-bot, Matthieu Dubois
WEBSITE
WEBSITEhttps://github.com/OCA/vertical-abbey
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:11
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/web:
    - web_timeline
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES xlsxwriter
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (52)
XML IDNameModelTypeStatus
report_stayjournalprint report_stayjournalprint ir.ui.view qweb New
res_config_settings_view_form res.config.settings xpath Inherits base.res_config_settings_view_form
stay.report_stayjournalprint_document stay.report_stayjournalprint_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 tree 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.tree stay.date.label tree 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.tree stay.group tree 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.tree stay.line tree 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.tree stay.refectory tree 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 timeline New
stay_room_assign_tree stay.room.assign tree 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_tree stay.room.tree stay.room tree 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 tree New
stay_toclean_print_form stay_toclean_print.form stay.toclean.print form New
stay_tree stay.tree stay.stay tree New
stay_tree_reverse_order stay.tree.reverse.order stay.stay tree New
view_partner_form stay.button.res.partner.form res.partner xpath Inherits base.view_partner_form
view_users_form donation.res.users.form res.users group Inherits base.view_users_form
view_users_form_simple_modif donation.preferences.res.users.form res.users field Inherits base.view_users_form_simple_modif
Models touched (21)

New fields (2)
  • default_refectory_id Many2one → stay.refectory
    check_company=True ondelete='restrict' string='Default Refectory' args: 'stay.refectory'
  • stay_notify_user_ids Many2many → res.users
    string='Users Notified by E-mail for Stays without Group' args: 'res.users'
Public methods (0)

No public methods.

New fields (4)
  • group_stay_breakfast Boolean
    implied_group='stay.group_stay_breakfast' string='Manage Breakfast'
  • stay_default_refectory_id Many2one
    readonly=False related='company_id.default_refectory_id'
  • stay_notify_user_ids Many2many
    readonly=False related='company_id.stay_notify_user_ids'
  • stay_room_transition Selection
    config_parameter='stay.room_transition' string='Room Transition' args: [('one_empty_period', 'One Empty Period'), ('immediate', 'Immediate'), ('night', 'Night')]
Public methods (0)

No public methods.

New fields (2)
  • stay_count Integer
    compute='_compute_stay_count' compute_sudo=True readonly=True string='# of Stays'
  • stay_ids One2many → stay.stay
    string='Stays' args: 'stay.stay', 'partner_id'
Public methods (0)

No public methods.

New fields (1)
  • context_stay_group_id Many2one → stay.group
    args: 'stay.group', 'Stay Group'
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • name Char
    required=True
  • room_ids One2many → stay.room
    string='Rooms' args: 'stay.room', 'building_id'
  • sequence Integer
Public methods (0)

No public methods.

New fields (2)
  • date Date
    index=True required=True
  • name Char
    string='Label'
Public methods (0)

No public methods.

New fields (2)
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • date Date
    default=<expr> required=True string='Date'
Public methods (1)
  • run(self)

New fields (7)
  • company_id Many2one → res.company
    default=<expr> ondelete='cascade' required=True string='Company' args: 'res.company'
  • default_no_meals Boolean
    string='No Meals by Default'
  • default_refectory_id Many2one → stay.refectory
    check_company=True ondelete='restrict' string='Default Refectory' args: 'stay.refectory'
  • name Char
    required=True string='Group Name'
  • notify_user_ids Many2many → res.users
    string='Users Notified by E-mail' args: 'res.users'
  • room_ids One2many → stay.room
    string='Rooms' args: 'stay.room', 'group_id'
  • sequence Integer
Public methods (0)

No public methods.

New fields (4)
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • date Date
    default=_default_date required=True string='Date'
  • date_label Char
    compute='_compute_date_label'
  • report_type Selection
    default='general' required=True args: [('general', 'General'), ('meal', 'Meals'), ('arrival', 'Arrivals')]
Public methods (9)
  • 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)
    @api.model
  • report_general_data(self)

New fields (13)
  • bed_night_qty Integer
    string='Bed Nights'
  • breakfast_qty Integer
    string='Breakfast'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • date Date
    default=fields.Date.context_today index=True required=True string='Date'
  • dinner_qty Integer
    string='Dinners'
  • group_id Many2one → stay.group
    compute='_compute_group_id' readonly=False store=True args: 'stay.group'
  • lunch_qty Integer
    string='Lunches'
  • my_stay_group Boolean
    compute='_compute_my_stay_group' search='_search_my_stay_group'
  • partner_id Many2one → res.partner
    help='If guest is anonymous, leave this field empty.' string='Guest' args: 'res.partner'
  • partner_name Text
    compute='_compute_partner_name' readonly=False required=True store=True args: 'Guest Names'
  • refectory_id Many2one → stay.refectory
    check_company=True default=<expr> string='Refectory' args: 'stay.refectory'
  • rooms_display_name Char
    related='stay_id.rooms_display_name' store=True
  • stay_id Many2one → stay.stay
    check_company=True ondelete='cascade' string='Stay' args: 'stay.stay'
Public methods (0)

No public methods.

New fields (8)
  • end_date Date
    required=True
  • no_bed_night Boolean
    string='No Bed Nights'
  • no_breakfast Boolean
    string='No Breakfasts'
  • no_dinner Boolean
    string='No Dinners'
  • no_lunch Boolean
    string='No Lunches'
  • refectory_id Many2one → stay.refectory
    string='New Refectory' args: 'stay.refectory'
  • start_date Date
    required=True
  • stay_id Many2one → stay.stay
    readonly=True required=True args: 'stay.stay'
Public methods (2)
  • apply(self)
  • default_get(self, fields_list)
    @api.model

New fields (1)
  • stay_id Many2one → stay.stay
    readonly=True required=True args: 'stay.stay'
Public methods (2)
  • default_get(self, fields_list)
    @api.model
  • reset_lines(self)

New fields (7)
  • create_state Selection
    default='draft' required=True args: [('draft', 'Draft'), ('confirm', 'Confirmed')]
  • end_date Date
    required=True
  • frequency Selection
    default='weekly' required=True args: [('weekly', 'Weekly')]
  • keep_assignments Boolean
    default=True string='Keep assignments?'
  • keep_notes Boolean
    string='Keep Notes?'
  • start_date Date
    default=fields.Date.context_today required=True
  • stay_id Many2one → stay.stay
    readonly=True required=True args: 'stay.stay'
Public methods (2)
  • default_get(self, fields_list)
    @api.model
  • run(self)

New fields (6)
  • active Boolean
    default=True
  • capacity Integer
    string='Capacity'
  • code Char
    string='Code'
  • company_id Many2one → res.company
    default=<expr> ondelete='cascade' required=True string='Company' args: 'res.company'
  • name Char
    required=True string='Name'
  • sequence Integer
    default=10
Public methods (2)
  • name_get(self)
    @api.depends('name', 'code')
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model

New fields (14)
  • active Boolean
    default=True
  • allow_simultaneous Boolean
    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.' string='Allow simultaneous'
  • bed_qty Integer
    default=1 string='Number of beds'
  • building_id Many2one → stay.building
    index=True ondelete='restrict' args: 'stay.building'
  • code Char
    copy=False string='Code'
  • company_id Many2one → res.company
    default=<expr> ondelete='cascade' required=True string='Company' args: 'res.company'
  • fire_report_exclude Boolean
    string='Exclude from Fire Report'
  • fire_report_sequence Integer
    string='Order for Fire Report'
  • group_id Many2one → stay.group
    check_company=True domain="[('company_id', '=', company_id)]" index=True string='Group' args: 'stay.group'
  • my_stay_group Boolean
    compute='_compute_my_stay_group' search='_search_my_stay_group'
  • name Char
    copy=False required=True string='Name'
  • notes Text
  • sequence Integer
    default=10
  • to_clean Char
    help='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.' string='To Clean'
Public methods (5)
  • action_archive(self)
  • mark_as_cleaned(self)
  • name_get(self)
    @api.depends('name', 'code')
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
  • room_config_change(self)
    @api.onchange('allow_simultaneous', 'bed_qty')

New fields (22)
  • active Boolean
    related='room_id.active' store=True
  • arrival_date Date
    readonly=False related='stay_id.arrival_date' store=True
  • arrival_datetime Datetime
    related='stay_id.arrival_datetime' store=True
  • arrival_note Char
    readonly=False related='stay_id.arrival_note' store=True
  • arrival_time Selection
    readonly=False related='stay_id.arrival_time' store=True
  • company_id Many2one
    related='stay_id.company_id' store=True
  • conflict_room_ids Many2many → stay.room
    compute='_compute_conflict_room_ids' string='Conflict Rooms' args: 'stay.room'
  • departure_date Date
    readonly=False related='stay_id.departure_date' store=True
  • departure_datetime Datetime
    related='stay_id.departure_datetime' store=True
  • departure_note Char
    readonly=False related='stay_id.departure_note' store=True
  • departure_time Selection
    readonly=False related='stay_id.departure_time' store=True
  • group_id Many2one
    related='room_id.group_id' store=True
  • guest_qty Integer
    required=True string='Guest Quantity'
  • my_stay_group Boolean
    compute='_compute_my_stay_group' search='_search_my_stay_group'
  • notes Text
    readonly=False related='stay_id.notes' store=True
  • partner_id Many2one
    related='stay_id.partner_id' store=True
  • partner_name Text
    related='stay_id.partner_name' store=True
  • room_id Many2one → stay.room
    check_company=True domain="[('id', 'not in', conflict_room_ids), ('company_id', '=', company_id), ('group_id', 'in', (False, stay_group_id))]" index=True ondelete='restrict' required=True args: 'stay.room'
  • state Selection
    related='stay_id.state' store=True
  • stay_group_id Many2one
    related='stay_id.group_id' store=True string='Stay Group'
  • stay_id Many2one → stay.stay
    index=True ondelete='cascade' args: 'stay.stay'
  • tag_ids Many2many
    readonly=False related='stay_id.tag_ids'
Public methods (3)
  • name_get(self)
    @api.depends('partner_name', 'arrival_time', 'departure_time', 'room_id')
  • room_id_change(self)
    @api.onchange('room_id')
  • show_stay(self)

New fields (6)
  • assign_type Selection
    default='single' required=True string='Assignation' args: [('single', 'One Guest per Room'), ('full', 'Maximum Capacity')]
  • company_id Many2one
    related='stay_id.company_id'
  • conflict_room_ids Many2many → stay.room
    compute='_compute_conflict_room_ids' string='Conflict Rooms' args: 'stay.room'
  • group_id Many2one
    related='stay_id.group_id'
  • room_ids Many2many → stay.room
    domain="[('id', 'not in', conflict_room_ids), ('company_id', '=', company_id), ('group_id', 'in', (False, group_id))]" required=True string='Rooms' args: 'stay.room'
  • stay_id Many2one → stay.stay
    readonly=True args: 'stay.stay'
Public methods (2)
  • default_get(self, fields_list)
    @api.model
  • run(self)

New fields (30)
  • arrival_date Date
    index=True required=True string='Arrival Date' tracking=True
  • arrival_datetime Datetime
    compute='_compute_arrival_datetime' inverse='_inverse_arrival_datetime' store=True string='Arrival Date and Time'
  • arrival_note Char
    string='Arrival Note'
  • arrival_time Selection
    required=True string='Arrival Time' tracking=True args: [('morning', 'Morning'), ('afternoon', 'Afternoon'), ('evening', 'Evening'), ('unknown', 'Unknown')]
  • assign_status Selection
    compute='_compute_room_assignment' store=True string='Assign Status' args: [('none', 'Waiting Assignation'), ('no_night', 'No Nights'), ('partial', 'Partial'), ('assigned', 'Assigned'), ('over-assigned', 'Over Assigned'), ('error', 'Error')]
  • clash_time_next_stay_id Many2one → stay.stay
    compute='_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_id Many2one → stay.stay
    compute='_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_id Many2one → res.company
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} string='Company' args: 'res.company'
  • construction Boolean
  • departure_date Date
    index=True required=True string='Departure Date' tracking=True
  • departure_datetime Datetime
    compute='_compute_departure_datetime' inverse='_inverse_departure_datetime' store=True string='Departure Date and Time'
  • departure_note Char
    string='Departure Note'
  • departure_time Selection
    required=True string='Departure Time' tracking=True args: [('morning', 'Morning'), ('afternoon', 'Afternoon'), ('evening', 'Evening'), ('unknown', 'Unknown')]
  • group_id Many2one → stay.group
    check_company=True copy=False default=<expr> domain="[('company_id', '=', company_id)]" ondelete='restrict' string='Group' tracking=True args: 'stay.group'
  • guest_qty Integer
    default=1 string='Guest Quantity' tracking=True
  • guest_qty_to_assign Integer
    compute='_compute_room_assignment' store=True
  • line_ids One2many → stay.line
    states={'draft': [('readonly', True)], 'cancel': [('readonly', True)]} string='Stay Lines' args: 'stay.line', 'stay_id'
  • my_stay_group Boolean
    compute='_compute_my_stay_group' search='_search_my_stay_group'
  • name Char
    copy=False default='/' string='Stay Number'
  • no_meals Boolean
    compute='_compute_refectory_id' help='The stay lines generated from this stay will not have breakfast/lunch/dinner by default.' readonly=False store=True string='No Meals' tracking=True
  • notes Text
  • partner_id Many2one → res.partner
    help='If guest is anonymous, leave this field empty.' ondelete='restrict' string='Guest' args: 'res.partner'
  • partner_name Text
    compute='_compute_partner_name' readonly=False required=True store=True string='Guest Names' tracking=True
  • refectory_id Many2one → stay.refectory
    check_company=True compute='_compute_refectory_id' readonly=False store=True string='Refectory' args: 'stay.refectory'
  • room_assign_ids One2many → stay.room.assign
    copy=False states={'cancel': [('readonly', True)]} string='Room Assignments' args: 'stay.room.assign', 'stay_id'
  • rooms_display_name Char
    compute='_compute_room_assignment' store=True string='Rooms'
  • same_time_next_stay_id Many2one → stay.stay
    compute='_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_id Many2one → stay.stay
    compute='_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'
  • state Selection
    copy=False default='draft' readonly=True tracking=True args: [('draft', 'Draft'), ('confirm', 'Confirmed'), ('current', 'Current'), ('done', 'Finished'), ('cancel', 'Cancelled')]
  • tag_ids Many2many → stay.tag
    string='Tags' args: 'stay.tag'
Public methods (11)
  • arrival_date_change(self)
    @api.onchange('arrival_date')
  • cancel(self)
  • cancel2draft(self)
  • create(self, vals)
    @api.model
  • default_get(self, fields_list)
    @api.model
  • draft2confirm(self)
  • guest_has_left(self)
  • name_get(self)
    @api.depends('partner_name', 'name', 'rooms_display_name', 'state')
  • stay_notify_selection_button(self)
  • unlink(self)
  • write(self, vals)

New fields (6)
  • company_id Many2one → res.company
    required=True string='Company' args: 'res.company'
  • end_date Date
    required=True string='End Date'
  • file_xlsx Binary
    readonly=True
  • filename Char
    readonly=True
  • group_ids Many2many → stay.group
    domain="[('company_id', '=', company_id)]" string='Groups' args: 'stay.group'
  • start_date Date
    required=True string='Start Date'
Public methods (3)
  • default_get(self, fields_list)
    @api.model
  • prepare_tab(self)
  • run(self)

New fields (4)
  • active Boolean
    default=True
  • color Integer
    default=<expr>
  • name Char
    required=True
  • sequence Integer
Public methods (0)

No public methods.

New fields (1)
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
Public methods (2)
  • print_report(self)
  • report_toclean_data(self)
REPOSITORY
REPOSITORYOCA/vertical-abbey
GIT
GIThttps://github.com/OCA/vertical-abbey.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/vertical-abbey/tree/10.0/stay
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYLodging
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Barroux Abbey
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Barroux Abbey
COMMITTERS
COMMITTERSAlexis de Lattre, Pedro M. Baeza, Stéphane Bidoul (ACSONE)
WEBSITE
WEBSITEhttp://www.barroux.org
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:20:02
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/web:
    - web_timeline
odoo/odoo:
    - report
    - base
    - web
    - base_setup
    - web_kanban
    - mail
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES xlsxwriter
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (32)
XML IDNameModelTypeStatus
report_stayjournalprint report_stayjournalprint ir.ui.view qweb New
stay.report_stayjournalprint_document stay.report_stayjournalprint_document ir.ui.view qweb 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.tree stay.date.label tree 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.tree stay.group tree New
stay_journal_generate_form stay_journal_generate.form stay.journal.generate form 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_pivot stay.line.pivot stay.line pivot New
stay_line_search stay.line.search stay.line search New
stay_line_tree stay.line.tree stay.line tree 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.tree stay.refectory tree New
stay_room_form stay.room.form stay.room form New
stay_room_search stay.room.search stay.room search New
stay_room_tree stay.room.tree stay.room tree New
stay_search stay.search stay.stay search New
stay_stay_xlsx_form stay.stay.xlsx.form stay.stay.xlsx form New
stay_timeline stay.timeline stay.stay timeline New
stay_tree stay.tree stay.stay tree New
view_general_configuration base.config.settings group Inherits base_setup.view_general_configuration
view_partner_form stay.button.res.partner.form res.partner xpath Inherits base.view_partner_form
Models touched (12)

New fields (1)
  • default_refectory_id Many2one
    related='company_id.default_refectory_id' string='Default Refectory'
Public methods (0)

No public methods.

New fields (1)
  • default_refectory_id Many2one → stay.refectory
    string='Default Refectory' args: 'stay.refectory'
Public methods (0)

No public methods.

New fields (2)
  • stay_count Integer
    compute='_compute_stay_count' readonly=True string='# of Stays'
  • stay_ids One2many → stay.stay
    string='Stays' args: 'stay.stay', 'partner_id'
Public methods (0)

No public methods.

New fields (2)
  • date Date
    index=True required=True
  • name Char
    string='Label'
Public methods (0)

No public methods.

New fields (5)
  • name Char
    required=True string='Group Name'
  • notify_user_ids Many2many → res.users
    string='Users Notified by E-mail' args: 'res.users'
  • room_ids One2many → stay.room
    string='Rooms' args: 'stay.room', 'group_id'
  • sequence Integer
  • user_id Many2one → res.users
    string='In Charge' args: 'res.users'
Public methods (0)

No public methods.

New fields (1)
  • date Date
    default=_default_date required=True string='Date'
Public methods (1)
  • generate(self)

New fields (2)
  • date Date
    default=_default_date required=True string='Date'
  • date_label Char
    compute='_compute_date_label' readonly=True
Public methods (2)
  • get_report_by_refectory(self)
    Method for the report (replace report parser)
  • print_journal(self)

New fields (12)
  • bed_night_qty Integer
    string='Bed Nights'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • date Date
    default=fields.Date.context_today index=True required=True string='Date'
  • dinner_qty Integer
    string='Dinners'
  • group_id Many2one
    readonly=True related='room_id.group_id' store=True
  • lunch_qty Integer
    string='Lunches'
  • partner_id Many2one → res.partner
    help='If guest is anonymous, leave this field empty.' string='Guest' args: 'res.partner'
  • partner_name Char
    required=True args: 'Guest Name'
  • refectory_id Many2one → stay.refectory
    default=_default_refectory string='Refectory' args: 'stay.refectory'
  • room_id Many2one → stay.room
    index=True ondelete='restrict' string='Room' args: 'stay.room'
  • stay_id Many2one → stay.stay
    string='Stay' args: 'stay.stay'
  • user_id Many2one
    readonly=True related='room_id.group_id.user_id' store=True
Public methods (0)

No public methods.

New fields (5)
  • active Boolean
    default=True
  • capacity Integer
    string='Capacity'
  • code Char
    size=10 string='Code'
  • display_name Char
    compute='_compute_display_name_field' readonly=True store=True string='Display Name'
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (10)
  • active Boolean
    default=True
  • allow_simultaneous Boolean
    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.' string='Allow simultaneous'
  • bed_qty Integer
    default=1 string='Number of beds'
  • code Char
    copy=False size=10 string='Code'
  • display_name Char
    compute='_compute_display_name_field' readonly=True store=True string='Display Name'
  • group_id Many2one → stay.group
    string='Group' args: 'stay.group'
  • name Char
    copy=False required=True string='Name'
  • no_meals Boolean
    help='If active, the stays linked to this room will have the same option active by default.' string='No Meals'
  • sequence Integer
  • user_id Many2one
    readonly=True related='group_id.user_id' store=True
Public methods (0)

No public methods.

New fields (21)
  • arrival_date Date
    index=True required=True string='Arrival Date' track_visibility='onchange'
  • arrival_datetime Datetime
    compute='_compute_arrival_datetime' readonly=True store=True string='Arrival Date and Time'
  • arrival_note Char
    string='Arrival Note'
  • arrival_time Selection
    required=True string='Arrival Time' track_visibility='onchange' args: [('morning', 'Morning'), ('afternoon', 'Afternoon'), ('evening', 'Evening')]
  • calendar_display_name Char
    compute='_compute_calendar_display_name' store=False
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • departure_date Date
    index=True required=True string='Departure Date' track_visibility='onchange'
  • departure_datetime Datetime
    compute='_compute_departure_datetime' readonly=True store=True string='Departure Date and Time'
  • departure_note Char
    string='Departure Note'
  • departure_time Selection
    required=True string='Departure Time' track_visibility='onchange' args: [('morning', 'Morning'), ('afternoon', 'Afternoon'), ('evening', 'Evening')]
  • group_id Many2one → stay.group
    copy=False ondelete='restrict' string='Group' track_visibility='onchange' args: 'stay.group'
  • group_id_integer Integer
    readonly=True related='group_id.id'
  • guest_qty Integer
    default=1 string='Guest Quantity' track_visibility='onchange'
  • line_ids One2many → stay.line
    string='Stay Lines' args: 'stay.line', 'stay_id'
  • name Char
    copy=False default='/' string='Stay Number'
  • no_meals Boolean
    help='The stay lines generated from this stay will not have lunchs nor dinners by default.' string='No Meals'
  • notes Text
  • partner_id Many2one → res.partner
    help='If guest is anonymous, leave this field empty.' ondelete='restrict' string='Guest' args: 'res.partner'
  • partner_name Char
    required=True track_visibility='onchange' args: 'Guest Name'
  • room_id Many2one → stay.room
    copy=False index=True ondelete='restrict' string='Room' track_visibility='onchange' args: 'stay.room'
  • user_id Many2one
    readonly=True related='group_id.user_id' store=True
Public methods (5)
  • create(self, vals=None)
    @api.model
  • group_id_change(self)
    @api.onchange('group_id')
  • name_get(self)
    @api.depends('partner_name', 'name', 'room_id')
  • partner_id_change(self)
    @api.onchange('partner_id')
  • room_id_change(self)
    @api.onchange('room_id')

New fields (5)
  • end_date Date
    required=True string='End Date'
  • file_xlsx Binary
    readonly=True
  • filename Char
    readonly=True
  • group_ids Many2many → stay.group
    string='Groups' args: 'stay.group'
  • start_date Date
    required=True string='Start Date'
Public methods (3)
  • default_get(self, fields_list)
    @api.model
  • prepare_tab(self)
  • run(self)
REPOSITORY
REPOSITORYOCA/vertical-abbey
GIT
GIThttps://github.com/OCA/vertical-abbey.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/vertical-abbey/tree/9.0/stay
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYLodging
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Barroux Abbey
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Barroux Abbey
COMMITTERS
COMMITTERSPedro M. Baeza, Stéphane Bidoul (ACSONE)
WEBSITE
WEBSITEhttp://www.barroux.org
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:24
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
    - report
    - mail
    - base_setup
    - web_kanban
    - bus
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (19)
XML IDNameModelTypeStatus
report_stay_journal report_stay_journal ir.ui.view qweb New
stay_form stay.form stay.stay form New
stay_graph stay.graph stay.stay graph New
stay_journal_generate_form stay_journal_generate.form stay.journal.generate form 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_search stay.line.search stay.line search New
stay_line_tree stay.line.tree stay.line tree 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.tree stay.refectory tree New
stay_room_form stay.room.form stay.room form New
stay_room_search stay.room.search stay.room search New
stay_room_tree stay.room.tree stay.room tree New
stay_search stay.search stay.stay search New
stay_tree stay.tree stay.stay tree New
view_company_form res.company group Inherits base.view_company_form
view_partner_form stay.button.res.partner.form res.partner xpath Inherits base.view_partner_form
Models touched (9)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • default_refectory_id Many2one → stay.refectory
    string='Default Refectory' args: 'stay.refectory'
Public methods (0)

No public methods.

New fields (2)
  • stay_count Integer
    compute='_stay_count' readonly=True string='# of Stays'
  • stay_ids One2many → stay.stay
    string='Stays' args: 'stay.stay', 'partner_id'
Public methods (0)

No public methods.

New fields (1)
  • date Date
    default=_default_date required=True string='Date'
Public methods (1)
  • generate(self)
    @api.multi

New fields (1)
  • date Date
    default=_default_date required=True string='Date'
Public methods (1)
  • print_journal(self)
    @api.multi

New fields (10)
  • bed_night_qty Integer
    string='Bed Nights'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • date Date
    default=fields.Date.context_today required=True string='Date'
  • dinner_qty Integer
    string='Dinners'
  • lunch_qty Integer
    string='Lunches'
  • partner_id Many2one → res.partner
    help='If guest is anonymous, leave this field empty.' string='Guest' args: 'res.partner'
  • partner_name Char
    required=True args: 'Guest Name'
  • refectory_id Many2one → stay.refectory
    default=_default_refectory string='Refectory' args: 'stay.refectory'
  • room_id Many2one → stay.room
    ondelete='restrict' string='Room' args: 'stay.room'
  • stay_id Many2one → stay.stay
    string='Stay' args: 'stay.stay'
Public methods (0)

No public methods.

New fields (5)
  • active Boolean
    default=True
  • capacity Integer
    string='Capacity'
  • code Char
    size=10 string='Code'
  • display_name Char
    compute='_compute_display_name' readonly=True store=True string='Display Name'
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (6)
  • active Boolean
    default=True
  • bed_qty Integer
    default='1' string='Number of beds'
  • code Char
    copy=False size=10 string='Code'
  • display_name Char
    compute='_compute_display_name' readonly=True store=True string='Display Name'
  • name Char
    copy=False required=True string='Name'
  • no_meals Boolean
    help='If active, the stays linked to this room will have the same option active by default.' string='No Meals'
Public methods (0)

No public methods.

New fields (12)
  • arrival_date Date
    required=True string='Arrival Date' track_visibility='onchange'
  • arrival_time Selection
    required=True string='Arrival Time' track_visibility='onchange' args: [('morning', 'Morning'), ('afternoon', 'Afternoon'), ('evening', 'Evening')]
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • departure_date Date
    required=True string='Departure Date' track_visibility='onchange'
  • departure_time Selection
    required=True string='Departure Time' track_visibility='onchange' args: [('morning', 'Morning'), ('afternoon', 'Afternoon'), ('evening', 'Evening')]
  • guest_qty Integer
    default=1 string='Guest Quantity' track_visibility='onchange'
  • line_ids One2many → stay.line
    string='Stay Lines' args: 'stay.line', 'stay_id'
  • name Char
    default='/' string='Stay Number'
  • no_meals Boolean
    help='The stay lines generated from this stay will not have lunchs nor dinners by default.' string='No Meals'
  • partner_id Many2one → res.partner
    copy=False help='If guest is anonymous, leave this field empty.' ondelete='restrict' string='Guest' args: 'res.partner'
  • partner_name Char
    required=True track_visibility='onchange' args: 'Guest Name'
  • room_id Many2one → stay.room
    copy=False ondelete='restrict' string='Room' track_visibility='onchange' args: 'stay.room'
Public methods (2)
  • copy(self, default=None)
    @api.one
  • create(self, vals=None)
    @api.model
REPOSITORY
REPOSITORYOCA/vertical-abbey
GIT
GIThttps://github.com/OCA/vertical-abbey.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/vertical-abbey/tree/8.0/stay
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYLodging
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Barroux Abbey
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Barroux Abbey
COMMITTERS
COMMITTERSStéphane Bidoul, Alexis de Lattre, Stéphane Bidoul (ACSONE), Frère Bernard
WEBSITE
WEBSITEhttp://www.barroux.org
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:11:27
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
    - report
    - mail
    - base_setup
    - web_kanban
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (19)
XML IDNameModelTypeStatus
report_stay_journal report_stay_journal ir.ui.view qweb New
stay_form stay.form stay.stay form New
stay_graph stay.graph stay.stay graph New
stay_journal_generate_form stay_journal_generate.form stay.journal.generate form 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_search stay.line.search stay.line search New
stay_line_tree stay.line.tree stay.line tree 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.tree stay.refectory tree New
stay_room_form stay.room.form stay.room form New
stay_room_search stay.room.search stay.room search New
stay_room_tree stay.room.tree stay.room tree New
stay_search stay.search stay.stay search New
stay_tree stay.tree stay.stay tree New
view_company_form res.company group Inherits base.view_company_form
view_partner_form stay.button.res.partner.form res.partner xpath Inherits base.view_partner_form
Models touched (9)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • default_refectory_id Many2one → stay.refectory
    string='Default Refectory' args: 'stay.refectory'
Public methods (0)

No public methods.

New fields (2)
  • stay_count Integer
    compute='_stay_count' readonly=True string='# of Stays'
  • stay_ids One2many → stay.stay
    string='Stays' args: 'stay.stay', 'partner_id'
Public methods (0)

No public methods.

New fields (1)
  • date Date
    default=_default_date required=True string='Date'
Public methods (1)
  • generate(self)
    @api.multi

New fields (1)
  • date Date
    default=_default_date required=True string='Date'
Public methods (1)
  • print_journal(self)
    @api.multi

New fields (10)
  • bed_night_qty Integer
    string='Bed Nights'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • date Date
    default=fields.Date.context_today required=True string='Date'
  • dinner_qty Integer
    string='Dinners'
  • lunch_qty Integer
    string='Lunches'
  • partner_id Many2one → res.partner
    help='If guest is anonymous, leave this field empty.' string='Guest' args: 'res.partner'
  • partner_name Char
    required=True args: 'Guest Name'
  • refectory_id Many2one → stay.refectory
    default=_default_refectory string='Refectory' args: 'stay.refectory'
  • room_id Many2one → stay.room
    ondelete='restrict' string='Room' args: 'stay.room'
  • stay_id Many2one → stay.stay
    string='Stay' args: 'stay.stay'
Public methods (0)

No public methods.

New fields (5)
  • active Boolean
    default=True
  • capacity Integer
    string='Capacity'
  • code Char
    size=10 string='Code'
  • display_name Char
    compute='_compute_display_name' readonly=True store=True string='Display Name'
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (6)
  • active Boolean
    default=True
  • bed_qty Integer
    default='1' string='Number of beds'
  • code Char
    copy=False size=10 string='Code'
  • display_name Char
    compute='_compute_display_name' readonly=True store=True string='Display Name'
  • name Char
    copy=False required=True string='Name'
  • no_meals Boolean
    help='If active, the stays linked to this room will have the same option active by default.' string='No Meals'
Public methods (0)

No public methods.

New fields (12)
  • arrival_date Date
    required=True string='Arrival Date' track_visibility='onchange'
  • arrival_time Selection
    required=True string='Arrival Time' track_visibility='onchange' args: [('morning', 'Morning'), ('afternoon', 'Afternoon'), ('evening', 'Evening')]
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • departure_date Date
    required=True string='Departure Date' track_visibility='onchange'
  • departure_time Selection
    required=True string='Departure Time' track_visibility='onchange' args: [('morning', 'Morning'), ('afternoon', 'Afternoon'), ('evening', 'Evening')]
  • guest_qty Integer
    default=1 string='Guest Quantity' track_visibility='onchange'
  • line_ids One2many → stay.line
    string='Stay Lines' args: 'stay.line', 'stay_id'
  • name Char
    default='/' string='Stay Number'
  • no_meals Boolean
    help='The stay lines generated from this stay will not have lunchs nor dinners by default.' string='No Meals'
  • partner_id Many2one → res.partner
    copy=False help='If guest is anonymous, leave this field empty.' ondelete='restrict' string='Guest' args: 'res.partner'
  • partner_name Char
    required=True track_visibility='onchange' args: 'Guest Name'
  • room_id Many2one → stay.room
    copy=False ondelete='restrict' string='Room' track_visibility='onchange' args: 'stay.room'
Public methods (2)
  • copy(self, default=None)
    @api.one
  • create(self, vals=None)
    @api.model