# This file is part of Tryton. The COPYRIGHT file at the top level of # this repository contains the full copyright notices and license terms. from trytond.model import ModelView, ModelSQL, fields from trytond.pyson import Eval, If, Id from trytond.transaction import Transaction from trytond.model.exceptions import AccessError from trytond.i18n import gettext class Configuration(ModelSQL, ModelView): 'Hotel Configuration' __name__ = 'hotel.configuration' booking_sequence = fields.Many2One('ir.sequence', 'Hotel Booking Sequence', domain=[ ('company', 'in', [Eval('context', {}).get('company', 0), None]), ('sequence_type', '=', Id('hotel', 'sequence_type_hotel')), ], required=True) hotel_service_sequence = fields.Many2One('ir.sequence', 'Hotel Service Sequence', domain=[ ('company', 'in', [Eval('context', {}).get('company', 0), None]), ('sequence_type', '=', Id('hotel', 'sequence_type_hotel')), ], required=True) registration_card_sequence = fields.Many2One('ir.sequence', 'Registration Card Sequence', domain=[ ('company', 'in', [Eval('context', {}).get('company', 0), None]), ('sequence_type', '=', Id('hotel', 'sequence_type_hotel')), ], required=True) default_charges = fields.Many2Many('hotel.configuration-product.product', 'configuration', 'product', 'Default Charges') check_in_time = fields.Time('Check In Time', required=True) check_out_time = fields.Time('Check Out Time', required=True) default_accommodation = fields.Many2One('product.product', 'Default Accommodation') taxes_exception_rule = fields.Many2One('account.tax.rule', 'Taxes Exception Rule') default_channel_seller = fields.Many2One('hotel.channel', 'Default Channel') company = fields.Many2One('company.company', 'Company', required=True, domain=[ ('id', If(Eval('context', {}).contains('company'), '=', '!='), Eval('context', {}).get('company', 0)), ]) full_clean_time = fields.Selection([ ('', ''), ('by_time', 'By Time'), ('on_check_out', 'On Check Out'), ], 'Full Clean Time') full_clean_lapse = fields.Integer('Full Clean Lapse', help='In Days') age_children_policy = fields.Integer('Age Children Policy', help='In Days') cleaning_check_out = fields.Many2One('hotel.housekeeping.cleaning_type', 'Cleaning Check Out') cleaning_check_in = fields.Many2One('hotel.housekeeping.cleaning_type', 'Cleaning Check In') cleaning_occupied = fields.Many2One('hotel.housekeeping.cleaning_type', 'Cleaning Occupied') quarantine_rooms = fields.Numeric('Quarantine Rooms', digits=(2, 0), help='In days') booking_email_template = fields.Many2One('email.template', 'Booking Template Email') @staticmethod def default_company(): return Transaction().context.get('company') or False @classmethod def get_configuration(cls): company_id = Transaction().context.get('company') if company_id: config, = cls.search([ ('company', '=', company_id) ]) if not config or not config.booking_sequence: raise AccessError(gettext('hotel.missing_default_configuration')) return config class ConfigurationProduct(ModelSQL): 'Configuration - Product' __name__ = 'hotel.configuration-product.product' _table = 'hotel_configuration_product_rel' configuration = fields.Many2One('hotel.configuration', 'Configuration', ondelete='CASCADE', select=True, required=True) product = fields.Many2One('product.product', 'Product', ondelete='RESTRICT', select=True, required=True)