PMS (Property Management System)

pms
REPOSITORY
REPOSITORYOCA/pms
GIT
GIThttps://github.com/OCA/pms.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/pms/tree/16.0/pms
VERSION
VERSION 4.10.0
CATEGORY
CATEGORYGeneric Modules/Property Management System
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Commit [Sun]
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Commit [Sun]
COMMITTERS
COMMITTERSOmar (Comunitea), Weblate, OCA-git-bot, Darío Lodeiros, oca-ci, DarioLodeiros, irluidev, jesusvmayor
WEBSITE
WEBSITEhttps://github.com/OCA/pms
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:58
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/partner-contact:
    - partner_firstname
    - partner_contact_gender
    - partner_contact_personal_information_page
    - partner_contact_birthdate
    - partner_contact_nationality
OCA/pms:
    - multi_pms_properties
OCA/web:
    - web_timeline
odoo/odoo:
    - base
    - base_automation
    - resource
    - web
    - mail
    - base_setup
    - bus
    - web_tour
    - sales_team
    - analytic
    - uom
    - account
    - product
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - sale
    - account_payment
    - payment
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES openupgradelib
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (125)
XML IDNameModelTypeStatus
account_analytic_distribution_model_form_inherit account.analytic.distribution.model.inherit.form account.analytic.distribution.model field Inherits account.account_analytic_distribution_model_form_inherit
account_analytic_distribution_model_tree_inherit account.analytic.distribution.model.inherit.tree account.analytic.distribution.model field Inherits account.account_analytic_distribution_model_tree_inherit
account_journal_dashboard_kanban_view account.journal xpath Inherits account.account_journal_dashboard_kanban_view
account_journal_view_form account.journal xpath Inherits account.view_account_journal_form
account_payment_view_form account.payment xpath Inherits account.view_account_payment_form
advanced_filters_wizard Filter by dates pms.advanced.filters.wizard form New
availability_plan_rule_view_form pms.availability.plan.rule.form pms.availability.plan.rule form New
availability_plan_rule_view_tree pms.availability.plan.rule.tree pms.availability.plan.rule tree New
availability_view_form pms.availability.plan.form pms.availability.plan form New
availability_view_tree pms.availability.plan.tree pms.availability.plan tree New
bank_statement_form account.bank.statement xpath Inherits account.view_bank_statement_form
booking_duplicate Duplicate Folio pms.booking.duplicate form New
booking_engine Folio Wizard pms.booking.engine form New
company_view_form res.company xpath Inherits base.view_company_form
folio_portal_template Folio Portal Template ir.ui.view qweb Inherits portal.portal_sidebar
massive_changes_wizard Availability Wizard pms.massive.changes.wizard form New
move_form account.move xpath Inherits account.view_move_form
payment_checkout_inherit payment_checkout_inherit ir.ui.view qweb Inherits payment.checkout
payment_manage_inherit payment_manage_inherit ir.ui.view qweb Inherits payment.manage
payment_provider_form muliproperty.payment.provider.form payment.provider field Inherits payment.payment_provider_form
payment_transaction_inherit_view_form payment.transaction xpath Inherits payment.payment_transaction_form
pms_amenity_search pms.room_amenity_search pms.amenity search New
pms_amenity_view_form pms.amenity.form pms.amenity form New
pms_amenity_view_list pms.room_amenity_list pms.amenity tree New
pms_board_service_form pms.board.service.form pms.board.service form New
pms_board_service_room_type_form pms.board.service.room.type.form pms.board.service.room.type form New
pms_board_service_view_search pms.board.service.search pms.board.service search New
pms_board_service_view_tree pms.board.service.tree pms.board.service tree New
pms_cancelation_rule_form pms.cancelation.rule.form pms.cancelation.rule form New
pms_cancelation_rule_view_tree pms.cancelation.rule.tree pms.cancelation.rule tree New
pms_checkin_partner_folio_view_tree pms.checkin.partner.folio.view.tree pms.checkin.partner tree New
pms_checkin_partner_graph pms.checkin.partner.graph pms.checkin.partner graph New
pms_checkin_partner_kanban_view pms.checkin.partner.kanban pms.checkin.partner kanban New
pms_checkin_partner_pivot pms.checkin.partner.pivot pms.checkin.partner pivot New
pms_checkin_partner_reservation_view_tree pms.checkin.partner.reservation.view.tree pms.checkin.partner tree New
pms_checkin_partner_view_calendar pms.checkin.partner.view.calendar pms.checkin.partner calendar New
pms_checkin_partner_view_folio_search pms.checkin.partner.search pms.checkin.partner search New
pms_checkin_partner_view_form Checkin Form pms.checkin.partner form New
pms_checkin_partner_view_search pms.checkin.partner.search pms.checkin.partner search New
pms_checkin_partner_view_tree pms.checkin.partner.view.tree pms.checkin.partner tree New
pms_folio_pivot pms.folio.pivot pms.folio pivot New
pms_folio_view_form pms.folio.form pms.folio form New
pms_folio_view_graph view.pms.folio.graph pms.folio graph New
pms_folio_view_kanban pms.folio.kanban pms.folio kanban New
pms_folio_view_search pms.folio.search pms.folio search New
pms_folio_view_tree pms.folio.tree pms.folio tree New
pms_proforma_invoice_template Invoice Proforma Portal Template ir.ui.view qweb Inherits account.portal_invoice_page
pms_property_views_form pms_property_views_form pms.property form New
pms_property_views_tree pms_property_views_tree pms.property tree New
pms_reservation_graph pms.reservation.graph pms.reservation graph New
pms_reservation_pivot pms.reservation.pivot pms.reservation pivot New
pms_reservation_view_bottom_tree pms.reservation.tree pms.reservation tree Inherits pms.pms_reservation_view_tree
pms_reservation_view_calendar pms.reservation.view.calendar pms.reservation calendar New
pms_reservation_view_form pms.reservation.form pms.reservation form New
pms_reservation_view_search pms.reservation.search pms.reservation search New
pms_reservation_view_timeline pms.reservation.view.timeline pms.reservation timeline New
pms_reservation_view_tree pms.reservation.tree pms.reservation tree New
pms_room_amenity_type_view_form pms.room_amenity_type_form pms.amenity.type form New
pms_room_amenity_type_view_list pms.room_amenity_type_list pms.amenity.type tree New
pms_room_closure_reason_view_form pms.room.closure.reason.form room.closure.reason form New
pms_room_closure_reason_view_search pms.room.closure.reason.search room.closure.reason search New
pms_room_closure_reason_view_tree >pms.room.closure.reason.tree room.closure.reason tree New
pms_room_type_class_view_form pms.room.type.class.form pms.room.type.class form New
pms_room_type_class_view_tree pms.room.type.class.tree pms.room.type.class tree New
pms_room_type_view_form pms.room_type.form pms.room.type form New
pms_room_type_view_search pms.room.type.search pms.room.type search New
pms_room_type_view_tree pms.room_type.tree pms.room.type tree New
pms_room_view_form pms.room.form pms.room form New
pms_room_view_kanban pms.room.kanban pms.room kanban New
pms_room_view_search pms.room.search pms.room search New
pms_room_view_tree pms.room.tree pms.room tree New
pms_sale_channel_view_form pms.sale.channel.form pms.sale.channel form New
pms_sale_channel_view_tree pms.sale.channel.tree pms.sale.channel tree New
pms_service_line_graph pms.service.line.graph pms.service.line graph New
pms_service_line_pivot pms.service.line.pivot pms.service.line pivot New
pms_service_line_report_view_tree pms.service.line.report.tree pms.service.line tree New
pms_service_line_view_calendar pms.service.line.view.calendar pms.service.line calendar New
pms_service_line_view_form pms.service.line.form pms.service.line form New
pms_service_line_view_search pms.service.line.search pms.service.line search New
pms_service_line_view_tree pms.service.line.tree pms.service.line tree New
pms_service_view_form .pms.service.form pms.service form New
pms_service_view_search pms.service.search pms.service search New
pms_service_view_tree .pms.service.view.tree pms.service tree New
pms_ubication_view_form pms.ubication.form pms.ubication form New
pms_ubication_view_tree pms.ubication.tree pms.ubication tree New
portal_folio_error Folio error/warning display ir.ui.view qweb New
portal_folio_success Invoice success display ir.ui.view qweb New
portal_my_folio My Folios ir.ui.view qweb New
portal_my_folios Folios ir.ui.view qweb Inherits portal.portal_my_home
portal_my_home_menu_folio Portal layout : folio menu entries ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_home_menu_reservation Portal layout : reservation menu entries ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_reservation My Reservations ir.ui.view qweb New
portal_my_reservation_detail My Reservation ir.ui.view qweb New
portal_my_reservations Reservations ir.ui.view qweb Inherits portal.portal_my_home
product_pricelist_item_view_form product.pricelist.item xpath Inherits product.product_pricelist_item_form_view
product_pricelist_item_view_tree product.pricelist.item tree New
product_pricelist_view_form product.pricelist xpath Inherits product.product_pricelist_view
product_template_view_form view.product.template.form.inherited product.template xpath Inherits product.product_template_form_view
report_folio report_folio ir.ui.view qweb New
report_folio_document report_folio_document ir.ui.view qweb New
report_invoice_document report_invoice_document ir.ui.view qweb Inherits account.report_invoice_document
report_pms_pro_forma report_pms_pro_forma ir.ui.view qweb New
res_partner_view_form res.partner.view.form res.partner xpath Inherits base.view_partner_form
res_users_view_form User Properties fields res.users xpath Inherits base.view_users_form
reservation_wizard Split, join or swap reservations pms.reservation.split.join.swap.wizard form New
several_partners_wizard Several Partners pms.several.partners.wizard form New
template_footer template_footer ir.ui.view qweb New
template_header template_header ir.ui.view qweb New
template_reservation template_reservation ir.ui.view qweb New
template_reservation_confirmed Property Reservation Confirmed ir.ui.view qweb New
template_reservation_details template_reservation_details ir.ui.view qweb New
traveller_report traveller_report ir.ui.view qweb New
view_account_analytic_line_tree_inherit_account account.analytic.line.tree.inherit.account account.analytic.line field Inherits account.view_account_analytic_line_tree_inherit_account
view_account_invoice_filter account.move xpath Inherits account.view_account_invoice_filter
view_account_journal_search account.journal xpath Inherits account.view_account_journal_search
view_account_move_filter account.move xpath Inherits account.view_account_move_filter
view_account_move_line_filter account.move.line xpath Inherits account.view_account_move_line_filter
view_country_form view.country.form res.country xpath Inherits base.view_country_form
view_folio_advance_payment_inv Invoice Orders folio.advance.payment.inv form New
view_move_line_tree account.move.line xpath Inherits account.view_move_line_tree
view_move_tree account.move xpath Inherits account.view_move_tree
view_partner_category_form_inherited view.partner.category.form.inherited res.partner.category xpath Inherits base.view_partner_category_form
view_partner_data_form res.partner.form.data res.partner form New
wizard_folio_changes_view_form wizard.folio.changes.view.form wizard.folio.changes form New
wizard_payment_folio_view_form wizard.payment.folio.view.form wizard.payment.folio form New
Models touched (62)

New fields (1)
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' index=True name='Property'
Public methods (1)
  • default_get(self, fields)
    @api.model

New fields (2)
  • journal_id Many2one
    check_pms_properties=True readonly=False
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' compute='_compute_pms_property_id' copy=False help='Properties with access to the element' index=True readonly=False store=True string='Property'
Public methods (0)

No public methods.

New fields (3)
  • folio_ids Many2many → pms.folio
    check_pms_properties=True column1='account_journal_id' column2='folio_id' comodel_name='pms.folio' ondelete='cascade' relation='account_bank_statement_folio_rel' string='Folios'
  • reservation_ids Many2many → pms.reservation
    check_pms_properties=True column1='account_bank_statement_id' column2='reservation_id' comodel_name='pms.reservation' help='Reservations in which the Account Bank Statement Lines are included' ondelete='cascade' relation='account_bank_statement_reservation_rel' string='Reservations'
  • service_ids Many2many → pms.service
    check_pms_properties=True column1='account_bank_statement_id' column2='service_id' comodel_name='pms.service' help='Services in which the Account Bank Statement Lines are included' ondelete='cascade' relation='account_bank_statement_service_rel' string='Services'
Public methods (0)

No public methods.

New fields (4)
  • allowed_room_ids Many2many → pms.room
    column1='account_journal_id' column2='room_id' comodel_name='pms.room' compute='_compute_allowed_room_ids' help='Room to filter the room in the reservation' relation='account_journal_allow_room_rel' string='Rooms Filter allowed'
  • is_simplified_invoice Boolean
    compute='_compute_is_simplified_invoice' help='Use to simplified invoice' readonly=False store=True string='Simplified invoice'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='account_journal_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='account_journal_pms_property_rel' string='Properties'
  • room_filter_ids Many2many → pms.room
    column1='account_journal_id' column2='room_id' comodel_name='pms.room' domain="[('id', 'in', allowed_room_ids)]" help='Room to filter the room types in the reservation' relation='account_journal_room_rel' string='Apply Rooms'
Public methods (0)

No public methods.

New fields (4)
  • folio_ids Many2many → pms.folio
    column1='account_move_id' column2='folio_ids_id' comodel_name='pms.folio' compute='_compute_folio_origin' help='Folios where the account move are included' readonly=False relation='account_move_folio_ids_rel' store=True string='Folios'
  • is_simplified_invoice Boolean
    help='Technical field to know if the invoice is simplified' related='journal_id.is_simplified_invoice' store=True
  • origin_agency_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_origin_agency_id' domain="[('is_agency', '=', True)]" help='The agency where the folio account move originates' index=True readonly=False store=True string='Origin Agency'
  • pms_property_id Many2one → pms.property
    comodel_name='pms.property' compute='_compute_pms_property_id' help='The property associated to the account move' index=True readonly=False store=True string='Property'
Public methods (1)
  • get_proforma_portal_url(self, suffix=None, report_type=None, download=None, query_string=None, anchor=None)
    Get a proforma portal url for this model, including access_token. The associated route must handle the flags for them to have any effect. - suffix: string to append to the url, before the query string - report_type: report_type query string, often one of: html, pdf, text - download: set the download query string to true - query_string: additional query string - anchor: string to append after the anchor #

New fields (7)
  • folio_ids Many2many → pms.folio
    check_pms_properties=True comodel_name='pms.folio' compute='_compute_folio_ids' store=True string='Folios'
  • folio_line_ids Many2many → folio.sale.line
    column1='invoice_line_id' column2='sale_line_id' comodel_name='folio.sale.line' copy=True help='The folio lines in the account move lines' relation='folio_sale_line_invoice_rel' string='Folio Lines'
  • move_id Many2one
    check_pms_properties=True
  • name Char
    compute='_compute_name' readonly=False store=True
  • name_changed_by_user Boolean
    default=True help='Techinal field to know if the name was set manually by the user\n or by the system. If the name was set manually, the system will not\n change it when the qty days are changed' string='Name set manually'
  • origin_agency_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_origin_agency_id' domain="[('is_agency', '=', True)]" help='The agency where the folio account move originates' index=True readonly=False store=True string='Origin Agency'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' compute='_compute_pms_property_id' index=True name='Property' readonly=False store=True
Public methods (1)
  • reconcile(self)
    Reconcile the account move

New fields (3)
  • folio_ids Many2many → pms.folio
    column1='payment_id' column2='folio_id' comodel_name='pms.folio' compute='_compute_folio_ids' readonly=False relation='account_payment_folio_rel' store=True string='Folios'
  • origin_agency_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_origin_agency_id' domain="[('is_agency', '=', True)]" help='The agency where the folio account move originates' index=True readonly=True store=True string='Origin Agency'
  • origin_reference Char
    help='The reference of the payment origin'
Public methods (1)
  • action_draft(self)

New fields (1)
  • allowed_on_pms Boolean
    help='Use to pay for reservations' args: 'Allowed on PMS'
Public methods (0)

No public methods.

New fields (13)
  • advance_payment_method Selection
    default='delivered' help='A standard invoice is issued with all the order lines ready for invoicing, according to their invoicing policy (based on ordered or delivered quantity).' required=True selection=[('delivered', 'Regular invoice'), ('percentage', 'Down payment (percentage)'), ('fixed', 'Down payment (fixed amount)')] string='Create Invoice'
  • amount Float
    digits='Account' help='The percentage of amount to be invoiced in advance, taxes excluded.' string='Down Payment Amount'
  • bill_rooms Boolean
    default=True help='Bill Rooms'
  • bill_services Boolean
    default=True help='Bill Services'
  • count Integer
    default=<expr> string='Order Count'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' default=<expr> help='Currency used in invoices' string='Currency'
  • deduct_down_payments Boolean
    default=True help='Deduct down payments'
  • deposit_account_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain=[('deprecated', '=', False)] help='Account used for deposits' string='Income Account'
  • deposit_taxes_id Many2many → account.tax
    comodel_name='account.tax' default=<expr> help='Taxes used for deposits' string='Customer Taxes'
  • fixed_amount Monetary
    help='The fixed amount to be invoiced in advance, taxes excluded.' string='Down Payment Amount (Fixed)'
  • has_down_payments Boolean
    default=<expr> help='Has down payments' readonly=True
  • partner_invoice_id Many2one → res.partner
    comodel_name='res.partner' default=<expr> help='Invoice address for current partner' string='Billing contact'
  • product_id Many2one → product.product
    comodel_name='product.product' default=<expr> domain=[('type', '=', 'service')] string='Down Payment Product'
Public methods (2)
  • create_invoices(self)
  • onchange_advance_payment_method(self)
    @api.onchange('advance_payment_method')

New fields (41)
  • auto_reservation_note Boolean
    default=False help='Indicates if the folio sale line is an auto reservation note' readonly=True
  • company_id Many2one
    help='The company in the folio sale line' index=True readonly=True related='folio_id.company_id' store=True string='Company'
  • currency_id Many2one
    depends=['folio_id.currency_id'] help='The currency for the folio' readonly=True related='folio_id.currency_id' store=True string='Currency'
  • date_order Date
    compute='_compute_date_order' help='Field to order by service' readonly=True store=True string='Date'
  • default_invoice_to Many2one → res.partner
    comodel_name='res.partner' help='Indicates the contact to which this line will be\n billed by default, if it is not established,\n a guest or the generic contact will be used instead' index=True ondelete='restrict' string='Invoice to'
  • discount Float
    compute='_compute_discount' digits='Discount' help='Discount of total price in folio sale line' readonly=False store=True string='Discount (%)'
  • display_type Selection
    default=False help='Technical field for UX purpose.' selection=[('line_section', 'Section'), ('line_note', 'Note')]
  • folio_id Many2one → pms.folio
    comodel_name='pms.folio' copy=False help='Folio to which folio sale line belongs' index=True ondelete='cascade' required=True string='Folio Reference'
  • invoice_lines Many2many → account.move.line
    column1='sale_line_id' column2='invoice_line_id' comodel_name='account.move.line' copy=False help='Folio sale line invoice lines' relation='folio_sale_line_invoice_rel'
  • invoice_status Selection
    compute='_compute_invoice_status' help='Invoice Status; it can be: invoiced, to invoice, no' readonly=True selection=[('invoiced', 'Fully Invoiced'), ('to_invoice', 'To Invoice'), ('no', 'Nothing to Invoice')] store=True
  • is_board_service Boolean
    help='Indicates if the service included in folio sale line is part of a board service' related='service_id.is_board_service' store=True string='Board Service'
  • is_downpayment Boolean
    help='Down payments are made when creating invoices from a folio. They are not copied when duplicating a folio.' string='Is a down payment'
  • name Text
    compute='_compute_name' help='Description of folio sale line' readonly=False store=True string='Description'
  • origin_agency_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_origin_agency_id' domain="[('is_agency', '=', True)]" help='The agency where the folio sale line originates' index=True readonly=False store=True string='Origin Agency'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Property with access to the element;' index=True readonly=True related='folio_id.pms_property_id' store=True string='Property'
  • price_reduce Float
    compute='_compute_get_price_reduce' digits='Product Price' help='Reduced price amount, that is, total price with discounts applied' readonly=True store=True
  • price_reduce_taxexcl Monetary
    compute='_compute_get_price_reduce_notax' help='Price with discounts applied without taxes' readonly=True store=True string='Price Reduce Tax excluded'
  • price_reduce_taxinc Monetary
    compute='_compute_get_price_reduce_tax' help='Price with discounts applied and taxes included' readonly=True store=True string='Price Reduce Tax included'
  • price_subtotal Monetary
    compute='_compute_amount' help='Subtotal price without taxes' readonly=True store=True string='Subtotal'
  • price_tax Float
    compute='_compute_amount' help='Total of taxes in a reservation' readonly=True store=True string='Total Tax'
  • price_total Monetary
    compute='_compute_amount' help='Total price with taxes' readonly=True store=True string='Total'
  • price_unit Float
    digits='Product Price' help='Unit Price of folio sale line'
  • product_id Many2one → product.product
    change_default=True check_company=True comodel_name='product.product' compute='_compute_product_id' domain="[('sale_ok', '=', True), ('is_pms_available', '=', True), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" help="Product associated with folio sale line, can be product associated with service or product associated withreservation's room type, in other case it's false" index=True ondelete='restrict' store=True string='Product'
  • product_uom Many2one → uom.uom
    comodel_name='uom.uom' domain="[('category_id', '=', product_uom_category_id)]" help='' index=True string='Unit of Measure'
  • product_uom_category_id Many2one
    help='' readonly=True related='product_id.uom_id.category_id' string='Unit of Measure Category'
  • product_uom_qty Float
    compute='_compute_product_uom_qty' digits='Product Unit of Measure' help='' readonly=False store=True string='Quantity'
  • product_uom_readonly Boolean
    compute='_compute_product_uom_readonly' help='' string=''
  • qty_invoiced Float
    compute='_compute_get_invoice_qty' compute_sudo=True digits='Product Unit of Measure' help='It is the amount invoiced when an invoice is issued' readonly=True store=True string='Invoiced Quantity'
  • qty_to_invoice Float
    compute='_compute_get_to_invoice_qty' digits='Product Unit of Measure' help='The quantity to invoice. If the invoice policy is order, the quantity to invoice is calculated from the ordered quantity. Otherwise, the quantity delivered is used.' readonly=True store=True string='To Invoice Quantity'
  • reservation_id Many2one → pms.reservation
    comodel_name='pms.reservation' copy=False help='Reservation to which folio sale line belongs' index=True ondelete='cascade' string='Reservation Reference'
  • reservation_line_ids Many2many → pms.reservation.line
    comodel_name='pms.reservation.line' help='Reservation lines associated with folio sale line, they corresponds with nights' string='Nights'
  • reservation_order Integer
    compute='_compute_reservation_order' help='Field to order by reservation id' readonly=True store=True string='Reservation Id'
  • section_id Many2one → folio.sale.line
    comodel_name='folio.sale.line' compute='_compute_section_id' help='The section of the folio sale line' index=True string='Section'
  • sequence Integer
    default=10
  • service_id Many2one → pms.service
    comodel_name='pms.service' copy=False help='Sevice included in folio sale line' index=True ondelete='cascade' string='Service Reference'
  • service_line_ids Many2many → pms.service.line
    comodel_name='pms.service.line' help='Subservices included in folio sale line service' string='Service Lines'
  • service_order Integer
    compute='_compute_service_order' help='Field to order by service id' readonly=True store=True string='Service Id'
  • state Selection
    copy=False help='The status of the folio related with folio sale line' readonly=True related='folio_id.state' store=True string='Folio Status'
  • tax_ids Many2many → account.tax
    comodel_name='account.tax' compute='_compute_tax_ids' domain=['|', ('active', '=', False), ('active', '=', True)] help='Taxes applied in the folio sale line' store=True string='Taxes'
  • untaxed_amount_invoiced Monetary
    compute='_compute_untaxed_amount_invoiced' compute_sudo=True help='The amount to invoice without taxes in the line of folio' store=True string='Untaxed Invoiced Amount'
  • untaxed_amount_to_invoice Monetary
    compute='_compute_untaxed_amount_to_invoice' compute_sudo=True help='The invoiced amount without taxes in the line of the folio' store=True
Public methods (4)
  • generate_folio_sale_name(self, reservation_id, product_id, service_id, reservation_line_ids, service_line_ids, qty=False)
    @api.model
  • name_get(self)
  • unlink(self)
  • write(self, values)

New fields (0)

No new fields.

Public methods (2)
  • check_value(self)
    @api.constrains('key', 'value')
  • unlink(self)

New fields (0)

No new fields.

Public methods (1)
  • session_info(self)

New fields (9)
  • field_id Many2one → ir.model.fields
    comodel_name='ir.model.fields' index=True string='Field'
  • field_name Char
    compute='_compute_field_name' readonly=False store=True
  • model_id Many2one → ir.model
    comodel_name='ir.model' index=True string='Model'
  • model_name Char
    compute='_compute_model_name' readonly=False store=True
  • pms_property_id Many2one → pms.property
    comodel_name='pms.property' help='' index=True string='Properties'
  • record Integer
    string='Record Id'
  • value_float Float
    string='Float Field Value'
  • value_integer Integer
    string='Integer Field Value'
  • value_reference Text
    string='Reference Field Value'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • get_field_value(self, pms_property_id, model_name, field_name, record_id, value_type)
  • set_field_value(self, pms_property_id, model_name, field_name, record_id, value)

New fields (0)

No new fields.

Public methods (1)
  • send_mail(self, auto_commit=False)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='acquirer_id' column2='property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' relation='pms_acquirer_property_rel' required=False string='Properties'
Public methods (0)

No public methods.

New fields (2)
  • folio_ids Many2many → pms.folio
    column1='payment_transaction_id' column2='folio_id' comodel_name='pms.folio' ondelete='cascade' relation='payment_transaction_folio_rel' string='Folios'
  • folio_ids_nbr Integer
    compute='_compute_folio_ids_nbr' string='# of Folios'
Public methods (2)
  • action_view_folios(self)
  • render_folio_button(self, folio, submit_txt=None, render_values=None, custom_amount=None)

New fields (3)
  • pms_domain Char
    string='Domain'
  • pms_model_id Many2one → ir.model
    comodel_name='ir.model' default=<expr> domain=[('model', 'in', PMS_BUSINESS_MODELS)] ondelete='cascade' required=True string='Recipients Model'
  • pms_model_name Char
    readonly=True related='pms_model_id.model' related_sudo=True string='Recipients Model Name'
Public methods (1)
  • action_filter(self)

New fields (6)
  • active Boolean
    default=True help='Determines if amenity is active'
  • default_code Char
    help='Internal unique identifier of the amenity' string='Internal Reference'
  • is_add_code_room_name Boolean
    help='True if the Internal Reference should appear in the display name of the rooms' string='Add in room name'
  • name Char
    help='Amenity Name' required=True string='Amenity Name' translate=True
  • pms_amenity_type_id Many2one → pms.amenity.type
    check_pms_properties=True comodel_name='pms.amenity.type' help='Segment the amenities by categories (multimedia, comfort, etc ...)' index=True string='Amenity Category'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='amenity_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='pms_amenity_pms_property_rel' string='Properties'
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True help='Determines if amenity type is active'
  • name Char
    help='Amenity Type Name' required=True string='Amenity Type Name' translate=True
  • pms_amenity_ids One2many → pms.amenity
    check_pms_properties=True comodel_name='pms.amenity' help='Amenities included in this type' inverse_name='pms_amenity_type_id' string='Amenities In This Category'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='amenity_type_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='pms_amenity_type_pms_property_rel' string='Properties'
Public methods (0)

No public methods.

New fields (1)
  • name Char
    help='Name of the automated mail.' required=True
Public methods (0)

No public methods.

New fields (8)
  • avail_rule_ids One2many → pms.availability.plan.rule
    check_pms_properties=True comodel_name='pms.availability.plan.rule' inverse_name='avail_id' string='Avail record rules'
  • child_avail_ids One2many → pms.availability
    check_pms_properties=True comodel_name='pms.availability' compute='_compute_child_avail_ids' help='Child availabilities for this availability' inverse_name='parent_avail_id' store=True string='Child Avails'
  • date Date
    help='Date for which availability applies' readonly=True required=True
  • parent_avail_id Many2one → pms.availability
    check_pms_properties=True comodel_name='pms.availability' compute='_compute_parent_avail_id' help='Parent availability for this availability' index=True ondelete='restrict' store=True string='Parent Avail'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Property to which the availability is directed' index=True ondelete='restrict' readonly=True required=True string='Property'
  • real_avail Integer
    compute='_compute_real_avail' readonly=True store=True
  • reservation_line_ids One2many → pms.reservation.line
    check_pms_properties=True comodel_name='pms.reservation.line' help='They are the lines of the reservation into a reservation,they corresponds to the nights' inverse_name='avail_id' readonly=True string='Reservation Lines'
  • room_type_id Many2one → pms.room.type
    check_pms_properties=True comodel_name='pms.room.type' help='Room type for which availability is indicated' index=True ondelete='cascade' readonly=True required=True string='Room Type'
Public methods (3)
  • get_occupied_child_rooms(self, rooms, checkin, checkout)
    @api.model
  • get_occupied_parent_rooms(self, room, checkin, checkout)
    @api.model
  • get_rooms_not_avail(self, checkin, checkout, room_ids, pms_property_id, current_lines=False)
    @api.model

New fields (5)
  • active Boolean
    default=True help='If unchecked, it will allow you to hide the Availability plan without removing it.'
  • name Char
    help='Name of availability plan' required=True string='Availability Plan Name'
  • pms_pricelist_ids One2many → product.pricelist
    check_pms_properties=True comodel_name='product.pricelist' domain="[('is_pms_available', '=', True)]" help='Pricelists of the availability plan ' inverse_name='availability_plan_id' string='Pricelists'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='availability_plan_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='pms_availability_plan_pms_property_rel' string='Properties'
  • rule_ids One2many → pms.availability.plan.rule
    check_pms_properties=True comodel_name='pms.availability.plan.rule' help='Rules in a availability plan' inverse_name='availability_plan_id' string='Availability Rules'
Public methods (3)
  • any_rule_applies(cls, checkin, checkout, item)
    @classmethod
  • open_massive_changes_wizard(self)
  • update_quota(self, pricelist_id, room_type_id, date, pms_property_id)
    @api.model

New fields (16)
  • avail_id Many2one → pms.availability
    check_pms_properties=True comodel_name='pms.availability' compute='_compute_avail_id' index=True ondelete='restrict' readonly=False store=True string='Avail record'
  • availability_plan_id Many2one → pms.availability.plan
    check_pms_properties=True comodel_name='pms.availability.plan' help='The availability plan that include the Availabilty Rule' index=True ondelete='cascade' string='Availability Plan'
  • closed Boolean
    default=False help='Indicate if property is closed or not'
  • closed_arrival Boolean
    default=False
  • closed_departure Boolean
    default=False
  • date Date
    help='Date for which availability rule applies'
  • max_avail Integer
    compute='_compute_max_avail' help='Maximum simultaneous availability on own Booking Engine' readonly=False store=True
  • max_stay Integer
    default=0 help='Maximum stay' string='Max. Stay'
  • max_stay_arrival Integer
    default=0 help='Maximum stay if checkin is today' string='Max. Stay Arrival'
  • min_stay Integer
    default=0 help='Minimum stay' string='Min. Stay'
  • min_stay_arrival Integer
    default=0 help='Minimum stay if checkin is today' string='Min. Stay Arrival'
  • plan_avail Integer
    compute='_compute_plan_avail' store='True'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Properties with access to the element' index=True ondelete='restrict' required=True string='Property'
  • quota Integer
    compute='_compute_quota' help='Generic Quota assigned.' readonly=False store=True
  • real_avail Integer
    related='avail_id.real_avail' store='True' string='Real availability'
  • room_type_id Many2one → pms.room.type
    check_pms_properties=True comodel_name='pms.room.type' help='Room type for which availability rule is applied' index=True ondelete='cascade' required=True string='Room Type'
Public methods (0)

No public methods.

New fields (8)
  • active Boolean
    default=True help='If unchecked, this board service will be archived and hidden from selections without affecting historical records that reference it.'
  • amount Float
    compute='_compute_board_amount' digits='Product Price' help='Price for this Board Service. It corresponds to the sum of his board service lines' store=True
  • board_service_line_ids One2many → pms.board.service.line
    comodel_name='pms.board.service.line' help='Services included in this Board Service' inverse_name='pms_board_service_id' string='Board Service Lines'
  • default_code Char
    help='Unique Board Service identification code per property' required=True string='Board Service Code'
  • name Char
    help='Board Service Name' index=True required=True size=64 string='Board Service Name' translate=True
  • pms_board_service_room_type_ids One2many → pms.board.service.room.type
    comodel_name='pms.board.service.room.type' help='Board Services Room Type corresponding to this Board Service,One board service for several room types' inverse_name='pms_board_service_id' string='Board Services Room Type'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='board_service_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='pms_board_service_pms_property_rel' required=False string='Properties'
  • show_detail_report Boolean
    help='True if you want that board service detail to be shown on the report'
Public methods (2)
  • get_unique_by_property_code(self, pms_property_id, default_code=None)
    @api.model
    :param pms_property_id: property ID :param default_code: board service code (optional) :return: - recordset of - all the pms.board.service of the pms_property_id if default_code not defined - one or 0 pms.board.service if default_code defined - ValidationError if more than one default_code found by the same pms_property_id
  • write(self, vals)

