You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							104 lines
						
					
					
						
							5.0 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							104 lines
						
					
					
						
							5.0 KiB
						
					
					
				| # -*- coding: utf-8 -*- | |
| ############################################################################### | |
| # | |
| #    Cybrosys Technologies Pvt. Ltd. | |
| # | |
| #    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |
| #    Author: ADARSH K (odoo@cybrosys.com) | |
| # | |
| #    You can modify it under the terms of the GNU LESSER | |
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |
| # | |
| #    This program is distributed in the hope that it will be useful, | |
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |
| #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |
| # | |
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |
| #    (LGPL v3) along with this program. | |
| #    If not, see <http://www.gnu.org/licenses/>. | |
| # | |
| ############################################################################### | |
| from odoo import api, fields, models, tools, _ | |
| from odoo.exceptions import ValidationError | |
| 
 | |
| 
 | |
| class HotelRoom(models.Model): | |
|     """Model that holds all details regarding hotel room""" | |
|     _name = 'hotel.room' | |
|     _description = 'Rooms' | |
|     _inherit = ['mail.thread', 'mail.activity.mixin'] | |
| 
 | |
|     @tools.ormcache() | |
|     def _get_default_uom_id(self): | |
|         """Method for getting the default uom id""" | |
|         return self.env.ref('uom.product_uom_unit') | |
| 
 | |
|     name = fields.Char(string='Name', help="Name of the Room", index='trigram', | |
|                        required=True, translate=True) | |
|     status = fields.Selection([("available", "Available"), | |
|                                ("reserved", "Reserved"), | |
|                                ("occupied", "Occupied")], | |
|                               default="available", string="Status", | |
|                               help="Status of The Room", | |
|                               tracking=True) | |
|     is_room_avail = fields.Boolean(default=True, string="Available", | |
|                                    help="Check if the room is available") | |
|     list_price = fields.Float(string='Rent', digits='Product Price', | |
|                               help="The rent of the room.") | |
|     uom_id = fields.Many2one('uom.uom', string='Unit of Measure', | |
|                              default=_get_default_uom_id, required=True, | |
|                              help="Default unit of measure used for all stock" | |
|                                   " operations.") | |
|     room_image = fields.Image(string="Room Image", max_width=1920, | |
|                               max_height=1920, help='Image of the room') | |
|     taxes_ids = fields.Many2many('account.tax', | |
|                                  'hotel_room_taxes_rel', | |
|                                  'room_id', 'tax_id', | |
|                                  help="Default taxes used when selling the" | |
|                                       " room.", string='Customer Taxes', | |
|                                  domain=[('type_tax_use', '=', 'sale')], | |
|                                  default=lambda self: self.env.company. | |
|                                  account_sale_tax_id) | |
|     room_amenities_ids = fields.Many2many("hotel.amenity", | |
|                                           string="Room Amenities", | |
|                                           help="List of room amenities.") | |
|     floor_id = fields.Many2one('hotel.floor', string='Floor', | |
|                                help="Automatically selects the Floor", | |
|                                tracking=True) | |
|     user_id = fields.Many2one('res.users', string="User", | |
|                               related='floor_id.user_id', | |
|                               help="Automatically selects the manager", | |
|                               tracking=True) | |
|     room_type = fields.Selection([('single', 'Single'), | |
|                                   ('double', 'Double'), | |
|                                   ('dormitory', 'Dormitory')], | |
|                                  required=True, string="Room Type", | |
|                                  help="Automatically selects the Room Type", | |
|                                  tracking=True, | |
|                                  default="single") | |
|     num_person = fields.Integer(string='Number Of Persons', | |
|                                 required=True, | |
|                                 help="Automatically chooses the No. of Persons", | |
|                                 tracking=True) | |
|     description = fields.Html(string='Description', help="Add description", | |
|                               translate=True) | |
| 
 | |
|     @api.constrains("num_person") | |
|     def _check_capacity(self): | |
|         """Check capacity function""" | |
|         for room in self: | |
|             if room.num_person <= 0: | |
|                 raise ValidationError(_("Room capacity must be more than 0")) | |
| 
 | |
|     @api.onchange("room_type") | |
|     def _onchange_room_type(self): | |
|         """Based on selected room type, number of person will be updated. | |
|         ---------------------------------------- | |
|         @param self: object pointer""" | |
|         if self.room_type == "single": | |
|             self.num_person = 1 | |
|         elif self.room_type == "double": | |
|             self.num_person = 2 | |
|         else: | |
|             self.num_person = 4
 | |
| 
 |