New fields (7)
  • active Boolean
    default=True help='Lines of an archived board service are archived as well.'
  • adults Boolean
    default=False help='Apply service to adults'
  • amount Float
    default=<expr> digits='Product Price' help='Price for this Board Service Line/Product'
  • children Boolean
    default=False help='Apply service to children'
  • pms_board_service_id Many2one → pms.board.service
    check_pms_properties=True comodel_name='pms.board.service' help='Board Service in which this line is included' index=True ondelete='cascade' required=True string='Board Service'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='pms_board_service_line_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' relation='pms_board_service_line_pms_property_rel' store=True string='Properties'
  • product_id Many2one → product.product
    check_pms_properties=True comodel_name='product.product' help='Product associated with this board service line' index=True required=True string='Product'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • onchange_product_id(self)
    @api.onchange('product_id')
  • write(self, vals)

New fields (8)
  • active Boolean
    default=True help='If unchecked, this board service room type assignment will be archived and hidden from selections without affecting historical reservations that reference it.'
  • amount Float
    compute='_compute_board_amount' digits='Product Price' help='Price for this Board Service. It corresponds to the sum of his board service lines' store=True
  • board_service_line_ids One2many → pms.board.service.room.type.line
    comodel_name='pms.board.service.room.type.line' help='Services included in this Board Service' inverse_name='pms_board_service_room_type_id' required=True string='Board Service Lines'
  • by_default Boolean
    help='Indicates if this board service is applied by default in the room type' string='Apply by Default'
  • pms_board_service_id Many2one → pms.board.service
    check_pms_properties=True comodel_name='pms.board.service' help='Board Service corresponding to this Board Service Room Type' index=True ondelete='cascade' required=True string='Board Service'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Property with access to the element; if not set, all property can access' index=True ondelete='restrict' required=False store=True string='Property'
  • pms_room_type_id Many2one → pms.room.type
    check_pms_properties=True comodel_name='pms.room.type' help='Room Type for which this Board Service is available' index=True ondelete='cascade' required=True string='Room Type'
  • pricelist_ids Many2many → product.pricelist
    comodel_name='product.pricelist' help='Pricelists where this Board Service is available' string='Pricelists'
Public methods (7)
  • constrains_duplicated_board_default(self)
    @api.constrains('by_default')
  • create(self, vals_list)
    @api.model_create_multi
  • init(self)
  • name_get(self)
  • open_board_lines_form(self)
  • prepare_board_service_reservation_ids(self, board_service_id)
    @api.model
    Prepare line to price products config
  • write(self, vals)

New fields (7)
  • active Boolean
    default=True help='Lines of an archived board service room type are archived as well.'
  • adults Boolean
    default=False help='Apply service to adults'
  • amount Float
    default=<expr> digits='Product Price' help='Price for this Board Service Room Type Line/Product'
  • children Boolean
    default=False help='Apply service to children'
  • pms_board_service_room_type_id Many2one → pms.board.service.room.type
    comodel_name='pms.board.service.room.type' help='Board Service Room Type in which this line is included' index=True ondelete='cascade' required=True string='Board Service Room'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Property with access to the element; if not set, all properties can access' related='pms_board_service_room_type_id.pms_property_id' string='Property'
  • product_id Many2one → product.product
    check_pms_properties=True comodel_name='product.product' domain="[('is_pms_available', '=', True)]" help='Product associated with this board service room type line' index=True readonly=True string='Product'
Public methods (0)

No public methods.

New fields (17)
  • agency_id Many2one → res.partner
    comodel_name='res.partner' domain=[('is_agency', '=', True)] help='Agency that made the reservation' ondelete='restrict' string='Agency'
  • channel_type_id Many2one → pms.sale.channel
    comodel_name='pms.sale.channel' compute='_compute_channel_type_id' domain=[('channel_type', '=', 'direct')] help='Sales Channel through which the reservation was managed' ondelete='restrict' readonly=False store=True string='Direct Sale Channel'
  • created_folio_ids Many2many → pms.folio
    comodel_name='pms.folio' help='Folios already created' string='Folios'
  • discount Float
    default=0 help='Discount that be applied in total price'
  • internal_comment Text
    help='Internal Folio notes for Staff' string='Internal Folio Notes'
  • line_ids One2many → pms.reservation.duplicate
    check_pms_properties=True comodel_name='pms.reservation.duplicate' compute='_compute_line_ids' help='Rooms to create' inverse_name='booking_duplicate_id' readonly=False store=True string='Rooms'
  • partner_id Many2one → res.partner
    check_pms_properties=True comodel_name='res.partner' compute='_compute_partner_id' help='Partner who made the reservation' readonly=False store=True string='Partner'
  • partner_name Char
    compute='_compute_partner_name' help='In whose name is the reservation' readonly=False store=True
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Property to which the folio belongs' related='reference_folio_id.pms_property_id' string='Property'
  • pricelist_id Many2one → product.pricelist
    check_pms_properties=True comodel_name='product.pricelist' compute='_compute_pricelist_id' domain="[('is_pms_available', '=', True)]" help='Pricelist applied in folio' readonly=False store=True string='Pricelist'
  • recompute_prices Boolean
    default=False help='Leave unchecked if you want to respect\n the price of the original reservation regardless\n of what is marked in the rate' string='Recompute Price'
  • reference_folio_id Many2one → pms.folio
    check_pms_properties=True comodel_name='pms.folio' help='Folio to copy data' string='Folio Reference'
  • reservation_type Selection
    compute='_compute_reservation_type' help="The type of the reservation. Can be 'Normal', 'Staff' or 'Out of Service'" readonly=False selection=[('normal', 'Normal'), ('staff', 'Staff'), ('out', 'Out of Service')] store=True string='Type'
  • segmentation_ids Many2many → res.partner.category
    comodel_name='res.partner.category' compute='_compute_segmentation_ids' domain="[('is_used_in_checkin', '=', True)]" help='Partner Tags' ondelete='restrict' readonly=False store=True string='Segmentation'
  • start_date Date
    help='Date from first copy Checkin (reference min checkin folio reservation)' required=True string='From:'
  • total_price_folio Float
    compute='_compute_total_price_folio' help='Total price of folio with taxes' string='Total Price'
  • used_room_ids Many2many → pms.room
    comodel_name='pms.room' compute='_compute_used_room_ids' string='Used Rooms'
Public methods (4)
  • create_and_close(self)
  • create_and_new(self)
  • create_folio(self)
  • view_folios(self)

New fields (16)
  • agency_id Many2one → res.partner
    comodel_name='res.partner' domain=[('is_agency', '=', True)] help='Agency that made the reservation' ondelete='restrict' string='Agency'
  • availability_results One2many → pms.folio.availability.wizard
    check_pms_properties=True comodel_name='pms.folio.availability.wizard' compute='_compute_availability_results' help='Availability Results' inverse_name='booking_engine_id' readonly=False store=True
  • can_create_folio Boolean
    compute='_compute_can_create_folio'
  • channel_type_id Many2one → pms.sale.channel
    comodel_name='pms.sale.channel' compute='_compute_channel_type_id' domain=[('channel_type', '=', 'direct')] help='Sales Channel through which the reservation was managed' ondelete='restrict' readonly=False required=True store=True string='Direct Sale Channel'
  • discount Float
    default=0 help='Discount that be applied in total price'
  • end_date Date
    help='End date for creation of reservations and folios' required=True string='To:'
  • folio_id Many2one → pms.folio
    check_pms_properties=True comodel_name='pms.folio' help='Folio in which are included new reservations' string='Folio'
  • internal_comment Text
    help='Internal Folio notes for Staff' string='Internal Folio Notes'
  • partner_id Many2one → res.partner
    check_pms_properties=True comodel_name='res.partner' compute='_compute_partner_id' help='Partner who made the reservation' readonly=False store=True string='Partner'
  • partner_name Char
    compute='_compute_partner_name' help='In whose name is the reservation' readonly=False store=True
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' default=<expr> help='Property to which the folio belongs' string='Property'
  • pricelist_id Many2one → product.pricelist
    check_pms_properties=True comodel_name='product.pricelist' compute='_compute_pricelist_id' domain="[('is_pms_available', '=', True)]" help='Pricelist applied in folio' readonly=False store=True string='Pricelist'
  • reservation_type Selection
    default=<expr> help="The type of the reservation. Can be 'Normal', 'Staff' or 'Out of Service'" selection=[('normal', 'Normal'), ('staff', 'Staff'), ('out', 'Out of Service')] string='Type'
  • segmentation_ids Many2many → res.partner.category
    comodel_name='res.partner.category' domain="[('is_used_in_checkin', '=', True)]" help='Partner Tags' ondelete='restrict' string='Segmentation'
  • start_date Date
    help='Start date for creation of reservations and folios' required=True string='From:'
  • total_price_folio Float
    compute='_compute_total_price_folio' help='Total price of folio with taxes' string='Total Price'
Public methods (1)
  • create_folio(self)

New fields (11)
  • active Boolean
    default=True help='Determines if cancelation rule is active'
  • apply_on_late Selection
    default='first' help='Days on which the cancelation rule applies when the reason is late arrival. Can be first, all days or specify the days.' selection=[('first', 'First Day'), ('all', 'All Days'), ('days', 'Specify days')] string='Late apply on'
  • apply_on_noshow Selection
    default='all' help='Days on which the cancelation rule applies when the reason is no show. Can be first, all days or specify the days.' selection=[('first', 'First Day'), ('all', 'All Days'), ('days', 'Specify days')] string='No Show apply on'
  • days_intime Integer
    help='Maximum number of days for free cancellation before Checkin' string='Days Late'
  • days_late Integer
    default='2' help='Is number of days late in the cancelation rule if the value of the apply_on_late field is specify days.' string='Late first days'
  • days_noshow Integer
    default='2' help='Is number of days no show in the cancelation rule if the value of the apply_on_show field is specify days.' string='NoShow first days'
  • name Char
    required=True string='Cancelation Rule' translate=True
  • penalty_late Integer
    default='100' help='Percentage of the total price that partner has to pay in case of late arrival' string='% Penalty Late'
  • penalty_noshow Integer
    default='100' help='Percentage of the total price that partner has to pay in case of no show' string='% Penalty No Show'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='pms_cancelation_rule_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='pms_cancelation_rule_pms_property_rel' required=False string='Properties'
  • pricelist_ids One2many → product.pricelist
    check_pms_properties=True comodel_name='product.pricelist' domain="[('is_pms_available', '=', True)]" help='Pricelist that use this rule' inverse_name='cancelation_rule_id' string='Pricelist'
Public methods (0)

No public methods.

New fields (32)
  • arrival Datetime
    help='Checkin partner arrival date and time' args: 'Enter'
  • birthdate_date Date
    compute='_compute_birth_date' help='host birthdate' inverse=<expr> readonly=False store=True string='Birthdate'
  • checkin Date
    depends=['reservation_id.checkin'] help='Checkin date' related='reservation_id.checkin' store=True string='Check in'
  • checkout Date
    depends=['reservation_id.checkout'] help='Checkout date' related='reservation_id.checkout' store=True string='Check out'
  • city Char
    compute='_compute_city' help='City of the guest' readonly=False store=True
  • country_id Many2one → res.country
    comodel_name='res.country' compute='_compute_country_id' help='Country of the guest' index=True readonly=False store=True string='Country of residence'
  • departure Datetime
    help='Checkin partner departure date and time' string='Exit'
  • email Char
    compute='_compute_email' help='Checkin Partner Email' inverse=<expr> readonly=False store=True string='E-mail'
  • firstname Char
    compute='_compute_firstname' help='host firstname' inverse=<expr> readonly=False store=True string='First Name'
  • folio_id Many2one → pms.folio
    comodel_name='pms.folio' help='Folio to which reservation of checkin partner belongs' index=True related='reservation_id.folio_id' store=True string='Folio'
  • gender Selection
    compute='_compute_gender' help='host gender' inverse=<expr> readonly=False selection=[('male', 'Male'), ('female', 'Female'), ('other', 'Other')] store=True
  • identifier Char
    default=<expr> help='Checkin Partner Id' index=True readonly=True
  • image_128 Image
    help='Checkin Partner Image, it corresponds with Partner Image associated' related='partner_id.image_128' string='Image'
  • lastname Char
    compute='_compute_lastname' help='host lastname' inverse=<expr> readonly=False store=True string='Last Name'
  • mobile Char
    compute='_compute_mobile' help='Checkin Partner Mobile' inverse=<expr> readonly=False store=True
  • name Char
    compute='_compute_name' help='Checkin partner name' store=True
  • nationality_id Many2one → res.country
    comodel_name='res.country' compute='_compute_nationality_id' help='host nationality' index=True inverse=<expr> readonly=False store=True string='Nationality'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' domain="[('is_company', '=', False)]" help='Partner associated with checkin partner' index=True string='Partner'
  • partner_incongruences Char
    compute='_compute_partner_incongruences' help='indicates that some partner fields on the checkin do not correspond to that of the associated partner'
  • partner_relationship Char
    help='Family relationship between travelers'
  • phone Char
    compute='_compute_phone' help='Checkin Partner Phone' inverse=<expr> readonly=False store=True
  • pms_property_id Many2one → pms.property
    comodel_name='pms.property' help='Property to which the folio associated belongs' index=True readonly=True related='reservation_id.pms_property_id' store=True string='Property'
  • possible_existing_customer_ids One2many → res.partner
    comodel_name='res.partner' compute='_compute_possible_existing_customer_ids' string='Possible existing customer'
  • reservation_id Many2one → pms.reservation
    comodel_name='pms.reservation' help='Reservation to which checkin partners belong' index=True string='Reservation'
  • segmentation_ids Many2many
    domain="[('is_used_in_checkin', '=', True)]" help='Segmentation tags to classify checkin partners' readonly=True related='reservation_id.segmentation_ids' string='Segmentation'
  • sign_on Datetime
    compute='_compute_sign_on' help='Date and time of the signature'
  • signature Image
    help='Signature of the guest'
  • state Selection
    compute='_compute_state' help='Status of the checkin partner regarding the reservation' readonly=True selection=[('dummy', 'Unkown Guest'), ('draft', 'Incomplete data'), ('precheckin', 'Pending arrival'), ('onboard', 'On Board'), ('done', 'Out'), ('cancel', 'Cancelled')] store=True string='Status'
  • state_id Many2one → res.country.state
    comodel_name='res.country.state' compute='_compute_state_id' help='State of the guest' index=True readonly=False store=True string='State of residence'
  • street Char
    compute='_compute_street' help='Street of the guest' readonly=False store=True
  • street2 Char
    compute='_compute_street2' help='Second street of the guest' readonly=False store=True
  • zip Char
    change_default=True compute='_compute_zip' help='Zip of the guest' readonly=False store=True
Public methods (13)
  • action_done(self)
  • action_on_board(self)
  • action_undo_onboard(self)
  • create(self, vals_list)
    @api.model_create_multi
  • import_room_list_json(self, roomlist_json)
    @api.model
  • open_partner(self)
    Utility method used to add an "View Customer" button in checkin partner views
  • open_wizard_several_partners(self)
  • send_exit_email(self, template_id)
  • send_portal_invitation_email(self, invitation_firstname=None, email=None)
  • set_partner_address(self, residence_vals=None)
    Only sets the checkin.partner address in the associated partner if the partner has no address yet or the changes do not conflict with the partner's address.
  • set_partner_id(self)
  • unlink(self)
  • write(self, vals)

New fields (70)
  • administrative_user_id Many2one → res.users
    comodel_name='res.users' compute='_compute_administrative_user_id' help='The administrative manager in the folio' index=True ondelete='restrict' readonly=False store=True string='Administrative Manager' tracking=True
  • agency_id Many2one → res.partner
    check_pms_properties=True comodel_name='res.partner' domain=[('is_agency', '=', True)] help='Only allowed if the field of partner is_agency is True' index=True ondelete='restrict' string='Agency'
  • amount_tax Monetary
    compute='_compute_amount_all' help='Price with taxes on a folio' readonly=True store=True string='Taxes'
  • amount_total Monetary
    compute='_compute_amount_all' help='Total amount to be paid' readonly=True store=True string='Total' tracking=True
  • amount_untaxed Monetary
    compute='_compute_amount_all' help='The price without taxes on a folio' readonly=True store=True string='Untaxed Amount' tracking=True
  • analytic_account_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' copy=False help='The analytic account related to a folio.' index=True readonly=True states={'draft': [('readonly', False)], 'sent': [('readonly', False)]} string='Analytic Account'
  • cancelled_reason Text
    help='Indicates cause of cancelled' string='Cause of cancelled'
  • checkin_partner_ids One2many → pms.checkin.partner
    comodel_name='pms.checkin.partner' help='The checkin partners on a folio' inverse_name='folio_id' string='Checkin Partners'
  • closure_reason_id Many2one → room.closure.reason
    check_pms_properties=True comodel_name='room.closure.reason' help='The closure reason for a closure room' index=True string='Closure Reason'
  • commission Monetary
    compute='_compute_commission' readonly=True store=True
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' help='The company for folio' index=True store=True string='Company'
  • confirmation_date Datetime
    copy=False help='Date on which the folio is confirmed.' index=True readonly=True
  • count_rooms_pending_arrival Integer
    compute='_compute_count_rooms_pending_arrival' help='The number of rooms left to occupy.' store=True string='Pending Arrival'
  • credit_card_details Text
    help='Details of partner credit card'
  • currency_id Many2one
    depends=['pricelist_id'] ondelete='restrict' related='pricelist_id.currency_id' store=True
  • date_order Datetime
    copy=False default=fields.Datetime.now help='Date on which folio is sold' index=True readonly=True required=True states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
  • days_to_checkin Integer
    compute='_compute_days_to_checkin' help='Technical field to facilitate\n filtering by dates related to checkin' search='_search_days_to_checkin'
  • days_to_checkout Integer
    compute='_compute_days_to_checkout' help='Technical field to facilitate\n filtering by dates related to checkout' search='_search_days_to_checkout'
  • email Char
    compute='_compute_email' help='Customer E-mail' readonly=False store=True string='E-mail'
  • external_reference Char
    compute='_compute_external_reference' help='Reference of this folio in an external system' readonly=False store=True
  • first_checkin Date
    compute='_compute_first_checkin' readonly=False store=True string='First Folio Checkin'
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' compute='_compute_fiscal_position_id' domain="[('company_id', '=', company_id)]" help='The fiscal position depends on the location of the client' index=True readonly=False store=True string='Fiscal Position'
  • force_nothing_to_invoice Boolean
    compute='_compute_force_nothing_to_invoice' copy=False help='When you set this field, the folio will be considered as nothin to invoice, even when there may be ordered quantities pending to invoice.' readonly=False store=True string='Force no invoice'
  • internal_comment Text
    help='Internal Folio notes for Staff' string='Internal Folio Notes'
  • invoice_count Integer
    compute='_compute_get_invoiced' help='The amount of invoices in out invoice and out refund status' readonly=True
  • invoice_status Selection
    compute='_compute_get_invoice_status' compute_sudo=True default='no' help='Invoice Status; it can be: invoiced, to invoice, to confirm, no' readonly=True selection=[('invoiced', 'Fully Invoiced'), ('to_invoice', 'To Invoice'), ('to_confirm', 'To Confirm'), ('no', 'Nothing to Invoice')] store=True
  • invoice_to_agency Boolean
    compute='_compute_invoice_to_agengy' help='Indicates if agency invoices partner\n (it only affects those nights/services sold through the agency)' readonly=False store=True string='Invoice Agency'
  • invoices_paid Monetary
    compute='_compute_amount' help='Amount of invoices paid' store=True string='Paid Out' tracking=True
  • lang Selection
    compute='_compute_lang' help='Language used for the folio' readonly=False selection=<expr> store=True string='Language'
  • last_checkout Date
    compute='_compute_last_checkout' readonly=False store=True string='Last Folio Checkout'
  • manager_user_id Many2one → res.users
    comodel_name='res.users' compute='_compute_manager_user_id' help='The main manager in the folio' index=True ondelete='restrict' readonly=False store=True string='Main Manager' tracking=True
  • mobile Char
    compute='_compute_mobile' help='Customer Mobile' readonly=False store=True
  • move_ids Many2many → account.move
    comodel_name='account.move' compute='_compute_get_invoiced' copy=False help='Folio invoices related to account move.' readonly=True search='_search_invoice_ids' string='Invoices'
  • name Char
    default=<expr> help='Folio name. When creating a folio the name is automatically formed with a sequence' index=True readonly=True string='Folio Number'
  • note Text
    default=<expr> help='Folio billing terms and conditions' string='Terms and conditions'
  • number_of_cancelled_rooms Integer
    compute='_compute_number_of_cancelled_rooms' help='Number of cancelled rooms in folio.' store='True'
  • number_of_rooms Integer
    compute='_compute_number_of_rooms' help='Number of rooms in folio. Canceled rooms do not count.' store='True'
  • number_of_services Integer
    compute='_compute_number_of_services' help='Number of services in the folio' store='True'
  • out_service_description Text
    help='Indicates the cause of out of service' string='Cause of out of service'
  • partner_id Many2one → res.partner
    check_pms_properties=True comodel_name='res.partner' compute='_compute_partner_id' help='The folio customer' index=True ondelete='restrict' readonly=False store=True string='Partner' tracking=True
  • partner_incongruences Char
    compute='_compute_partner_incongruences' help='indicates that some partner fields on the folio do not correspond to that of the associated partner'
  • partner_internal_comment Text
    help='Internal notes of the partner' readonly=False related='partner_id.comment' store=True string='Internal Partner Notes'
  • partner_invoice_ids Many2many → res.partner
    check_pms_properties=True column1='folio' column2='partner' comodel_name='res.partner' compute='_compute_partner_invoice_ids' help='Invoice address for current group.' readonly=False relation='pms_folio_partner_rel' store=True string='Billing addresses'
  • partner_name Char
    compute='_compute_partner_name' help='In the name of whom the reservation is made' readonly=False store=True string='Customer Name'
  • payment_ids Many2many → account.payment
    column1='folio_id' column2='payment_id' comodel_name='account.payment' copy=False help='Payments' readonly=True relation='account_payment_folio_rel' string='Bank Payments'
  • payment_multi Boolean
    compute='_compute_amount' help='Technical field for manage payments with multiple folios assigned' readonly=True store=True string='Folio paid with payments assigned to other folios'
  • payment_state Selection
    compute='_compute_amount' copy=False help='The state of the payment' readonly=True selection=[('not_paid', 'Not Paid'), ('paid', 'Paid'), ('partial', 'Partially Paid'), ('overpayment', 'Overpayment'), ('nothing_to_pay', 'Nothing to pay')] store=True string='Payment Status' tracking=True
  • payment_term_id Many2one → account.payment.term
    comodel_name='account.payment.term' compute='_compute_payment_term_id' help='Payment terms for current folio.' index=True ondelete='restrict' readonly=False store=True string='Payment Terms'
  • pending_amount Monetary
    compute='_compute_amount' help='The amount that remains to be paid' store=True
  • pending_checkin_data Integer
    compute='_compute_pending_checkin_data' store=True string='Checkin Data'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='The property for folios' index=True required=True string='Property'
  • possible_existing_customer_ids One2many → res.partner
    comodel_name='res.partner' compute='_compute_possible_existing_customer_ids' string='Possible existing customer'
  • prepaid_warning_days Integer
    help='Margin in days to create a notice if a payment advance has not been recorded'
  • pricelist_id Many2one → product.pricelist
    check_pms_properties=True comodel_name='product.pricelist' compute='_compute_pricelist_id' help='Pricelist for current folio.' index=True ondelete='restrict' readonly=False store=True string='Pricelist'
  • ratio_checkin_data Integer
    compute='_compute_ratio_checkin_data' help='Field that stores the number of checkin partners pending to checkin (with the state = draft)' string='Pending Checkin Data'
  • reference Char
    copy=False help='The payment communication of this sale order.' string='Payment Ref.'
  • reservation_ids One2many → pms.reservation
    check_company=True check_pms_properties=True comodel_name='pms.reservation' help='Room reservation detail' inverse_name='folio_id' readonly=False states={'done': [('readonly', True)]} string='Reservations'
  • reservation_type Selection
    default=<expr> help="The type of the reservation. Can be 'Normal', 'Staff' or 'Out of Service'" selection=[('normal', 'Normal'), ('staff', 'Staff'), ('out', 'Out of Service')] string='Type'
  • revenue_user_id Many2one → res.users
    comodel_name='res.users' compute='_compute_revenue_user_id' help='The revenue manager in the folio' index=True ondelete='restrict' readonly=False store=True string='Revenue Manager' tracking=True
  • sale_channel_ids Many2many → pms.sale.channel
    comodel_name='pms.sale.channel' compute='_compute_sale_channel_ids' help='Sale Channels through which reservations were managed' store=True string='Sale Channels'
  • sale_channel_origin_id Many2one → pms.sale.channel
    comodel_name='pms.sale.channel' help='Sale Channel through which folio was created, the original' index=True string='Sale Channel Origin'
  • sale_line_ids One2many → folio.sale.line
    comodel_name='folio.sale.line' compute='_compute_sale_line_ids' compute_sudo=True help='Sale lines in folio. It correspond with reservation nights' inverse_name='folio_id' store='True' string='Sale lines'
  • segmentation_ids Many2many → res.partner.category
    comodel_name='res.partner.category' domain="[('is_used_in_checkin', '=', True)]" help='Segmentation tags to classify folios' ondelete='restrict' string='Segmentation'
  • sequence Integer
    default=10 help='Sequence used to form the name of the folio'
  • service_ids One2many → pms.service
    check_company=True check_pms_properties=True comodel_name='pms.service' help='Services detail provide to customer and it will include in main Invoice.' inverse_name='folio_id' readonly=False states={'done': [('readonly', True)]} string='Services'
  • state Selection
    copy=False default='draft' help='Folio status; it can be Quotation, Quotation Sent, Confirmed, Locked or Cancelled' index=True readonly=True selection=[('draft', 'Quotation'), ('sent', 'Quotation Sent'), ('confirm', 'Confirmed'), ('done', 'Locked'), ('cancel', 'Cancelled')] string='Status' tracking=True
  • statement_line_ids Many2many → account.bank.statement.line
    column1='folio_id' column2='account_journal_id' comodel_name='account.bank.statement.line' copy=False help='Statement lines' readonly=True relation='account_bank_statement_folio_rel' string='Cash Payments'
  • transaction_ids Many2many → payment.transaction
    column1='folio_id' column2='payment_transaction_id' comodel_name='payment.transaction' copy=False help='Payments made through payment acquirer' readonly=True relation='payment_transaction_folio_rel' string='Transactions'
  • untaxed_amount_to_invoice Monetary
    compute='_compute_untaxed_amount_to_invoice' help='The amount to invoice' readonly=True store=True string='Amount to invoice'
  • user_id Many2one → res.users
    comodel_name='res.users' compute='_compute_user_id' help='The reception manager in the folio' index=True ondelete='restrict' readonly=False store=True string='Reception Manager' tracking=True
Public methods (27)
  • action_cancel(self)
  • action_checks(self)
  • action_confirm(self)
  • action_done(self)
  • action_open_cancelation_mail_composer(self)
  • action_open_confirmation_mail_composer(self)
  • action_open_exit_mail_composer(self)
  • action_open_mail_composer(self, ctx, res_id=False, res_ids=False)
  • action_open_modification_mail_composer(self)
  • action_pay(self)
  • action_to_arrive(self)
  • action_view_invoice(self)
  • concat_discounts(self, discount, cancel_discount)
    @api.model
  • create(self, vals_list)
    @api.model_create_multi
  • do_payment(self, payment_method_line, user, amount, folio, reservations=False, services=False, partner=False, date=False, pay_type=False, ref=False)
    create folio payment type: set cash to use statement or bank to use account.payment, by default, use the journal type
  • do_refund(self, journal, receivable_account, user, amount, folio, reservations=False, services=False, partner=False, date=False, pay_type=False, ref=False)
    create folio refund type: set cash to use statement or bank to use account.payment, by default, use the journal type
  • folio_multi_changes(self)
  • get_invoice_vals_list(self, final=False, lines_to_invoice=False, partner_invoice_id=False)
  • get_reservation_notes(self, reservation)
    Add folio line note with reservation content
  • get_reservations_to_update_channel(self, vals)
  • get_services_to_update_channel(self, vals)
  • name_get(self)
  • open_moves_folio(self)
  • open_partner(self)
    Utility method used to add an "View Customer" button in folio views
  • open_wizard_several_partners(self)
  • preview_folio(self)
  • write(self, vals)

New fields (10)
  • board_service_room_id Many2one → pms.board.service.room.type
    check_pms_properties=True comodel_name='pms.board.service.room.type' domain="\n [\n ('pms_room_type_id','=',room_type_id),\n ('pms_property_id','=',pms_property_id)\n ]\n " help='Board Service included in the room' string='Board Service'
  • booking_engine_id Many2one → pms.booking.engine
    comodel_name='pms.booking.engine' string='Folio Wizard ID'
  • checkin Date
    help='Date Reservation starts ' required=True string='From:'
  • checkout Date
    help='Date Reservation ends' required=True string='To:'
  • pms_property_id Many2one
    help='Propertiy with access to the element;' related='booking_engine_id.pms_property_id' string='Property'
  • price_per_room Float
    compute='_compute_price_per_room' help='Price per room in folio' string='Price per room'
  • price_total Float
    compute='_compute_price_total' help='The total price in the folio' string='Total price'
  • room_type_id Many2one → pms.room.type
    check_pms_properties=True comodel_name='pms.room.type' help='Room Type reserved' string='Room Type'
  • rooms_available_qty Integer
    compute='_compute_rooms_available_qty' help='Number of rooms that are available' store=True string='Available rooms'
  • rooms_selected_qty Integer
    string='Number of Rooms Selected'
Public methods (1)
  • onchange_rooms_selected_qty(self)
    @api.onchange('rooms_selected_qty')

New fields (48)
  • allowed_board_services Many2many → product.product
    comodel_name='product.product' compute='_compute_allowed_board_services' readonly=False store=True string='Allowed services'
  • allowed_pricelist_ids One2many → product.pricelist
    comodel_name='product.pricelist' compute='_compute_allowed_pricelist_ids' string='Allowed pricelists'
  • apply_closed Boolean
    default=False string='Apply changes to Closed'
  • apply_closed_arrival Boolean
    default=False string='Apply changes to Closed Arrival'
  • apply_closed_departure Boolean
    default=False string='Apply changes to Closed Departure'
  • apply_max_avail Boolean
    default=False string='Apply changes to Max. Avail.'
  • apply_max_stay Boolean
    default=False string='Apply changes to Max. Stay'
  • apply_max_stay_arrival Boolean
    default=False string='Apply changes to Max. Stay Arrival'
  • apply_min_stay Boolean
    default=False string='Apply changes to Min. Stay'
  • apply_min_stay_arrival Boolean
    default=False string='Apply changes to Min. Stay Arrival'
  • apply_on_all_week Boolean
    default=True string='Apply Availability Rule for the whole week'
  • apply_on_friday Boolean
    default=False string='Apply Availability Rule on fridays'
  • apply_on_monday Boolean
    default=False string='Apply Availability Rule on mondays'
  • apply_on_saturday Boolean
    default=False string='Apply Availability Rule on saturdays'
  • apply_on_sunday Boolean
    default=False string='Apply Availability Rule on sundays'
  • apply_on_thursday Boolean
    default=False string='Apply Availability Rule on thursdays'
  • apply_on_tuesday Boolean
    default=False string='Apply Availability Rule on tuesdays'
  • apply_on_wednesday Boolean
    default=False string='Apply Availability Rule on wednesdays'
  • apply_pricelists_on Selection
    default='room_types' selection=[('room_types', 'Room Types'), ('board_services', 'Board Services'), ('service', 'Service')]
  • apply_quota Boolean
    default=False string='Apply changes to Quota'
  • avail_readonly Boolean
    default=<expr> string='Avialability Readonly'
  • availability_plan_ids Many2many → pms.availability.plan
    check_pms_properties=True comodel_name='pms.availability.plan' string='Availability Plan to apply massive changes'
  • board_service Many2one → product.product
    check_pms_properties=True comodel_name='product.product' domain="[('id', 'in',allowed_board_services)]"
  • board_service_room_type_ids Many2many → pms.board.service.room.type
    check_pms_properties=True comodel_name='pms.board.service.room.type' compute='_compute_board_service_room_type_ids' readonly=False store=True string="Room type's board services"
  • closed Boolean
    default=False
  • closed_arrival Boolean
    default=False
  • closed_departure Boolean
    default=False
  • date_types Selection
    default='consumption_dates' selection=[('sale_dates', 'Sale Dates'), ('consumption_dates', 'Consumption Dates')] string='Date types'
  • end_date Date
    required=True string='To'
  • massive_changes_on Selection
    default=<expr> required=True selection=[('pricelist', 'Pricelist'), ('availability_plan', 'Availability Plan')] string='On'
  • max_avail Integer
    default=-1 help='Maximum simultaneous availability on own Booking Engine.' string='Max. Availability'
  • max_stay Integer
    default=0 string='Max. Stay'
  • max_stay_arrival Integer
    default=0 string='Max. Stay Arrival'
  • min_quantity Float
    string='Min. Quantity'
  • min_stay Integer
    default=0 string='Min. Stay'
  • min_stay_arrival Integer
    default=0 string='Min. Stay Arrival'
  • num_pricelist_items_to_overwrite Integer
    compute='_compute_num_pricelist_items_to_overwrite' readonly=True store=False string='Pricelist items to overwrite on massive changes'
  • num_rules_to_overwrite Integer
    compute='_compute_num_rules_to_overwrite' readonly=True store=False string='Rules to overwrite on massive changes'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True comodel_name='pms.property' required=True string='Property'
  • price Float
  • pricelist_ids Many2many → product.pricelist
    check_pms_properties=True comodel_name='product.pricelist' string='Pricelist to apply massive changes'
  • pricelist_items_to_overwrite One2many → product.pricelist.item
    comodel_name='product.pricelist.item' compute='_compute_pricelist_items_to_overwrite' readonly=True store=False
  • pricelist_readonly Boolean
    default=<expr>
  • quota Integer
    default=-1 help='Generic Quota assigned.'
  • room_type_ids Many2many → pms.room.type
    check_pms_properties=True comodel_name='pms.room.type' compute='_compute_room_type_ids' readonly=False store=True string='Room Type'
  • rules_to_overwrite One2many → pms.availability.plan.rule
    comodel_name='pms.availability.plan.rule' compute='_compute_rules_to_overwrite' readonly=True store=False
  • service Many2one → product.product
    check_pms_properties=True comodel_name='product.product' compute='_compute_service' readonly=False store=True
  • start_date Date
    required=True string='From'
Public methods (8)
  • apply_massive_changes(self)
  • continue_massive_changes(self)
  • create_availability_plans_rules(self, room_types, availability_plan_ids, min_stay, apply_min_stay, min_stay_arrival, apply_min_stay_arrival, max_stay, apply_max_stay, max_stay_arrival, apply_max_stay_arrival, quota, apply_quota, max_avail, apply_max_avail, closed, apply_closed, closed_arrival, apply_closed_arrival, closed_departure, apply_closed_departure, date, rules_to_overwrite, pms_property)
    @api.model
  • create_pricelists_items_board_services(self, board_service_room_type_ids, pricelist_ids, board_service, price, min_quantity, pms_property, date_types, date)
    @api.model
  • create_pricelists_items_room_types(self, room_types, pricelist_ids, price, min_quantity, pms_property, date, date_types)
    @api.model
  • generate_dates_vals(self, date_types, vals, date)
    @api.model
  • generate_product_ids_to_filter(self, apply_pricelists_on, room_type_ids, board_service_room_type_ids, board_service, service)
    @api.model
  • save_and_close(self)

New fields (37)
  • analytic_account_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' copy=False readonly=True
  • availability Integer
    compute='_compute_availability' help='allows you to send different parameters in the context (checkin(required), checkout(required), room_type_id, ubication_id, capacity,amenity_ids and / or pricelist_id) check the availability for the hotel' string='Number of rooms available'
  • avoid_simplified_max_amount_downpayment Boolean
    default=True help='Avoid simplified invoice max amount downpayment' string='Downpayment Invoive without limit amount'
  • block_create_past_reservations Boolean
    default=False help='Block the creation of reservations in the past'
  • block_modify_past_out_service Boolean
    default=False help='Block deletion or cancellation of out-of-service reservations with dates already in the past'
  • cardex_warning Text
    default="Time to access rooms: 14: 00h. Departure time: 12: 00h. If the accommodation is not left at that time, the establishment will charge a day's stay according to current rate that day" help="Notice under the signature on the traveler's ticket." string='Warning in Cardex'
  • checkin_sequence_id Many2one → ir.sequence
    check_company=True comodel_name='ir.sequence' copy=False help='Field used to create the name of the checkin partner' index=True string='Checkin Sequence'
  • child_ids One2many → pms.property
    comodel_name='pms.property' inverse_name='parent_id' string='Child Properties'
  • company_id Many2one → res.company
    comodel_name='res.company' help='The company that owns or operates this property.' index=True required=True string='Company'
  • default_arrival_hour Char
    default='14:00' help='HH:mm Format' string='Arrival Hour'
  • default_departure_hour Char
    default='12:00' help='HH:mm Format' string='Departure Hour'
  • default_pricelist_id Many2one → product.pricelist
    comodel_name='product.pricelist' default=<expr> domain="[('is_pms_available', '=', True)]" help='The default pricelist used in this property.' index=True required=True string='Product Pricelist'
  • folio_sequence_id Many2one → ir.sequence
    check_company=True comodel_name='ir.sequence' copy=False help='The sequence that formed the name of the folio.' index=True string='Folio Sequence'
  • free_room_ids One2many → pms.room
    comodel_name='pms.room' compute='_compute_free_room_ids' help='allows you to send different parameters in the context (checkin(required), checkout(required), room_type_id, ubication_id, capacity, amenity_ids and / or pricelist_id) and return rooms available' string='Rooms available'
  • invoice_reservation_note_template Text
    help='\n Template for reservation note to be added in the invoice.\n You can use variables like {{ object.checkin }}, etc.\n ' translate=True
  • is_canceled_auto_mail Boolean
    string='Auto Send Cancellation Mail'
  • is_confirmed_auto_mail Boolean
    string='Auto Send Confirmation Mail'
  • is_exit_auto_mail Boolean
    string='Auto Send Exit Mail'
  • is_modified_auto_mail Boolean
    string='Auto Send Modification Mail'
  • journal_normal_invoice_id Many2one → account.journal
    check_company=True check_pms_properties=True comodel_name='account.journal' domain=[('type', '=', 'sale'), ('is_simplified_invoice', '=', False)] help='Journal used to create the normal invoice' string='Normal Invoice Journal'
  • journal_simplified_invoice_id Many2one → account.journal
    check_company=True check_pms_properties=True comodel_name='account.journal' domain=[('type', '=', 'sale')] help='Journal used to create the simplified invoice' string='Simplified Invoice Journal'
  • logo Binary
    default=get_default_logo() string='Image in checkin'
  • mail_information Html
    help='Additional information of the mail'
  • max_amount_simplified_invoice Float
    default=400.0 help='Maximum amount to create the simplified invoice'
  • member_ids One2many → pms.team.member
    comodel_name='pms.team.member' copy=False inverse_name='pms_property_id' string='Team Members'
  • parent_id Many2one → pms.property
    comodel_name='pms.property' index=True string='Parent Property'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' help='Current property' index=True ondelete='restrict' required=True string='Property'
  • pms_property_code Char
    help='Short name property' string='Property Code'
  • privacy_policy Html
    help='Mail privacy policy '
  • property_canceled_template Many2one → mail.template
    comodel_name='mail.template' help='Cancellation email template' string='Cancellation Email'
  • property_confirmed_template Many2one → mail.template
    comodel_name='mail.template' help='Confirmation email template' string='Confirmation Email'
  • property_exit_template Many2one → mail.template
    comodel_name='mail.template' string='Exit Email'
  • property_modified_template Many2one → mail.template
    comodel_name='mail.template' help='Modification email template' string='Modification Email'
  • room_ids One2many → pms.room
    comodel_name='pms.room' help='Rooms that a property has.' inverse_name='pms_property_id' string='Rooms'
  • tz Selection
    default=<expr> help='This field is used to determine de timezone of the property.' required=True selection=_tz_get string='Timezone'
  • user_id Many2one → res.users
    comodel_name='res.users' copy=False ondelete='restrict' string='Team Leader' tracking=True
  • user_ids Many2many → res.users
    column1='pms_property_id' column2='user_id' comodel_name='res.users' help='Field related to res.users. Allowed users on the property' relation='pms_property_users_rel' string='Accepted Users'
Public methods (6)
  • create(self, vals_list)
    @api.model_create_multi
  • daily_closing(self, pms_property_ids, room_type_ids=False, availability_plan_ids=False)
    @api.model
    This method is used to close the daily availability of rooms
  • date_property_timezone(self, dt)
  • get_real_free_rooms(self, checkin, checkout, current_lines=False)
  • name_get(self)
  • splitted_availability(self, checkin, checkout, pms_property_id, room_type_id=False, current_lines=False, pricelist=False, real_avail=False)
    @api.model

New fields (92)
  • adults Integer
    compute='_compute_adults' help='List of adults there in guest list' readonly=False store=True tracking=True
  • agency_id Many2one
    depends=['folio_id.agency_id'] help='Agency that made the reservation' index=True readonly=False related='folio_id.agency_id' store=True string='Agency' tracking=True
  • allowed_cancel Boolean
    compute='_compute_allowed_cancel' help="Technical field, Indicates that reservation can be cancelled,that happened when state is 'cancel', 'done', or 'departure_delayed'" search='_search_allowed_cancel' string='Allowed cancel'
  • allowed_checkin Boolean
    compute='_compute_allowed_checkin' help="Technical field, Indicates if there isn't a checkin_partner dataOnly can be true if checkin is today or was in the past" search='_search_allowed_checkin' string='Allowed checkin'
  • allowed_checkout Boolean
    compute='_compute_allowed_checkout' help="Technical field, Indicates that reservation is ready for checkoutonly can be true if reservation state is 'onboard' or departure_delayedand checkout is today or will be in the future" search='_search_allowed_checkout' string='Allowed checkout'
  • allowed_room_ids Many2many → pms.room
    comodel_name='pms.room' compute='_compute_allowed_room_ids' help='It contains all available rooms for this reservation' string='Allowed Rooms'
  • arrival_hour Char
    compute='_compute_arrival_hour' help='Arrival Hour (HH:MM)' readonly=False store=True
  • avoid_mails Boolean
    compute='_compute_avoid_mails' help='Field to indicate not sent mail comunications' readonly=False store=True string='Avoid comunication mails'
  • blocked Boolean
    default=False help='Indicates if the reservation is blocked'
  • board_service_room_id Many2one → pms.board.service.room.type
    check_pms_properties=True comodel_name='pms.board.service.room.type' compute='_compute_board_service_room_id' help='Board Service included in the room' index=True inverse='_inverse_board_service_room_id' readonly=False store=True string='Board Service' tracking=True
  • board_service_room_manual Boolean
    default=False help='When enabled, the reservation will NOT auto-assign a default board service even if the field is empty. This is set automatically when the user edits or clears the board service.' string='Board Service Manually Set'
  • cancel_datetime Datetime
    copy=False help='Date when the reservation was cancelled' readonly=True string='Cancel Date'
  • cancelled_reason Selection
    copy=False help="Field indicating type of cancellation. It can be 'late', 'intime' or 'noshow'" selection=[('late', 'Late'), ('intime', 'In time'), ('noshow', 'No Show'), ('modified', 'Modified')] store=True string='Reason of cancellation' tracking=True
  • check_adults Boolean
    compute='_compute_check_adults' help='Internal field to force room capacity validations' readonly=False store=True
  • checkin Date
    compute='_compute_checkin' copy=False help='It is the checkin date of the reservation, ' readonly=False store=True string='Check In' tracking=True
  • checkin_datetime Datetime
    compute='_compute_checkin_datetime' help='This field is the day and time of arrival of the reservation.It is formed with the checkin and arrival_hour fields' string='Exact Arrival'
  • checkin_partner_count Integer
    compute='_compute_checkin_partner_count' help='Number of checkin partners in a reservation' string='Checkin counter'
  • checkin_partner_ids One2many → pms.checkin.partner
    check_pms_properties=True comodel_name='pms.checkin.partner' compute='_compute_checkin_partner_ids' copy=False help='Guests who will occupy the room' inverse_name='reservation_id' readonly=False store=True string='Checkin Partners'
  • checkin_partner_pending_count Integer
    compute='_compute_checkin_partner_count' help='Number of checkin partners pending to checkin in a reservation' search='_search_checkin_partner_pending' string='Checkin Pending Num'
  • checkins_ratio Integer
    compute='_compute_checkins_ratio' help='Proportion of guest pending checkin' string='Pending Arrival Ratio'
  • checkout Date
    compute='_compute_checkout' copy=False help='It is the checkout date of the reservation, ' readonly=False store=True string='Check Out' tracking=True
  • checkout_datetime Datetime
    compute='_compute_checkout_datetime' help='This field is the day and time of departure of the reservation.It is formed with the checkout and departure_hour fields' string='Exact Departure'
  • children Integer
    help='Number total of children there in guest list,whose presence counts or not' readonly=False tracking=True
  • children_occupying Integer
    help='Number of children there in guest list whose presence counts'
  • closure_reason_id Many2one
    check_pms_properties=True help='Reason why the reservation cannot be made' readonly=False related='folio_id.closure_reason_id' string='Closure Reason'
  • commission_amount Monetary
    compute='_compute_commission_amount' help='Amount corresponding to commission' store=True string='Commission amount'
  • commission_percent Float
    compute='_compute_commission_percent' help='Percentage corresponding to commission' readonly=False store=True string='Commission percent (%)' tracking=True
  • company_id Many2one
    help='Company to which the reservation belongs' index=True readonly=True related='folio_id.company_id' store=True string='Company'
  • count_alternative_free_rooms Integer
    compute='_compute_count_alternative_free_rooms'
  • count_pending_arrival Integer
    compute='_compute_count_pending_arrival' help='Number of guest with pending checkin' store=True string='Pending Arrival'
  • credit_card_details Text
    related='folio_id.credit_card_details'
  • currency_id Many2one
    depends=['pricelist_id'] ondelete='restrict' related='pricelist_id.currency_id' store=True
  • date_order Datetime
    default=fields.Datetime.now help='Order date of reservation' readonly=False store=True
  • departure_hour Char
    compute='_compute_departure_hour' help='Departure Hour (HH:MM)' readonly=False store=True
  • discount Monetary
    compute='_compute_discount' digits='Discount' help='Discount of total price in reservation' readonly=False store=True tracking=True
  • email Char
    compute='_compute_email' help='Customer E-mail' readonly=False store=True string='E-mail'
  • external_reference Char
    compute='_compute_external_reference' help='Reference of this folio in an external system' readonly=False store=True
  • folio_id Many2one → pms.folio
    check_company=True comodel_name='pms.folio' copy=False help='The folio where the reservations are included' index=True ondelete='restrict' string='Folio' tracking=True
  • folio_internal_comment Text
    help='Internal comment for folio' readonly=False related='folio_id.internal_comment' store=True string='Internal Folio Notes'
  • folio_payment_state Selection
    help='The status of the folio payment' related='folio_id.payment_state' store=True string='Payment State' tracking=True
  • folio_pending_amount Monetary
    help='The amount that remains to be paid from folio' related='folio_id.pending_amount' string='Pending Amount' tracking=True
  • folio_sequence Integer
    help='Techinal field to get reservation name' readonly=True
  • force_update_origin Boolean
    compute='_compute_force_update_origin' help='This field is for force update in sale channel origin of folio and another reservations' readonly=False store=True string='Update Sale Channel Origin'
  • invoice_status Selection
    compute='_compute_invoice_status' help="The status of the invoices in folio. Can be 'invoiced', 'to_invoice' or 'no'." readonly=True selection=[('invoiced', 'Fully Invoiced'), ('to_invoice', 'To Invoice'), ('no', 'Nothing to Invoice')] store=True
  • is_origin_channel_check_visible Boolean
    compute='_compute_is_origin_channel_check_visible' help='Technical field to make visible update origin channel check' readonly=False store=True string='Check force update origin visible'
  • is_reselling Boolean
    compute='_compute_is_reselling' help='Indicate if exists reselling in any reservation line' readonly=False store=True string='Reselling'
  • lang Many2one → res.lang
    comodel_name='res.lang' compute='_compute_lang' string='Language'
  • mobile Char
    compute='_compute_mobile' help='Customer Mobile' readonly=False store=True
  • name Text
    help='Reservation Code Identification' readonly=True string='Reservation Code'
  • nights Integer
    compute='_compute_nights' help='Number of nights of a reservation' store=True
  • out_service_description Text
    help='Indicates the cause of out of service' readonly=False related='folio_id.out_service_description' string='Cause of out of service'
  • overbooking Boolean
    compute='_compute_overbooking' help='Indicate if exists overbooking' store=True string='Is Overbooking'
  • overnight_room Boolean
    related='room_type_id.overnight_room' store=True
  • partner_id Many2one → res.partner
    check_pms_properties=True comodel_name='res.partner' compute='_compute_partner_id' help='Name of who made the reservation' index=True ondelete='restrict' readonly=False store=True string='Customer' tracking=True
  • partner_incongruences Char
    compute='_compute_partner_incongruences' help='indicates that some partner fields on the reservation do not correspond to that of the associated partner'
  • partner_internal_comment Text
    help='Internal notes of the partner' readonly=False related='partner_id.comment' store=True string='Internal Partner Notes'
  • partner_name Char
    compute='_compute_partner_name' help='To whom the room is assigned' readonly=False store=True string='Customer Name'
  • partner_requests Text
    help='Guest requests'
  • pending_checkin_data Integer
    compute='_compute_pending_checkin_data' help='Data missing at checkin' store=True string='Checkin Data'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Property to which the reservation belongs' index=True readonly=False related='folio_id.pms_property_id' store=True string='Pms Property'
  • possible_existing_customer_ids One2many → res.partner
    comodel_name='res.partner' compute='_compute_possible_existing_customer_ids' string='Possible existing customer'
  • preconfirm Boolean
    default=True help='Technical field that indicates the reservation is not comfirm yet' string='Auto confirm to Save'
  • preferred_room_id Many2one → pms.room
    check_pms_properties=True comodel_name='pms.room' copy=False domain="[('id', 'in', allowed_room_ids),('pms_property_id', '=', pms_property_id),]" help="It's the preferred room assigned to reservation, empty if reservation is splitted" index=True ondelete='restrict' string='Room' tracking=True
  • price_room_services_set Monetary
    compute='_compute_price_room_services_set' help='Total price of room and services' readonly=True store=True string='Room Services Total'
  • price_services Monetary
    compute='_compute_price_services' help='Total price from services of a reservation' readonly=True store=True string='Services Total'
  • price_subtotal Monetary
    compute='_compute_amount_reservation' help='Subtotal price without taxes' readonly=True store=True string='Subtotal'
  • price_tax Monetary
    compute='_compute_amount_reservation' help='Total of taxes in a reservation' readonly=True store=True string='Taxes Amount'
  • price_total Monetary
    compute='_compute_amount_reservation' help='Total price with taxes' readonly=True store=True string='Total' tracking=True
  • pricelist_id Many2one → product.pricelist
    check_pms_properties=True comodel_name='product.pricelist' compute='_compute_pricelist_id' domain="[('is_pms_available', '=', True)]" help='Pricelist that guides the prices of the reservation' index=True ondelete='restrict' readonly=False store=True string='Pricelist' tracking=True
  • ratio_checkin_data Integer
    compute='_compute_ratio_checkin_data' help='Proportion of guest data complete at checkin' string='Complete cardex'
  • ready_for_checkin Boolean
    compute='_compute_ready_for_checkin' help='Indicates the reservations with checkin_partner data enought to checkin' string='Ready for checkin'
  • reservation_line_ids One2many → pms.reservation.line
    check_pms_properties=True comodel_name='pms.reservation.line' compute='_compute_reservation_line_ids' copy=False help='They are the lines of the reservation into a reservation,they corresponds to the nights' inverse_name='reservation_id' readonly=False store=True string='Reservation Lines'
  • reservation_type Selection
    compute='_compute_reservation_type' help="Type of reservations. It can be 'normal', 'staff' or 'out of service" readonly=False selection=[('normal', 'Normal'), ('staff', 'Staff'), ('out', 'Out of Service')] store=True
  • room_type_id Many2one → pms.room.type
    check_pms_properties=True comodel_name='pms.room.type' compute='_compute_room_type_id' copy=False help="Room Type sold on the reservation,it doesn't necessarily correspond to the room actually assigned" index=True ondelete='restrict' readonly=False store=True string='Room Type' tracking=True
  • rooms Char
    compute='_compute_rooms' help='Rooms that are reserved' store=True string='Room/s' tracking=True
  • sale_channel_ids Many2many → pms.sale.channel
    comodel_name='pms.sale.channel' compute='_compute_sale_channel_ids' help='Sale Channels through which reservation lines were managed' store=True string='Sale Channels'
  • sale_channel_origin_id Many2one → pms.sale.channel
    comodel_name='pms.sale.channel' default=<expr> help='Sale Channel through which reservation was created, the original' index=True string='Sale Channel Origin'
  • sale_line_ids One2many → folio.sale.line
    comodel_name='folio.sale.line' copy=False inverse_name='reservation_id' string='Sale Lines'
  • segmentation_ids Many2many → res.partner.category
    comodel_name='res.partner.category' default=<expr> domain="[('is_used_in_checkin', '=', True)]" help='Segmentation tags to classify reservations' ondelete='restrict' string='Segmentation'
  • service_ids One2many → pms.service
    check_company=True check_pms_properties=True comodel_name='pms.service' compute='_compute_board_service_ids' help='Included services in the reservation' inverse_name='reservation_id' readonly=False store=True string='Services'
  • services_discount Monetary
    compute='_compute_services_discount' digits='Discount' help='Services discount' readonly=False store=True tracking=True
  • shared_folio Boolean
    compute='_compute_shared_folio' help='Used to notify is the reservation folio has other reservations/services'
  • show_update_pricelist Boolean
    compute='_compute_show_update_pricelist' help='Technical Field, True if the pricelist was changed;\n this will then display a recomputation button' store=True string='Has Pricelist Changed'
  • splitted Boolean
    compute='_compute_splitted' help="Field that indicates if the reservation is split. A reservation is split when guests don't sleep in the same room every night" store=True
  • state Selection
    copy=False default=<expr> help="The state of the reservation. It can be 'Pre-reservation', 'Pending arrival', 'On Board', 'Out', 'Cancelled', 'Arrival Delayed' or 'Departure Delayed'" index=True readonly=True selection=[('draft', 'Pre-reservation'), ('confirm', 'Pending arrival'), ('onboard', 'On Board'), ('done', 'Out'), ('cancel', 'Cancelled'), ('arrival_delayed', 'Arrival Delayed'), ('departure_delayed', 'Departure delayed')] tracking=True
  • tax_ids Many2many → account.tax
    comodel_name='account.tax' compute='_compute_tax_ids' domain=['|', ('active', '=', False), ('active', '=', True)] help='Taxes applied in the reservation' readonly=False store=True string='Taxes'
  • to_assign Boolean
    default=True help='It is True if the room of the reservation has been assigned automatically, False if it was confirmed by a person in charge'
  • to_send_cancelation_mail Boolean
    compute='_compute_to_send_cancelation_mail' readonly=False store=True
  • to_send_confirmation_mail Boolean
    compute='_compute_to_send_confirmation_mail' readonly=False store=True
  • to_send_exit_mail Boolean
    compute='_compute_to_send_exit_mail' readonly=False store=True
  • to_send_modification_mail Boolean
    compute='_compute_to_send_modification_mail' readonly=False store=True
  • user_id Many2one → res.users
    comodel_name='res.users' compute='_compute_user_id' help='The reception manager in the folio' index=True ondelete='restrict' readonly=False store=True string='Reception Manager' tracking=True
Public methods (33)
  • action_assign(self)
  • action_cancel(self)
  • action_checkin_partner_onboard_view(self)
  • action_checkin_partner_view(self)
  • action_confirm(self)
  • action_open_cancelation_mail_composer(self)
  • action_open_confirmation_mail_composer(self)
  • action_open_exit_mail_composer(self)
  • action_open_modification_mail_composer(self)
  • action_pay_folio(self)
  • action_reservation_checkout(self)
  • action_undo_onboard(self)
  • auto_arrival_delayed(self)
    @api.model
  • auto_departure_delayed(self)
    @api.model
  • autocheckout(self, reservation)
    @api.model
  • check_in_out_dates(self)
    1.-When date_order is less then checkin date or Checkout date should be greater than the checkin date. 3.-Check the reservation dates are not occuped
  • checkin_checkout_consecutive_dates(self)
    @api.constrains('reservation_line_ids')
    simply convert date objects to integers using the .toordinal() method of datetime objects. The difference between the maximum and minimum value of the set of ordinal dates is one more than the length of the set
  • create(self, vals_list)
    @api.model_create_multi
  • get_folios_to_update_channel(self, vals)
  • get_lines_to_update_channel(self, vals)
  • get_services_to_update_channel(self, vals)
  • name_get(self)
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
  • open_folio(self)
  • open_partner(self)
    Utility method used to add an "View Customer" button in reservation views
  • open_reservation_form(self)
  • open_reservation_wizard(self)
  • open_wizard_several_partners(self)
  • preview_reservation(self)
  • print_all_checkins(self)
  • unlink(self)
  • update_prices(self)
  • write(self, vals)

New fields (15)
  • adults Integer
  • allowed_room_ids Many2many → pms.room
    comodel_name='pms.room' compute='_compute_allowed_room_ids' help='It contains all available rooms for this reservation' string='Allowed Rooms'
  • board_service_room_id Many2one → pms.board.service.room.type
    check_pms_properties=True comodel_name='pms.board.service.room.type' domain="[('pms_room_type_id','=',room_type_id)]" help='Board Service included in the room' string='Board Service'
  • booking_duplicate_id Many2one → pms.booking.duplicate
    comodel_name='pms.booking.duplicate' string='Folio Wizard ID'
  • checkin Date
    compute='_compute_checkin' help='Date Reservation starts ' string='From:'
  • checkout Date
    compute='_compute_checkout' help='Date Reservation ends' string='To:'
  • occupied_room Boolean
    compute='_compute_occupied_room' help='Check if the room is occupied'
  • pms_property_id Many2one
    help='Propertiy with access to the element;' related='booking_duplicate_id.pms_property_id' string='Property'
  • preferred_room_id Many2one → pms.room
    check_pms_properties=True comodel_name='pms.room' domain="[('id', 'in', allowed_room_ids),('id', 'not in', used_room_ids),('pms_property_id', '=', pms_property_id),]" help='Room reserved' string='Room'
  • price_total Float
    compute='_compute_price_total' help='The total price in the folio' string='Total price'
  • pricelist_id Many2one → product.pricelist
    check_pms_properties=True comodel_name='product.pricelist' domain="[('is_pms_available', '=', True)]" help='Pricelist used for this reservation' string='Pricelist'
  • reference_reservation_id Many2one → pms.reservation
    check_pms_properties=True comodel_name='pms.reservation' help='Reservation to copy data' string='Reservation Reference'
  • room_type_id Many2one → pms.room.type
    check_pms_properties=True comodel_name='pms.room.type' help='Room Type reserved' string='Room Type'
  • service_ids Many2many → product.product
    column1='reservation_duplicate_id' column2='product_id' comodel_name='product.product' compute='_compute_service_ids' readonly=False relation='reservation_duplicate_product_rel' store=True string='Services'
  • used_room_ids Many2many → pms.room
    comodel_name='pms.room' compute='_compute_used_room_ids' string='Used Rooms'
Public methods (0)

No public methods.

New fields (19)
  • avail_id Many2one → pms.availability
    check_pms_properties=True comodel_name='pms.availability' compute='_compute_avail_id' help='' index=True ondelete='restrict' store=True string='Availability Day'
  • cancel_discount Float
    compute='_compute_cancel_discount' default=0.0 digits='Discount' help='' readonly=True store=True string='Cancelation Discount (%)'
  • currency_id Many2one
    depends=['reservation_id.currency_id'] precompute=True related='reservation_id.currency_id' store=True
  • date Date
    help='The date of the reservation in reservation line'
  • default_invoice_to Many2one → res.partner
    comodel_name='res.partner' compute='_compute_default_invoice_to' help='Indicates the contact to which this line will be\n billed by default, if it is not established,\n a guest or the generic contact will be used instead' index=True ondelete='restrict' readonly=False store=True string='Invoice to'
  • discount Float
    default=0.0 digits='Discount' help='' string='Discount (%)'
  • is_reselling Boolean
    help='Indicates if the reservation line is reselling' readonly=False store=True string='Reselling'
  • occupies_availability Boolean
    compute='_compute_occupies_availability' help='This record is taken into account to calculate availability' store=True string='Occupies'
  • overbooking Boolean
    compute='_compute_overbooking' help='Indicate if exists overbooking in the reservation line' readonly=False store=True
  • overnight_room Boolean
    related='reservation_id.overnight_room' store=True
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Property with access to the element' index=True readonly=True related='reservation_id.pms_property_id' store=True string='Property'
  • price Monetary
    compute='_compute_price' digits='Product Price' help='The price in a reservation line' readonly=False store=True
  • price_day_total Monetary
    compute='_compute_price_day_total' help='Get the price with discount applied' store=True string='Final price'
  • pricelist_item_id Many2one → product.pricelist.item
    comodel_name='product.pricelist.item' compute='_compute_pricelist_item_id'
  • reservation_id Many2one → pms.reservation
    check_pms_properties=True comodel_name='pms.reservation' copy=False help='It is the reservation in a reservation line' index=True ondelete='cascade' required=True string='Reservation'
  • room_id Many2one → pms.room
    check_pms_properties=True comodel_name='pms.room' compute='_compute_room_id' help='The room of a reservation. ' index=True ondelete='restrict' readonly=False store=True string='Room'
  • sale_channel_id Many2one → pms.sale.channel
    check_pms_properties=True comodel_name='pms.sale.channel' help='Sale Channel through which reservation line was created' index=True string='Sale Channel'
  • sale_line_ids Many2many → folio.sale.line
    check_pms_properties=True comodel_name='folio.sale.line' copy=False readonly=True string='Sales Lines'
  • state Selection
    help='State of the reservation line.' related='reservation_id.state' store=True
Public methods (5)
  • constrains_duplicated_date(self)
    @api.constrains('date')
  • create(self, vals_list)
    @api.model_create_multi
  • name_get(self)
  • unlink(self)
  • write(self, vals)

New fields (10)
  • allowed_rooms_sources Many2many → pms.room
    column1='wizard_id' column2='room_id' comodel_name='pms.room' compute='_compute_allowed_rooms_source' readonly=False relation='pms_wizard_split_join_swap_reservation_rooms_source' store=True
  • allowed_rooms_target Many2many → pms.room
    column1='wizard_id' column2='room_id' comodel_name='pms.room' compute='_compute_allowed_rooms_target' readonly=False relation='pms_wizard_split_join_swap_reservation_rooms_target' store=True
  • checkin Date
    default=<expr> help='Checkin in reservation' string='Check In'
  • checkout Date
    default=<expr> help='checkout in reservation' string='Check Out'
  • operation Selection
    default=<expr> help='Operation to be applied on the reservation' selection=[('swap', 'Swap rooms'), ('split', 'Split reservation'), ('join', 'Join reservation')]
  • reservation_id Many2one → pms.reservation
    comodel_name='pms.reservation' default=<expr> string='Reservation'
  • reservation_ids Many2many → pms.reservation
    comodel_name='pms.reservation' compute='_compute_reservation_ids' readonly=False store=True string='Reservations'
  • reservation_lines_to_change One2many → pms.wizard.reservation.lines.split
    comodel_name='pms.wizard.reservation.lines.split' compute='_compute_reservation_lines' inverse_name='reservation_wizard_id' readonly=False store=True
  • room_source Many2one → pms.room
    comodel_name='pms.room' default=<expr> domain="[('id', 'in', allowed_rooms_sources)]"
  • room_target Many2one → pms.room
    comodel_name='pms.room' domain="[('id', 'in', allowed_rooms_target)]"
Public methods (6)
  • action_join(self)
  • action_split(self)
  • action_swap(self)
  • reservation_join(self, reservation, room)
    @api.model
  • reservation_split(self, reservation, date, room)
    @api.model
  • reservations_swap(self, checkin, checkout, source, target)
    @api.model

New fields (30)
  • active Boolean
    default=True help='Determines if room is active'
  • address_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_address_id' help='Address of the room' index=True ondelete='restrict' store=True string='Address'
  • address_is_independent Boolean
    help='Indicates that the address of the room is independent of the property'
  • capacity Integer
    help='The maximum number of people that can occupy a room'
  • child_ids One2many → pms.room
    check_pms_properties=True comodel_name='pms.room' help='Child rooms of the room' inverse_name='parent_id' string='Child Rooms'
  • city Char
    readonly=False related='address_id.city'
  • country_id Many2one → res.country
    ondelete='restrict' readonly=False related='address_id.country_id' string='Country' args: 'res.country'
  • description_sale Text
    help='A description of the Product that you want to communicate to your customers. This description will be copied to every Sales Order, Delivery Order and Customer Invoice/Credit Note' string='Sale Description' translate=True
  • email Char
    readonly=False related='address_id.email'
  • email_formatted Char
    compute='_compute_email_formatted' help='Format email address "Name <email@domain>"' args: 'Formatted Email'
  • extra_beds_allowed Integer
    default='0' help='Number of extra beds allowed in room' required=True
  • image_1920 Image
    max_height=1920 max_width=1920 readonly=False related='address_id.image_1920'
  • is_shared_room Boolean
    compute='_compute_is_shared_room' help='allows you to reserve units smaller than the room itself (eg beds)' readonly=False store=True string='Is a Shared Room'
  • mobile Char
    readonly=False related='address_id.mobile'
  • name Char
    help='Room Name' required=True string='Room Name'
  • parent_id Many2one → pms.room
    check_pms_properties=True comodel_name='pms.room' help='Indicates that this room is a child of another room' index=True ondelete='restrict' string='Parent Room'
  • partner_latitude Float
    digits=(16, 5) readonly=False related='address_id.partner_latitude' string='Geo Latitude'
  • partner_longitude Float
    digits=(16, 5) readonly=False related='address_id.partner_longitude' string='Geo Longitude'
  • phone Char
    readonly=False related='address_id.phone'
  • pms_property_id Many2one → pms.property
    comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' index=True ondelete='restrict' required=True string='Property'
  • room_amenity_ids Many2many → pms.amenity
    check_pms_properties=True column1='room_id' column2='amenity_id' comodel_name='pms.amenity' help='List of amenities included in room' relation='pms_room_amenity_rel' string='Room Amenities'
  • room_type_id Many2one → pms.room.type
    check_pms_properties=True comodel_name='pms.room.type' help='Unique room type for the rooms' index=True ondelete='restrict' required=True string='Property Room Type'
  • sequence Integer
    default=0 help='Field used to change the position of the rooms in tree view.Changing the position changes the sequence'
  • short_name Char
    help='Four character name, if not set, autocompletes with the first two letters of the room name and two incremental numbers'
  • state_id Many2one → res.country.state
    domain="[('country_id', '=?', country_id)]" ondelete='restrict' readonly=False related='address_id.state_id' string='State' args: 'res.country.state'
  • street Char
    readonly=False related='address_id.street'
  • street2 Char
    readonly=False related='address_id.street2'
  • ubication_id Many2one → pms.ubication
    check_pms_properties=True comodel_name='pms.ubication' help='At which ubication the room is located.' index=True string='Ubication'
  • website Char
    readonly=False related='address_id.website'
  • zip Char
    readonly=False related='address_id.zip'
Public methods (6)
  • calculate_short_name(self, vals)
  • create(self, vals_list)
    @api.model_create_multi
  • get_capacity(self, extra_bed=0)
  • name_get(self)
  • unlink(self)
  • write(self, vals)

New fields (12)
  • board_service_room_type_ids One2many → pms.board.service.room.type
    check_pms_properties=True comodel_name='pms.board.service.room.type' help='Board Service included in room type' inverse_name='pms_room_type_id' string='Board Services'
  • class_id Many2one → pms.room.type.class
    check_pms_properties=True comodel_name='pms.room.type.class' help='Class to which the room type belongs' index=True required=True string='Property Type Class'
  • default_code Char
    help='Identification code for a room type' required=True string='Code'
  • default_max_avail Integer
    default=-1 help='Maximum simultaneous availability on own Booking Engine given no availability rules. Use `-1` for using maximum simultaneous availability.' string='Default Max. Availability'
  • default_quota Integer
    default=-1 help='Quota assigned to the own Booking Engine given no availability rules. Use `-1` for managing no quota.'
  • min_price Float
    default=5.0 help='Minimum price for a room type' string='Min. Price'
  • overnight_room Boolean
    related='class_id.overnight' store=True
  • product_id Many2one → product.product
    comodel_name='product.product' delegate=True help='Product identifier associated with room type' index=True ondelete='cascade' required=True string='Product Room Type'
  • room_amenity_ids Many2many → pms.amenity
    check_pms_properties=True column1='room_type_id' column2='amenity_id' comodel_name='pms.amenity' help='List of amenities included in room type' relation='pms_room_type_amenity_rel' string='Room Type Amenities'
  • room_ids One2many → pms.room
    check_pms_properties=True comodel_name='pms.room' help='Rooms that belong to room type.' inverse_name='room_type_id' string='Rooms'
  • sequence Integer
    default=0 help='Field used to change the position of the room types in tree view.'
  • total_rooms_count Integer
    compute='_compute_total_rooms_count' help='The number of rooms in a room type' store=True
Public methods (5)
  • create(self, vals_list)
    @api.model_create_multi
  • get_default_board_service(self, pms_property_id, room_type_id, pricelist_id)
    @api.model
  • get_room_type_capacity(self, pms_property_id)
    :param pms_property_id: int :return: the minimum capacity for rooms of current type
  • get_room_types_by_property(self, pms_property_id, default_code=None)
    @api.model
    :param pms_property_id: property ID :param default_code: room type code (optional) :return: - recordset of - all the pms.room.type of the pms_property_id if default_code not defined - one or 0 pms.room.type if default_code defined - ValidationError if more than one default_code found by the same pms_property_id
  • name_get(self)

New fields (7)
  • active Boolean
    default=True help='If unchecked, it will allow you to hide the room type'
  • default_code Char
    help='Room type class identification code' required=True string='Code'
  • name Char
    help='Name of the room type class' required=True string='Class Name' translate=True
  • overnight Boolean
    default=True help='Set False if if these types of spaces are not used for overnight stays' string='Use for overnight stays'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='room_type_class_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='pms_room_type_class_property_rel' string='Properties'
  • room_type_ids One2many → pms.room.type
    check_pms_properties=True comodel_name='pms.room.type' help='Room Types that belong to this Room Type Class' inverse_name='class_id' string='Types'
  • sequence Integer
    default=0 help='Field used to change the position of the room type classes in tree view.'
Public methods (1)
  • get_unique_by_property_code(self, pms_property_id, default_code=None)
    @api.model
    :param pms_property_id: property ID :param default_code: room type code (optional) :return: - recordset of - all the pms.room.type.class of the pms_property_id if default_code not defined - one or 0 pms.room.type.class if default_code defined - ValidationError if more than one default_code found by the same pms_property_id

New fields (7)
  • active Boolean
    default=True
  • channel_type Selection
    help="Type of sale channel; it can be 'direct'(if there isno intermediary) or 'indirect'(if there areintermediaries between partner and property" selection=[('direct', 'Direct'), ('indirect', 'Indirect')] string='Sale Channel Type'
  • icon Image
    max_height=1024 max_width=1024 store=True string='Logo'
  • is_on_line Boolean
    help='Indicates if the sale channel is on-line' string='On Line'
  • name Text
    help='The name of the sale channel' string='Sale Channel Name'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='pms_sale_channel_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='pms_sale_channel_pms_property_rel' required=False string='Properties'
  • product_pricelist_ids Many2many → product.pricelist
    check_pms_properties=True column1='pms_sale_channel_id' column2='product_pricelist_id' comodel_name='product.pricelist' domain="[('is_pms_available', '=', True)]" help='Pricelists for a sale channel' relation='pms_sale_channel_product_pricelist_rel' string='Pricelists'
Public methods (0)

No public methods.

New fields (27)
  • board_service_line_id Many2one → pms.board.service.room.type.line
    check_pms_properties=True comodel_name='pms.board.service.room.type.line' help='Board Service Line in which this service is included' string='Board Service Line'
  • company_id Many2one
    help='Company to which the service belongs' index=True readonly=True related='folio_id.company_id' store=True string='Company'
  • currency_id Many2one
    help='The currency used in relation to the folio' index=True readonly=True related='folio_id.currency_id' store=True string='Currency'
  • default_invoice_to Many2one → res.partner
    comodel_name='res.partner' compute='_compute_default_invoice_to' help='Indicates the contact to which this line will be\n billed by default, if it is not established,\n a guest or the generic contact will be used instead' index=True ondelete='restrict' readonly=False store=True string='Invoice to'
  • discount Monetary
    compute='_compute_discount' digits='Discount' help='Discount of total price' inverse='_inverse_discount' readonly=False store=True
  • folio_id Many2one → pms.folio
    check_pms_properties=True comodel_name='pms.folio' compute='_compute_folio_id' help='Folio in which the service is included' index=True readonly=False store=True string='Folio'
  • invoice_status Selection
    compute='_compute_invoice_status' default='no' help="State in which the service is with respect to invoices.It can be 'invoiced', 'to_invoice' or 'no'" readonly=True selection=[('invoiced', 'Fully Invoiced'), ('to_invoice', 'To Invoice'), ('no', 'Nothing to Invoice')] store=True
  • is_board_service Boolean
    help='Indicates if the service is part of a board service'
  • is_cancel_penalty Boolean
    compute='_compute_is_cancel_penalty' help='Indicates if the service is a cancel penalty' readonly=True
  • name Char
    compute='_compute_name' help='Service description' readonly=False store=True string='Service description'
  • no_auto_add_lines Boolean
    default=False help='Technical field to avoid add service lines to service\n automatically when creating a new service. It is used when\n creating a new service with lines in vals\n ' string='Force No Auto Add Lines'
  • per_day Boolean
    help='Indicates if service is sold by days' related='product_id.per_day' related_sudo=True
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Property to which the service belongs' index=True readonly=True related='folio_id.pms_property_id' store=True string='Property'
  • price_subtotal Monetary
    compute='_compute_amount_service' help='Subtotal price without taxes' readonly=True store=True string='Subtotal'
  • price_tax Monetary
    compute='_compute_amount_service' help='Total of taxes in service' readonly=True store=True string='Taxes Amount'
  • price_total Monetary
    compute='_compute_amount_service' help='Total price with taxes' readonly=True store=True string='Total'
  • pricelist_id Many2one → product.pricelist
    comodel_name='product.pricelist' compute='_compute_pricelist_id' help='Pricelist used in the service' index=True store=True string='Pricelist'
  • product_id Many2one → product.product
    check_pms_properties=True comodel_name='product.product' domain="[(is_pms_available, '=', True)]" help='Product associated with this service' index=True ondelete='restrict' required=True string='Service'
  • product_image Binary
    help='Image of the service' related='product_id.image_1024' related_sudo=True store=False
  • product_qty Integer
    compute='_compute_product_qty' help='Number of services that were sold' readonly=False store=True string='Quantity'
  • reservation_id Many2one → pms.reservation
    check_pms_properties=True comodel_name='pms.reservation' default=<expr> help='Reservation in which the service is included' index=True ondelete='cascade' string='Room'
  • sale_channel_origin_id Many2one → pms.sale.channel
    check_pms_properties=True comodel_name='pms.sale.channel' help='Sale Channel through which service was created, the original' index=True string='Sale Channel Origin'
  • sale_line_ids One2many → folio.sale.line
    check_pms_properties=True comodel_name='folio.sale.line' copy=False help='' inverse_name='service_id' string='Sale Lines'
  • sequence Integer
    default=10
  • service_line_ids One2many → pms.service.line
    check_pms_properties=True comodel_name='pms.service.line' compute='_compute_service_line_ids' help='Subservices included in this service' inverse_name='service_id' readonly=False store=True string='Service Lines'
  • state Selection
    help='Service status, it corresponds with folio status' related='folio_id.state' store=True
  • tax_ids Many2many → account.tax
    comodel_name='account.tax' compute='_compute_tax_ids' domain=['|', ('active', '=', False), ('active', '=', True)] help='Taxes applied in the service' readonly=False store=True string='Taxes'
Public methods (6)
  • create(self, vals_list)
    @api.model_create_multi
  • get_folios_to_update_channel(self, vals)
  • name_get(self)
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
  • open_service_ids(self)
  • write(self, vals)

New fields (19)
  • auto_qty Boolean
    compute='_compute_auto_qty' help='Show if the day qty was calculated automatically' readonly=False store=True string='Qty automated setted'
  • cancel_discount Float
    compute='_compute_cancel_discount' help='' readonly=True store=True string='Cancelation Discount'
  • currency_id Many2one
    depends=['pricelist_id'] ondelete='restrict' precompute=True related='pricelist_id.currency_id' store=True
  • date Date
    help='Sate on which the product is to be consumed'
  • day_qty Integer
    help='Amount to be consumed per day' string='Units'
  • default_invoice_to Many2one → res.partner
    comodel_name='res.partner' help='Indicates the contact to which this line will be\n billed by default, if it is not established,\n a guest or the generic contact will be used instead' index=True ondelete='restrict' related='service_id.default_invoice_to' store=True string='Invoice to'
  • discount Float
    compute='_compute_discount' default=0.0 digits='Discount' help='Discount in the price of the service.' readonly=False store=True string='Discount (%)'
  • is_board_service Boolean
    help='Indicates if the service line is part of a board service' related='service_id.is_board_service' store=True
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Property to which the service belongs' index=True readonly=True related='service_id.pms_property_id' store=True string='Property'
  • price_day_subtotal Monetary
    compute='_compute_day_amount_service' help='Subtotal price without taxes' readonly=True store=True string='Subtotal'
  • price_day_tax Monetary
    compute='_compute_day_amount_service' help='' readonly=True store=True string='Taxes Amount'
  • price_day_total Monetary
    compute='_compute_day_amount_service' help='Total price with taxes' readonly=True store=True string='Total'
  • price_unit Monetary
    digits='Product Price' help='Price per unit of service' string='Unit Price'
  • pricelist_id Many2one
    depends=['service_id'] ondelete='restrict' precompute=True related='service_id.pricelist_id' store=True
  • product_id Many2one
    check_pms_properties=True help='Product associated with this service line' index=True related='service_id.product_id' store=True string='Product'
  • reservation_id Many2one
    check_pms_properties=True help='Room to which the services will be applied' index=True readonly=True related='service_id.reservation_id' store=True string='Reservation'
  • sale_line_ids Many2many → folio.sale.line
    check_pms_properties=True comodel_name='folio.sale.line' copy=False readonly=True string='Sales Lines'
  • service_id Many2one → pms.service
    comodel_name='pms.service' copy=False help='Service identifier' index=True ondelete='cascade' required=True string='Service Room'
  • tax_ids Many2many → account.tax
    comodel_name='account.tax' help='Taxes applied in the service line' readonly='True' related='service_id.tax_ids' string='Taxes'
Public methods (1)
  • no_free_resources(self)
    @api.constrains('day_qty')

New fields (4)
  • checkin_partner_id Many2one → pms.checkin.partner
    comodel_name='pms.checkin.partner' string='Checkin Partner'
  • folio_id Many2one → pms.folio
    comodel_name='pms.folio' string='Folio'
  • possible_existing_customer_ids Many2many → res.partner
    comodel_name='res.partner' readonly=False store=True string='Customers'
  • reservation_id Many2one → pms.reservation
    comodel_name='pms.reservation' string='Reservation'
Public methods (2)
  • add_partner(self)
  • default_get(self, fields)
    @api.model

New fields (6)
  • active Boolean
    default=True
  • name Char
    related='user_id.name' store=True
  • pms_property_id Many2one → pms.property
    comodel_name='pms.property' index=True ondelete='restrict' store=True string='Property'
  • pms_role Selection
    copy=False help="The member role in the organizationIt can be 'Reception', 'Revenue', 'Administrative', or 'Manager'" required=True selection=[('reception', 'Reception'), ('revenue', 'Revenue'), ('administrative', 'Administrative'), ('manager', 'Operational Manager')]
  • sequence Integer
    default=10
  • user_id Many2one → res.users
    comodel_name='res.users' copy=False index=True ondelete='restrict' string='User Member'
Public methods (0)

No public methods.

New fields (4)
  • name Char
    help='Ubication Name' required=True string='Ubication Name' translate=True
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='ubication_type_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='pms_ubication_pms_property_rel' string='Properties'
  • pms_room_ids One2many → pms.room
    check_pms_properties=True comodel_name='pms.room' help='Rooms found in this location' inverse_name='ubication_id' string='Rooms'
  • sequence Integer
    help='Field used to change the position of the ubications in tree view.Changing the position changes the sequence'
Public methods (0)

No public methods.

New fields (4)
  • allowed_room_ids Many2many → pms.room
    comodel_name='pms.room' compute='_compute_allowed_room_ids' help='It contains all available rooms for this line' store=True string='Allowed Rooms'
  • date Date
  • reservation_wizard_id Many2one → pms.reservation.split.join.swap.wizard
    comodel_name='pms.reservation.split.join.swap.wizard' string='Reservation Wizard'
  • room_id Many2one → pms.room
    comodel_name='pms.room' domain="[('id', 'in', allowed_room_ids)]" string='Room'
Public methods (0)

No public methods.

New fields (8)
  • availability_plan_id Many2one → pms.availability.plan
    check_pms_properties=True comodel_name='pms.availability.plan' help='Availability Plan for which the pricelist is included' index=True ondelete='restrict' string='Availability Plan'
  • cancelation_rule_id Many2one → pms.cancelation.rule
    check_pms_properties=True comodel_name='pms.cancelation.rule' help='Cancelation Policy included in the room' index=True string='Cancelation Policy'
  • company_id Many2one
    help='Company to which the pricelist belongs' index=True string='Company'
  • is_pms_available Boolean
    default=False help='If the pricelist is available in the PMS' string='Available in PMS'
  • item_ids One2many
    check_pms_properties=True help='Items for which the pricelist is made up' string='Items'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='product_pricelist_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='product_pricelist_pms_property_rel' required=False string='Properties'
  • pms_sale_channel_ids Many2many → pms.sale.channel
    check_pms_properties=True comodel_name='pms.sale.channel' help='Sale channel for which the pricelist is included' string='Available Channels'
  • pricelist_type Selection
    default='daily' help='Pricelist types, it can be Daily Plan' selection=[('daily', 'Daily Plan')]
Public methods (1)
  • open_massive_changes_wizard(self)

New fields (10)
  • allowed_board_service_product_ids Many2many → product.product
    comodel_name='product.product' compute='_compute_allowed_board_service_product_ids' string='Allowed board service products'
  • allowed_board_service_room_type_ids Many2many → pms.board.service.room.type
    comodel_name='pms.board.service.room.type' compute='_compute_allowed_board_service_room_type_ids' string='Allowed board service room types'
  • board_service_room_type_id Many2one → pms.board.service.room.type
    check_pms_properties=True comodel_name='pms.board.service.room.type' help='Specify a Board services on Room Types.' index=True string='Board Service'
  • date_end_consumption Date
    help='End date to apply daily pricelist items' string='End Date Consumption'
  • date_start_consumption Date
    help='Start date to apply daily pricelist items' string='Start Date Consumption'
  • has_properties Boolean
    compute='_compute_has_properties' store=True
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='product_pricelist_item_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='product_pricelist_item_pms_property_rel' string='Properties'
  • pricelist_id Many2one
    check_pms_properties=True help='Pricelist in which this item is included' index=True string='Pricelist'
  • product_id Many2one
    help='Product associated with the item' index=True string='Product'
  • product_tmpl_id Many2one
    check_pms_properties=True help='Product template associated with the item' index=True string='Product Template'
Public methods (2)
  • create(self, vals)
  • write(self, vals)

New fields (2)
  • board_price Float
    compute='_compute_board_price' digits='Product Price' help='Get price on board service' string='Board Service Price'
  • room_type_id Many2one → pms.room.type
    comodel_name='pms.room.type' compute='_compute_room_type_id' string='Room Type'
Public methods (1)
  • price_compute(self, price_type, uom=False, currency=False, company=None, date=False)

New fields (16)
  • consumed_on Selection
    default='before' help='Indicates when the product is consumed' selection=[('before', 'All before night'), ('after', 'All after night'), ('checkin', 'Only first day'), ('checkout', 'Only last day')] string='Consumed'
  • daily_limit Integer
    compute='_compute_daily_limit' help='Indicates how much products can consumed in one day' inverse='_inverse_daily_limit'
  • is_crib Boolean
    default=False help='Indicates if that product is a crib' string='Is a baby crib'
  • is_extra_bed Boolean
    default=False help='Indicates if that product is a extra bed, add +1 capacity in the room'
  • is_pms_available Boolean
    default=True help='Indicates if that product is available in PMS' string='Is available in PMS'
  • is_tourist_tax Boolean
    default=False help='Indicates if that product is a tourist tax' string='Is tourist tax'
  • per_day Boolean
    help='Indicates that the product is sold by days' string='Unit increment per day'
  • per_person Boolean
    help='Indicates that the product is sold per person' string='Unit increment per person'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='product_tmpl_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='product_template_pms_property_rel' required=False string='Properties'
  • property_daily_limits One2many → ir.pms.property
    comodel_name='ir.pms.property' domain=<expr> inverse_name='record' string='Daily Limits per Property'
  • tourist_tax_apply_from_night Integer
    default=1 help='Night number the rule starts applying (e.g., 1 = first night)' string='Apply From Night'
  • tourist_tax_apply_to_night Integer
    help='Night number the rule stops applying (optional)' string='Apply Until Night'
  • tourist_tax_date_end Selection
    required=False selection=<expr> string='End Date (Annual)'
  • tourist_tax_date_start Selection
    required=False selection=<expr> string='Start Date (Annual)'
  • tourist_tax_max_age Integer
    help='Applies only to guests up to this age' string='Maximum Age'
  • tourist_tax_min_age Integer
    help='Applies only to guests with this age or older' string='Minimum Age'
Public methods (1)
  • write(self, vals)

New fields (5)
  • cancel_penalty_product_id Many2one → product.product
    comodel_name='product.product' help='Product used to calculate the cancel penalty' index=True ondelete='restrict' string='Cancel penalty product'
  • check_min_partner_data_invoice Boolean
    default=False help='Check minimum partner data for invoices:\n - VAT, name, street, city, country' string='Check minimum partner data for invoices'
  • pms_property_ids One2many → pms.property
    comodel_name='pms.property' help='Properties with access to the element' inverse_name='company_id' string='Properties'
  • privacy_policy Html
    help='Authorization by the user for themanage of their personal data'
  • url_advert Char
    help='Url to identify the ad'
Public methods (0)

No public methods.

New fields (1)
  • priority Integer
    default=1000
Public methods (0)

No public methods.

New fields (13)
  • apply_pricelist Boolean
    help='Indicates if agency pricelist is applied to his reservations'
  • comment Text
    tracking=True
  • commission_type Selection
    default='included' help='\n If select subtract commission, for automatic import of reservations,\n the commission is calculated as price - (price * commission / 100)\n ' selection=[('included', 'Commission Included in Price'), ('subtract', 'Commission Subtracts from Price')]
  • default_commission Float
    help='Default commission' string='Commission'
  • folios_count Integer
    compute='_compute_folios_count' help='Number of folios of the partner' string='Number of Folios'
  • invoice_to_agency Selection
    default='never' help='Indicates if agency invoices partner' required=True selection=[('never', 'Never'), ('manual', 'Manual'), ('always', 'Always')] string='Invoice Agency'
  • is_agency Boolean
    help='Indicates if the partner is an agency'
  • pms_checkin_partner_ids One2many → pms.checkin.partner
    comodel_name='pms.checkin.partner' help='Associated checkin partners' inverse_name='partner_id' string='Checkin Partners'
  • pms_folio_ids One2many → pms.folio
    comodel_name='pms.folio' help='Associated Folios' inverse_name='partner_id' string='Folios'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='res_partner_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element if not set, all properties can access' ondelete='restrict' relation='res_partner_pms_property_rel' required=False string='Properties'
  • pms_reservation_ids One2many → pms.reservation
    comodel_name='pms.reservation' help='Associated reservation' inverse_name='partner_id' string='Reservations'
  • reservations_count Integer
    compute='_compute_reservations_count' help='Number of reservations of the partner' string='Number of Reservations'
  • sale_channel_id Many2one → pms.sale.channel
    comodel_name='pms.sale.channel' domain=[('channel_type', '=', 'indirect')] help='The sale channel of the partner' index=True ondelete='restrict' string='Sale Channel'
Public methods (3)
  • action_partner_folios(self)
  • action_partner_reservations(self)
  • get_vat(self)
    Return the partner VAT. Inherited by localizations to return the equivalent fiscal identification when applicable.

New fields (1)
  • is_used_in_checkin Boolean
    string='Used in checkin'
Public methods (0)

No public methods.

New fields (2)
  • pms_property_id Many2one → pms.property
    comodel_name='pms.property' context={'user_preference': True} domain="[('id','in',pms_property_ids)]" help='The property that is selected within those allowed for the user' index=True string='Default Property'
  • pms_property_ids Many2many → pms.property
    column1='user_id' column2='pms_property_id' comodel_name='pms.property' domain="[('company_id','in',company_ids)]" help='The properties allowed for this user' relation='pms_property_users_rel' string='Properties'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (4)
  • active Boolean
    default=True help='Uncheck to archive the room closure reason and hide it from selection lists without removing the historical records that already reference it.'
  • description Text
    help='Explanation of the reason for closing a room' translate=True
  • name Char
    help='The name that identifies the room closure reason' required=True translate=True
  • pms_property_ids Many2many → pms.property
    column1='room_closure_reason_type_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='pms_room_closure_reason_pms_property_rel' string='Properties'
Public methods (0)

No public methods.

New fields (38)
  • allowed_reservation_ids Many2many → pms.reservation
    column1='folio_changes_id' column2='allowed_reservation_ids' comodel_name='pms.reservation' compute='_compute_allowed_reservation_ids' relation='folio_changes_allowed_reservation_rel' string='Allowed Reservations'
  • allowed_room_type_ids Many2many → pms.room.type
    column1='folio_changes_id' column2='allowed_room_type_ids' comodel_name='pms.room.type' compute='_compute_allowed_room_type_ids' relation='folio_changes_allowed_room_type_rel' string='Allowed Room Types'
  • allowed_service_ids Many2many → pms.service
    column1='folio_changes_id' column2='allowed_service_ids' comodel_name='pms.service' compute='_compute_allowed_service_ids' relation='folio_changes_allowed_service_rel' string='Allowed Services'
  • apply_board_service Boolean
    default=False string='Add Board Service to reservations'
  • apply_day_qty Boolean
    default=False help='If not set, it will use the default product day qty' string='Change cuantity service per day'
  • apply_discount Boolean
    default=False string='Apply Discount update'
  • apply_new_checkin Boolean
    default=False string='Apply Checkin Update'
  • apply_new_checkout Boolean
    default=False string='Apply Checkout Update'
  • apply_on_all_week Boolean
    default=True string='Apply Availability Rule for the whole week'
  • apply_on_friday Boolean
    default=False string='Apply Availability Rule on fridays'
  • apply_on_monday Boolean
    default=False string='Apply Availability Rule on mondays'
  • apply_on_saturday Boolean
    default=False string='Apply Availability Rule on saturdays'
  • apply_on_sunday Boolean
    default=False string='Apply Availability Rule on sundays'
  • apply_on_thursday Boolean
    default=False string='Apply Availability Rule on thursdays'
  • apply_on_tuesday Boolean
    default=False string='Apply Availability Rule on tuesdays'
  • apply_on_wednesday Boolean
    default=False string='Apply Availability Rule on wednesdays'
  • apply_partner_id Boolean
    default=False string='Apply Customer'
  • apply_price Boolean
    default=False string='Apply Price update'
  • apply_pricelist_id Boolean
    default=False string='Apply Pricelist'
  • apply_service Boolean
    default=False string='Add Service to reservations'
  • change_from_date Date
    default=<expr> string='Apply From'
  • change_to_date Date
    default=<expr> string='Apply To'
  • dates_incongruence Boolean
    compute='_compute_dates_incongruence' help='Indicates that there are reservations with different checkin and/or checkout' store=True
  • day_qty Integer
    string='Quantity per day'
  • folio_id Many2one → pms.folio
    comodel_name='pms.folio' default=<expr> string='Folio'
  • modification_type Selection
    default='reservations' selection=[('reservations', 'Reservations'), ('dates', 'Dates'), ('services', 'Services Prices')]
  • new_board_service_id Many2one → pms.board.service
    comodel_name='pms.board.service' string='New Board Service'
  • new_checkin Date
    default=<expr>
  • new_checkout Date
    default=<expr>
  • new_discount Float
    string='New Discount %'
  • new_partner_id Many2one → res.partner
    comodel_name='res.partner' string='Customer'
  • new_price Float
  • new_pricelist_id Many2one → product.pricelist
    comodel_name='product.pricelist' domain="[('is_pms_available', '=', True)]" string='Pricelist'
  • new_service_id Many2one → product.product
    comodel_name='product.product' domain="[('sale_ok','=',True)]" string='New Service'
  • nights Integer
    compute='_compute_nights'
  • reservation_ids Many2many → pms.reservation
    column1='folio_changes_id' column2='reservation_ids' comodel_name='pms.reservation' default=<expr> domain="[('id', 'in', allowed_reservation_ids)]" relation='folio_changes_reservation_rel' string='Reservations'
  • room_type_filter_ids Many2many → pms.room.type
    column1='folio_changes_id' column2='room_type_ids' comodel_name='pms.room.type' default=<expr> domain="[('id', 'in', allowed_room_type_ids)]" relation='folio_changes_room_type_rel' string='Room types'
  • service_ids Many2many → pms.service
    column1='folio_changes_id' column2='service_ids' comodel_name='pms.service' default=<expr> domain="[('id', 'in', allowed_service_ids)]" relation='folio_changes_service_rel' string='Services'
Public methods (5)
  • button_change(self)
  • default_change_from_date(self)
  • default_change_new_checkin(self)
  • default_change_new_checkout(self)
  • default_change_to_date(self)

New fields (10)
  • amount Float
    digits='Product Price'
  • available_journal_ids Many2many → account.journal
    comodel_name='account.journal' compute='_compute_available_journal_ids'
  • available_payment_method_line_ids Many2many → account.payment.method.line
    comodel_name='account.payment.method.line' compute='_compute_available_payment_method_line_ids'
  • date Date
    default=fields.Date.context_today required=True
  • folio_id Many2one → pms.folio
    comodel_name='pms.folio' required=True string='Folio'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' domain="[('id', 'in', available_journal_ids)]" required=True string='Journal'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' string='Partner'
  • payment_method_line_id Many2one → account.payment.method.line
    comodel_name='account.payment.method.line' domain="[('id', 'in', available_payment_method_line_ids)]" required=True string='Payment Method'
  • reservation_ids Many2many → pms.reservation
    comodel_name='pms.reservation' string='Reservations'
  • service_ids Many2many → pms.service
    comodel_name='pms.service' string='Services'
Public methods (1)
  • button_payment(self)
REPOSITORY
REPOSITORYOCA/pms
GIT
GIThttps://github.com/OCA/pms.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/pms/tree/14.0/pms
VERSION
VERSION 3.51.0
CATEGORY
CATEGORYGeneric Modules/Property Management System
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Commit [Sun]
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Commit [Sun]
COMMITTERS
COMMITTERSGitHub, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Eric Antones, Darío Lodeiros, JesusVMayor, oca-ci, Dario Lodeiros, oca-git-bot, braisab, Henrik Norlin, Sara Lago, padomi, miguelpadin, DarioLodeiros, Josue, Pablo Quesada Barriuso, Jose Luis Algara, Brais Abeijón
WEBSITE
WEBSITEhttps://github.com/OCA/pms
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:11
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-reconcile:
    - account_reconciliation_widget
OCA/partner-contact:
    - partner_firstname
    - partner_second_lastname
    - partner_contact_gender
    - partner_contact_personal_information_page
    - partner_contact_birthdate
    - partner_contact_nationality
    - partner_identification
OCA/pms:
    - multi_pms_properties
OCA/queue:
    - queue_job
OCA/web:
    - web_timeline
odoo/odoo:
    - base
    - base_automation
    - resource
    - web
    - mail
    - base_setup
    - bus
    - web_tour
    - sales_team
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - base_sparse_field
    - contacts
    - sale
    - payment
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES requests
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (138)
XML IDNameModelTypeStatus
account_analytic_tag_form_view_add_distribution_tags account.analytic.tag.form.add_distribution_tags account.analytic.tag xpath Inherits analytic.account_analytic_tag_form_view
account_journal_dashboard_kanban_view account.journal xpath Inherits account.account_journal_dashboard_kanban_view
account_journal_view_form account.journal xpath Inherits account.view_account_journal_form
account_payment_view_form account.payment xpath Inherits account.view_account_payment_form
advanced_filters_wizard Filter by dates pms.advanced.filters.wizard form New
assets_backend pms assets ir.ui.view qweb Inherits web.assets_backend
assets_frontend assets_frontend ir.ui.view qweb Inherits portal.assets_frontend
availability_plan_rule_view_form pms.availability.plan.rule.form pms.availability.plan.rule form New
availability_plan_rule_view_tree pms.availability.plan.rule.tree pms.availability.plan.rule tree New
availability_view_form pms.availability.plan.form pms.availability.plan form New
availability_view_tree pms.availability.plan.tree pms.availability.plan tree New
bank_statement_form account.bank.statement xpath Inherits account.view_bank_statement_form
booking_duplicate Duplicate Folio pms.booking.duplicate form New
booking_engine Folio Wizard pms.booking.engine form New
company_view_form res.company xpath Inherits base.view_company_form
folio_portal_template Folio Portal Template ir.ui.view qweb Inherits portal.portal_sidebar
inherit_partner_id_numbers_form inherit.res.partner.id_number.form res.partner.id_number xpath Inherits partner_identification.view_partner_id_numbers_form
inherit_partner_id_numbers_tree inherit.res.partner.id_number.tree res.partner.id_number xpath Inherits partner_identification.view_partner_id_numbers_tree
massive_changes_wizard Availability Wizard pms.massive.changes.wizard form New
move_form account.move xpath Inherits account.view_move_form
payment_acquirer_form muliproperty.payment.acquirer.form payment.acquirer field Inherits payment.acquirer_form
payment_transaction_inherit_view_form payment.transaction xpath Inherits payment.transaction_form
pms_amenity_search pms.room_amenity_search pms.amenity search New
pms_amenity_view_form pms.amenity.form pms.amenity form New
pms_amenity_view_list pms.room_amenity_list pms.amenity tree New
pms_board_service_form pms.board.service.form pms.board.service form New
pms_board_service_room_type_form pms.board.service.room.type.form pms.board.service.room.type form New
pms_board_service_view_tree pms.board.service.tree pms.board.service tree New
pms_cancelation_rule_form pms.cancelation.rule.form pms.cancelation.rule form New
pms_cancelation_rule_view_tree pms.cancelation.rule.tree pms.cancelation.rule tree New
pms_checkin_partner_folio_view_tree pms.checkin.partner.folio.view.tree pms.checkin.partner tree New
pms_checkin_partner_graph pms.checkin.partner.graph pms.checkin.partner graph New
pms_checkin_partner_kanban_view pms.checkin.partner.kanban pms.checkin.partner kanban New
pms_checkin_partner_pivot pms.checkin.partner.pivot pms.checkin.partner pivot New
pms_checkin_partner_reservation_view_tree pms.checkin.partner.reservation.view.tree pms.checkin.partner tree New
pms_checkin_partner_view_calendar pms.checkin.partner.view.calendar pms.checkin.partner calendar New
pms_checkin_partner_view_folio_search pms.checkin.partner.search pms.checkin.partner search New
pms_checkin_partner_view_form Checkin Form pms.checkin.partner form New
pms_checkin_partner_view_search pms.checkin.partner.search pms.checkin.partner search New
pms_checkin_partner_view_tree pms.checkin.partner.view.tree pms.checkin.partner tree New
pms_folio_pivot pms.folio.pivot pms.folio pivot New
pms_folio_view_form pms.folio.form pms.folio form New
pms_folio_view_graph view.pms.folio.graph pms.folio graph New
pms_folio_view_kanban pms.folio.kanban pms.folio kanban New
pms_folio_view_search pms.folio.search pms.folio search New
pms_folio_view_tree pms.folio.tree pms.folio tree New
pms_proforma_invoice_template Invoice Proforma Portal Template ir.ui.view qweb Inherits account.portal_invoice_page
pms_property_views_form pms_property_views_form pms.property form New
pms_property_views_tree pms_property_views_tree pms.property tree New
pms_reservation_graph pms.reservation.graph pms.reservation graph New
pms_reservation_pivot pms.reservation.pivot pms.reservation pivot New
pms_reservation_view_bottom_tree pms.reservation.tree pms.reservation tree Inherits pms.pms_reservation_view_tree
pms_reservation_view_calendar pms.reservation.view.calendar pms.reservation calendar New
pms_reservation_view_form pms.reservation.form pms.reservation form New
pms_reservation_view_search pms.reservation.search pms.reservation search New
pms_reservation_view_timeline pms.reservation.view.timeline pms.reservation timeline New
pms_reservation_view_tree pms.reservation.tree pms.reservation tree New
pms_room_amenity_type_view_form pms.room_amenity_type_form pms.amenity.type form New
pms_room_amenity_type_view_list pms.room_amenity_type_list pms.amenity.type tree New
pms_room_closure_reason_view_form pms.room.closure.reason.form room.closure.reason form New
pms_room_closure_reason_view_tree >pms.room.closure.reason.tree room.closure.reason tree New
pms_room_type_class_view_form pms.room.type.class.form pms.room.type.class form New
pms_room_type_class_view_tree pms.room.type.class.tree pms.room.type.class tree New
pms_room_type_view_form pms.room_type.form pms.room.type form New
pms_room_type_view_search pms.room.type.search pms.room.type search New
pms_room_type_view_tree pms.room_type.tree pms.room.type tree New
pms_room_view_form pms.room.form pms.room form New
pms_room_view_kanban pms.room.kanban pms.room kanban New
pms_room_view_search pms.room.search pms.room search New
pms_room_view_tree pms.room.tree pms.room tree New
pms_sale_channel_view_form pms.sale.channel.form pms.sale.channel form New
pms_sale_channel_view_tree pms.sale.channel.tree pms.sale.channel tree New
pms_service_line_graph pms.service.line.graph pms.service.line graph New
pms_service_line_pivot pms.service.line.pivot pms.service.line pivot New
pms_service_line_report_view_tree pms.service.line.report.tree pms.service.line tree New
pms_service_line_view_calendar pms.service.line.view.calendar pms.service.line calendar New
pms_service_line_view_form pms.service.line.form pms.service.line form New
pms_service_line_view_search pms.service.line.search pms.service.line search New
pms_service_line_view_tree pms.service.line.tree pms.service.line tree New
pms_service_view_form .pms.service.form pms.service form New
pms_service_view_search pms.service.search pms.service search New
pms_service_view_tree .pms.service.view.tree pms.service tree New
pms_ubication_view_form pms.ubication.form pms.ubication form New
pms_ubication_view_tree pms.ubication.tree pms.ubication tree New
portal_folio_error Folio error/warning display ir.ui.view qweb New
portal_folio_page_payment Payment on My Folios ir.ui.view qweb New
portal_folio_payment Folio Payment ir.ui.view qweb New
portal_folio_success Invoice success display ir.ui.view qweb New
portal_my_folio My Folios ir.ui.view qweb New
portal_my_folio_invitations Precheckin Folio ir.ui.view qweb New
portal_my_folios Folios ir.ui.view qweb Inherits portal.portal_my_home
portal_my_home_menu_folio Portal layout : folio menu entries ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_home_menu_reservation Portal layout : reservation menu entries ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_precheckin_detail My Precheckin ir.ui.view qweb New
portal_my_precheckin_end Precheckin End ir.ui.view qweb New
portal_my_prechekin_folio My precheckin in folio ir.ui.view qweb New
portal_my_prechekin_reservation My precheckin in folio ir.ui.view qweb New
portal_my_reservation My Reservations ir.ui.view qweb New
portal_my_reservation_detail My Reservation ir.ui.view qweb New
portal_my_reservation_precheckin Precheckin Reservation ir.ui.view qweb New
portal_my_reservations Reservations ir.ui.view qweb Inherits portal.portal_my_home
portal_not_checkin Not Checkin ir.ui.view qweb New
product_pricelist_item_view_form product.pricelist.item xpath Inherits product.product_pricelist_item_form_view
product_pricelist_item_view_tree product.pricelist.item tree New
product_pricelist_view_form product.pricelist xpath Inherits product.product_pricelist_view
product_template_view_form view.product.template.form.inherited product.template xpath Inherits product.product_template_form_view
report_folio report_folio ir.ui.view qweb New
report_folio_document report_folio_document ir.ui.view qweb New
report_invoice_document report_invoice_document ir.ui.view qweb Inherits account.report_invoice_document
report_pms_pro_forma report_pms_pro_forma ir.ui.view qweb New
res_partner_view_form res.partner.view.form res.partner xpath Inherits base.view_partner_form
res_users_view_form User Properties fields res.users xpath Inherits base.view_users_form
reservation_wizard Split, join or swap reservations pms.reservation.split.join.swap.wizard form New
several_partners_wizard Several Partners pms.several.partners.wizard form New
template_footer template_footer ir.ui.view qweb New
template_header template_header ir.ui.view qweb New
template_reservation template_reservation ir.ui.view qweb New
template_reservation_confirmed Property Reservation Confirmed ir.ui.view qweb New
template_reservation_details template_reservation_details ir.ui.view qweb New
traveller_report traveller_report ir.ui.view qweb New
view_account_analytic_line_tree_inherit_account account.analytic.line.tree.inherit.account account.analytic.line field Inherits account.view_account_analytic_line_tree_inherit_account
view_account_invoice_filter account.move xpath Inherits account.view_account_invoice_filter
view_account_journal_search account.journal xpath Inherits account.view_account_journal_search
view_account_move_filter account.move xpath Inherits account.view_account_move_filter
view_account_move_line_filter account.move.line xpath Inherits account.view_account_move_line_filter
view_account_payment_search account.payment xpath Inherits account.view_account_payment_search
view_account_payment_tree account.payment xpath Inherits account.view_account_payment_tree
view_country_form view.country.form res.country xpath Inherits base.view_country_form
view_folio_advance_payment_inv Invoice Orders folio.advance.payment.inv form New
view_move_line_tree account.move.line xpath Inherits account.view_move_line_tree
view_move_tree account.move xpath Inherits account.view_move_tree
view_partner_category_form_inherited view.partner.category.form.inherited res.partner.category xpath Inherits base.view_partner_category_form
view_partner_data_form res.partner.form.data res.partner form New
view_partner_id_category_form_inherited view.partner.id.category.form.inherited res.partner.id_category xpath Inherits partner_identification.view_partner_id_category_form
view_partner_id_category_tree_inherited view.partner.id.category.tree.inherited res.partner.id_category xpath Inherits partner_identification.view_partner_id_category_tree
view_partner_property_form view.partner.property.form res.partner xpath Inherits account.view_partner_property_form
wizard_folio_changes_view_form wizard.folio.changes.view.form wizard.folio.changes form New
wizard_payment_folio_view_form wizard.payment.folio.view.form wizard.payment.folio form New
Models touched (65)

New fields (1)
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' index=True name='Property'
Public methods (0)

No public methods.

New fields (1)
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' compute='_compute_pms_property_id' index=True name='Property' readonly=False store=True
Public methods (0)

No public methods.

New fields (2)
  • journal_id Many2one
    check_pms_properties=True
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' compute='_compute_pms_property_id' copy=False help='Properties with access to the element' index=True readonly=False store=True string='Property'
Public methods (1)
  • button_post(self)
    Override the default method to add autoreconcile payments and statement lines

New fields (3)
  • folio_ids Many2many → pms.folio
    check_pms_properties=True column1='account_journal_id' column2='folio_id' comodel_name='pms.folio' ondelete='cascade' relation='account_bank_statement_folio_rel' string='Folios'
  • reservation_ids Many2many → pms.reservation
    check_pms_properties=True column1='account_bank_statement_id' column2='reservation_id' comodel_name='pms.reservation' help='Reservations in which the Account Bank Statement Lines are included' ondelete='cascade' relation='account_bank_statement_reservation_rel' string='Reservations'
  • service_ids Many2many → pms.service
    check_pms_properties=True column1='account_bank_statement_id' column2='service_id' comodel_name='pms.service' help='Services in which the Account Bank Statement Lines are included' ondelete='cascade' relation='account_bank_statement_service_rel' string='Services'
Public methods (0)

No public methods.

New fields (6)
  • allowed_pms_payments Boolean
    help='Use to pay for reservations' string='For manual payments'
  • allowed_room_ids Many2many → pms.room
    column1='account_journal_id' column2='room_id' comodel_name='pms.room' compute='_compute_allowed_room_ids' help='Room to filter the room in the reservation' relation='account_journal_allow_room_rel' string='Rooms Filter allowed'
  • avoid_autoinvoice_downpayment Boolean
    default=False help='Avoid autoinvoice downpayment' string='Avoid autoinvoice downpayment'
  • is_simplified_invoice Boolean
    compute='_compute_is_simplified_invoice' help='Use to simplified invoice' readonly=False store=True string='Simplified invoice'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='account_journal_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='account_journal_pms_property_rel' string='Properties'
  • room_filter_ids Many2many → pms.room
    column1='account_journal_id' column2='room_id' comodel_name='pms.room' domain="[('id', 'in', allowed_room_ids)]" help='Room to filter the room types in the reservation' relation='account_journal_room_rel' string='Apply Rooms'
Public methods (0)

No public methods.

New fields (4)
  • folio_ids Many2many → pms.folio
    column1='account_move_id' column2='folio_ids_id' comodel_name='pms.folio' compute='_compute_folio_origin' help='Folios where the account move are included' readonly=False relation='account_move_folio_ids_rel' store=True string='Folios'
  • is_simplified_invoice Boolean
    help='Technical field to know if the invoice is simplified' related='journal_id.is_simplified_invoice' store=True
  • origin_agency_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_origin_agency_id' domain="[('is_agency', '=', True)]" help='The agency where the folio account move originates' index=True readonly=False store=True string='Origin Agency'
  • pms_property_id Many2one → pms.property
    comodel_name='pms.property' compute='_compute_pms_property_id' help='The property associated to the account move' index=True readonly=False store=True string='Property'
Public methods (2)
  • get_proforma_portal_url(self, suffix=None, report_type=None, download=None, query_string=None, anchor=None)
    Get a proforma portal url for this model, including access_token. The associated route must handle the flags for them to have any effect. - suffix: string to append to the url, before the query string - report_type: report_type query string, often one of: html, pdf, text - download: set the download query string to true - query_string: additional query string - anchor: string to append after the anchor #
  • match_pays_by_amount(self, payments, invoice)
    Match payments by amount

New fields (7)
  • folio_ids Many2many → pms.folio
    check_pms_properties=True comodel_name='pms.folio' compute='_compute_folio_ids' store=True string='Folios'
  • folio_line_ids Many2many → folio.sale.line
    column1='invoice_line_id' column2='sale_line_id' comodel_name='folio.sale.line' copy=True help='The folio lines in the account move lines' relation='folio_sale_line_invoice_rel' string='Folio Lines'
  • move_id Many2one
    check_pms_properties=True
  • name Char
    compute='_compute_name' readonly=False store=True
  • name_changed_by_user Boolean
    default=True help='Techinal field to know if the name was set manually by the user\n or by the system. If the name was set manually, the system will not\n change it when the qty days are changed' string='Name set manually'
  • origin_agency_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_origin_agency_id' domain="[('is_agency', '=', True)]" help='The agency where the folio account move originates' index=True readonly=False store=True string='Origin Agency'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' compute='_compute_pms_property_id' index=True name='Property' readonly=False store=True
Public methods (1)
  • reconcile(self)
    Reconcile the account move

New fields (3)
  • folio_ids Many2many → pms.folio
    column1='payment_id' column2='folio_id' comodel_name='pms.folio' compute='_compute_folio_ids' readonly=False relation='account_payment_folio_rel' store=True string='Folios'
  • origin_agency_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_origin_agency_id' domain="[('is_agency', '=', True)]" help='The agency where the folio account move originates' index=True readonly=True store=True string='Origin Agency'
  • origin_reference Char
    help='The reference of the payment origin' string='Origin Reference'
Public methods (2)
  • action_draft(self)
  • auto_invoice_downpayments(self, offset=0)
    @api.model
    This method is called by a cron job to invoice the downpayments based on the company settings.

New fields (13)
  • advance_payment_method Selection
    default='delivered' help='A standard invoice is issued with all the order lines ready for invoicing, according to their invoicing policy (based on ordered or delivered quantity).' required=True selection=[('delivered', 'Regular invoice'), ('percentage', 'Down payment (percentage)'), ('fixed', 'Down payment (fixed amount)')] string='Create Invoice'
  • amount Float
    digits='Account' help='The percentage of amount to be invoiced in advance, taxes excluded.' string='Down Payment Amount'
  • bill_rooms Boolean
    default=True help='Bill Rooms' string='Bill Rooms'
  • bill_services Boolean
    default=True help='Bill Services' string='Bill Services'
  • count Integer
    default=<expr> string='Order Count'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' default=<expr> help='Currency used in invoices' string='Currency'
  • deduct_down_payments Boolean
    default=True help='Deduct down payments' string='Deduct down payments'
  • deposit_account_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain=[('deprecated', '=', False)] help='Account used for deposits' string='Income Account'
  • deposit_taxes_id Many2many → account.tax
    comodel_name='account.tax' default=<expr> help='Taxes used for deposits' string='Customer Taxes'
  • fixed_amount Monetary
    help='The fixed amount to be invoiced in advance, taxes excluded.' string='Down Payment Amount (Fixed)'
  • has_down_payments Boolean
    default=<expr> help='Has down payments' readonly=True string='Has down payments'
  • partner_invoice_id Many2one → res.partner
    comodel_name='res.partner' default=<expr> help='Invoice address for current partner' string='Billing contact'
  • product_id Many2one → product.product
    comodel_name='product.product' default=<expr> domain=[('type', '=', 'service')] string='Down Payment Product'
Public methods (2)
  • create_invoices(self)
  • onchange_advance_payment_method(self)
    @api.onchange('advance_payment_method')

New fields (42)
  • analytic_tag_ids Many2many → account.analytic.tag
    comodel_name='account.analytic.tag' domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Analytic Tags'
  • autoinvoice_date Date
    compute='_compute_autoinvoice_date' store=True string='Autoinvoice Date'
  • company_id Many2one
    help='The company in the folio sale line' index=True readonly=True related='folio_id.company_id' store=True string='Company'
  • currency_id Many2one
    depends=['folio_id.currency_id'] help='The currency for the folio' readonly=True related='folio_id.currency_id' store=True string='Currency'
  • date_order Date
    compute='_compute_date_order' help='Field to order by service' readonly=True store=True string='Date'
  • default_invoice_to Many2one → res.partner
    comodel_name='res.partner' help='Indicates the contact to which this line will be\n billed by default, if it is not established,\n a guest or the generic contact will be used instead' index=True ondelete='restrict' string='Invoice to'
  • discount Float
    compute='_compute_discount' digits='Discount' help='Discount of total price in folio sale line' readonly=False store=True string='Discount (%)'
  • display_type Selection
    default=False help='Technical field for UX purpose.' selection=[('line_section', 'Section'), ('line_note', 'Note')] string='Display Type'
  • folio_id Many2one → pms.folio
    comodel_name='pms.folio' copy=False help='Folio to which folio sale line belongs' index=True ondelete='cascade' required=True string='Folio Reference'
  • invoice_lines Many2many → account.move.line
    column1='sale_line_id' column2='invoice_line_id' comodel_name='account.move.line' copy=False help='Folio sale line invoice lines' relation='folio_sale_line_invoice_rel' string='Invoice Lines'
  • invoice_status Selection
    compute='_compute_invoice_status' help='Invoice Status; it can be: invoiced, to invoice, no' readonly=True selection=[('invoiced', 'Fully Invoiced'), ('to_invoice', 'To Invoice'), ('no', 'Nothing to Invoice')] store=True string='Invoice Status'
  • is_board_service Boolean
    help='Indicates if the service included in folio sale line is part of a board service' related='service_id.is_board_service' store=True string='Board Service'
  • is_downpayment Boolean
    help='Down payments are made when creating invoices from a folio. They are not copied when duplicating a folio.' string='Is a down payment'
  • name Text
    compute='_compute_name' help='Description of folio sale line' readonly=False store=True string='Description'
  • origin_agency_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_origin_agency_id' domain="[('is_agency', '=', True)]" help='The agency where the folio sale line originates' index=True readonly=False store=True string='Origin Agency'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Property with access to the element;' index=True readonly=True related='folio_id.pms_property_id' store=True string='Property'
  • price_reduce Float
    compute='_compute_get_price_reduce' digits='Product Price' help='Reduced price amount, that is, total price with discounts applied' readonly=True store=True string='Price Reduce'
  • price_reduce_taxexcl Monetary
    compute='_compute_get_price_reduce_notax' help='Price with discounts applied without taxes' readonly=True store=True string='Price Reduce Tax excl'
  • price_reduce_taxinc Monetary
    compute='_compute_get_price_reduce_tax' help='Price with discounts applied and taxes included' readonly=True store=True string='Price Reduce Tax inc'
  • price_subtotal Monetary
    compute='_compute_amount' help='Subtotal price without taxes' readonly=True store=True string='Subtotal'
  • price_tax Float
    compute='_compute_amount' help='Total of taxes in a reservation' readonly=True store=True string='Total Tax'
  • price_total Monetary
    compute='_compute_amount' help='Total price with taxes' readonly=True store=True string='Total'
  • price_unit Float
    digits='Product Price' help='Unit Price of folio sale line' string='Unit Price'
  • product_id Many2one → product.product
    change_default=True check_company=True comodel_name='product.product' compute='_compute_product_id' domain="[('sale_ok', '=', True), ('is_pms_available', '=', True), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" help="Product associated with folio sale line, can be product associated with service or product associated withreservation's room type, in other case it's false" index=True ondelete='restrict' store=True string='Product'
  • product_uom Many2one → uom.uom
    comodel_name='uom.uom' domain="[('category_id', '=', product_uom_category_id)]" help='' index=True string='Unit of Measure'
  • product_uom_category_id Many2one
    help='' readonly=True related='product_id.uom_id.category_id' string='Unit of Measure Category'
  • product_uom_qty Float
    compute='_compute_product_uom_qty' digits='Product Unit of Measure' help='' readonly=False store=True string='Quantity'
  • product_uom_readonly Boolean
    compute='_compute_product_uom_readonly' help='' string=''
  • qty_invoiced Float
    compute='_compute_get_invoice_qty' compute_sudo=True digits='Product Unit of Measure' help='It is the amount invoiced when an invoice is issued' readonly=True store=True string='Invoiced Quantity'
  • qty_to_invoice Float
    compute='_compute_get_to_invoice_qty' digits='Product Unit of Measure' help='The quantity to invoice. If the invoice policy is order, the quantity to invoice is calculated from the ordered quantity. Otherwise, the quantity delivered is used.' readonly=True store=True string='To Invoice Quantity'
  • reservation_id Many2one → pms.reservation
    comodel_name='pms.reservation' copy=False help='Reservation to which folio sale line belongs' index=True ondelete='cascade' string='Reservation Reference'
  • reservation_line_ids Many2many → pms.reservation.line
    comodel_name='pms.reservation.line' help='Reservation lines associated with folio sale line, they corresponds with nights' string='Nights'
  • reservation_order Integer
    compute='_compute_reservation_order' help='Field to order by reservation id' readonly=True store=True string='Reservation Id'
  • section_id Many2one → folio.sale.line
    comodel_name='folio.sale.line' compute='_compute_section_id' help='The section of the folio sale line' index=True string='Section'
  • sequence Integer
    default=10 help='' string='Sequence'
  • service_id Many2one → pms.service
    comodel_name='pms.service' copy=False help='Sevice included in folio sale line' index=True ondelete='cascade' string='Service Reference'
  • service_line_ids Many2many → pms.service.line
    comodel_name='pms.service.line' help='Subservices included in folio sale line service' string='Service Lines'
  • service_order Integer
    compute='_compute_service_order' help='Field to order by service id' readonly=True store=True string='Service Id'
  • state Selection
    copy=False help='The status of the folio related with folio sale line' readonly=True related='folio_id.state' store=True string='Folio Status'
  • tax_ids Many2many → account.tax
    comodel_name='account.tax' compute='_compute_tax_ids' domain=['|', ('active', '=', False), ('active', '=', True)] help='Taxes applied in the folio sale line' store=True string='Taxes'
  • untaxed_amount_invoiced Monetary
    compute='_compute_untaxed_amount_invoiced' compute_sudo=True help='The amount to invoice without taxes in the line of folio' store=True string='Untaxed Invoiced Amount'
  • untaxed_amount_to_invoice Monetary
    compute='_compute_untaxed_amount_to_invoice' compute_sudo=True help='The invoiced amount without taxes in the line of the folio' store=True string='Untaxed Amount To Invoice'
Public methods (4)
  • generate_folio_sale_name(self, reservation_id, product_id, service_id, reservation_line_ids, service_line_ids, qty=False)
    @api.model
  • name_get(self)
  • unlink(self)
  • write(self, values)

New fields (0)

No new fields.

Public methods (2)
  • check_value(self)
    @api.constrains('key', 'value')
  • unlink(self)

New fields (0)

No new fields.

Public methods (1)
  • session_info(self)

New fields (9)
  • field_id Many2one → ir.model.fields
    comodel_name='ir.model.fields' index=True string='Field'
  • field_name Char
    compute='_compute_field_name' readonly=False store=True string='Field Name'
  • model_id Many2one → ir.model
    comodel_name='ir.model' index=True string='Model'
  • model_name Char
    compute='_compute_model_name' readonly=False store=True string='Model Name'
  • pms_property_id Many2one → pms.property
    comodel_name='pms.property' help='' index=True string='Properties'
  • record Integer
    string='Record Id'
  • value_float Float
    string='Float Field Value'
  • value_integer Integer
    string='Integer Field Value'
  • value_reference Text
    string='Reference Field Value'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • get_field_value(self, pms_property_id, model_name, field_name, record_id, value_type)
  • set_field_value(self, pms_property_id, model_name, field_name, record_id, value)

New fields (0)

No new fields.

Public methods (1)
  • send_mail(self, auto_commit=False)

New fields (1)
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='acquirer_id' column2='property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' relation='pms_acquirer_property_rel' required=False string='Properties'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • default_get(self, fields)
    @api.model

New fields (1)
  • folio_ids Many2many → pms.folio
    column1='payment_transaction_id' column2='folio_id' comodel_name='pms.folio' ondelete='cascade' relation='payment_transaction_folio_rel' string='Folios'
Public methods (1)
  • render_folio_button(self, folio, submit_txt=None, render_values=None, custom_amount=None)

New fields (3)
  • pms_domain Char
    string='Domain'
  • pms_model_id Many2one → ir.model
    comodel_name='ir.model' default=<expr> domain=[('model', 'in', PMS_BUSINESS_MODELS)] ondelete='cascade' required=True string='Recipients Model'
  • pms_model_name Char
    readonly=True related='pms_model_id.model' related_sudo=True string='Recipients Model Name'
Public methods (1)
  • action_filter(self)

New fields (6)
  • active Boolean
    default=True help='Determines if amenity is active' string='Active'
  • default_code Char
    help='Internal unique identifier of the amenity' string='Internal Reference'
  • is_add_code_room_name Boolean
    help='True if the Internal Reference should appear in the display name of the rooms' string='Add in room name'
  • name Char
    help='Amenity Name' required=True string='Amenity Name' translate=True
  • pms_amenity_type_id Many2one → pms.amenity.type
    check_pms_properties=True comodel_name='pms.amenity.type' help='Segment the amenities by categories (multimedia, comfort, etc ...)' index=True string='Amenity Category'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='amenity_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='pms_amenity_pms_property_rel' string='Properties'
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True help='Determines if amenity type is active' string='Active'
  • name Char
    help='Amenity Type Name' required=True string='Amenity Type Name' translate=True
  • pms_amenity_ids One2many → pms.amenity
    check_pms_properties=True comodel_name='pms.amenity' help='Amenities included in this type' inverse_name='pms_amenity_type_id' string='Amenities In This Category'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='amenity_type_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='pms_amenity_type_pms_property_rel' string='Properties'
Public methods (0)

No public methods.

New fields (1)
  • name Char
    help='Name of the automated mail.' required=True string='Name'
Public methods (0)

No public methods.

New fields (8)
  • avail_rule_ids One2many → pms.availability.plan.rule
    check_pms_properties=True comodel_name='pms.availability.plan.rule' inverse_name='avail_id' string='Avail record rules'
  • child_avail_ids One2many → pms.availability
    check_pms_properties=True comodel_name='pms.availability' compute='_compute_child_avail_ids' help='Child availabilities for this availability' inverse_name='parent_avail_id' store=True string='Child Avails'
  • date Date
    help='Date for which availability applies' readonly=True required=True string='Date'
  • parent_avail_id Many2one → pms.availability
    check_pms_properties=True comodel_name='pms.availability' compute='_compute_parent_avail_id' help='Parent availability for this availability' index=True ondelete='restrict' store=True string='Parent Avail'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Property to which the availability is directed' index=True ondelete='restrict' readonly=True required=True string='Property'
  • real_avail Integer
    compute='_compute_real_avail' help='' readonly=True store=True string='Real Avail'
  • reservation_line_ids One2many → pms.reservation.line
    check_pms_properties=True comodel_name='pms.reservation.line' help='They are the lines of the reservation into a reservation,they corresponds to the nights' inverse_name='avail_id' readonly=True string='Reservation Lines'
  • room_type_id Many2one → pms.room.type
    check_pms_properties=True comodel_name='pms.room.type' help='Room type for which availability is indicated' index=True ondelete='cascade' readonly=True required=True string='Room Type'
Public methods (3)
  • get_occupied_child_rooms(self, rooms, checkin, checkout)
    @api.model
  • get_occupied_parent_rooms(self, room, checkin, checkout)
    @api.model
  • get_rooms_not_avail(self, checkin, checkout, room_ids, pms_property_id, current_lines=False)
    @api.model

New fields (5)
  • active Boolean
    default=True help='If unchecked, it will allow you to hide the Availability plan without removing it.' string='Active'
  • name Char
    help='Name of availability plan' required=True string='Availability Plan Name'
  • pms_pricelist_ids One2many → product.pricelist
    check_pms_properties=True comodel_name='product.pricelist' domain="[('is_pms_available', '=', True)]" help='Pricelists of the availability plan ' inverse_name='availability_plan_id' string='Pricelists'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='availability_plan_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='pms_availability_plan_pms_property_rel' string='Properties'
  • rule_ids One2many → pms.availability.plan.rule
    check_pms_properties=True comodel_name='pms.availability.plan.rule' help='Rules in a availability plan' inverse_name='availability_plan_id' string='Availability Rules'
Public methods (3)
  • any_rule_applies(cls, checkin, checkout, item)
    @classmethod
  • open_massive_changes_wizard(self)
  • update_quota(self, pricelist_id, room_type_id, date, pms_property_id)
    @api.model

New fields (16)
  • avail_id Many2one → pms.availability
    check_pms_properties=True comodel_name='pms.availability' compute='_compute_avail_id' index=True ondelete='restrict' readonly=False store=True string='Avail record'
  • availability_plan_id Many2one → pms.availability.plan
    check_pms_properties=True comodel_name='pms.availability.plan' help='The availability plan that include the Availabilty Rule' index=True ondelete='cascade' string='Availability Plan'
  • closed Boolean
    default=False help='Indicate if property is closed or not' string='Closed'
  • closed_arrival Boolean
    default=False help='' string='Closed Arrival'
  • closed_departure Boolean
    default=False help='' string='Closed Departure'
  • date Date
    help='Date for which availability rule applies' string='Date'
  • max_avail Integer
    compute='_compute_max_avail' help='Maximum simultaneous availability on own Booking Engine' readonly=False store=True string='Max. Availability'
  • max_stay Integer
    default=0 help='Maximum stay' string='Max. Stay'
  • max_stay_arrival Integer
    default=0 help='Maximum stay if checkin is today' string='Max. Stay Arrival'
  • min_stay Integer
    default=0 help='Minimum stay' string='Min. Stay'
  • min_stay_arrival Integer
    default=0 help='Minimum stay if checkin is today' string='Min. Stay Arrival'
  • plan_avail Integer
    compute='_compute_plan_avail' store='True'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Properties with access to the element' index=True ondelete='restrict' required=True string='Property'
  • quota Integer
    compute='_compute_quota' help='Generic Quota assigned.' readonly=False store=True string='Quota'
  • real_avail Integer
    related='avail_id.real_avail' store='True' string='Real availability'
  • room_type_id Many2one → pms.room.type
    check_pms_properties=True comodel_name='pms.room.type' help='Room type for which availability rule is applied' index=True ondelete='cascade' required=True string='Room Type'
Public methods (0)

No public methods.

New fields (7)
  • amount Float
    compute='_compute_board_amount' digits='Product Price' help='Price for this Board Service. It corresponds to the sum of his board service lines' store=True string='Amount'
  • board_service_line_ids One2many → pms.board.service.line
    comodel_name='pms.board.service.line' help='Services included in this Board Service' inverse_name='pms_board_service_id' string='Board Service Lines'
  • default_code Char
    help='Unique Board Service identification code per property' required=True string='Board Service Code'
  • name Char
    help='Board Service Name' index=True required=True size=64 string='Board Service Name' translate=True
  • pms_board_service_room_type_ids One2many → pms.board.service.room.type
    comodel_name='pms.board.service.room.type' help='Board Services Room Type corresponding to this Board Service,One board service for several room types' inverse_name='pms_board_service_id' string='Board Services Room Type'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='board_service_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='pms_board_service_pms_property_rel' required=False string='Properties'
  • show_detail_report Boolean
    help='True if you want that board service detail to be shown on the report' string='Show Detail Report'
Public methods (1)
  • get_unique_by_property_code(self, pms_property_id, default_code=None)
    @api.model
    :param pms_property_id: property ID :param default_code: board service code (optional) :return: - recordset of - all the pms.board.service of the pms_property_id if default_code not defined - one or 0 pms.board.service if default_code defined - ValidationError if more than one default_code found by the same pms_property_id

New fields (6)
  • adults Boolean
    default=False help='Apply service to adults' string='Adults'
  • amount Float
    default=<expr> digits='Product Price' help='Price for this Board Service Line/Product' string='Amount'
  • children Boolean
    default=False help='Apply service to children' string='Children'
  • pms_board_service_id Many2one → pms.board.service
    check_pms_properties=True comodel_name='pms.board.service' help='Board Service in which this line is included' index=True ondelete='cascade' required=True string='Board Service'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='pms_board_service_line_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' relation='pms_board_service_line_pms_property_rel' store=True string='Properties'
  • product_id Many2one → product.product
    check_pms_properties=True comodel_name='product.product' help='Product associated with this board service line' index=True required=True string='Product'
Public methods (3)
  • create(self, vals)
    @api.model
  • onchange_product_id(self)
    @api.onchange('product_id')
  • write(self, vals)

New fields (7)
  • amount Float
    compute='_compute_board_amount' digits='Product Price' help='Price for this Board Service. It corresponds to the sum of his board service lines' store=True string='Amount'
  • board_service_line_ids One2many → pms.board.service.room.type.line
    comodel_name='pms.board.service.room.type.line' help='Services included in this Board Service' inverse_name='pms_board_service_room_type_id' required=True string='Board Service Lines'
  • by_default Boolean
    help='Indicates if this board service is applied by default in the room type' string='Apply by Default'
  • pms_board_service_id Many2one → pms.board.service
    check_pms_properties=True comodel_name='pms.board.service' help='Board Service corresponding to this Board Service Room Type' index=True ondelete='cascade' required=True string='Board Service'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Property with access to the element; if not set, all property can access' index=True ondelete='restrict' required=False store=True string='Property'
  • pms_room_type_id Many2one → pms.room.type
    check_pms_properties=True comodel_name='pms.room.type' help='Room Type for which this Board Service is available' index=True ondelete='cascade' required=True string='Room Type'
  • pricelist_ids Many2many → product.pricelist
    comodel_name='product.pricelist' help='Pricelists where this Board Service is available' string='Pricelists'
Public methods (7)
  • constrains_duplicated_board_default(self)
    @api.constrains('by_default')
  • create(self, vals)
    @api.model
  • init(self)
  • name_get(self)
  • open_board_lines_form(self)
  • prepare_board_service_reservation_ids(self, board_service_id)
    @api.model
    Prepare line to price products config
  • write(self, vals)

New fields (6)
  • adults Boolean
    default=False help='Apply service to adults' string='Adults'
  • amount Float
    default=<expr> digits='Product Price' help='Price for this Board Service Room Type Line/Product' string='Amount'
  • children Boolean
    default=False help='Apply service to children' string='Children'
  • pms_board_service_room_type_id Many2one → pms.board.service.room.type
    comodel_name='pms.board.service.room.type' help='Board Service Room Type in which this line is included' index=True ondelete='cascade' required=True string='Board Service Room'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Property with access to the element; if not set, all properties can access' related='pms_board_service_room_type_id.pms_property_id' string='Property'
  • product_id Many2one → product.product
    check_pms_properties=True comodel_name='product.product' domain="[('is_pms_available', '=', True)]" help='Product associated with this board service room type line' index=True readonly=True string='Product'
Public methods (0)

No public methods.

New fields (17)
  • agency_id Many2one → res.partner
    comodel_name='res.partner' domain=[('is_agency', '=', True)] help='Agency that made the reservation' ondelete='restrict' string='Agency'
  • channel_type_id Many2one → pms.sale.channel
    comodel_name='pms.sale.channel' compute='_compute_channel_type_id' domain=[('channel_type', '=', 'direct')] help='Sales Channel through which the reservation was managed' ondelete='restrict' readonly=False store=True string='Direct Sale Channel'
  • created_folio_ids Many2many → pms.folio
    comodel_name='pms.folio' help='Folios already created' string='Folios'
  • discount Float
    default=0 help='Discount that be applied in total price' string='Discount'
  • internal_comment Text
    help='Internal Folio notes for Staff' string='Internal Folio Notes'
  • line_ids One2many → pms.reservation.duplicate
    check_pms_properties=True comodel_name='pms.reservation.duplicate' compute='_compute_line_ids' help='Rooms to create' inverse_name='booking_duplicate_id' readonly=False store=True string='Rooms'
  • partner_id Many2one → res.partner
    check_pms_properties=True comodel_name='res.partner' compute='_compute_partner_id' help='Partner who made the reservation' readonly=False store=True string='Partner'
  • partner_name Char
    compute='_compute_partner_name' help='In whose name is the reservation' readonly=False store=True string='Partner name'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Property to which the folio belongs' related='reference_folio_id.pms_property_id' string='Property'
  • pricelist_id Many2one → product.pricelist
    check_pms_properties=True comodel_name='product.pricelist' compute='_compute_pricelist_id' domain="[('is_pms_available', '=', True)]" help='Pricelist applied in folio' readonly=False store=True string='Pricelist'
  • recompute_prices Boolean
    default=False help='Leave unchecked if you want to respect\n the price of the original reservation regardless\n of what is marked in the rate' string='Recompute Price'
  • reference_folio_id Many2one → pms.folio
    check_pms_properties=True comodel_name='pms.folio' help='Folio to copy data' string='Folio Reference'
  • reservation_type Selection
    compute='_compute_reservation_type' help="The type of the reservation. Can be 'Normal', 'Staff' or 'Out of Service'" readonly=False selection=[('normal', 'Normal'), ('staff', 'Staff'), ('out', 'Out of Service')] store=True string='Type'
  • segmentation_ids Many2many → res.partner.category
    comodel_name='res.partner.category' compute='_compute_segmentation_ids' domain="[('is_used_in_checkin', '=', True)]" help='Partner Tags' ondelete='restrict' readonly=False store=True string='Segmentation'
  • start_date Date
    help='Date from first copy Checkin (reference min checkin folio reservation)' required=True string='From:'
  • total_price_folio Float
    compute='_compute_total_price_folio' help='Total price of folio with taxes' string='Total Price'
  • used_room_ids Many2many → pms.room
    comodel_name='pms.room' compute='_compute_used_room_ids' string='Used Rooms'
Public methods (4)
  • create_and_close(self)
  • create_and_new(self)
  • create_folio(self)
  • view_folios(self)

New fields (16)
  • agency_id Many2one → res.partner
    comodel_name='res.partner' domain=[('is_agency', '=', True)] help='Agency that made the reservation' ondelete='restrict' string='Agency'
  • availability_results One2many → pms.folio.availability.wizard
    check_pms_properties=True comodel_name='pms.folio.availability.wizard' compute='_compute_availability_results' help='Availability Results' inverse_name='booking_engine_id' readonly=False store=True string='Availability Results'
  • can_create_folio Boolean
    compute='_compute_can_create_folio' string='Can create folio'
  • channel_type_id Many2one → pms.sale.channel
    comodel_name='pms.sale.channel' compute='_compute_channel_type_id' domain=[('channel_type', '=', 'direct')] help='Sales Channel through which the reservation was managed' ondelete='restrict' readonly=False required=True store=True string='Direct Sale Channel'
  • discount Float
    default=0 help='Discount that be applied in total price' string='Discount'
  • end_date Date
    help='End date for creation of reservations and folios' required=True string='To:'
  • folio_id Many2one → pms.folio
    check_pms_properties=True comodel_name='pms.folio' help='Folio in which are included new reservations' string='Folio'
  • internal_comment Text
    help='Internal Folio notes for Staff' string='Internal Folio Notes'
  • partner_id Many2one → res.partner
    check_pms_properties=True comodel_name='res.partner' compute='_compute_partner_id' help='Partner who made the reservation' readonly=False store=True string='Partner'
  • partner_name Char
    compute='_compute_partner_name' help='In whose name is the reservation' readonly=False store=True string='Partner name'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' default=<expr> help='Property to which the folio belongs' string='Property'
  • pricelist_id Many2one → product.pricelist
    check_pms_properties=True comodel_name='product.pricelist' compute='_compute_pricelist_id' domain="[('is_pms_available', '=', True)]" help='Pricelist applied in folio' readonly=False store=True string='Pricelist'
  • reservation_type Selection
    default=<expr> help="The type of the reservation. Can be 'Normal', 'Staff' or 'Out of Service'" selection=[('normal', 'Normal'), ('staff', 'Staff'), ('out', 'Out of Service')] string='Type'
  • segmentation_ids Many2many → res.partner.category
    comodel_name='res.partner.category' domain="[('is_used_in_checkin', '=', True)]" help='Partner Tags' ondelete='restrict' string='Segmentation'
  • start_date Date
    help='Start date for creation of reservations and folios' required=True string='From:'
  • total_price_folio Float
    compute='_compute_total_price_folio' help='Total price of folio with taxes' string='Total Price'
Public methods (1)
  • create_folio(self)

New fields (11)
  • active Boolean
    default=True help='Determines if cancelation rule is active' string='Active'
  • apply_on_late Selection
    default='first' help='Days on which the cancelation rule applies when the reason is late arrival. Can be first, all days or specify the days.' selection=[('first', 'First Day'), ('all', 'All Days'), ('days', 'Specify days')] string='Late apply on'
  • apply_on_noshow Selection
    default='all' help='Days on which the cancelation rule applies when the reason is no show. Can be first, all days or specify the days.' selection=[('first', 'First Day'), ('all', 'All Days'), ('days', 'Specify days')] string='No Show apply on'
  • days_intime Integer
    help='Maximum number of days for free cancellation before Checkin' string='Days Late'
  • days_late Integer
    default='2' help='Is number of days late in the cancelation rule if the value of the apply_on_late field is specify days.' string='Late first days'
  • days_noshow Integer
    default='2' help='Is number of days no show in the cancelation rule if the value of the apply_on_show field is specify days.' string='NoShow first days'
  • name Char
    required=True string='Cancelation Rule' translate=True
  • penalty_late Integer
    default='100' help='Percentage of the total price that partner has to pay in case of late arrival' string='% Penalty Late'
  • penalty_noshow Integer
    default='100' help='Percentage of the total price that partner has to pay in case of no show' string='% Penalty No Show'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='pms_cancelation_rule_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='pms_cancelation_rule_pms_property_rel' required=False string='Properties'
  • pricelist_ids One2many → product.pricelist
    check_pms_properties=True comodel_name='product.pricelist' domain="[('is_pms_available', '=', True)]" help='Pricelist that use this rule' inverse_name='cancelation_rule_id' string='Pricelist'
Public methods (0)

No public methods.

New fields (37)
  • arrival Datetime
    help='Checkin partner arrival date and time' args: 'Enter'
  • birthdate_date Date
    compute='_compute_birth_date' help='host birthdate' readonly=False store=True string='Birthdate'
  • checkin Date
    depends=['reservation_id.checkin'] help='Checkin date' related='reservation_id.checkin' store=True string='Checkin'
  • checkout Date
    depends=['reservation_id.checkout'] help='Checkout date' related='reservation_id.checkout' store=True string='Checkout'
  • departure Datetime
    help='Checkin partner departure date and time' string='Exit'
  • document_country_id Many2one → res.country
    comodel_name='res.country' compute='_compute_document_country_id' help='Country of the document' readonly=False store=True string='Document Country'
  • document_expedition_date Date
    compute='_compute_document_expedition_date' help='Date on which document_type was issued' readonly=False store=True string='Expedition Date'
  • document_id Many2one → res.partner.id_number
    comodel_name='res.partner.id_number' compute='_compute_document_id' help='Technical field' index=True ondelete='restrict' readonly=False store=True string='Document'
  • document_number Char
    compute='_compute_document_number' help='Host document number' readonly=False store=True string='Document Number'
  • document_type Many2one → res.partner.id_category
    comodel_name='res.partner.id_category' compute='_compute_document_type' domain="['|', ('country_ids', '=', False), ('country_ids', 'in', document_country_id)]" help='Select a valid document type' index=True readonly=False store=True string='Document Type'
  • email Char
    compute='_compute_email' help='Checkin Partner Email' readonly=False store=True string='E-mail'
  • firstname Char
    compute='_compute_firstname' help='host firstname' readonly=False store=True string='First Name'
  • folio_id Many2one → pms.folio
    comodel_name='pms.folio' help='Folio to which reservation of checkin partner belongs' index=True related='reservation_id.folio_id' store=True string='Folio'
  • gender Selection
    compute='_compute_gender' help='host gender' readonly=False selection=[('male', 'Male'), ('female', 'Female'), ('other', 'Other')] store=True string='Gender'
  • identifier Char
    default=<expr> help='Checkin Partner Id' index=True readonly=True string='Identifier'
  • image_128 Image
    help='Checkin Partner Image, it corresponds with Partner Image associated' related='partner_id.image_128' string='Image'
  • lastname Char
    compute='_compute_lastname' help='host lastname' readonly=False store=True string='Last Name'
  • lastname2 Char
    compute='_compute_lastname2' help='host second lastname' readonly=False store=True string='Second Last Name'
  • mobile Char
    compute='_compute_mobile' help='Checkin Partner Mobile' readonly=False store=True string='Mobile'
  • name Char
    help='Checkin partner name' related='partner_id.name' string='Name'
  • nationality_id Many2one → res.country
    comodel_name='res.country' compute='_compute_nationality_id' help='host nationality' index=True readonly=False store=True string='Nationality'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_partner_id' domain="[('is_company', '=', False)]" help='Partner associated with checkin partner' index=True readonly=False store=True string='Partner'
  • partner_incongruences Char
    compute='_compute_partner_incongruences' help='indicates that some partner fields on the checkin do not correspond to that of the associated partner' string='partner_incongruences'
  • phone Char
    compute='_compute_phone' help='Checkin Partner Phone' readonly=False store=True string='Phone'
  • pms_property_id Many2one → pms.property
    comodel_name='pms.property' help='Property to which the folio associated belongs' index=True readonly=True related='reservation_id.pms_property_id' store=True string='Property'
  • possible_existing_customer_ids One2many → res.partner
    comodel_name='res.partner' compute='_compute_possible_existing_customer_ids' inverse_name='checkin_partner_possible_customer_id' string='Possible existing customer'
  • reservation_id Many2one → pms.reservation
    comodel_name='pms.reservation' help='Reservation to which checkin partners belong' index=True string='Reservation'
  • residence_city Char
    compute='_compute_residence_city' help="City of the guest's residence" readonly=False store=True string='City'
  • residence_country_id Many2one → res.country
    comodel_name='res.country' compute='_compute_residence_country_id' help="Country of the guest's residence" index=True readonly=False store=True string='Country of residence'
  • residence_state_id Many2one → res.country.state
    comodel_name='res.country.state' compute='_compute_residence_state_id' help="State of the guest's residence" index=True readonly=False store=True string='State of residence'
  • residence_street Char
    compute='_compute_residence_street' help="Street of the guest's residence" readonly=False store=True string='Street'
  • residence_street2 Char
    compute='_compute_residence_street2' help="Second street of the guest's residence" readonly=False store=True string='Street2'
  • residence_zip Char
    change_default=True compute='_compute_residence_zip' help="Zip of the guest's residence" readonly=False store=True string='Zip'
  • segmentation_ids Many2many
    domain="[('is_used_in_checkin', '=', True)]" help='Segmentation tags to classify checkin partners' readonly=True related='reservation_id.segmentation_ids' string='Segmentation'
  • sign_on Datetime
    compute='_compute_sign_on' help='Date and time of the signature' string='Sign on'
  • signature Image
    help='Signature of the guest' string='Signature'
  • state Selection
    compute='_compute_state' help='Status of the checkin partner regarding the reservation' readonly=True selection=[('dummy', 'Unkown Guest'), ('draft', 'Incomplete data'), ('precheckin', 'Pending arrival'), ('onboard', 'On Board'), ('done', 'Out'), ('cancel', 'Cancelled')] store=True string='Status'
Public methods (15)
  • action_done(self)
  • action_on_board(self)
  • action_undo_onboard(self)
  • calculate_doc_type_expedition_date_from_validity_date(self, doc_type, doc_date, birthdate)
    @api.model
  • check_document_number(self)
    @api.constrains('document_number')
  • create(self, vals)
    @api.model
  • get_document_vals(self)
  • import_room_list_json(self, roomlist_json)
    @api.model
  • open_partner(self)
    Utility method used to add an "View Customer" button in checkin partner views
  • open_wizard_several_partners(self)
  • send_exit_email(self, template_id)
  • send_portal_invitation_email(self, invitation_firstname=None, email=None)
  • unlink(self)
  • validate_id_number(self)
    @api.constrains('document_number', 'document_type')
    Validate the given ID number The method raises an odoo.exceptions.ValidationError if the eval of python validation code fails
  • write(self, vals)

New fields (70)
  • administrative_user_id Many2one → res.users
    comodel_name='res.users' compute='_compute_administrative_user_id' help='The administrative manager in the folio' index=True ondelete='restrict' readonly=False store=True string='Administrative Manager' tracking=True
  • agency_id Many2one → res.partner
    check_pms_properties=True comodel_name='res.partner' domain=[('is_agency', '=', True)] help='Only allowed if the field of partner is_agency is True' index=True ondelete='restrict' string='Agency'
  • amount_tax Monetary
    compute='_compute_amount_all' help='Price with taxes on a folio' readonly=True store=True string='Taxes'
  • amount_total Monetary
    compute='_compute_amount_all' help='Total amount to be paid' readonly=True store=True string='Total' tracking=True
  • amount_untaxed Monetary
    compute='_compute_amount_all' help='The price without taxes on a folio' readonly=True store=True string='Untaxed Amount' tracking=True
  • analytic_account_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' copy=False help='The analytic account related to a folio.' index=True readonly=True states={'draft': [('readonly', False)], 'sent': [('readonly', False)]} string='Analytic Account'
  • cancelled_reason Text
    help='Indicates cause of cancelled' string='Cause of cancelled'
  • checkin_partner_ids One2many → pms.checkin.partner
    comodel_name='pms.checkin.partner' help='The checkin partners on a folio' inverse_name='folio_id' string='Checkin Partners'
  • closure_reason_id Many2one → room.closure.reason
    check_pms_properties=True comodel_name='room.closure.reason' help='The closure reason for a closure room' index=True string='Closure Reason'
  • commission Float
    compute='_compute_commission' readonly=True store=True string='Commission'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' help='The company for folio' index=True store=True string='Company'
  • confirmation_date Datetime
    copy=False help='Date on which the folio is confirmed.' index=True readonly=True string='Confirmation Date'
  • count_rooms_pending_arrival Integer
    compute='_compute_count_rooms_pending_arrival' help='The number of rooms left to occupy.' store=True string='Pending Arrival'
  • credit_card_details Text
    help='Details of partner credit card' string='Credit Card Details'
  • currency_id Many2one
    help='The currency of the property location' index=True ondelete='restrict' readonly=True related='pricelist_id.currency_id' required=True string='Currency'
  • date_order Datetime
    copy=False default=fields.Datetime.now help='Date on which folio is sold' index=True readonly=True required=True states={'draft': [('readonly', False)], 'sent': [('readonly', False)]} string='Order Date'
  • days_to_checkin Integer
    compute='_compute_days_to_checkin' help='Technical field to facilitate\n filtering by dates related to checkin' search='_search_days_to_checkin' string='Days to Checkin'
  • days_to_checkout Integer
    compute='_compute_days_to_checkout' help='Technical field to facilitate\n filtering by dates related to checkout' search='_search_days_to_checkout' string='Days to Checkout'
  • email Char
    compute='_compute_email' help='Customer E-mail' readonly=False store=True string='E-mail'
  • external_reference Char
    compute='_compute_external_reference' help='Reference of this folio in an external system' readonly=False store=True string='External Reference'
  • first_checkin Date
    compute='_compute_first_checkin' readonly=False store=True string='First Folio Checkin'
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' help='The fiscal position depends on the location of the client' index=True string='Fiscal Position'
  • force_nothing_to_invoice Boolean
    compute='_compute_force_nothing_to_invoice' copy=False help='When you set this field, the folio will be considered as nothin to invoice, even when there may be ordered quantities pending to invoice.' readonly=False store=True string='Force no invoice'
  • internal_comment Text
    help='Internal Folio notes for Staff' string='Internal Folio Notes'
  • invoice_count Integer
    compute='_compute_get_invoiced' help='The amount of invoices in out invoice and out refund status' readonly=True string='Invoice Count'
  • invoice_status Selection
    compute='_compute_get_invoice_status' compute_sudo=True default='no' help='Invoice Status; it can be: invoiced, to invoice, to confirm, no' readonly=True selection=[('invoiced', 'Fully Invoiced'), ('to_invoice', 'To Invoice'), ('to_confirm', 'To Confirm'), ('no', 'Nothing to Invoice')] store=True string='Invoice Status'
  • invoice_to_agency Boolean
    compute='_compute_invoice_to_agengy' help='Indicates if agency invoices partner\n (it only affects those nights/services sold through the agency)' readonly=False store=True string='Invoice Agency'
  • invoices_paid Monetary
    compute='_compute_amount' help='Amount of invoices paid' store=True string='Paid Out' tracking=True
  • lang Selection
    compute='_compute_lang' help='Language used for the folio' readonly=False selection=<expr> store=True string='Language'
  • last_checkout Date
    compute='_compute_last_checkout' readonly=False store=True string='Last Folio Checkout'
  • manager_user_id Many2one → res.users
    comodel_name='res.users' compute='_compute_manager_user_id' help='The main manager in the folio' index=True ondelete='restrict' readonly=False store=True string='Main Manager' tracking=True
  • mobile Char
    compute='_compute_mobile' help='Customer Mobile' readonly=False store=True string='Mobile'
  • move_ids Many2many → account.move
    comodel_name='account.move' compute='_compute_get_invoiced' copy=False help='Folio invoices related to account move.' readonly=True search='_search_invoice_ids' string='Invoices'
  • name Char
    default=<expr> help='Folio name. When creating a folio the name is automatically formed with a sequence' index=True readonly=True string='Folio Number'
  • note Text
    default=<expr> help='Folio billing terms and conditions' string='Terms and conditions'
  • number_of_cancelled_rooms Integer
    compute='_compute_number_of_cancelled_rooms' help='Number of cancelled rooms in folio.' store='True' string='Number of Cancelled Rooms'
  • number_of_rooms Integer
    compute='_compute_number_of_rooms' help='Number of rooms in folio. Canceled rooms do not count.' store='True' string='Number of Rooms'
  • number_of_services Integer
    compute='_compute_number_of_services' help='Number of services in the folio' store='True' string='Number of Services'
  • out_service_description Text
    help='Indicates the cause of out of service' string='Cause of out of service'
  • partner_id Many2one → res.partner
    check_pms_properties=True comodel_name='res.partner' compute='_compute_partner_id' help='The folio customer' index=True ondelete='restrict' readonly=False store=True string='Partner' tracking=True
  • partner_incongruences Char
    compute='_compute_partner_incongruences' help='indicates that some partner fields on the folio do not correspond to that of the associated partner' string='partner_incongruences'
  • partner_internal_comment Text
    help='Internal notes of the partner' readonly=False related='partner_id.comment' store=True string='Internal Partner Notes'
  • partner_invoice_ids Many2many → res.partner
    check_pms_properties=True column1='folio' column2='partner' comodel_name='res.partner' compute='_compute_partner_invoice_ids' help='Invoice address for current group.' readonly=False relation='pms_folio_partner_rel' store=True string='Billing addresses'
  • partner_name Char
    compute='_compute_partner_name' help='In the name of whom the reservation is made' readonly=False store=True string='Customer Name'
  • payment_ids Many2many → account.payment
    column1='folio_id' column2='payment_id' comodel_name='account.payment' copy=False help='Payments' readonly=True relation='account_payment_folio_rel' string='Bank Payments'
  • payment_multi Boolean
    compute='_compute_amount' help='Technical field for manage payments with multiple folios assigned' readonly=True store=True string='Folio paid with payments assigned to other folios'
  • payment_state Selection
    compute='_compute_amount' copy=False help='The state of the payment' readonly=True selection=[('not_paid', 'Not Paid'), ('paid', 'Paid'), ('partial', 'Partially Paid'), ('overpayment', 'Overpayment'), ('nothing_to_pay', 'Nothing to pay')] store=True string='Payment Status' tracking=True
  • payment_term_id Many2one → account.payment.term
    comodel_name='account.payment.term' compute='_compute_payment_term_id' help='Payment terms for current folio.' index=True ondelete='restrict' readonly=False store=True string='Payment Terms'
  • pending_amount Monetary
    compute='_compute_amount' help='The amount that remains to be paid' store=True string='Pending Amount'
  • pending_checkin_data Integer
    compute='_compute_pending_checkin_data' store=True string='Checkin Data'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='The property for folios' index=True required=True string='Property'
  • possible_existing_customer_ids One2many → res.partner
    comodel_name='res.partner' compute='_compute_possible_existing_customer_ids' inverse_name='folio_possible_customer_id' string='Possible existing customer'
  • prepaid_warning_days Integer
    help='Margin in days to create a notice if a payment advance has not been recorded' string='Prepaid Warning Days'
  • pricelist_id Many2one → product.pricelist
    check_pms_properties=True comodel_name='product.pricelist' compute='_compute_pricelist_id' help='Pricelist for current folio.' index=True ondelete='restrict' readonly=False store=True string='Pricelist'
  • ratio_checkin_data Integer
    compute='_compute_ratio_checkin_data' help='Field that stores the number of checkin partners pending to checkin (with the state = draft)' string='Pending Checkin Data'
  • reference Char
    copy=False help='The payment communication of this sale order.' string='Payment Ref.'
  • reservation_ids One2many → pms.reservation
    check_company=True check_pms_properties=True comodel_name='pms.reservation' help='Room reservation detail' inverse_name='folio_id' readonly=False states={'done': [('readonly', True)]} string='Reservations'
  • reservation_type Selection
    default=<expr> help="The type of the reservation. Can be 'Normal', 'Staff' or 'Out of Service'" selection=[('normal', 'Normal'), ('staff', 'Staff'), ('out', 'Out of Service')] string='Type'
  • revenue_user_id Many2one → res.users
    comodel_name='res.users' compute='_compute_revenue_user_id' help='The revenue manager in the folio' index=True ondelete='restrict' readonly=False store=True string='Revenue Manager' tracking=True
  • sale_channel_ids Many2many → pms.sale.channel
    comodel_name='pms.sale.channel' compute='_compute_sale_channel_ids' help='Sale Channels through which reservations were managed' store=True string='Sale Channels'
  • sale_channel_origin_id Many2one → pms.sale.channel
    comodel_name='pms.sale.channel' help='Sale Channel through which folio was created, the original' index=True string='Sale Channel Origin'
  • sale_line_ids One2many → folio.sale.line
    comodel_name='folio.sale.line' compute='_compute_sale_line_ids' compute_sudo=True help='Sale lines in folio. It correspond with reservation nights' inverse_name='folio_id' store='True' string='Sale lines'
  • segmentation_ids Many2many → res.partner.category
    comodel_name='res.partner.category' domain="[('is_used_in_checkin', '=', True)]" help='Segmentation tags to classify folios' ondelete='restrict' string='Segmentation'
  • sequence Integer
    default=10 help='Sequence used to form the name of the folio' string='Sequence'
  • service_ids One2many → pms.service
    check_company=True check_pms_properties=True comodel_name='pms.service' help='Services detail provide to customer and it will include in main Invoice.' inverse_name='folio_id' readonly=False states={'done': [('readonly', True)]} string='Service'
  • state Selection
    copy=False default='draft' help='Folio status; it can be Quotation, Quotation Sent, Confirmed, Locked or Cancelled' index=True readonly=True selection=[('draft', 'Quotation'), ('sent', 'Quotation Sent'), ('confirm', 'Confirmed'), ('done', 'Locked'), ('cancel', 'Cancelled')] string='Status' tracking=True
  • statement_line_ids Many2many → account.bank.statement.line
    column1='folio_id' column2='account_journal_id' comodel_name='account.bank.statement.line' copy=False help='Statement lines' readonly=True relation='account_bank_statement_folio_rel' string='Cash Payments'
  • transaction_ids Many2many → payment.transaction
    column1='folio_id' column2='payment_transaction_id' comodel_name='payment.transaction' copy=False help='Payments made through payment acquirer' readonly=True relation='payment_transaction_folio_rel' string='Transactions'
  • untaxed_amount_to_invoice Monetary
    compute='_compute_untaxed_amount_to_invoice' help='The amount to invoice' readonly=True store=True string='Amount to invoice'
  • user_id Many2one → res.users
    comodel_name='res.users' compute='_compute_user_id' help='The reception manager in the folio' index=True ondelete='restrict' readonly=False store=True string='Reception Manager' tracking=True
Public methods (26)
  • action_cancel(self)
  • action_checks(self)
  • action_confirm(self)
  • action_done(self)
  • action_open_cancelation_mail_composer(self)
  • action_open_confirmation_mail_composer(self)
  • action_open_exit_mail_composer(self)
  • action_open_mail_composer(self, ctx, res_id=False, res_ids=False)
  • action_open_modification_mail_composer(self)
  • action_pay(self)
  • action_to_arrive(self)
  • action_view_invoice(self)
  • concat_discounts(self, discount, cancel_discount)
    @api.model
  • create(self, vals)
    @api.model
  • do_payment(self, journal, receivable_account, user, amount, folio, reservations=False, services=False, partner=False, date=False, pay_type=False, ref=False)
    create folio payment type: set cash to use statement or bank to use account.payment, by default, use the journal type
  • do_refund(self, journal, receivable_account, user, amount, folio, reservations=False, services=False, partner=False, date=False, pay_type=False, ref=False)
    create folio refund type: set cash to use statement or bank to use account.payment, by default, use the journal type
  • folio_multi_changes(self)
  • get_invoice_vals_list(self, final=False, lines_to_invoice=False, partner_invoice_id=False)
  • get_reservations_to_update_channel(self, vals)
  • get_services_to_update_channel(self, vals)
  • name_get(self)
  • open_moves_folio(self)
  • open_partner(self)
    Utility method used to add an "View Customer" button in folio views
  • open_wizard_several_partners(self)
  • preview_folio(self)
  • write(self, vals)

New fields (11)
  • board_service_room_id Many2one → pms.board.service.room.type
    check_pms_properties=True comodel_name='pms.board.service.room.type' domain="\n [\n ('pms_room_type_id','=',room_type_id),\n ('pms_property_id','=',pms_property_id)\n ]\n " help='Board Service included in the room' string='Board Service'
  • booking_engine_id Many2one → pms.booking.engine
    comodel_name='pms.booking.engine' string='Folio Wizard ID'
  • checkin Date
    help='Date Reservation starts ' required=True string='From:'
  • checkout Date
    help='Date Reservation ends' required=True string='To:'
  • num_rooms_available Integer
    compute='_compute_num_rooms_available' help='Number of rooms that are available' store=True string='Available rooms'
  • num_rooms_selected Many2one → pms.num.rooms.selection
    comodel_name='pms.num.rooms.selection' compute='_compute_num_rooms_selected' domain="[('value', '<=', num_rooms_available), ('room_type_id', '=', room_type_id)]" readonly=False store=True string='Selected rooms'
  • pms_property_id Many2one
    help='Propertiy with access to the element;' related='booking_engine_id.pms_property_id' string='Property'
  • price_per_room Float
    compute='_compute_price_per_room' help='Price per room in folio' string='Price per room'
  • price_total Float
    compute='_compute_price_total' help='The total price in the folio' string='Total price'
  • room_type_id Many2one → pms.room.type
    check_pms_properties=True comodel_name='pms.room.type' help='Room Type reserved' string='Room Type'
  • value_num_rooms_selected Integer
    compute='_compute_value_num_rooms_selected' readonly=False store=True string='Number of Rooms Selected'
Public methods (0)

No public methods.

New fields (48)
  • allowed_board_services Many2many → product.product
    comodel_name='product.product' compute='_compute_allowed_board_services' readonly=False store=True string='Allowed services'
  • allowed_pricelist_ids One2many → product.pricelist
    comodel_name='product.pricelist' compute='_compute_allowed_pricelist_ids' string='Allowed pricelists'
  • apply_closed Boolean
    default=False string='Apply changes to Closed'
  • apply_closed_arrival Boolean
    default=False string='Apply changes to Closed Arrival'
  • apply_closed_departure Boolean
    default=False string='Apply changes to Closed Departure'
  • apply_max_avail Boolean
    default=False string='Apply changes to Max. Avail.'
  • apply_max_stay Boolean
    default=False string='Apply changes to Max. Stay'
  • apply_max_stay_arrival Boolean
    default=False string='Apply changes to Max. Stay Arrival'
  • apply_min_stay Boolean
    default=False string='Apply changes to Min. Stay'
  • apply_min_stay_arrival Boolean
    default=False string='Apply changes to Min. Stay Arrival'
  • apply_on_all_week Boolean
    default=True string='Apply Availability Rule for the whole week'
  • apply_on_friday Boolean
    default=False string='Apply Availability Rule on fridays'
  • apply_on_monday Boolean
    default=False string='Apply Availability Rule on mondays'
  • apply_on_saturday Boolean
    default=False string='Apply Availability Rule on saturdays'
  • apply_on_sunday Boolean
    default=False string='Apply Availability Rule on sundays'
  • apply_on_thursday Boolean
    default=False string='Apply Availability Rule on thursdays'
  • apply_on_tuesday Boolean
    default=False string='Apply Availability Rule on tuesdays'
  • apply_on_wednesday Boolean
    default=False string='Apply Availability Rule on wednesdays'
  • apply_pricelists_on Selection
    default='room_types' selection=[('room_types', 'Room Types'), ('board_services', 'Board Services'), ('service', 'Service')] string='Apply pricelists on'
  • apply_quota Boolean
    default=False string='Apply changes to Quota'
  • avail_readonly Boolean
    default=<expr> string='Avialability Readonly'
  • availability_plan_ids Many2many → pms.availability.plan
    check_pms_properties=True comodel_name='pms.availability.plan' string='Availability Plan to apply massive changes'
  • board_service Many2one → product.product
    check_pms_properties=True comodel_name='product.product' domain="[('id', 'in',allowed_board_services)]" string='Board service'
  • board_service_room_type_ids Many2many → pms.board.service.room.type
    check_pms_properties=True comodel_name='pms.board.service.room.type' compute='_compute_board_service_room_type_ids' readonly=False store=True string="Room type's board services"
  • closed Boolean
    default=False string='Closed'
  • closed_arrival Boolean
    default=False string='Closed Arrival'
  • closed_departure Boolean
    default=False string='Closed Departure'
  • date_types Selection
    default='consumption_dates' selection=[('sale_dates', 'Sale Dates'), ('consumption_dates', 'Consumption Dates')] string='Date types'
  • end_date Date
    required=True string='To'
  • massive_changes_on Selection
    default=<expr> required=True selection=[('pricelist', 'Pricelist'), ('availability_plan', 'Availability Plan')] string='On'
  • max_avail Integer
    default=-1 help='Maximum simultaneous availability on own Booking Engine.' string='Max. Availability'
  • max_stay Integer
    default=0 string='Max. Stay'
  • max_stay_arrival Integer
    default=0 string='Max. Stay Arrival'
  • min_quantity Float
    string='Min. Quantity'
  • min_stay Integer
    default=0 string='Min. Stay'
  • min_stay_arrival Integer
    default=0 string='Min. Stay Arrival'
  • num_pricelist_items_to_overwrite Integer
    compute='_compute_num_pricelist_items_to_overwrite' readonly=True store=False string='Pricelist items to overwrite on massive changes'
  • num_rules_to_overwrite Integer
    compute='_compute_num_rules_to_overwrite' readonly=True store=False string='Rules to overwrite on massive changes'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True comodel_name='pms.property' default=<expr> required=True string='Property'
  • price Float
    string='Price'
  • pricelist_ids Many2many → product.pricelist
    check_pms_properties=True comodel_name='product.pricelist' string='Pricelist to apply massive changes'
  • pricelist_items_to_overwrite One2many → product.pricelist.item
    comodel_name='product.pricelist.item' compute='_compute_pricelist_items_to_overwrite' readonly=True store=False string='Pricelist Items to Override'
  • pricelist_readonly Boolean
    default=<expr> string='Pricelist Readonly'
  • quota Integer
    default=-1 help='Generic Quota assigned.' string='Quota'
  • room_type_ids Many2many → pms.room.type
    check_pms_properties=True comodel_name='pms.room.type' compute='_compute_room_type_ids' readonly=False store=True string='Room Type'
  • rules_to_overwrite One2many → pms.availability.plan.rule
    comodel_name='pms.availability.plan.rule' compute='_compute_rules_to_overwrite' readonly=True store=False string='Rule to Overwrite'
  • service Many2one → product.product
    check_pms_properties=True comodel_name='product.product' compute='_compute_service' readonly=False store=True string='Service'
  • start_date Date
    required=True string='From'
Public methods (8)
  • apply_massive_changes(self)
  • continue_massive_changes(self)
  • create_availability_plans_rules(self, room_types, availability_plan_ids, min_stay, apply_min_stay, min_stay_arrival, apply_min_stay_arrival, max_stay, apply_max_stay, max_stay_arrival, apply_max_stay_arrival, quota, apply_quota, max_avail, apply_max_avail, closed, apply_closed, closed_arrival, apply_closed_arrival, closed_departure, apply_closed_departure, date, rules_to_overwrite, pms_property)
    @api.model
  • create_pricelists_items_board_services(self, board_service_room_type_ids, pricelist_ids, board_service, price, min_quantity, pms_property, date_types, date)
    @api.model
  • create_pricelists_items_room_types(self, room_types, pricelist_ids, price, min_quantity, pms_property, date, date_types)
    @api.model
  • generate_dates_vals(self, date_types, vals, date)
    @api.model
  • generate_product_ids_to_filter(self, apply_pricelists_on, room_type_ids, board_service_room_type_ids, board_service, service)
    @api.model
  • save_and_close(self)

New fields (3)
  • booking_engine_id One2many → pms.folio.availability.wizard
    comodel_name='pms.folio.availability.wizard' inverse_name='num_rooms_selected'
  • room_type_id Char
  • value Integer
Public methods (0)

No public methods.

New fields (37)
  • availability Integer
    compute='_compute_availability' help='allows you to send different parameters in the context (checkin(required), checkout(required), room_type_id, ubication_id, capacity,amenity_ids and / or pricelist_id) check the availability for the hotel' string='Number of rooms available'
  • avoid_simplified_max_amount_downpayment Boolean
    default=True help='Avoid simplified invoice max amount downpayment' string='Downpayment Invoive without limit amount'
  • block_create_past_reservations Boolean
    default=False help='Block the creation of reservations in the past' string='Block Create Past Reservations'
  • cardex_warning Text
    default="Time to access rooms: 14: 00h. Departure time: 12: 00h. If the accommodation is not left at that time, the establishment will charge a day's stay according to current rate that day" help="Notice under the signature on the traveler's ticket." string='Warning in Cardex'
  • checkin_sequence_id Many2one → ir.sequence
    check_company=True comodel_name='ir.sequence' copy=False help='Field used to create the name of the checkin partner' index=True string='Checkin Sequence'
  • child_ids One2many → pms.property
    comodel_name='pms.property' inverse_name='parent_id' string='Child Properties'
  • company_id Many2one → res.company
    comodel_name='res.company' help='The company that owns or operates this property.' index=True required=True string='Company'
  • default_arrival_hour Char
    default='14:00' help='HH:mm Format' string='Arrival Hour'
  • default_departure_hour Char
    default='12:00' help='HH:mm Format' string='Departure Hour'
  • default_invoicing_policy Selection
    default='manual' selection=[('manual', 'Manual'), ('checkout', 'Checkout'), ('month_day', 'Month Day Invoice')] string='Default Invoicing Policy'
  • default_pricelist_id Many2one → product.pricelist
    comodel_name='product.pricelist' default=<expr> domain="[('is_pms_available', '=', True)]" help='The default pricelist used in this property.' index=True required=True string='Product Pricelist'
  • folio_sequence_id Many2one → ir.sequence
    check_company=True comodel_name='ir.sequence' copy=False help='The sequence that formed the name of the folio.' index=True string='Folio Sequence'
  • free_room_ids One2many → pms.room
    comodel_name='pms.room' compute='_compute_free_room_ids' help='allows you to send different parameters in the context (checkin(required), checkout(required), room_type_id, ubication_id, capacity, amenity_ids and / or pricelist_id) and return rooms available' string='Rooms available'
  • invoicing_month_day Integer
    help='The day of the month to invoice' string='Invoicing Month Day'
  • is_canceled_auto_mail Boolean
    string='Auto Send Cancellation Mail'
  • is_confirmed_auto_mail Boolean
    string='Auto Send Confirmation Mail'
  • is_exit_auto_mail Boolean
    string='Auto Send Exit Mail'
  • is_modified_auto_mail Boolean
    string='Auto Send Modification Mail'
  • journal_normal_invoice_id Many2one → account.journal
    check_company=True check_pms_properties=True comodel_name='account.journal' domain=[('type', '=', 'sale'), ('is_simplified_invoice', '=', False)] help='Journal used to create the normal invoice' string='Normal Invoice Journal'
  • journal_simplified_invoice_id Many2one → account.journal
    check_company=True check_pms_properties=True comodel_name='account.journal' domain=[('type', '=', 'sale')] help='Journal used to create the simplified invoice' string='Simplified Invoice Journal'
  • logo Binary
    default=get_default_logo() string='Image in checkin'
  • mail_information Html
    help='Additional information of the mail' string='Mail Information'
  • margin_days_autoinvoice Integer
    help='Days from Checkout to generate the invoice' string='Margin Days'
  • max_amount_simplified_invoice Float
    default=400.0 help='Maximum amount to create the simplified invoice' string='Max Amount Simplified Invoice'
  • member_ids One2many → pms.team.member
    comodel_name='pms.team.member' copy=False inverse_name='pms_property_id' string='Team Members'
  • parent_id Many2one → pms.property
    comodel_name='pms.property' index=True string='Parent Property'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' help='Current property' index=True ondelete='restrict' required=True string='Property'
  • pms_property_code Char
    help='Short name property' string='Property Code'
  • privacy_policy Html
    help='Mail privacy policy ' string='Privacy Policy'
  • property_canceled_template Many2one → mail.template
    comodel_name='mail.template' help='Cancellation email template' string='Cancellation Email'
  • property_confirmed_template Many2one → mail.template
    comodel_name='mail.template' help='Confirmation email template' string='Confirmation Email'
  • property_exit_template Many2one → mail.template
    comodel_name='mail.template' string='Exit Email'
  • property_modified_template Many2one → mail.template
    comodel_name='mail.template' help='Modification email template' string='Modification Email'
  • room_ids One2many → pms.room
    comodel_name='pms.room' help='Rooms that a property has.' inverse_name='pms_property_id' string='Rooms'
  • tz Selection
    default=<expr> help='This field is used to determine de timezone of the property.' required=True selection=_tz_get string='Timezone'
  • user_id Many2one → res.users
    comodel_name='res.users' copy=False ondelete='restrict' string='Team Leader' tracking=True
  • user_ids Many2many → res.users
    column1='pms_property_id' column2='user_id' comodel_name='res.users' help='Field related to res.users. Allowed users on the property' relation='pms_property_users_rel' string='Accepted Users'
Public methods (10)
  • autoinvoice_folio(self, folio)
  • autoinvoicing(self, offset=0, with_delay=False, autocommit=False)
    @api.model
    This method is used to invoicing automatically the folios and validate the draft invoices created by the folios
  • autovalidate_folio_invoice(self, invoice)
  • clean_date_on_past_draft_invoices(self, date_reference)
    @api.model
    This method is used to clean the date on past draft invoices
  • create(self, vals)
    @api.model
  • daily_closing(self, pms_property_ids, room_type_ids=False, availability_plan_ids=False)
    @api.model
    This method is used to close the daily availability of rooms
  • date_property_timezone(self, dt)
  • get_real_free_rooms(self, checkin, checkout, current_lines=False)
  • name_get(self)
  • splitted_availability(self, checkin, checkout, pms_property_id, room_type_id=False, current_lines=False, pricelist=False, real_avail=False)
    @api.model

New fields (92)
  • adults Integer
    compute='_compute_adults' help='List of adults there in guest list' readonly=False store=True string='Adults' tracking=True
  • agency_id Many2one
    depends=['folio_id.agency_id'] help='Agency that made the reservation' index=True readonly=False related='folio_id.agency_id' store=True string='Agency' tracking=True
  • allowed_cancel Boolean
    compute='_compute_allowed_cancel' help="Technical field, Indicates that reservation can be cancelled,that happened when state is 'cancel', 'done', or 'departure_delayed'" search='_search_allowed_cancel' string='Allowed cancel'
  • allowed_checkin Boolean
    compute='_compute_allowed_checkin' help="Technical field, Indicates if there isn't a checkin_partner dataOnly can be true if checkin is today or was in the past" search='_search_allowed_checkin' string='Allowed checkin'
  • allowed_checkout Boolean
    compute='_compute_allowed_checkout' help="Technical field, Indicates that reservation is ready for checkoutonly can be true if reservation state is 'onboard' or departure_delayedand checkout is today or will be in the future" search='_search_allowed_checkout' string='Allowed checkout'
  • allowed_room_ids Many2many → pms.room
    comodel_name='pms.room' compute='_compute_allowed_room_ids' help='It contains all available rooms for this reservation' string='Allowed Rooms'
  • analytic_tag_ids Many2many → account.analytic.tag
    column1='reservation_id' column2='account_analytic_tag_id' comodel_name='account.analytic.tag' domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" relation='pms_reservation_account_analytic_tag' string='Analytic Tags'
  • arrival_hour Char
    compute='_compute_arrival_hour' help='Arrival Hour (HH:MM)' readonly=False store=True string='Arrival Hour'
  • avoid_mails Boolean
    compute='_compute_avoid_mails' help='Field to indicate not sent mail comunications' readonly=False store=True string='Avoid comunication mails'
  • blocked Boolean
    default=False help='Indicates if the reservation is blocked' string='Blocked'
  • board_service_room_id Many2one → pms.board.service.room.type
    check_pms_properties=True comodel_name='pms.board.service.room.type' compute='_compute_board_service_room_id' help='Board Service included in the room' index=True readonly=False store=True string='Board Service' tracking=True
  • cancel_datetime Datetime
    copy=False help='Date when the reservation was cancelled' readonly=True string='Cancel Date'
  • cancelled_reason Selection
    copy=False help="Field indicating type of cancellation. It can be 'late', 'intime' or 'noshow'" selection=[('late', 'Late'), ('intime', 'In time'), ('noshow', 'No Show'), ('modified', 'Modified')] store=True string='Reason of cancellation' tracking=True
  • check_adults Boolean
    compute='_compute_check_adults' help='Internal field to force room capacity validations' readonly=False store=True
  • checkin Date
    compute='_compute_checkin' copy=False help='It is the checkin date of the reservation, ' readonly=False store=True string='Check In' tracking=True
  • checkin_datetime Datetime
    compute='_compute_checkin_datetime' help='This field is the day and time of arrival of the reservation.It is formed with the checkin and arrival_hour fields' string='Exact Arrival'
  • checkin_partner_count Integer
    compute='_compute_checkin_partner_count' help='Number of checkin partners in a reservation' string='Checkin counter'
  • checkin_partner_ids One2many → pms.checkin.partner
    check_pms_properties=True comodel_name='pms.checkin.partner' compute='_compute_checkin_partner_ids' copy=False help='Guests who will occupy the room' inverse_name='reservation_id' readonly=False store=True string='Checkin Partners'
  • checkin_partner_pending_count Integer
    compute='_compute_checkin_partner_count' help='Number of checkin partners pending to checkin in a reservation' search='_search_checkin_partner_pending' string='Checkin Pending Num'
  • checkins_ratio Integer
    compute='_compute_checkins_ratio' help='Proportion of guest pending checkin' string='Pending Arrival Ratio'
  • checkout Date
    compute='_compute_checkout' copy=False help='It is the checkout date of the reservation, ' readonly=False store=True string='Check Out' tracking=True
  • checkout_datetime Datetime
    compute='_compute_checkout_datetime' help='This field is the day and time of departure of the reservation.It is formed with the checkout and departure_hour fields' string='Exact Departure'
  • children Integer
    help='Number total of children there in guest list,whose presence counts or not' readonly=False string='Children' tracking=True
  • children_occupying Integer
    help='Number of children there in guest list whose presence counts' string='Children occupying'
  • closure_reason_id Many2one
    check_pms_properties=True help='Reason why the reservation cannot be made' readonly=False related='folio_id.closure_reason_id' string='Closure Reason'
  • commission_amount Float
    compute='_compute_commission_amount' help='Amount corresponding to commission' store=True string='Commission amount'
  • commission_percent Float
    compute='_compute_commission_percent' help='Percentage corresponding to commission' readonly=False store=True string='Commission percent (%)' tracking=True
  • company_id Many2one
    help='Company to which the reservation belongs' index=True readonly=True related='folio_id.company_id' store=True string='Company'
  • count_alternative_free_rooms Integer
    compute='_compute_count_alternative_free_rooms' string='Count alternative free rooms'
  • count_pending_arrival Integer
    compute='_compute_count_pending_arrival' help='Number of guest with pending checkin' store=True string='Pending Arrival'
  • credit_card_details Text
    help='' related='folio_id.credit_card_details' string='Credit Card Details'
  • currency_id Many2one
    depends=['pricelist_id'] help='The currency used in relation to the pricelist' index=True readonly=True related='pricelist_id.currency_id' store=True string='Currency'
  • date_order Datetime
    default=fields.Datetime.now help='Order date of reservation' readonly=False store=True string='Date Order'
  • departure_hour Char
    compute='_compute_departure_hour' help='Departure Hour (HH:MM)' readonly=False store=True string='Departure Hour'
  • discount Float
    compute='_compute_discount' digits='Discount' help='Discount of total price in reservation' readonly=False store=True string='Discount (€)' tracking=True
  • email Char
    compute='_compute_email' help='Customer E-mail' readonly=False store=True string='E-mail'
  • external_reference Char
    compute='_compute_external_reference' help='Reference of this folio in an external system' readonly=False store=True string='External Reference'
  • folio_id Many2one → pms.folio
    check_company=True comodel_name='pms.folio' copy=False help='The folio where the reservations are included' index=True ondelete='restrict' string='Folio' tracking=True
  • folio_internal_comment Text
    help='Internal comment for folio' readonly=False related='folio_id.internal_comment' store=True string='Internal Folio Notes'
  • folio_payment_state Selection
    help='The status of the folio payment' related='folio_id.payment_state' store=True string='Payment State' tracking=True
  • folio_pending_amount Monetary
    help='The amount that remains to be paid from folio' related='folio_id.pending_amount' string='Pending Amount' tracking=True
  • folio_sequence Integer
    help='Techinal field to get reservation name' readonly=True string='Folio Sequence'
  • force_update_origin Boolean
    compute='_compute_force_update_origin' help='This field is for force update in sale channel origin of folio and another reservations' readonly=False store=True string='Update Sale Channel Origin'
  • invoice_status Selection
    compute='_compute_invoice_status' help="The status of the invoices in folio. Can be 'invoiced', 'to_invoice' or 'no'." readonly=True selection=[('invoiced', 'Fully Invoiced'), ('to_invoice', 'To Invoice'), ('no', 'Nothing to Invoice')] store=True string='Invoice Status'
  • is_origin_channel_check_visible Boolean
    compute='_compute_is_origin_channel_check_visible' help='Technical field to make visible update origin channel check' readonly=False store=True string='Check force update origin visible'
  • is_reselling Boolean
    compute='_compute_is_reselling' help='Indicate if exists reselling in any reservation line' readonly=False store=True string='Reselling'
  • lang Many2one → res.lang
    comodel_name='res.lang' compute='_compute_lang' string='Language'
  • mobile Char
    compute='_compute_mobile' help='Customer Mobile' readonly=False store=True string='Mobile'
  • name Text
    help='Reservation Code Identification' readonly=True string='Reservation Code'
  • nights Integer
    compute='_compute_nights' help='Number of nights of a reservation' store=True string='Nights'
  • out_service_description Text
    help='Indicates the cause of out of service' readonly=False related='folio_id.out_service_description' string='Cause of out of service'
  • overbooking Boolean
    compute='_compute_overbooking' help='Indicate if exists overbooking' store=True string='Is Overbooking'
  • overnight_room Boolean
    related='room_type_id.overnight_room' store=True
  • partner_id Many2one → res.partner
    check_pms_properties=True comodel_name='res.partner' compute='_compute_partner_id' help='Name of who made the reservation' index=True ondelete='restrict' readonly=False store=True string='Customer' tracking=True
  • partner_incongruences Char
    compute='_compute_partner_incongruences' help='indicates that some partner fields on the reservation do not correspond to that of the associated partner' string='partner_incongruences'
  • partner_internal_comment Text
    help='Internal notes of the partner' readonly=False related='partner_id.comment' store=True string='Internal Partner Notes'
  • partner_name Char
    compute='_compute_partner_name' help='To whom the room is assigned' readonly=False store=True string='Customer Name'
  • partner_requests Text
    help='Guest requests' string='Partner Requests'
  • pending_checkin_data Integer
    compute='_compute_pending_checkin_data' help='Data missing at checkin' store=True string='Checkin Data'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Property to which the reservation belongs' index=True readonly=False related='folio_id.pms_property_id' store=True string='Pms Property'
  • possible_existing_customer_ids One2many → res.partner
    comodel_name='res.partner' compute='_compute_possible_existing_customer_ids' inverse_name='reservation_possible_customer_id' string='Possible existing customer'
  • preconfirm Boolean
    default=True help='Technical field that indicates the reservation is not comfirm yet' string='Auto confirm to Save'
  • preferred_room_id Many2one → pms.room
    check_pms_properties=True comodel_name='pms.room' copy=False domain="[('id', 'in', allowed_room_ids),('pms_property_id', '=', pms_property_id),]" help="It's the preferred room assigned to reservation, empty if reservation is splitted" index=True ondelete='restrict' string='Room' tracking=True
  • price_room_services_set Monetary
    compute='_compute_price_room_services_set' help='Total price of room and services' readonly=True store=True string='Room Services Total'
  • price_services Monetary
    compute='_compute_price_services' help='Total price from services of a reservation' readonly=True store=True string='Services Total'
  • price_subtotal Monetary
    compute='_compute_amount_reservation' help='Subtotal price without taxes' readonly=True store=True string='Subtotal'
  • price_tax Float
    compute='_compute_amount_reservation' help='Total of taxes in a reservation' readonly=True store=True string='Taxes Amount'
  • price_total Monetary
    compute='_compute_amount_reservation' help='Total price with taxes' readonly=True store=True string='Total' tracking=True
  • pricelist_id Many2one → product.pricelist
    check_pms_properties=True comodel_name='product.pricelist' compute='_compute_pricelist_id' domain="[('is_pms_available', '=', True)]" help='Pricelist that guides the prices of the reservation' index=True ondelete='restrict' readonly=False store=True string='Pricelist' tracking=True
  • ratio_checkin_data Integer
    compute='_compute_ratio_checkin_data' help='Proportion of guest data complete at checkin' string='Complete cardex'
  • ready_for_checkin Boolean
    compute='_compute_ready_for_checkin' help='Indicates the reservations with checkin_partner data enought to checkin' string='Ready for checkin'
  • reservation_line_ids One2many → pms.reservation.line
    check_pms_properties=True comodel_name='pms.reservation.line' compute='_compute_reservation_line_ids' copy=False help='They are the lines of the reservation into a reservation,they corresponds to the nights' inverse_name='reservation_id' readonly=False store=True string='Reservation Lines'
  • reservation_type Selection
    compute='_compute_reservation_type' help="Type of reservations. It can be 'normal', 'staff' or 'out of service" readonly=False selection=[('normal', 'Normal'), ('staff', 'Staff'), ('out', 'Out of Service')] store=True string='Reservation Type'
  • room_type_id Many2one → pms.room.type
    check_pms_properties=True comodel_name='pms.room.type' compute='_compute_room_type_id' copy=False help="Room Type sold on the reservation,it doesn't necessarily correspond to the room actually assigned" index=True ondelete='restrict' readonly=False store=True string='Room Type' tracking=True
  • rooms Char
    compute='_compute_rooms' help='Rooms that are reserved' store=True string='Room/s' tracking=True
  • sale_channel_ids Many2many → pms.sale.channel
    comodel_name='pms.sale.channel' compute='_compute_sale_channel_ids' help='Sale Channels through which reservation lines were managed' store=True string='Sale Channels'
  • sale_channel_origin_id Many2one → pms.sale.channel
    comodel_name='pms.sale.channel' default=<expr> help='Sale Channel through which reservation was created, the original' index=True string='Sale Channel Origin'
  • sale_line_ids One2many → folio.sale.line
    comodel_name='folio.sale.line' copy=False inverse_name='reservation_id' string='Sale Lines'
  • segmentation_ids Many2many → res.partner.category
    comodel_name='res.partner.category' default=<expr> domain="[('is_used_in_checkin', '=', True)]" help='Segmentation tags to classify reservations' ondelete='restrict' string='Segmentation'
  • service_ids One2many → pms.service
    check_company=True check_pms_properties=True comodel_name='pms.service' compute='_compute_board_service_ids' help='Included services in the reservation' inverse_name='reservation_id' readonly=False store=True string='Services'
  • services_discount Float
    compute='_compute_services_discount' digits='Discount' help='Services discount' readonly=False store=True string='Services discount (€)' tracking=True
  • shared_folio Boolean
    compute='_compute_shared_folio' help='Used to notify is the reservation folio has other reservations/services' string='Shared Folio'
  • show_update_pricelist Boolean
    compute='_compute_show_update_pricelist' help='Technical Field, True if the pricelist was changed;\n this will then display a recomputation button' store=True string='Has Pricelist Changed'
  • splitted Boolean
    compute='_compute_splitted' help="Field that indicates if the reservation is split. A reservation is split when guests don't sleep in the same room every night" store=True string='Splitted'
  • state Selection
    copy=False default=<expr> help="The state of the reservation. It can be 'Pre-reservation', 'Pending arrival', 'On Board', 'Out', 'Cancelled', 'Arrival Delayed' or 'Departure Delayed'" index=True readonly=True selection=[('draft', 'Pre-reservation'), ('confirm', 'Pending arrival'), ('onboard', 'On Board'), ('done', 'Out'), ('cancel', 'Cancelled'), ('arrival_delayed', 'Arrival Delayed'), ('departure_delayed', 'Departure delayed')] string='State' tracking=True
  • tax_ids Many2many → account.tax
    comodel_name='account.tax' compute='_compute_tax_ids' domain=['|', ('active', '=', False), ('active', '=', True)] help='Taxes applied in the reservation' readonly=False store=True string='Taxes'
  • to_assign Boolean
    default=True help='It is True if the room of the reservation has been assigned automatically, False if it was confirmed by a person in charge' string='To Assign'
  • to_send_cancelation_mail Boolean
    compute='_compute_to_send_cancelation_mail' readonly=False store=True string='To Send Cancelation Mail'
  • to_send_confirmation_mail Boolean
    compute='_compute_to_send_confirmation_mail' readonly=False store=True string='To Send Confirmation Mail'
  • to_send_exit_mail Boolean
    compute='_compute_to_send_exit_mail' readonly=False store=True string='To Send Exit Mail'
  • to_send_modification_mail Boolean
    compute='_compute_to_send_modification_mail' readonly=False store=True string='To Send Modification Mail'
  • user_id Many2one → res.users
    comodel_name='res.users' compute='_compute_user_id' help='The reception manager in the folio' index=True ondelete='restrict' readonly=False store=True string='Reception Manager' tracking=True
Public methods (32)
  • action_assign(self)
  • action_cancel(self)
  • action_checkin_partner_onboard_view(self)
  • action_checkin_partner_view(self)
  • action_confirm(self)
  • action_open_cancelation_mail_composer(self)
  • action_open_confirmation_mail_composer(self)
  • action_open_exit_mail_composer(self)
  • action_open_modification_mail_composer(self)
  • action_pay_folio(self)
  • action_reservation_checkout(self)
  • action_undo_onboard(self)
  • auto_arrival_delayed(self)
    @api.model
  • auto_departure_delayed(self)
    @api.model
  • autocheckout(self, reservation)
    @api.model
  • check_in_out_dates(self)
    1.-When date_order is less then checkin date or Checkout date should be greater than the checkin date. 3.-Check the reservation dates are not occuped
  • checkin_checkout_consecutive_dates(self)
    @api.constrains('reservation_line_ids')
    simply convert date objects to integers using the .toordinal() method of datetime objects. The difference between the maximum and minimum value of the set of ordinal dates is one more than the length of the set
  • create(self, vals)
    @api.model
  • get_folios_to_update_channel(self, vals)
  • get_lines_to_update_channel(self, vals)
  • get_services_to_update_channel(self, vals)
  • name_get(self)
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
  • open_folio(self)
  • open_partner(self)
    Utility method used to add an "View Customer" button in reservation views
  • open_reservation_form(self)
  • open_reservation_wizard(self)
  • open_wizard_several_partners(self)
  • preview_reservation(self)
  • print_all_checkins(self)
  • update_prices(self)
  • write(self, vals)

New fields (15)
  • adults Integer
    string='Adults'
  • allowed_room_ids Many2many → pms.room
    comodel_name='pms.room' compute='_compute_allowed_room_ids' help='It contains all available rooms for this reservation' string='Allowed Rooms'
  • board_service_room_id Many2one → pms.board.service.room.type
    check_pms_properties=True comodel_name='pms.board.service.room.type' domain="[('pms_room_type_id','=',room_type_id)]" help='Board Service included in the room' string='Board Service'
  • booking_duplicate_id Many2one → pms.booking.duplicate
    comodel_name='pms.booking.duplicate' string='Folio Wizard ID'
  • checkin Date
    compute='_compute_checkin' help='Date Reservation starts ' string='From:'
  • checkout Date
    compute='_compute_checkout' help='Date Reservation ends' string='To:'
  • occupied_room Boolean
    compute='_compute_occupied_room' help='Check if the room is occupied' string='Occupied Room'
  • pms_property_id Many2one
    help='Propertiy with access to the element;' related='booking_duplicate_id.pms_property_id' string='Property'
  • preferred_room_id Many2one → pms.room
    check_pms_properties=True comodel_name='pms.room' domain="[('id', 'in', allowed_room_ids),('id', 'not in', used_room_ids),('pms_property_id', '=', pms_property_id),]" help='Room reserved' string='Room'
  • price_total Float
    compute='_compute_price_total' help='The total price in the folio' string='Total price'
  • pricelist_id Many2one → product.pricelist
    check_pms_properties=True comodel_name='product.pricelist' domain="[('is_pms_available', '=', True)]" help='Pricelist used for this reservation' string='Pricelist'
  • reference_reservation_id Many2one → pms.reservation
    check_pms_properties=True comodel_name='pms.reservation' help='Reservation to copy data' string='Reservation Reference'
  • room_type_id Many2one → pms.room.type
    check_pms_properties=True comodel_name='pms.room.type' help='Room Type reserved' string='Room Type'
  • service_ids Many2many → product.product
    column1='reservation_duplicate_id' column2='product_id' comodel_name='product.product' compute='_compute_service_ids' readonly=False relation='reservation_duplicate_product_rel' store=True string='Services'
  • used_room_ids Many2many → pms.room
    comodel_name='pms.room' compute='_compute_used_room_ids' string='Used Rooms'
Public methods (0)

No public methods.

New fields (17)
  • avail_id Many2one → pms.availability
    check_pms_properties=True comodel_name='pms.availability' compute='_compute_avail_id' help='' index=True ondelete='restrict' store=True string='Availability Day'
  • cancel_discount Float
    compute='_compute_cancel_discount' default=0.0 digits='Discount' help='' readonly=True store=True string='Cancelation Discount (%)'
  • date Date
    help='The date of the reservation in reservation line' string='Date'
  • default_invoice_to Many2one → res.partner
    comodel_name='res.partner' compute='_compute_default_invoice_to' help='Indicates the contact to which this line will be\n billed by default, if it is not established,\n a guest or the generic contact will be used instead' index=True ondelete='restrict' readonly=False store=True string='Invoice to'
  • discount Float
    default=0.0 digits='Discount' help='' string='Discount (%)'
  • is_reselling Boolean
    help='Indicates if the reservation line is reselling' readonly=False store=True string='Reselling'
  • occupies_availability Boolean
    compute='_compute_occupies_availability' help='This record is taken into account to calculate availability' store=True string='Occupies'
  • overbooking Boolean
    compute='_compute_overbooking' help='Indicate if exists overbooking in the reservation line' readonly=False store=True string='Overbooking'
  • overnight_room Boolean
    related='reservation_id.overnight_room' store=True
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Property with access to the element' index=True readonly=True related='reservation_id.pms_property_id' store=True string='Property'
  • price Float
    compute='_compute_price' digits='Product Price' help='The price in a reservation line' readonly=False store=True string='Price'
  • price_day_total Float
    compute='_compute_price_day_total' help='Get the price with discount applied' store=True string='Final price'
  • reservation_id Many2one → pms.reservation
    check_pms_properties=True comodel_name='pms.reservation' copy=False help='It is the reservation in a reservation line' index=True ondelete='cascade' required=True string='Reservation'
  • room_id Many2one → pms.room
    check_pms_properties=True comodel_name='pms.room' compute='_compute_room_id' help='The room of a reservation. ' index=True ondelete='restrict' readonly=False store=True string='Room'
  • sale_channel_id Many2one → pms.sale.channel
    check_pms_properties=True comodel_name='pms.sale.channel' help='Sale Channel through which reservation line was created' index=True string='Sale Channel'
  • sale_line_ids Many2many → folio.sale.line
    check_pms_properties=True comodel_name='folio.sale.line' copy=False readonly=True string='Sales Lines'
  • state Selection
    help='State of the reservation line.' related='reservation_id.state' store=True string='State'
Public methods (4)
  • constrains_duplicated_date(self)
    @api.constrains('date')
  • create(self, vals_list)
    @api.model_create_multi
  • name_get(self)
  • write(self, vals)

New fields (10)
  • allowed_rooms_sources Many2many → pms.room
    column1='wizard_id' column2='room_id' comodel_name='pms.room' compute='_compute_allowed_rooms_source' readonly=False relation='pms_wizard_split_join_swap_reservation_rooms_source' store=True string='Allowed rooms source'
  • allowed_rooms_target Many2many → pms.room
    column1='wizard_id' column2='room_id' comodel_name='pms.room' compute='_compute_allowed_rooms_target' readonly=False relation='pms_wizard_split_join_swap_reservation_rooms_target' store=True string='Allowed rooms target'
  • checkin Date
    default=<expr> help='Checkin in reservation' string='Check In'
  • checkout Date
    default=<expr> help='checkout in reservation' string='Check Out'
  • operation Selection
    default=<expr> help='Operation to be applied on the reservation' selection=[('swap', 'Swap rooms'), ('split', 'Split reservation'), ('join', 'Join reservation')] string='Operation'
  • reservation_id Many2one → pms.reservation
    comodel_name='pms.reservation' default=<expr> string='Reservation'
  • reservation_ids Many2many → pms.reservation
    comodel_name='pms.reservation' compute='_compute_reservation_ids' readonly=False store=True string='Reservations'
  • reservation_lines_to_change One2many → pms.wizard.reservation.lines.split
    comodel_name='pms.wizard.reservation.lines.split' compute='_compute_reservation_lines' inverse_name='reservation_wizard_id' readonly=False store=True string='Reservations Lines To Change'
  • room_source Many2one → pms.room
    comodel_name='pms.room' default=<expr> domain="[('id', 'in', allowed_rooms_sources)]" string='Room Source'
  • room_target Many2one → pms.room
    comodel_name='pms.room' domain="[('id', 'in', allowed_rooms_target)]" string='Room Target'
Public methods (6)
  • action_join(self)
  • action_split(self)
  • action_swap(self)
  • reservation_join(self, reservation, room)
    @api.model
  • reservation_split(self, reservation, date, room)
    @api.model
  • reservations_swap(self, checkin, checkout, source, target)
    @api.model

New fields (30)
  • active Boolean
    default=True help='Determines if room is active' string='Active'
  • address_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_address_id' help='Address of the room' index=True ondelete='restrict' store=True string='Address'
  • address_is_independent Boolean
    help='Indicates that the address of the room is independent of the property' string='Address is Independent'
  • capacity Integer
    help='The maximum number of people that can occupy a room' string='Capacity'
  • child_ids One2many → pms.room
    check_pms_properties=True comodel_name='pms.room' help='Child rooms of the room' inverse_name='parent_id' string='Child Rooms'
  • city Char
    readonly=False related='address_id.city'
  • country_id Many2one → res.country
    ondelete='restrict' readonly=False related='address_id.country_id' string='Country' args: 'res.country'
  • description_sale Text
    help='A description of the Product that you want to communicate to your customers. This description will be copied to every Sales Order, Delivery Order and Customer Invoice/Credit Note' string='Sale Description' translate=True
  • email Char
    readonly=False related='address_id.email'
  • email_formatted Char
    compute='_compute_email_formatted' help='Format email address "Name <email@domain>"' args: 'Formatted Email'
  • extra_beds_allowed Integer
    default='0' help='Number of extra beds allowed in room' required=True string='Extra Beds Allowed'
  • image_1920 Image
    max_height=1920 max_width=1920 readonly=False related='address_id.image_1920'
  • is_shared_room Boolean
    compute='_compute_is_shared_room' help='allows you to reserve units smaller than the room itself (eg beds)' readonly=False store=True string='Is a Shared Room'
  • mobile Char
    readonly=False related='address_id.mobile'
  • name Char
    help='Room Name' required=True string='Room Name'
  • parent_id Many2one → pms.room
    check_pms_properties=True comodel_name='pms.room' help='Indicates that this room is a child of another room' index=True ondelete='restrict' string='Parent Room'
  • partner_latitude Float
    digits=(16, 5) readonly=False related='address_id.partner_latitude' string='Geo Latitude'
  • partner_longitude Float
    digits=(16, 5) readonly=False related='address_id.partner_longitude' string='Geo Longitude'
  • phone Char
    readonly=False related='address_id.phone'
  • pms_property_id Many2one → pms.property
    comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' index=True ondelete='restrict' required=True string='Property'
  • room_amenity_ids Many2many → pms.amenity
    check_pms_properties=True column1='room_id' column2='amenity_id' comodel_name='pms.amenity' help='List of amenities included in room' relation='pms_room_amenity_rel' string='Room Amenities'
  • room_type_id Many2one → pms.room.type
    check_pms_properties=True comodel_name='pms.room.type' help='Unique room type for the rooms' index=True ondelete='restrict' required=True string='Property Room Type'
  • sequence Integer
    default=0 help='Field used to change the position of the rooms in tree view.Changing the position changes the sequence' string='Sequence'
  • short_name Char
    help='Four character name, if not set, autocompletes with the first two letters of the room name and two incremental numbers' string='Short Name'
  • state_id Many2one → res.country.state
    domain="[('country_id', '=?', country_id)]" ondelete='restrict' readonly=False related='address_id.state_id' string='State' args: 'res.country.state'
  • street Char
    readonly=False related='address_id.street'
  • street2 Char
    readonly=False related='address_id.street2'
  • ubication_id Many2one → pms.ubication
    check_pms_properties=True comodel_name='pms.ubication' help='At which ubication the room is located.' index=True string='Ubication'
  • website Char
    readonly=False related='address_id.website'
  • zip Char
    readonly=False related='address_id.zip'
Public methods (5)
  • calculate_short_name(self, vals)
  • create(self, vals)
    @api.model
  • get_capacity(self, extra_bed=0)
  • name_get(self)
  • write(self, vals)

New fields (12)
  • board_service_room_type_ids One2many → pms.board.service.room.type
    check_pms_properties=True comodel_name='pms.board.service.room.type' help='Board Service included in room type' inverse_name='pms_room_type_id' string='Board Services'
  • class_id Many2one → pms.room.type.class
    check_pms_properties=True comodel_name='pms.room.type.class' help='Class to which the room type belongs' index=True required=True string='Property Type Class'
  • default_code Char
    help='Identification code for a room type' required=True string='Code'
  • default_max_avail Integer
    default=-1 help='Maximum simultaneous availability on own Booking Engine given no availability rules. Use `-1` for using maximum simultaneous availability.' string='Default Max. Availability'
  • default_quota Integer
    default=-1 help='Quota assigned to the own Booking Engine given no availability rules. Use `-1` for managing no quota.' string='Default Quota'
  • min_price Float
    default=5.0 help='Minimum price for a room type' string='Min. Price'
  • overnight_room Boolean
    related='class_id.overnight' store=True
  • product_id Many2one → product.product
    comodel_name='product.product' delegate=True help='Product identifier associated with room type' index=True ondelete='cascade' required=True string='Product Room Type'
  • room_amenity_ids Many2many → pms.amenity
    check_pms_properties=True column1='room_type_id' column2='amenity_id' comodel_name='pms.amenity' help='List of amenities included in room type' relation='pms_room_type_amenity_rel' string='Room Type Amenities'
  • room_ids One2many → pms.room
    check_pms_properties=True comodel_name='pms.room' help='Rooms that belong to room type.' inverse_name='room_type_id' string='Rooms'
  • sequence Integer
    default=0 help='Field used to change the position of the room types in tree view.' string='Sequence'
  • total_rooms_count Integer
    compute='_compute_total_rooms_count' help='The number of rooms in a room type' store=True string='Total Rooms Count'
Public methods (4)
  • create(self, vals)
    @api.model
    Add room types as not purchase services.
  • get_room_type_capacity(self, pms_property_id)
    :param pms_property_id: int :return: the minimum capacity for rooms of current type
  • get_room_types_by_property(self, pms_property_id, default_code=None)
    @api.model
    :param pms_property_id: property ID :param default_code: room type code (optional) :return: - recordset of - all the pms.room.type of the pms_property_id if default_code not defined - one or 0 pms.room.type if default_code defined - ValidationError if more than one default_code found by the same pms_property_id
  • name_get(self)

New fields (7)
  • active Boolean
    default=True help='If unchecked, it will allow you to hide the room type' string='Active'
  • default_code Char
    help='Room type class identification code' required=True string='Code'
  • name Char
    help='Name of the room type class' required=True string='Class Name' translate=True
  • overnight Boolean
    default=True help='Set False if if these types of spaces are not used for overnight stays' string='Use for overnight stays'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='room_type_class_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='pms_room_type_class_property_rel' string='Properties'
  • room_type_ids One2many → pms.room.type
    check_pms_properties=True comodel_name='pms.room.type' help='Room Types that belong to this Room Type Class' inverse_name='class_id' string='Types'
  • sequence Integer
    default=0 help='Field used to change the position of the room type classes in tree view.' string='Sequence'
Public methods (1)
  • get_unique_by_property_code(self, pms_property_id, default_code=None)
    @api.model
    :param pms_property_id: property ID :param default_code: room type code (optional) :return: - recordset of - all the pms.room.type.class of the pms_property_id if default_code not defined - one or 0 pms.room.type.class if default_code defined - ValidationError if more than one default_code found by the same pms_property_id

New fields (7)
  • active Boolean
    default=True string='Active'
  • channel_type Selection
    help="Type of sale channel; it can be 'direct'(if there isno intermediary) or 'indirect'(if there areintermediaries between partner and property" selection=[('direct', 'Direct'), ('indirect', 'Indirect')] string='Sale Channel Type'
  • icon Image
    max_height=1024 max_width=1024 store=True string='Logo'
  • is_on_line Boolean
    help='Indicates if the sale channel is on-line' string='On Line'
  • name Text
    help='The name of the sale channel' string='Sale Channel Name'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='pms_sale_channel_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='pms_sale_channel_pms_property_rel' required=False string='Properties'
  • product_pricelist_ids Many2many → product.pricelist
    check_pms_properties=True column1='pms_sale_channel_id' column2='product_pricelist_id' comodel_name='product.pricelist' domain="[('is_pms_available', '=', True)]" help='Pricelists for a sale channel' relation='pms_sale_channel_product_pricelist_rel' string='Pricelists'
Public methods (0)

No public methods.

New fields (27)
  • analytic_tag_ids Many2many → account.analytic.tag
    comodel_name='account.analytic.tag' help='' string='Analytic Tags'
  • board_service_line_id Many2one → pms.board.service.room.type.line
    check_pms_properties=True comodel_name='pms.board.service.room.type.line' help='Board Service Line in which this service is included' string='Board Service Line'
  • company_id Many2one
    help='Company to which the service belongs' index=True readonly=True related='folio_id.company_id' store=True string='Company'
  • currency_id Many2one
    help='The currency used in relation to the folio' index=True readonly=True related='folio_id.currency_id' store=True string='Currency'
  • default_invoice_to Many2one → res.partner
    comodel_name='res.partner' compute='_compute_default_invoice_to' help='Indicates the contact to which this line will be\n billed by default, if it is not established,\n a guest or the generic contact will be used instead' index=True ondelete='restrict' readonly=False store=True string='Invoice to'
  • discount Float
    compute='_compute_discount' digits='Discount' help='Discount of total price' inverse='_inverse_discount' readonly=False store=True string='Discount (€/ud)'
  • folio_id Many2one → pms.folio
    check_pms_properties=True comodel_name='pms.folio' compute='_compute_folio_id' help='Folio in which the service is included' index=True readonly=False store=True string='Folio'
  • invoice_status Selection
    compute='_compute_invoice_status' default='no' help="State in which the service is with respect to invoices.It can be 'invoiced', 'to_invoice' or 'no'" readonly=True selection=[('invoiced', 'Fully Invoiced'), ('to_invoice', 'To Invoice'), ('no', 'Nothing to Invoice')] store=True string='Invoice Status'
  • is_board_service Boolean
    help='Indicates if the service is part of a board service' string='Is Board Service'
  • is_cancel_penalty Boolean
    compute='_compute_is_cancel_penalty' help='Indicates if the service is a cancel penalty' readonly=True string='Is Cancel Penalty'
  • name Char
    compute='_compute_name' help='Service description' readonly=False store=True string='Service description'
  • no_auto_add_lines Boolean
    default=False help='Technical field to avoid add service lines to service\n automatically when creating a new service. It is used when\n creating a new service with lines in vals\n ' string='Force No Auto Add Lines'
  • per_day Boolean
    help='Indicates if service is sold by days' related='product_id.per_day' related_sudo=True string='Per Day'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Property to which the service belongs' index=True readonly=True related='folio_id.pms_property_id' store=True string='Property'
  • price_subtotal Monetary
    compute='_compute_amount_service' help='Subtotal price without taxes' readonly=True store=True string='Subtotal'
  • price_tax Float
    compute='_compute_amount_service' help='Total of taxes in service' readonly=True store=True string='Taxes Amount'
  • price_total Monetary
    compute='_compute_amount_service' help='Total price with taxes' readonly=True store=True string='Total'
  • product_id Many2one → product.product
    check_pms_properties=True comodel_name='product.product' domain="[(is_pms_available, '=', True)]" help='Product associated with this service' index=True ondelete='restrict' required=True string='Service'
  • product_image Binary
    help='Image of the service' related='product_id.image_1024' related_sudo=True store=False string='Product Image'
  • product_qty Integer
    compute='_compute_product_qty' help='Number of services that were sold' readonly=False store=True string='Quantity'
  • reservation_id Many2one → pms.reservation
    check_pms_properties=True comodel_name='pms.reservation' default=<expr> help='Reservation in which the service is included' index=True ondelete='cascade' string='Room'
  • sale_channel_origin_id Many2one → pms.sale.channel
    check_pms_properties=True comodel_name='pms.sale.channel' help='Sale Channel through which service was created, the original' index=True string='Sale Channel Origin'
  • sale_line_ids One2many → folio.sale.line
    check_pms_properties=True comodel_name='folio.sale.line' copy=False help='' inverse_name='service_id' string='Sale Lines'
  • sequence Integer
    default=10 help='' string='Sequence'
  • service_line_ids One2many → pms.service.line
    check_pms_properties=True comodel_name='pms.service.line' compute='_compute_service_line_ids' help='Subservices included in this service' inverse_name='service_id' readonly=False store=True string='Service Lines'
  • state Selection
    help='Service status, it corresponds with folio status' related='folio_id.state' store=True string='State'
  • tax_ids Many2many → account.tax
    comodel_name='account.tax' compute='_compute_tax_ids' domain=['|', ('active', '=', False), ('active', '=', True)] help='Taxes applied in the service' readonly=False store=True string='Taxes'
Public methods (6)
  • create(self, vals)
    @api.model
  • get_folios_to_update_channel(self, vals)
  • name_get(self)
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
  • open_service_ids(self)
  • write(self, vals)

New fields (18)
  • auto_qty Boolean
    compute='_compute_auto_qty' help='Show if the day qty was calculated automatically' readonly=False store=True string='Qty automated setted'
  • cancel_discount Float
    compute='_compute_cancel_discount' help='' readonly=True store=True string='Cancelation Discount'
  • currency_id Many2one
    help="The currency used in relation to the service where it's included" index=True readonly=True related='service_id.currency_id' store=True string='Currency'
  • date Date
    help='Sate on which the product is to be consumed' string='Date'
  • day_qty Integer
    help='Amount to be consumed per day' string='Units'
  • default_invoice_to Many2one → res.partner
    comodel_name='res.partner' help='Indicates the contact to which this line will be\n billed by default, if it is not established,\n a guest or the generic contact will be used instead' index=True ondelete='restrict' related='service_id.default_invoice_to' store=True string='Invoice to'
  • discount Float
    compute='_compute_discount' default=0.0 digits='Discount' help='Discount in the price of the service.' readonly=False store=True string='Discount (%)'
  • is_board_service Boolean
    help='Indicates if the service line is part of a board service' related='service_id.is_board_service' store=True string='Is Board Service'
  • pms_property_id Many2one → pms.property
    check_pms_properties=True comodel_name='pms.property' help='Property to which the service belongs' index=True readonly=True related='service_id.pms_property_id' store=True string='Property'
  • price_day_subtotal Monetary
    compute='_compute_day_amount_service' help='Subtotal price without taxes' readonly=True store=True string='Subtotal'
  • price_day_tax Float
    compute='_compute_day_amount_service' help='' readonly=True store=True string='Taxes Amount'
  • price_day_total Monetary
    compute='_compute_day_amount_service' help='Total price with taxes' readonly=True store=True string='Total'
  • price_unit Float
    digits='Product Price' help='Price per unit of service' string='Unit Price'
  • product_id Many2one
    check_pms_properties=True help='Product associated with this service line' index=True related='service_id.product_id' store=True string='Product'
  • reservation_id Many2one
    check_pms_properties=True help='Room to which the services will be applied' index=True readonly=True related='service_id.reservation_id' store=True string='Reservation'
  • sale_line_ids Many2many → folio.sale.line
    check_pms_properties=True comodel_name='folio.sale.line' copy=False readonly=True string='Sales Lines'
  • service_id Many2one → pms.service
    comodel_name='pms.service' copy=False help='Service identifier' index=True ondelete='cascade' required=True string='Service Room'
  • tax_ids Many2many → account.tax
    comodel_name='account.tax' help='Taxes applied in the service line' readonly='True' related='service_id.tax_ids' string='Taxes'
Public methods (1)
  • no_free_resources(self)
    @api.constrains('day_qty')

New fields (4)
  • checkin_partner_id Many2one → pms.checkin.partner
    comodel_name='pms.checkin.partner' string='Checkin Partner'
  • folio_id Many2one → pms.folio
    comodel_name='pms.folio' string='Folio'
  • possible_existing_customer_ids Many2many → res.partner
    comodel_name='res.partner' readonly=False store=True string='Customers'
  • reservation_id Many2one → pms.reservation
    comodel_name='pms.reservation' string='Reservation'
Public methods (2)
  • add_partner(self)
  • default_get(self, fields)
    @api.model

New fields (6)
  • active Boolean
    default=True string='Active'
  • name Char
    related='user_id.name' store=True string='Name'
  • pms_property_id Many2one → pms.property
    comodel_name='pms.property' index=True ondelete='restrict' store=True string='Property'
  • pms_role Selection
    copy=False help="The member role in the organizationIt can be 'Reception', 'Revenue', 'Administrative', or 'Manager'" required=True selection=[('reception', 'Reception'), ('revenue', 'Revenue'), ('administrative', 'Administrative'), ('manager', 'Operational Manager')] string='PMS Role'
  • sequence Integer
    default=10 string='Sequence'
  • user_id Many2one → res.users
    comodel_name='res.users' copy=False index=True ondelete='restrict' string='User Member'
Public methods (0)

No public methods.

New fields (4)
  • name Char
    help='Ubication Name' required=True string='Ubication Name' translate=True
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='ubication_type_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='pms_ubication_pms_property_rel' string='Properties'
  • pms_room_ids One2many → pms.room
    check_pms_properties=True comodel_name='pms.room' help='Rooms found in this location' inverse_name='ubication_id' string='Rooms'
  • sequence Integer
    help='Field used to change the position of the ubications in tree view.Changing the position changes the sequence' string='Sequence'
Public methods (0)

No public methods.

New fields (4)
  • allowed_room_ids Many2many → pms.room
    comodel_name='pms.room' compute='_compute_allowed_room_ids' help='It contains all available rooms for this line' store=True string='Allowed Rooms'
  • date Date
    string='Date'
  • reservation_wizard_id Many2one → pms.reservation.split.join.swap.wizard
    comodel_name='pms.reservation.split.join.swap.wizard' string='Reservation Wizard'
  • room_id Many2one → pms.room
    comodel_name='pms.room' domain="[('id', 'in', allowed_room_ids)]" string='Room'
Public methods (0)

No public methods.

New fields (8)
  • availability_plan_id Many2one → pms.availability.plan
    check_pms_properties=True comodel_name='pms.availability.plan' help='Availability Plan for which the pricelist is included' index=True ondelete='restrict' string='Availability Plan'
  • cancelation_rule_id Many2one → pms.cancelation.rule
    check_pms_properties=True comodel_name='pms.cancelation.rule' help='Cancelation Policy included in the room' index=True string='Cancelation Policy'
  • company_id Many2one
    help='Company to which the pricelist belongs' index=True string='Company'
  • is_pms_available Boolean
    default=False help='If the pricelist is available in the PMS' string='Available in PMS'
  • item_ids One2many
    check_pms_properties=True help='Items for which the pricelist is made up' string='Items'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='product_pricelist_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='product_pricelist_pms_property_rel' required=False string='Properties'
  • pms_sale_channel_ids Many2many → pms.sale.channel
    check_pms_properties=True comodel_name='pms.sale.channel' help='Sale channel for which the pricelist is included' string='Available Channels'
  • pricelist_type Selection
    default='daily' help='Pricelist types, it can be Daily Plan' selection=[('daily', 'Daily Plan')] string='Pricelist Type'
Public methods (1)
  • open_massive_changes_wizard(self)

New fields (9)
  • allowed_board_service_product_ids Many2many → product.product
    comodel_name='product.product' compute='_compute_allowed_board_service_product_ids' readonly=False store=True string='Allowed board service products'
  • allowed_board_service_room_type_ids Many2many → pms.board.service.room.type
    comodel_name='pms.board.service.room.type' compute='_compute_allowed_board_service_room_type_ids' readonly=False store=True string='Allowed board service room types'
  • board_service_room_type_id Many2one → pms.board.service.room.type
    check_pms_properties=True comodel_name='pms.board.service.room.type' help='Specify a Board services on Room Types.' index=True string='Board Service'
  • date_end_consumption Date
    help='End date to apply daily pricelist items' string='End Date Consumption'
  • date_start_consumption Date
    help='Start date to apply daily pricelist items' string='Start Date Consumption'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='product_pricelist_item_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='product_pricelist_item_pms_property_rel' string='Properties'
  • pricelist_id Many2one
    check_pms_properties=True help='Pricelist in which this item is included' index=True string='Pricelist'
  • product_id Many2one
    check_pms_properties=True help='Product associated with the item' index=True string='Product'
  • product_tmpl_id Many2one
    check_pms_properties=True help='Product template associated with the item' index=True string='Product Template'
Public methods (2)
  • create(self, vals)
  • write(self, vals)

New fields (2)
  • board_price Float
    compute='_compute_board_price' digits='Product Price' help='Get price on board service' string='Board Service Price'
  • room_type_id Many2one → pms.room.type
    comodel_name='pms.room.type' compute='_compute_room_type_id' string='Room Type'
Public methods (1)
  • price_compute(self, price_type, uom=False, currency=False, company=None)

New fields (16)
  • consumed_on Selection
    default='before' help='Indicates when the product is consumed' selection=[('before', 'All before night'), ('after', 'All after night'), ('checkin', 'Only first day'), ('checkout', 'Only last day')] string='Consumed'
  • daily_limit Integer
    compute='_compute_daily_limit' help='Indicates how much products can consumed in one day' inverse='_inverse_daily_limit' string='Daily limit'
  • is_crib Boolean
    default=False help='Indicates if that product is a crib' string='Is a baby crib'
  • is_extra_bed Boolean
    default=False help='Indicates if that product is a extra bed, add +1 capacity in the room' string='Is extra bed'
  • is_pms_available Boolean
    default=True help='Indicates if that product is available in PMS' string='Is available in PMS'
  • is_tourist_tax Boolean
    default=False help='Indicates if that product is a tourist tax' string='Is tourist tax'
  • per_day Boolean
    help='Indicates that the product is sold by days' string='Unit increment per day'
  • per_person Boolean
    help='Indicates that the product is sold per person' string='Unit increment per person'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='product_tmpl_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='product_template_pms_property_rel' required=False string='Properties'
  • property_daily_limits One2many → ir.pms.property
    comodel_name='ir.pms.property' domain=<expr> inverse_name='record' string='Daily Limits per Property'
  • tourist_tax_apply_from_night Integer
    default=1 help='Night number the rule starts applying (e.g., 1 = first night)' string='Apply From Night'
  • tourist_tax_apply_to_night Integer
    help='Night number the rule stops applying (optional)' string='Apply Until Night'
  • tourist_tax_date_end Selection
    required=False selection=<expr> string='End Date (Annual)'
  • tourist_tax_date_start Selection
    required=False selection=<expr> string='Start Date (Annual)'
  • tourist_tax_max_age Integer
    help='Applies only to guests up to this age' string='Maximum Age'
  • tourist_tax_min_age Integer
    help='Applies only to guests with this age or older' string='Minimum Age'
Public methods (1)
  • write(self, vals)

New fields (9)
  • cancel_penalty_product_id Many2one → product.product
    comodel_name='product.product' help='Product used to calculate the cancel penalty' index=True ondelete='restrict' string='Cancel penalty product'
  • check_min_partner_data_invoice Boolean
    default=False help='Check minimum partner data for invoices:\n - VAT, name, street, city, country' string='Check minimum partner data for invoices'
  • document_partner_required Boolean
    default=False help='If true, the partner document is required\n to create a new contact' string='Document partner required'
  • pms_invoice_downpayment_policy Selection
    default='no' help='\n - Manual: Downpayment invoice will be created manually\n - All: Downpayment invoice will be created automatically\n - Current Month: Downpayment invoice will be created automatically\n only for reservations with checkout date past of current month\n ' selection=[('no', 'Manual'), ('all', 'All'), ('checkout_past_month', 'Checkout past month')] string='Downpayment policy invoce'
  • pms_property_ids One2many → pms.property
    comodel_name='pms.property' help='Properties with access to the element' inverse_name='company_id' string='Properties'
  • privacy_policy Html
    help='Authorization by the user for themanage of their personal data' string='Privacy Policy'
  • self_billed_journal_id Many2one → account.journal
    comodel_name='account.journal' help='Journal used to create self billing' index=True ondelete='restrict' string='Self billed journal'
  • self_billed_tax_ids Many2many → account.tax
    column1='company_id' column2='tax_id' comodel_name='account.tax' domain="[('company_id', '=', id)]" help='Taxes used to create self billing' relation='company_autoinvoicing_tax_rel' string='Self billed taxes'
  • url_advert Char
    help='Url to identify the ad' string='Url Advert'
Public methods (0)

No public methods.

New fields (1)
  • priority Integer
    default=1000 string='Priority'
Public methods (0)

No public methods.

New fields (40)
  • apply_pricelist Boolean
    help='Indicates if agency pricelist is applied to his reservations' string='Apply Pricelist'
  • birthdate_date Date
    compute='_compute_birthdate_date' readonly=False store=True
  • checkin_partner_possible_customer_id Many2one → pms.checkin.partner
    comodel_name='pms.checkin.partner' string='Possible Customer In Checkin Partner'
  • city Char
    compute='_compute_city' readonly=False store=True
  • comment Text
    tracking=True
  • commission_type Selection
    default='included' help='\n If select subtract commission, for automatic import of reservations,\n the commission is calculated as price - (price * commission / 100)\n ' selection=[('included', 'Commission Included in Price'), ('subtract', 'Commission Subtracts from Price')] string='Commission Type'
  • country_id Many2one
    compute='_compute_country_id' index=True readonly=False store=True
  • default_commission Integer
    help='Default commission' string='Commission'
  • email Char
    compute='_compute_email' readonly=False store=True
  • firstname Char
    compute='_compute_firstname' readonly=False store=True
  • folio_possible_customer_id Many2one → pms.folio
    comodel_name='pms.folio' string='Possible Customer In Folio'
  • folios_count Integer
    compute='_compute_folios_count' help='Number of folios of the partner' string='Number of Folios'
  • gender Selection
    compute='_compute_gender' readonly=False store=True
  • invoice_to_agency Selection
    default='never' help='Indicates if agency invoices partner' required=True selection=[('never', 'Never'), ('manual', 'Manual'), ('always', 'Always')] string='Invoice Agency'
  • invoicing_month_day Integer
    help='The day of the month to invoice' string='Invoicing Month Day'
  • invoicing_policy Selection
    default='property' help='The invoicing policy of the partner,\n set Property to user the policy configured in the Property' selection=[('property', 'Property Policy Invoice'), ('manual', 'Manual'), ('checkout', 'From Checkout'), ('month_day', 'Month Day Invoice')] string='Invoicing Policy'
  • is_agency Boolean
    help='Indicates if the partner is an agency' string='Is Agency'
  • lastname Char
    compute='_compute_lastname' readonly=False store=True
  • lastname2 Char
    compute='_compute_lastname2' readonly=False store=True
  • margin_days_autoinvoice Integer
    help='Days from Checkout to generate the invoice' string='Days from Checkout'
  • mobile Char
    compute='_compute_mobile' readonly=False store=True
  • nationality_id Many2one
    compute='_compute_nationality_id' index=True readonly=False store=True
  • phone Char
    compute='_compute_phone' readonly=False store=True
  • pms_checkin_partner_ids One2many → pms.checkin.partner
    comodel_name='pms.checkin.partner' help='Associated checkin partners' inverse_name='partner_id' string='Checkin Partners'
  • pms_folio_ids One2many → pms.folio
    comodel_name='pms.folio' help='Associated Folios' inverse_name='partner_id' string='Folios'
  • pms_property_ids Many2many → pms.property
    check_pms_properties=True column1='res_partner_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element if not set, all properties can access' ondelete='restrict' relation='res_partner_pms_property_rel' required=False string='Properties'
  • pms_reservation_ids One2many → pms.reservation
    comodel_name='pms.reservation' help='Associated reservation' inverse_name='partner_id' string='Reservations'
  • reservation_possible_customer_id Many2one → pms.reservation
    comodel_name='pms.reservation' string='Possible Customer In Reservation'
  • reservations_count Integer
    compute='_compute_reservations_count' help='Number of reservations of the partner' string='Number of Reservations'
  • residence_city Char
    compute='_compute_residence_city' help="City of the guest's residence" readonly=False store=True string='city of residence'
  • residence_country_id Many2one → res.country
    comodel_name='res.country' compute='_compute_residence_country_id' help='Partner country of residence' index=True readonly=False store=True string='Country of residence'
  • residence_state_id Many2one → res.country.state
    comodel_name='res.country.state' compute='_compute_residence_state_id' help='Partner state of residence' index=True readonly=False store=True string='State of residence'
  • residence_street Char
    compute='_compute_residence_street' help="Street of the guest's residence" readonly=False store=True string='Street of residence'
  • residence_street2 Char
    compute='_compute_residence_street2' help="Second street of the guest's residence" readonly=False store=True string='Second street of residence'
  • residence_zip Char
    change_default=True compute='_compute_residence_zip' help="Zip of the guest's residence" readonly=False store=True string='Zip of residence'
  • sale_channel_id Many2one → pms.sale.channel
    comodel_name='pms.sale.channel' domain=[('channel_type', '=', 'indirect')] help='The sale channel of the partner' index=True ondelete='restrict' string='Sale Channel'
  • state_id Many2one
    compute='_compute_state_id' index=True readonly=False store=True
  • street Char
    compute='_compute_street' readonly=False store=True
  • street2 Char
    compute='_compute_street2' readonly=False store=True
  • zip Char
    compute='_compute_zip' readonly=False store=True
Public methods (5)
  • action_partner_folios(self)
  • action_partner_reservations(self)
  • create(self, values)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (1)
  • is_used_in_checkin Boolean
    string='Used in checkin'
Public methods (0)

No public methods.

New fields (2)
  • country_ids Many2many → res.country
    comodel_name='res.country' string='Countries'
  • priority Integer
    default=100 string='Priority'
Public methods (0)

No public methods.

New fields (4)
  • category_id Many2one
    compute='_compute_category_id' readonly=False store=True
  • country_id Many2one → res.country
    comodel_name='res.country' compute='_compute_country_id' help='Country of the document' readonly=False store=True string='Country'
  • name Char
    compute='_compute_name' readonly=False store=True
  • valid_from Date
    compute='_compute_valid_from' readonly=False store=True
Public methods (0)

No public methods.

New fields (2)
  • pms_property_id Many2one → pms.property
    comodel_name='pms.property' context={'user_preference': True} domain="[('id','in',pms_property_ids)]" help='The property that is selected within those allowed for the user' index=True string='Default Property'
  • pms_property_ids Many2many → pms.property
    column1='user_id' column2='pms_property_id' comodel_name='pms.property' domain="[('company_id','in',company_ids)]" help='The properties allowed for this user' relation='pms_property_users_rel' string='Properties'
Public methods (2)
  • create(self, vals)
    @api.model
  • write(self, vals)

New fields (3)
  • description Text
    help='Explanation of the reason for closing a room' string='Description' translate=True
  • name Char
    help='The name that identifies the room closure reason' required=True string='Name' translate=True
  • pms_property_ids Many2many → pms.property
    column1='room_closure_reason_type_id' column2='pms_property_id' comodel_name='pms.property' help='Properties with access to the element; if not set, all properties can access' ondelete='restrict' relation='pms_room_closure_reason_pms_property_rel' string='Properties'
Public methods (0)

No public methods.

New fields (38)
  • allowed_reservation_ids Many2many → pms.reservation
    column1='folio_changes_id' column2='allowed_reservation_ids' comodel_name='pms.reservation' compute='_compute_allowed_reservation_ids' relation='folio_changes_allowed_reservation_rel' string='Allowed Reservations'
  • allowed_room_type_ids Many2many → pms.room.type
    column1='folio_changes_id' column2='allowed_room_type_ids' comodel_name='pms.room.type' compute='_compute_allowed_room_type_ids' relation='folio_changes_allowed_room_type_rel' string='Allowed Room Types'
  • allowed_service_ids Many2many → pms.service
    column1='folio_changes_id' column2='allowed_service_ids' comodel_name='pms.service' compute='_compute_allowed_service_ids' relation='folio_changes_allowed_service_rel' string='Allowed Services'
  • apply_board_service Boolean
    default=False string='Add Board Service to reservations'
  • apply_day_qty Boolean
    default=False help='If not set, it will use the default product day qty' string='Change cuantity service per day'
  • apply_discount Boolean
    default=False string='Apply Discount update'
  • apply_new_checkin Boolean
    default=False string='Apply Checkin Update'
  • apply_new_checkout Boolean
    default=False string='Apply Checkout Update'
  • apply_on_all_week Boolean
    default=True string='Apply Availability Rule for the whole week'
  • apply_on_friday Boolean
    default=False string='Apply Availability Rule on fridays'
  • apply_on_monday Boolean
    default=False string='Apply Availability Rule on mondays'
  • apply_on_saturday Boolean
    default=False string='Apply Availability Rule on saturdays'
  • apply_on_sunday Boolean
    default=False string='Apply Availability Rule on sundays'
  • apply_on_thursday Boolean
    default=False string='Apply Availability Rule on thursdays'
  • apply_on_tuesday Boolean
    default=False string='Apply Availability Rule on tuesdays'
  • apply_on_wednesday Boolean
    default=False string='Apply Availability Rule on wednesdays'
  • apply_partner_id Boolean
    default=False string='Apply Customer'
  • apply_price Boolean
    default=False string='Apply Price update'
  • apply_pricelist_id Boolean
    default=False string='Apply Pricelist'
  • apply_service Boolean
    default=False string='Add Service to reservations'
  • change_from_date Date
    default=<expr> string='Apply From'
  • change_to_date Date
    default=<expr> string='Apply To'
  • dates_incongruence Boolean
    compute='_compute_dates_incongruence' help='Indicates that there are reservations with different checkin and/or checkout' store=True string='Dates incrongruence'
  • day_qty Integer
    string='Quantity per day'
  • folio_id Many2one → pms.folio
    comodel_name='pms.folio' default=<expr> string='Folio'
  • modification_type Selection
    default='reservations' selection=[('reservations', 'Reservations'), ('dates', 'Dates'), ('services', 'Services Prices')] string='Modification Type'
  • new_board_service_id Many2one → pms.board.service
    comodel_name='pms.board.service' string='New Board Service'
  • new_checkin Date
    default=<expr> string='New Checkin'
  • new_checkout Date
    default=<expr> string='New Checkout'
  • new_discount Float
    string='New Discount %'
  • new_partner_id Many2one → res.partner
    comodel_name='res.partner' string='Customer'
  • new_price Float
    string='New Price'
  • new_pricelist_id Many2one → product.pricelist
    comodel_name='product.pricelist' domain="[('is_pms_available', '=', True)]" string='Pricelist'
  • new_service_id Many2one → product.product
    comodel_name='product.product' domain="[('sale_ok','=',True)]" string='New Service'
  • nights Integer
    compute='_compute_nights' string='Nights'
  • reservation_ids Many2many → pms.reservation
    column1='folio_changes_id' column2='reservation_ids' comodel_name='pms.reservation' default=<expr> domain="[('id', 'in', allowed_reservation_ids)]" relation='folio_changes_reservation_rel' string='Reservations'
  • room_type_filter_ids Many2many → pms.room.type
    column1='folio_changes_id' column2='room_type_ids' comodel_name='pms.room.type' default=<expr> domain="[('id', 'in', allowed_room_type_ids)]" relation='folio_changes_room_type_rel' string='Room types'
  • service_ids Many2many → pms.service
    column1='folio_changes_id' column2='service_ids' comodel_name='pms.service' default=<expr> domain="[('id', 'in', allowed_service_ids)]" relation='folio_changes_service_rel' string='Services'
Public methods (5)
  • button_change(self)
  • default_change_from_date(self)
  • default_change_new_checkin(self)
  • default_change_new_checkout(self)
  • default_change_to_date(self)

New fields (8)
  • allowed_method_ids Many2many → account.journal
    column1='payment_id' column2='journal_id' comodel_name='account.journal' compute='_compute_allowed_method_ids' relation='allowed_payment_journal_rel' store='True'
  • amount Float
    digits='Product Price' string='Amount'
  • date Date
    default=fields.Date.context_today required=True string='Date'
  • folio_id Many2one → pms.folio
    comodel_name='pms.folio' required=True string='Folio'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' string='Partner'
  • payment_method_id Many2one → account.journal
    comodel_name='account.journal' domain="[('id', 'in', allowed_method_ids)]" required=True string='Payment Method'
  • reservation_ids Many2many → pms.reservation
    comodel_name='pms.reservation' string='Reservations'
  • service_ids Many2many → pms.service
    comodel_name='pms.service' string='Services'
Public methods (1)
  • button_payment(self)