Browse Source

[ADD] Initial Commit 'hotel_management_odoo'

pull/206/head
AjmalCybro 3 years ago
parent
commit
4b40134191
  1. 41
      hotel_management_odoo/README.rst
  2. 24
      hotel_management_odoo/__init__.py
  3. 51
      hotel_management_odoo/__manifest__.py
  4. 26
      hotel_management_odoo/data/sequence.xml
  5. 6
      hotel_management_odoo/doc/RELEASE_NOTES.md
  6. 32
      hotel_management_odoo/models/__init__.py
  7. 68
      hotel_management_odoo/models/hotel_amenity.py
  8. 50
      hotel_management_odoo/models/hotel_meals.py
  9. 50
      hotel_management_odoo/models/hotel_restaurant.py
  10. 69
      hotel_management_odoo/models/hotel_services.py
  11. 102
      hotel_management_odoo/models/res_settings.py
  12. 80
      hotel_management_odoo/models/room_check_in_out.py
  13. 198
      hotel_management_odoo/models/room_reservation.py
  14. 17
      hotel_management_odoo/security/ir.model.access.csv
  15. BIN
      hotel_management_odoo/static/description/assets/icons/check.png
  16. BIN
      hotel_management_odoo/static/description/assets/icons/chevron.png
  17. BIN
      hotel_management_odoo/static/description/assets/icons/cogs.png
  18. BIN
      hotel_management_odoo/static/description/assets/icons/consultation.png
  19. BIN
      hotel_management_odoo/static/description/assets/icons/ecom-black.png
  20. BIN
      hotel_management_odoo/static/description/assets/icons/education-black.png
  21. BIN
      hotel_management_odoo/static/description/assets/icons/hotel-black.png
  22. BIN
      hotel_management_odoo/static/description/assets/icons/license.png
  23. BIN
      hotel_management_odoo/static/description/assets/icons/lifebuoy.png
  24. BIN
      hotel_management_odoo/static/description/assets/icons/logo.png
  25. BIN
      hotel_management_odoo/static/description/assets/icons/manufacturing-black.png
  26. BIN
      hotel_management_odoo/static/description/assets/icons/pos-black.png
  27. BIN
      hotel_management_odoo/static/description/assets/icons/puzzle.png
  28. BIN
      hotel_management_odoo/static/description/assets/icons/restaurant-black.png
  29. BIN
      hotel_management_odoo/static/description/assets/icons/service-black.png
  30. BIN
      hotel_management_odoo/static/description/assets/icons/trading-black.png
  31. BIN
      hotel_management_odoo/static/description/assets/icons/training.png
  32. BIN
      hotel_management_odoo/static/description/assets/icons/update.png
  33. BIN
      hotel_management_odoo/static/description/assets/icons/user.png
  34. BIN
      hotel_management_odoo/static/description/assets/icons/wrench.png
  35. BIN
      hotel_management_odoo/static/description/assets/modules/budget_image.png
  36. BIN
      hotel_management_odoo/static/description/assets/modules/credit_image.png
  37. BIN
      hotel_management_odoo/static/description/assets/modules/employee_image.png
  38. BIN
      hotel_management_odoo/static/description/assets/modules/export_image.png
  39. BIN
      hotel_management_odoo/static/description/assets/modules/gantt_image.png
  40. BIN
      hotel_management_odoo/static/description/assets/modules/quotation_image.png
  41. BIN
      hotel_management_odoo/static/description/assets/screenshots/0.png
  42. BIN
      hotel_management_odoo/static/description/assets/screenshots/1.png
  43. BIN
      hotel_management_odoo/static/description/assets/screenshots/11.png
  44. BIN
      hotel_management_odoo/static/description/assets/screenshots/2.png
  45. BIN
      hotel_management_odoo/static/description/assets/screenshots/3.png
  46. BIN
      hotel_management_odoo/static/description/assets/screenshots/4.png
  47. BIN
      hotel_management_odoo/static/description/assets/screenshots/5.png
  48. BIN
      hotel_management_odoo/static/description/assets/screenshots/6.png
  49. BIN
      hotel_management_odoo/static/description/assets/screenshots/7.png
  50. BIN
      hotel_management_odoo/static/description/assets/screenshots/8.png
  51. BIN
      hotel_management_odoo/static/description/assets/screenshots/9.png
  52. BIN
      hotel_management_odoo/static/description/assets/screenshots/hero.gif
  53. BIN
      hotel_management_odoo/static/description/banner.png
  54. BIN
      hotel_management_odoo/static/description/icon.png
  55. BIN
      hotel_management_odoo/static/description/images/checked.png
  56. BIN
      hotel_management_odoo/static/description/images/cybrosys.png
  57. 725
      hotel_management_odoo/static/description/index.html
  58. 104
      hotel_management_odoo/views/hotel_amenity.xml
  59. 67
      hotel_management_odoo/views/hotel_meals.xml
  60. 53
      hotel_management_odoo/views/hotel_restaurant.xml
  61. 106
      hotel_management_odoo/views/hotel_services.xml
  62. 68
      hotel_management_odoo/views/menus.xml
  63. 135
      hotel_management_odoo/views/res_settings.xml
  64. 100
      hotel_management_odoo/views/room_checkin_in_out.xml
  65. 125
      hotel_management_odoo/views/room_reservation.xml
  66. 22
      hotel_management_odoo/wizard/__init__.py
  67. 47
      hotel_management_odoo/wizard/room_invoice.py

41
hotel_management_odoo/README.rst

@ -0,0 +1,41 @@
Hotel Management
================
* Hotel Management for Odoo 15
Installation
============
- www.odoo.com/documentation/15.0/setup/install.html
- Install our custom addon
License
-------
General Public License, Version 3 (LGPL v3).
(https://www.odoo.com/documentation/user/13.0/legal/licenses/licenses.html)
Company
-------
* 'Cybrosys Techno Solutions <https://cybrosys.com/>`__
Credits
-------
* Developer:
Athul @ Cybrosys
Contacts
--------
* Mail Contact : odoo@cybrosys.com
Bug Tracker
-----------
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
Maintainer
==========
This module is maintained by Cybrosys Technologies.
For support and more information, please visit https://www.cybrosys.com
Further information
===================
HTML Description: `<static/description/index.html>`__

24
hotel_management_odoo/__init__.py

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 . import models
from . import wizard

51
hotel_management_odoo/__manifest__.py

@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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/>.
#
#############################################################################
{
'name': 'Hotel Management V15',
'version': '15.0.1.0.0',
'summary': 'Hotel Management Application for odoo 15',
'description': """The module helps you to manage rooms,amenities,services,restaurants.
End Users can book rooms and reserve foods from hotel restaurant.""",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'category': 'Sales',
'website': 'https://www.cybrosys.com',
'depends': ['sale_management', 'account', 'stock'],
'data': [
'security/ir.model.access.csv',
'data/sequence.xml',
'views/room_reservation.xml',
'views/hotel_meals.xml',
'views/hotel_restaurant.xml',
'views/res_settings.xml',
'views/hotel_amenity.xml',
'views/hotel_services.xml',
'views/room_checkin_in_out.xml',
'views/menus.xml',
],
'images': ['static/description/banner.png'],
'installable': True,
'application': True,
'license': 'LGPL-3',
}

26
hotel_management_odoo/data/sequence.xml

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="reservation_sequence" model="ir.sequence">
<field name="name">Reservation</field>
<field name="code">room.reservation</field>
<field name="prefix">RBK</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
</record>
<record id="checkin_sequence" model="ir.sequence">
<field name="name">Checkin</field>
<field name="code">room.checkin</field>
<field name="prefix">CKIN</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
</record>
<record id="checkout_sequence" model="ir.sequence">
<field name="name">Checkout</field>
<field name="code">room.checkout</field>
<field name="prefix">CKOUT</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
</record>
</data>
</odoo>

6
hotel_management_odoo/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <hotel management>
#### 11.5.2022
#### Version 15.0.1.0.0
##### ADD
- Initial Commit for hotel_management_odoo

32
hotel_management_odoo/models/__init__.py

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 . import room_reservation
from . import res_settings
from . import hotel_restaurant
from . import hotel_services
from . import hotel_amenity
from . import room_check_in_out
from . import hotel_meals

68
hotel_management_odoo/models/hotel_amenity.py

@ -0,0 +1,68 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 fields, models, api
class AmenityTypes(models.Model):
_name = "amenity.types"
_description = "Amenity Types"
amenity_type_id = fields.Many2one("amenity.types", "Types")
categ_id = fields.Many2one('product.category', "Product Category", delegate=True, copy=False, ondelete="cascade")
def write(self, vals):
if "amenity_type_id" in vals:
amenity_categ = self.env["amenity.type"].browse(vals['amenity_type_id'])
vals.update({"categ_id": amenity_categ.categ_id.id})
return super(AmenityTypes, self).write(vals)
def unlink(self):
rec = self.env["product.category"].sudo().browse(self.categ_id.id)
rec.unlink()
return super(AmenityTypes, self).unlink()
class HotelAmenity(models.Model):
_name = "hotel.amenity"
_description = "Hotel Amenities"
product_id = fields.Many2one('product.product', "Amenities", required=True, delegate=True, ondelete="cascade", )
type_id = fields.Many2one("amenity.types", "Amenity Type", required=True, ondelete="restrict", )
manager_id = fields.Many2one("res.users", string='Manager')
@api.model
def create(self, vals):
if "type_id" in vals:
prod = self.env["amenity.types"].browse(vals["type_id"])
vals.update({"categ_id": prod.categ_id.id})
return super(HotelAmenity, self).create(vals)
def write(self, vals):
if "type_id" in vals:
prod = self.env["amenity.types"].browse(vals["type_id"])
vals.update({"categ_id": prod.categ_id.id})
return super(HotelAmenity, self).write(vals)
def unlink(self):
rec = self.env["product.product"].sudo().browse(self.product_id.id)
rec.unlink()
return super(HotelAmenity, self).unlink()

50
hotel_management_odoo/models/hotel_meals.py

@ -0,0 +1,50 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 fields, models, api, _
class HotelMeals(models.Model):
_name = 'hotel.meals'
_description = 'Meals'
meal_type_id = fields.Many2one('meal.types', string='Type', required=True, ondelete="cascade")
product_id = fields.Many2one('product.product', "Meal", required=True, delegate=True, ondelete="cascade")
manager_id = fields.Many2one("res.users", string='Manager')
@api.model
def create(self, vals):
if "meal_type_id" in vals:
prod = self.env["meal.types"].browse(vals["meal_type_id"])
vals.update({"categ_id": prod.product_categ_id.id, 'meals_ok': True})
return super(HotelMeals, self).create(vals)
def write(self, vals):
if "meal_type_id" in vals:
prod = self.env["meal.types"].browse(vals["meal_type_id"])
vals.update({"categ_id": prod.product_categ_id.id})
return super(HotelMeals, self).write(vals)
def unlink(self):
rec = self.env["product.product"].sudo().browse(self.product_id.id)
rec.unlink()
return super(HotelMeals, self).unlink()

50
hotel_management_odoo/models/hotel_restaurant.py

@ -0,0 +1,50 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 fields, models, api, _
from datetime import datetime
class MealsTypes(models.Model):
_name = "meal.types"
_description = "Meals Types"
type_id = fields.Many2one("meal.types", "Types")
product_categ_id = fields.Many2one('product.category', "Product Category", delegate=True, copy=False,
ondelete="cascade")
@api.model
def create(self, vals):
vals.update({'is_meals_categ': True})
return super(MealsTypes, self).create(vals)
def write(self, vals):
if "type_id" in vals:
categ = self.env["meal.type"].browse(vals['meal'])
vals.update({"categ_id": categ.product_categ_id.id})
return super(MealsTypes, self).write(vals)
def unlink(self):
rec = self.env["product.category"].sudo().browse(self.product_categ_id.id)
rec.unlink()
return super(MealsTypes, self).unlink()

69
hotel_management_odoo/models/hotel_services.py

@ -0,0 +1,69 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 fields, models, api
class ServiceCategories(models.Model):
_name = "service.category"
_description = "Service Categories"
service_categ_id = fields.Many2one("service.category", "Types")
product_categ_id = fields.Many2one('product.category', " Category", delegate=True, copy=False,
ondelete="cascade", )
def write(self, vals):
if "service_categ_id" in vals:
categ = self.env["service.category"].browse(vals['service.category'])
vals.update({"categ_id": categ.product_categ_id.id})
return super(ServiceCategories, self).write(vals)
def unlink(self):
rec = self.env["product.category"].sudo().browse(self.product_categ_id.id)
rec.unlink()
return super(ServiceCategories, self).unlink()
class HotelService(models.Model):
_name = "hotel.service"
_description = "Hotel Service"
product_id = fields.Many2one('product.product', "Services", required=True, delegate=True, ondelete="cascade", )
category_id = fields.Many2one("service.category", "Category", required=True, ondelete="restrict", )
manager_id = fields.Many2one("res.users", string='Manager')
@api.model
def create(self, vals):
if "category_id" in vals:
prod = self.env["service.category"].browse(vals["category_id"])
vals.update({"categ_id": prod.product_categ_id.id, 'service_ok': True})
return super(HotelService, self).create(vals)
def write(self, vals):
if "category_id" in vals:
prod = self.env["service.category"].browse(vals["category_id"])
vals.update({"categ_id": prod.product_categ_id.id,'service_ok': True})
return super(HotelService, self).write(vals)
def unlink(self):
rec = self.env["product.product"].sudo().browse(self.product_id.id)
rec.unlink()
return super(HotelService, self).unlink()

102
hotel_management_odoo/models/res_settings.py

@ -0,0 +1,102 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 fields, models, api
class ProductProduct(models.Model):
_inherit = "product.product"
service_ok = fields.Boolean("Is Service")
room_ok = fields.Boolean("Is Room")
meals_ok = fields.Boolean("Is Room")
amenity_ok = fields.Boolean(string="Is Amenity")
type_id = fields.Many2one('room.types')
class ProductProduct(models.Model):
_inherit = "product.category"
is_room_categ = fields.Boolean()
is_meals_categ = fields.Boolean()
class Rooms(models.Model):
_name = "room.room"
_description = 'Rooms'
floor_id = fields.Many2one('hotel.floor', string='Floor')
type_id = fields.Many2one('room.types', string='Type',required=True)
product_id = fields.Many2one('product.product', "product_id", required=True, delegate=True, ondelete="cascade")
amenity_ids = fields.Many2many('hotel.amenity')
status = fields.Selection([("available", "Available"), ("occupied", "Occupied"), ('book', 'Booked')],
default="available")
manager_id = fields.Many2one('res.users', string='Manager')
num_person = fields.Integer(string='Number of Persons')
@api.model
def create(self, vals):
if "type_id" in vals:
prod = self.env["room.types"].browse(vals["type_id"])
vals.update({"categ_id": prod.categ_id.id, 'room_ok': True})
return super(Rooms, self).create(vals)
def write(self, vals):
if "type_id" in vals:
prod = self.env["room.types"].browse(vals["type_id"])
vals.update({"categ_id": prod.categ_id.id})
return super(Rooms, self).write(vals)
def unlink(self):
rec = self.env["product.product"].sudo().browse(self.product_id.id)
rec.unlink()
return super(Rooms, self).unlink()
class RoomTypes(models.Model):
_name = "room.types"
_description = 'Room Types'
room_type_id = fields.Many2one("room.types", "Types")
categ_id = fields.Many2one('product.category', "Product Category", delegate=True, copy=False, ondelete="cascade")
@api.model
def create(self, vals):
vals.update({'is_room_categ': True})
return super(RoomTypes, self).create(vals)
def write(self, vals):
if "room_type_id" in vals:
categ = self.env["room.types"].browse(vals['room_type_id'])
vals.update({"categ_id": categ.categ_id.id})
return super(RoomTypes, self).write(vals)
def unlink(self):
rec = self.env["product.category"].sudo().browse(self.categ_id.id)
rec.unlink()
return super(RoomTypes, self).unlink()
class Floor(models.Model):
_name = "hotel.floor"
_description = "Floor"
name = fields.Char(string="Name", required=True)

80
hotel_management_odoo/models/room_check_in_out.py

@ -0,0 +1,80 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 fields, models, api, _
class RoomCheckin(models.Model):
_name = "room.checkin"
_description = 'Room Checkin'
name = fields.Char(string='Check-In Reference', required=True, copy=False, readonly=True,
default=lambda self: _('New'))
rm_id = fields.Many2one('room.reservation.line', domain="[('reservation_id','=',reservation_id)]", string="Room No",required=True)
reservation_id = fields.Many2one('room.reservation', string='Reservation ',required=True,
domain="[('state','=','confirm')]")
state = fields.Selection([('draft', 'Draft'),('done', 'Done')],
default='draft')
def action_checkin(self):
self.rm_id.room_id.write({'status': 'occupied'})
self.reservation_id.write({'state': 'occupied'})
self.state='done'
@api.model
def create(self, vals):
if vals.get('name', _('New')) == _('New'):
vals['name'] = self.env['ir.sequence'].next_by_code(
'room.checkin') or _('New')
return super(RoomCheckin, self).create(vals)
class RoomCheckout(models.Model):
_name = "room.checkout"
_description = 'Room Checkout'
name = fields.Char(string='Check-Out Reference',required=True, copy=False, readonly=True,
default=lambda self: _('New'))
rm_id = fields.Many2one('room.reservation.line', domain="[('reservation_id','=',reservation_id)]", string="Room No",required=True)
reservation_id = fields.Many2one('room.reservation', string='Reservation', domain="[('state','=','occupied')]",required=True)
state = fields.Selection([('draft', 'Draft'), ('done', 'Done')],
default='draft')
def action_checkout(self):
self.rm_id.room_id.write({'status': 'available'})
reserv_line = self.env['room.reservation.line'].sudo().search([('reservation_id', '=', self.reservation_id.id)])
status = 'available'
for rec in reserv_line:
if rec.room_id.status == 'available':
break
else:
status = 'occupied'
if status == 'available':
self.reservation_id.write({'state': 'done'})
self.state = 'done'
@api.model
def create(self, vals):
if vals.get('name', _('New')) == _('New'):
vals['name'] = self.env['ir.sequence'].next_by_code(
'room.checkout') or _('New')
return super(RoomCheckout, self).create(vals)

198
hotel_management_odoo/models/room_reservation.py

@ -0,0 +1,198 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 fields, models, api, _, exceptions
from datetime import datetime
from odoo.exceptions import ValidationError
class ReservationInvoice(models.Model):
_inherit = 'account.move'
@api.model
def create(self, vals):
res = super(ReservationInvoice, self).create(vals)
if self._context.get("reservation_id"):
reserv = self.env["room.reservation"].browse(self._context["reservation_id"])
reserv.write({"invoice_id": res.id, "invoice_status": "invoiced"})
return res
class Reservation(models.Model):
_name = "room.reservation"
_description = 'Reservation'
_rec_name = 'name'
name = fields.Char(string='Booking Reference', required=True, copy=False, readonly=True,
default=lambda self: _('New'))
num_person = fields.Integer(string='Number of Persons', default=1)
reservation_line_ids = fields.One2many('room.reservation.line', "reservation_id", string='Booking Info')
state = fields.Selection([('draft', 'Draft'), ('confirm',
'Confirm'), ('occupied', 'Occupied'), ('done', 'Done'),
('cancel', 'Cancel')],
default='draft')
sale_order_id = fields.Many2one('sale.order', 'sale Order', delegate=True, copy=False, ondelete="cascade")
service_ids = fields.One2many('hotel.service.line', 'reservation_id')
invoice_id = fields.Many2one('account.move')
meals_ids = fields.One2many('hotel.meals.line', 'reservation_id')
def action_confirm(self):
self.write({'state': 'confirm'})
self.sale_order_id.write({'invoice_status': 'to invoice', 'state': 'sale'})
def action_cancel(self):
self.state = 'cancel'
for rec in self.reservation_line_ids:
rec.room_id.write({'status': 'available'})
@api.model
def create(self, vals):
if vals.get('name', _('New')) == _('New'):
vals['name'] = self.env['ir.sequence'].next_by_code(
'room.reservation') or _('New')
return super(Reservation, self).create(vals)
class ReservationLine(models.Model):
_name = "room.reservation.line"
_description = 'Reservation Lines'
reservation_id = fields.Many2one('room.reservation', ondelete="cascade")
type_id = fields.Many2one('product.category', string='Room type')
room_id = fields.Many2one('room.room', string='room Number')
checkin_date = fields.Date(string='Checkin Date', required=True)
checkout_date = fields.Date(string='Checkout Date', required=True)
order_line_id = fields.Many2one('sale.order.line', 'sale Order Line', delegate=True, copy=False, ondelete="cascade")
@api.constrains("checkin_date", "checkout_date")
def _check_dates(self):
if self.checkin_date >= self.checkout_date:
raise ValidationError(_(" Check In Date Should be less than the Check Out Date!"))
if self.reservation_id.date_order and self.checkin_date:
if self.checkin_date < self.reservation_id.date_order.date():
raise ValidationError(_("check in date should be greater than the current date."))
@api.model
def create(self, vals):
room = self.env['room.room'].sudo().search([('product_id', '=', vals['product_id'])])
vals['room_id'] = room.id
room.write({'status': 'book'})
if "reservation_id" in vals:
reserv = self.env["room.reservation"].browse(vals["reservation_id"])
vals.update({"order_id": reserv.sale_order_id.id})
duplicate = self.env['room.reservation.line'].sudo().search(
[
('product_id', '=', vals['product_id']), ('reservation_id', '!=', vals['reservation_id']),
('checkin_date', '>=', vals['checkin_date']), ('checkin_date', '<=', vals['checkout_date']),
('checkout_date', '<=', vals['checkout_date']), ('checkout_date', '>=', vals['checkin_date']),
('reservation_id.state', 'in', ('confirm', 'occupied'))
])
if duplicate:
raise ValidationError(_('Room not available'))
return super(ReservationLine, self).create(vals)
def write(self, vals):
if "reservation_id" in vals:
reserv = self.env["room.reservation"].browse(vals["reservation_id"])
vals.update({"order_id": reserv.sale_order_id.id})
return super(ReservationLine, self).write(vals)
@api.onchange('type_id')
def room_clear(self):
self.write({'product_id': [(5,)]}, )
@api.onchange('checkin_date', 'checkout_date')
def _compute_days(self):
for rec in self:
if rec.checkin_date and rec.checkout_date:
fmt = '%Y-%m-%d'
date_difference = (rec.checkout_date - rec.checkin_date)
float_days = date_difference.days + float(date_difference.seconds) / 86400
rec.product_uom_qty = float_days
@api.onchange('product_id')
def _compute_subtotoal(self):
self.price_unit = self.product_id.list_price
self.tax_id = self.product_id.taxes_id
class ServiceLine(models.Model):
_name = "hotel.service.line"
_description = 'service Lines'
order_line_id = fields.Many2one('sale.order.line', "Services", required=True, delegate=True, ondelete="cascade")
reservation_id = fields.Many2one("room.reservation", ondelete="cascade")
categ_id = fields.Many2one(related='product_id.categ_id')
checkin_date = fields.Datetime("From Date")
checkout_date = fields.Datetime("To Date")
@api.model
def create(self, vals):
self.price_unit = self.product_id.list_price
if "reservation_id" in vals:
reserv = self.env["room.reservation"].browse(vals["reservation_id"])
vals.update({"order_id": reserv.sale_order_id.id})
return super(ServiceLine, self).create(vals)
@api.onchange('product_id')
def _compute_subtotal(self):
self.price_unit = self.product_id.list_price
class MealsLine(models.Model):
_name = "hotel.meals.line"
_description = 'Meals Lines'
order_line_id = fields.Many2one('sale.order.line', "Services", required=True, delegate=True, ondelete="cascade")
reservation_id = fields.Many2one("room.reservation", ondelete="cascade")
categ_id = fields.Many2one('product.category', string='Type')
checkin_date = fields.Datetime("From Date")
checkout_date = fields.Datetime("To Date")
@api.model
def create(self, vals):
self.price_unit = self.product_id.list_price
if "reservation_id" in vals:
reserv = self.env["room.reservation"].browse(vals["reservation_id"])
vals.update({"order_id": reserv.sale_order_id.id})
return super(MealsLine, self).create(vals)
@api.onchange('product_id')
def _compute_subtotal(self):
self.price_unit = self.product_id.list_price
@api.onchange('categ_id')
def room_clear(self):
self.write({'product_id': [(5,)]}, )
@api.onchange('checkin_date', 'checkout_date')
def _compute_days(self):
for rec in self:
if rec.checkin_date and rec.checkout_date:
fmt = '%Y-%m-%d'
date_difference = (rec.checkout_date - rec.checkin_date)
float_days = date_difference.days + float(date_difference.seconds) / 86400
self.price_subtotal = self.price_unit * float_days
self.product_uom_qty = float_days

17
hotel_management_odoo/security/ir.model.access.csv

@ -0,0 +1,17 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_room_reservation,access.room.reservation,model_room_reservation,,1,1,1,1
access_room_reservation_line,access.room.reservation.line,model_room_reservation_line,,1,1,1,1
access_room_room,access.room.room,model_room_room,,1,1,1,1
access_room_types,access.room.types,model_room_types,,1,1,1,1
access_meal_types,access.meal.types,model_meal_types,,1,1,1,1
access_hotel_floor,access.hotel.floor,model_hotel_floor,,1,1,1,1
access_hotel_service,access.hotel.service,model_hotel_service,,1,1,1,1
access_hotel_service_line,access.hotel.service.line,model_hotel_service_line,,1,1,1,1
access_service_category,access.category.type,model_service_category,,1,1,1,1
access_amenity_types,access.amenity.types,model_amenity_types,,1,1,1,1
access_hotel_amenity,access.hotel.amenity,model_hotel_amenity,,1,1,1,1
access_hotel_meals_line,access.hotel.meals.line,model_hotel_meals_line,,1,1,1,1
access_room_checkin,access.room.checkin,model_room_checkin,,1,1,1,1
access_room_checkout,access.room.checkout,model_room_checkout,,1,1,1,1
access_hotel_meals,access.hotel.meals,model_hotel_meals,,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_room_reservation access.room.reservation model_room_reservation 1 1 1 1
3 access_room_reservation_line access.room.reservation.line model_room_reservation_line 1 1 1 1
4 access_room_room access.room.room model_room_room 1 1 1 1
5 access_room_types access.room.types model_room_types 1 1 1 1
6 access_meal_types access.meal.types model_meal_types 1 1 1 1
7 access_hotel_floor access.hotel.floor model_hotel_floor 1 1 1 1
8 access_hotel_service access.hotel.service model_hotel_service 1 1 1 1
9 access_hotel_service_line access.hotel.service.line model_hotel_service_line 1 1 1 1
10 access_service_category access.category.type model_service_category 1 1 1 1
11 access_amenity_types access.amenity.types model_amenity_types 1 1 1 1
12 access_hotel_amenity access.hotel.amenity model_hotel_amenity 1 1 1 1
13 access_hotel_meals_line access.hotel.meals.line model_hotel_meals_line 1 1 1 1
14 access_room_checkin access.room.checkin model_room_checkin 1 1 1 1
15 access_room_checkout access.room.checkout model_room_checkout 1 1 1 1
16 access_hotel_meals access.hotel.meals model_hotel_meals 1 1 1 1

BIN
hotel_management_odoo/static/description/assets/icons/check.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
hotel_management_odoo/static/description/assets/icons/chevron.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

BIN
hotel_management_odoo/static/description/assets/icons/cogs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
hotel_management_odoo/static/description/assets/icons/consultation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
hotel_management_odoo/static/description/assets/icons/ecom-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

BIN
hotel_management_odoo/static/description/assets/icons/education-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
hotel_management_odoo/static/description/assets/icons/hotel-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

BIN
hotel_management_odoo/static/description/assets/icons/license.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
hotel_management_odoo/static/description/assets/icons/lifebuoy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
hotel_management_odoo/static/description/assets/icons/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
hotel_management_odoo/static/description/assets/icons/manufacturing-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

BIN
hotel_management_odoo/static/description/assets/icons/pos-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

BIN
hotel_management_odoo/static/description/assets/icons/puzzle.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
hotel_management_odoo/static/description/assets/icons/restaurant-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

BIN
hotel_management_odoo/static/description/assets/icons/service-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
hotel_management_odoo/static/description/assets/icons/trading-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
hotel_management_odoo/static/description/assets/icons/training.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

BIN
hotel_management_odoo/static/description/assets/icons/update.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
hotel_management_odoo/static/description/assets/icons/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

BIN
hotel_management_odoo/static/description/assets/icons/wrench.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
hotel_management_odoo/static/description/assets/modules/budget_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
hotel_management_odoo/static/description/assets/modules/credit_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
hotel_management_odoo/static/description/assets/modules/employee_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
hotel_management_odoo/static/description/assets/modules/export_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
hotel_management_odoo/static/description/assets/modules/gantt_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

BIN
hotel_management_odoo/static/description/assets/modules/quotation_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
hotel_management_odoo/static/description/assets/screenshots/0.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
hotel_management_odoo/static/description/assets/screenshots/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
hotel_management_odoo/static/description/assets/screenshots/11.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
hotel_management_odoo/static/description/assets/screenshots/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
hotel_management_odoo/static/description/assets/screenshots/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
hotel_management_odoo/static/description/assets/screenshots/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
hotel_management_odoo/static/description/assets/screenshots/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
hotel_management_odoo/static/description/assets/screenshots/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
hotel_management_odoo/static/description/assets/screenshots/7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

BIN
hotel_management_odoo/static/description/assets/screenshots/8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
hotel_management_odoo/static/description/assets/screenshots/9.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
hotel_management_odoo/static/description/assets/screenshots/hero.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 KiB

BIN
hotel_management_odoo/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
hotel_management_odoo/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
hotel_management_odoo/static/description/images/checked.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
hotel_management_odoo/static/description/images/cybrosys.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

725
hotel_management_odoo/static/description/index.html

@ -0,0 +1,725 @@
<div class="container" style="padding: 1rem !important; margin-bottom: 1rem !important;">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12 d-flex justify-content-between"
style="border-bottom: 1px solid #d5d5d5;">
<div class="my-3">
<img src="/assets/icons/logo.png" style="width: auto !important; height: 40px !important;">
</div>
<div class="my-3 d-flex align-items-center">
<div
style="background-color: #7C7BAD !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;">
<i class="fa fa-check mr-1"></i>Community
</div>
<div
style="background-color: #875A7B !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
</div>
</div>
</div>
</div>
<div class="container" style="padding: 0rem 1.5rem 4rem !important">
<div class="row" style="height: 900px !important;">
<div class="col-sm-12 col-md-12 col-lg-12"
style="padding: 4rem 1rem !important; background-color: #714B67 !important; height: 600px !important; border-radius: 20px !important;">
<h1
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #FFFFFF !important; font-size: 4rem !important; text-align: center !important;">
Hotel Management </h1>
<p
style="font-family: 'Montserrat', sans-serif !important; font-weight: 300 !important; color: #FFFFFF !important; font-size: 1.4rem !important; text-align: center !important;">
A Module for managing Hotel and Restaurant
</p>
<img src="/assets/screenshots/hero.gif" class="img-responsive" width="100%" height="auto"/>
</div>
</div>
<div class="row">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin-bottom: 2rem !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-compass mr-2"></i>Explore this module
</h2>
</div>
<div class="col-md-6">
<a href="#overview" style="text-decoration: none !important;">
<div class="row"
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;">
<div class="col-8">
<h3
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">
Overview</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;">
Learn more about this module</p>
</div>
<div class="col-4 text-right d-flex justify-content-end align-items-center">
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i>
</div>
</div>
</a>
</div>
<div class="col-md-6">
<a href="#features" style="text-decoration: none !important;">
<div class="row"
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;">
<div class="col-8">
<h3
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">
Features</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;">
View features of this module</p>
</div>
<div class="col-4 text-right d-flex justify-content-end align-items-center">
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i>
</div>
</div>
</a>
</div>
<div class="col-md-6">
<a href="#screenshots" style="text-decoration: none !important;">
<div class="row"
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;">
<div class="col-8">
<h3
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">
Screenshots</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;">
See key screenshots of this module</p>
</div>
<div class="col-4 text-right d-flex justify-content-end align-items-center">
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i>
</div>
</div>
</a>
</div>
<div class="row" id="overview">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-pie-chart mr-2"></i>Overview
</h2>
</div>
<div class="col-mg-12 pl-3">
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important; line-height: 30px !important;">
The module helps you to manage rooms,amenities,services,restaurants.
End Users can book rooms and reserve foods from hotel restaurant.
</p>
</div>
</div>
<div class="row" id="features">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-star mr-2"></i>Features
</h2>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="./assets/icons/chevron.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Room Reservation </h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
</p>
</div>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="./assets/icons/chevron.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Service Management</h4>
</div>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="./assets/icons/chevron.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Amenity Management</h4>
</div>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="./assets/icons/chevron.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Restaurant Management</h4>
</div>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="./assets/icons/chevron.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Floor Management</h4>
</div>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="./assets/icons/chevron.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Food Reservation</h4>
</div>
</div>
</div>
<div class="row" id="screenshots">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-image mr-2"></i>Screenshots
</h2>
</div>
<div class="col-lg-12 my-2">
<h4 class="my-2"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Configuration Settings
</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
<img src="assets/screenshots/0.png" class="img-responsive img-thumbnail border"
width="100%"
height="auto"/>
</div>
<div class="col-lg-12 my-2">
<h4 class="my-2"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Amenities
</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
<img src="assets/screenshots/1.png" class="img-responsive img-thumbnail border"
width="100%"
height="auto"/>
</div>
<div class="col-lg-12 my-2">
<h4 class="my-2"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Services
</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
<img src="assets/screenshots/2.png" class="img-responsive img-thumbnail border"
width="100%"
height="auto"/>
</div>
<div class="col-lg-12 my-2">
<h4 class="my-2"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Floors
</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
<img src="assets/screenshots/3.png" class="img-responsive img-thumbnail border"
width="100%"
height="auto"/>
</div>
<div class="col-lg-12 my-2">
<h4 class="my-2"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Room Management
</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
<img src="assets/screenshots/4.png" class="img-responsive img-thumbnail border"
width="100%"
height="auto"/>
</div>
<div class="col-lg-12 my-2">
<h4 class="my-2"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Room Reservation
</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
<img src="assets/screenshots/5.png" class="img-responsive img-thumbnail border"
width="100%"
height="auto"/>
</div>
<div class="col-lg-12 my-2">
<h4 class="my-2"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Room Reservation Sale Order
</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
<img src="assets/screenshots/6.png" class="img-responsive img-thumbnail border"
width="100%"
height="auto"/>
</div>
<div class="col-lg-12 my-2">
<h4 class="my-2"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Reservation Invoice
</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
<img src="assets/screenshots/7.png" class="img-responsive img-thumbnail border"
width="100%"
height="auto"/>
</div>
<div class="col-lg-12 my-2">
<h4 class="my-2"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Room Check-In
</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
<img src="assets/screenshots/8.png" class="img-responsive img-thumbnail border"
width="100%"
height="auto"/>
</div>
<div class="col-lg-12 my-2">
<h4 class="my-2"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Room Check-Out
</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
<img src="assets/screenshots/9.png" class="img-responsive img-thumbnail border"
width="100%"
height="auto"/>
</div>
<div class="col-lg-12 my-2">
<h4 class="my-2"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Meals
</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
<img src="assets/screenshots/11.png" class="img-responsive img-thumbnail border"
width="100%"
height="auto"/>
</div>
</div>
<!-- SUGGESTED PRODUCTS -->
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center"
style="text-align: center; padding: 2.5rem 1rem !important;">
<h2 style="color: #212529 !important;">Suggested Products</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/>
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner">
<div class="carousel-item active" style="min-height:0px">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/export_stockinfo_xls/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/export_image.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/custom_gantt_view/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/gantt_image.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/sales_credit_limit/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/credit_image.png">
</div>
</a>
</div>
</div>
<div class="carousel-item" style="min-height:0px">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/base_account_budget/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/budget_image.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/product_to_quotation/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/quotation_image.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/employee_documents_expiry/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/employee_image.png">
</div>
</a>
</div>
</div>
</div>
<!-- END OF SUGGESTED PRODUCTS -->
<!-- OUR SERVICES -->
<section class="container" style="margin-top: 6rem !important;">
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 style="color: #212529 !important;">Our Services</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png" class="img-responsive" height="48px"
width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png" class="img-responsive" height="48px"
width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Hire
Odoo
Developer</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png" class="img-responsive" height="48px"
width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png" class="img-responsive" height="48px"
width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Migration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png" class="img-responsive" height="48px"
width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png" class="img-responsive" height="48px"
width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png" class="img-responsive" height="48px"
width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Licensing Consultancy</h6>
</div>
</div>
</section>
<!-- END OF END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<section class="container" style="margin-top: 6rem !important;">
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 style="color: #212529 !important;">Our Industries</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/trading-black.png" class="img-responsive mb-3"
height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easily procure
and
sell your products</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/pos-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easy
configuration
and convivial experience</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/education-black.png" class="img-responsive mb-3"
height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Education
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
A platform for
educational management</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/manufacturing-black.png" class="img-responsive mb-3"
height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Manufacturing
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Plan, track and
schedule your operations</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/ecom-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &amp; Website
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Mobile
friendly,
awe-inspiring product pages</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/service-black.png" class="img-responsive mb-3"
height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Service Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Keep track of
services and invoice</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/restaurant-black.png" class="img-responsive mb-3"
height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Restaurant
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Run your bar or
restaurant methodically</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/hotel-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Hotel Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
An
all-inclusive
hotel management application</p>
</div>
</div>
</div>
</section>
<!-- END OF END OF OUR INDUSTRIES -->
<!-- FOOTER -->
<!-- Footer Section -->
<section class="container" style="margin: 5rem auto 2rem;">
<div class="row" style="max-width:1540px;">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 style="color: #212529 !important;">Need Help?</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/>
</div>
</div>
<!-- Contact Cards -->
<div class="row d-flex justify-content-center align-items-center"
style="max-width:1540px; margin: 0 auto 2rem auto;">
<div class="col-lg-12"
style="padding: 0rem 3rem 2rem; border-radius: 10px; margin-right: 3rem; ">
<div class="row mt-4">
<div class="col-lg-6">
<a href="mailto:odoo@cybrosys.com" target="_blank"
class="btn btn-block mb-2 deep_hover"
style="text-decoration: none; background-color: #4d4d4d; color: #FFF; border-radius: 4px;"><i
class="fa fa-envelope mr-2"></i>odoo@cybrosys.com</a>
</div>
<div class="col-lg-6">
<a href="https://api.whatsapp.com/send?phone=918606827707" target="_blank"
class="btn btn-block mb-2 deep_hover"
style="text-decoration: none; background-color: #25D366; color: #FFF; border-radius: 4px;"><i
class="fa fa-whatsapp mr-2"></i>+91 86068 27707</a>
</div>
</div>
</div>
</div>
<!-- End of Contact Cards -->
</section>
<!-- Footer -->
<section class="container" style="padding: 2rem 3rem 1rem;">
<div class="row" style="max-width:1540px; margin: 0 auto; margin-right: 3rem; ">
<!-- Logo -->
<div class="col-lg-12 d-flex justify-content-center align-items-center"
style="margin-top: 3rem;">
<img src="https://www.cybrosys.com/images/logo.png" width="200px" height="auto"/>
</div>
<!-- End of Logo -->
<div class="col-lg-12">
<hr
style="margin-top: 3rem;background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;">
<!-- End of Footer Section -->
</div>
</div>
</section>
<!-- END OF FOOTER -->
</div>
</div>
</div>

104
hotel_management_odoo/views/hotel_amenity.xml

@ -0,0 +1,104 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_amenity_types" model="ir.actions.act_window">
<field name="name">Amenity Types</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">amenity.types</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create Amenity Type
</p>
</field>
</record>
<record id="view_hotel_amenity_type_form" model="ir.ui.view">
<field name="name">amenity.types.form</field>
<field name="model">amenity.types</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group>
<field name="name"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_hotel_service_type_tree" model="ir.ui.view">
<field name="name">amenity.types.tree</field>
<field name="model">amenity.types</field>
<field name="arch" type="xml">
<tree>
<field name="name" string="Amenity Type"/>
</tree>
</field>
</record>
<record id="view_amenity" model="ir.actions.act_window">
<field name="name">Amenities</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">hotel.amenity</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create Amenity
</p>
</field>
</record>
<record id="view_hotel_amenity_form" model="ir.ui.view">
<field name="name">hotel.amenity.form</field>
<field name="model">hotel.amenity</field>
<field name="arch" type="xml">
<form>
<sheet>
<h1>
<label for="name" string="Name"/>
<field name="name"/>
</h1>
<notebook>
<page string="Information">
<group>
<group>
<field name="detailed_type" string="Type"/>
<field name="manager_id"/>
</group>
<group>
<field name="type_id"/>
<field name="default_code"/>
</group>
</group>
</page>
<page string="Sales">
<group>
<group>
<field name="list_price"/>
<field name="taxes_id" widget="many2many_tags"/>
</group>
<group>
<field name="standard_price"/>
</group>
</group>
</page>
<page string="Description">
<field name="description" rowspan="4"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="view_hotel_amenity_tree" model="ir.ui.view">
<field name="name">hotel.amenity.tree</field>
<field name="model">hotel.amenity</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="type_id"/>
<field name="list_price"/>
</tree>
</field>
</record>
</odoo>

67
hotel_management_odoo/views/hotel_meals.xml

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_hotel_meals" model="ir.actions.act_window">
<field name="name">Meals</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">hotel.meals</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create Meal
</p>
</field>
</record>
<record id="view_hotel_meals_form" model="ir.ui.view">
<field name="name">hotel.meals.form</field>
<field name="model">hotel.meals</field>
<field name="arch" type="xml">
<form>
<sheet>
<h1>
<label for="name" string="Name"/>
<field name="name"/>
</h1>
<notebook>
<page string="Information">
<group>
<group>
<field name="detailed_type" string="Type"/>
<field name="manager_id"/>
</group>
<group>
<field name="meal_type_id"/>
<field name="default_code"/>
</group>
</group>
</page>
<page string="Sales">
<group>
<group>
<field name="list_price"/>
<field name="taxes_id" widget="many2many_tags"/>
</group>
<group>
<field name="standard_price"/>
</group>
</group>
</page>
<page string="Description">
<field name="description" rowspan="4"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="view_hotel_meals_tree" model="ir.ui.view">
<field name="name">hotel.meals.tree</field>
<field name="model">hotel.meals</field>
<field name="arch" type="xml">
<tree>
<field name="name" string="Name"/>
<field name="meal_type_id"/>
<field name="list_price"/>
</tree>
</field>
</record>
</odoo>

53
hotel_management_odoo/views/hotel_restaurant.xml

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Meal Types-->
<record id="view_meal_types" model="ir.actions.act_window">
<field name="name">Meal Types</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">meal.types</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create Meal Type
</p>
</field>
</record>
<record id="restaurant_meals_tree" model="ir.ui.view">
<field name="name">restaurant.meals.type.tree</field>
<field name="model">meal.types</field>
<field name="arch" type="xml">
<tree sample="1">
<field name="name"/>
</tree>
</field>
</record>
<record id="view_meals_form" model="ir.ui.view">
<field name="name">restaurant.meals.type.form</field>
<field name="model">meal.types</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group>
<field name="name"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<menuitem id="restaurant_root"
name="Restaurant"
parent="hotel_management_root"
sequence="2"/>
<menuitem id="meals_root"
name="Meals"
parent="restaurant_root"
action="view_hotel_meals"
sequence="9"/>
<menuitem id="meal_types_root"
name="Meal Types"
parent="restaurant_root"
action="view_meal_types"
sequence="10"/>
</odoo>

106
hotel_management_odoo/views/hotel_services.xml

@ -0,0 +1,106 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_hotel_service" model="ir.actions.act_window">
<field name="name">Hotel Services</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">hotel.service</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create Service
</p>
</field>
</record>
<record id="view_hotel_service_form" model="ir.ui.view">
<field name="name">hotel.service.form</field>
<field name="model">hotel.service</field>
<field name="arch" type="xml">
<form>
<sheet>
<h1>
<label for="name" string="Name"/>
<field name="name"/>
</h1>
<notebook>
<page string="Information">
<group>
<group>
<field name="detailed_type" string="Type"/>
<field name="manager_id"/>
</group>
<group>
<field name="category_id"/>
<field name="default_code"/>
</group>
</group>
</page>
<page string="Sales">
<group>
<group>
<field name="list_price"/>
<field name="taxes_id" widget="many2many_tags"/>
</group>
<group>
<field name="standard_price"/>
</group>
</group>
</page>
<page string="Description">
<field name="description" rowspan="4"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="view_hotel_service_tree" model="ir.ui.view">
<field name="name">hotel.service.tree</field>
<field name="model">hotel.service</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="category_id"/>
<field name="list_price"/>
</tree>
</field>
</record>
<!-- service category -->
<record id="view_service_categories" model="ir.actions.act_window">
<field name="name">Service Category</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">service.category</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create Service Category
</p>
</field>
</record>
<record id="view_hotel_service_category_form" model="ir.ui.view">
<field name="name">service.category.form</field>
<field name="model">service.category</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group>
<field name="name"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_hotel_service_type_tree" model="ir.ui.view">
<field name="name">service.category.tree</field>
<field name="model">service.category</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
</tree>
</field>
</record>
</odoo>

68
hotel_management_odoo/views/menus.xml

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<menuitem id="res_settings_root"
name="Configuration"
parent="hotel_management_root"
sequence="10"/>
<menuitem id="room_root"
name="Room"
parent="res_settings_root"
sequence="1"/>
<menuitem id="room"
name="Rooms"
parent="room_root"
action="view_rooms"
sequence="10"/>
<menuitem id="room_type"
name="Room Types"
parent="room_root"
action="view_room_types"
sequence="10"/>
<menuitem id="amenity_root"
name="Amenities"
parent="res_settings_root"
sequence="2"/>
<menuitem id="amenity_amenity"
name="Amenities"
parent="amenity_root"
action="view_amenity"
sequence="9"/>
<menuitem id="amenity_types"
name="Amenity Types"
parent="amenity_root"
action="view_amenity_types"
sequence="10"/>
<menuitem id="service_root"
name="Services"
parent="res_settings_root"
sequence="3"/>
<menuitem id="hotel_service"
name="Service"
parent="service_root"
action="view_hotel_service"
sequence="9"/>
<menuitem id="service_types"
name="Service Categories"
parent="service_root"
action="view_service_categories"
sequence="10"/>
<menuitem id="floor_root"
name="Floor"
parent="res_settings_root"
sequence="7"/>
<menuitem id="hotel_floor"
name="Floor"
parent="floor_root"
action="view_hotel_floor"
sequence="10"/>
<menuitem id="checkin_root"
name="Check-In"
parent="Reservation_root"
action="view_checkin"
sequence="11"/>
<menuitem id="checkout_root"
name="Check-Out"
parent="Reservation_root"
action="view_checkout"
sequence="12"/>
</odoo>

135
hotel_management_odoo/views/res_settings.xml

@ -0,0 +1,135 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_rooms" model="ir.actions.act_window">
<field name="name">Rooms</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">room.room</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create Room
</p>
</field>
</record>
<record id="view_room_room_tree" model="ir.ui.view">
<field name="name">room.room.tree</field>
<field name="model">room.room</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="type_id"/>
<field name="status"/>
<field name="list_price"/>
</tree>
</field>
</record>
<record id="view_rooms_form" model="ir.ui.view">
<field name="name">room.room.form</field>
<field name="model">room.room</field>
<field name="arch" type="xml">
<form>
<sheet>
<h1>
<label for="name" string="Name"/>
<field name="name"/>
<br/>
<span class="badge badge-pill o_field_badge o_field_widget o_readonly_modifier bg-warning"
style="font-size:15px;">
<field name="status" readonly="1"/>
</span>
</h1>
<notebook>
<page string="Information">
<group>
<group>
<field name="type_id"/>
<field name="manager_id"/>
</group>
<group>
<field name="floor_id"/>
<field name="num_person"/>
</group>
</group>
</page>
<page string="Sales">
<group>
<group>
<field name="list_price"/>
<field name="taxes_id" widget="many2many_tags"/>
</group>
<group>
<field name="standard_price"/>
</group>
</group>
</page>
<page string="Amenities">
<field name="amenity_ids">
<tree editable="top">
<field name="name"/>
<field name="type_id"/>
<field name="list_price" string="Price"/>
</tree>
</field>
</page>
<page string="Description">
<field name="description" rowspan="3"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!-- Room types-->
<record id="view_room_types" model="ir.actions.act_window">
<field name="name">Room Types</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">room.types</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create Room Type
</p>
</field>
</record>
<record id="view_room_type_form" model="ir.ui.view">
<field name="name">room.types.form</field>
<field name="model">room.types</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group>
<field name="name"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_room_type_tree" model="ir.ui.view">
<field name="name">room.types.tree</field>
<field name="model">room.types</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
</tree>
</field>
</record>
<!-- Floor-->
<record id="view_hotel_floor" model="ir.actions.act_window">
<field name="name">Floor</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">hotel.floor</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create Floor
</p>
</field>
</record>
</odoo>

100
hotel_management_odoo/views/room_checkin_in_out.xml

@ -0,0 +1,100 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_checkin" model="ir.actions.act_window">
<field name="name">Room Check-In</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">room.checkin</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create Check-In
</p>
</field>
</record>
<record id="view_checkin_tree" model="ir.ui.view">
<field name="name">room.checkin.tree</field>
<field name="model">room.checkin</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="reservation_id"/>
</tree>
</field>
</record>
<record id="view_checkin_form" model="ir.ui.view">
<field name="name">room.checkin.form</field>
<field name="model">room.checkin</field>
<field name="arch" type="xml">
<form>
<header>
<button id="button_confirm" name="action_checkin"
string="Check-in" class="btn-primary" type="object" states="draft"/>
<field name="state" widget="statusbar"
options="{'fold_field': 'fold'}"/>
</header>
<sheet>
<div class="oe_title">
<h1>
<field name="name" readonly="1"/>
</h1>
</div>
<group>
<group>
<field name="reservation_id"/>
<field name="rm_id"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_checkout" model="ir.actions.act_window">
<field name="name">Room Check-Out</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">room.checkout</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create Check-Out
</p>
</field>
</record>
<record id="view_checkout_tree" model="ir.ui.view">
<field name="name">room.checkout.tree</field>
<field name="model">room.checkout</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="reservation_id"/>
</tree>
</field>
</record>
<record id="view_checkout_form" model="ir.ui.view">
<field name="name">room.checkout.form</field>
<field name="model">room.checkout</field>
<field name="arch" type="xml">
<form>
<header>
<button id="button_confirm" name="action_checkout"
string="Check-out" class="btn-primary" type="object" states="draft"/>
<field name="state" widget="statusbar"
options="{'fold_field': 'fold'}"/>
</header>
<sheet>
<div class="oe_title">
<h1>
<field name="name" readonly="1"/>
</h1>
</div>
<group>
<group>
<field name="reservation_id"/>
<field name="rm_id"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
</odoo>

125
hotel_management_odoo/views/room_reservation.xml

@ -0,0 +1,125 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_reservation" model="ir.actions.act_window">
<field name="name">Rooms</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">room.reservation</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create Reservation
</p>
</field>
</record>
<record id="view_reservation_tree" model="ir.ui.view">
<field name="name">room.reservation.tree</field>
<field name="model">room.reservation</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="partner_id"/>
<field name="date_order"/>
<field name="state"/>
</tree>
</field>
</record>
<record id="view_reservation_form" model="ir.ui.view">
<field name="name">room.reservation.form</field>
<field name="model">room.reservation</field>
<field name="arch" type="xml">
<form>
<header>
<button id="button_confirm" name="action_confirm"
string="Confirm" class="btn-primary"
states="draft" type="object"/>
<button
name="%(sale.action_view_sale_advance_payment_inv)d"
string="Create Invoice"
type="action"
class="btn-primary"
states="confirm"
/>
<button id="button_cancel"
name="action_cancel"
string="Cancel" class="btn-btn"
states="confirm" type="object"/>
<field name="state" widget="statusbar"
options="{'clickable': '1', 'fold_field': 'fold'}"/>
</header>
<sheet>
<div class="oe_title">
<h1>
<field name="name" readonly="1"/>
</h1>
</div>
<group>
<group>
<field name="partner_id" string="Guest Name"/>
<field name="num_person"/>
<field name="company_id" invisible="1"/>
<field name="user_id" invisible="1"/>
</group>
<group>
<field name="date_order"/>
</group>
</group>
<notebook>
<page string="Booking Info">
<field name="reservation_line_ids">
<tree editable="bottom">
<field name="type_id" domain="[('is_room_categ','=',True)]"/>
<field name="product_id" domain="[('categ_id','=',type_id),('active','=',True)]"
string="Room No"/>
<field name="company_id" invisible="1"/>
<field name="checkin_date"/>
<field name="checkout_date"/>
<field name="product_uom_qty" string="Days"/>
<field name="price_unit" string="Rent"/>
<field name="tax_id" widget="many2many_tags"/>
<field name="price_subtotal"/>
<field invisible="1" name="currency_id"/>
</tree>
</field>
</page>
<page string="Services">
<field name="service_ids">
<tree editable="bottom">
<field name="product_id" domain="[('service_ok','=',True)]" string="Service"/>
<field name="company_id" invisible="1"/>
<field name="categ_id" string="Category"/>
<field name="price_unit" string="Price"/>
</tree>
</field>
</page>
<page string="Meals">
<field name="meals_ids">
<tree editable="bottom">
<field name="categ_id" domain="[('is_meals_categ','=',True)]"/>
<field name="product_id" domain="[('categ_id','=',categ_id)]" string="Meals"/>
<field name="checkin_date"/>
<field name="checkout_date"/>
<field name="product_uom_qty" string="Days"/>
<field name="price_unit" string="Price"/>
<field name="price_subtotal"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<menuitem id="hotel_management_root"
name="Hotel Management"
sequence="10"/>
<menuitem id="Reservation_root"
name="Reservation"
parent="hotel_management_root"
sequence="1"/>
<menuitem id="reservation"
name="Rooms"
parent="Reservation_root"
action="view_reservation"
sequence="10"/>
</odoo>

22
hotel_management_odoo/wizard/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 . import room_invoice

47
hotel_management_odoo/wizard/room_invoice.py

@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 fields, models
class PaymentInv(models.TransientModel):
_inherit = "sale.advance.payment.inv"
advance_payment_method = fields.Selection(
[("delivered", "Regular invoice"), ("percentage", "Down payment (percentage)"),
("fixed", "Down payment (fixed amount)")],
string="Create Invoice",
default="delivered",
required=True, )
def create_invoices(self):
ctx = self.env.context.copy()
if self._context.get("active_model") == "room.reservation":
HotelFolio = self.env["room.reservation"]
reservation = self.env["room.reservation"].browse(self._context.get("active_ids", []))
ctx.update(
{
'reservation_id': reservation.id,
'active_ids': reservation.sale_order_id.ids,
'active_id': reservation.sale_order_id.id,
}
)
return super(PaymentInv, self.with_context(**ctx)).create_invoices()
Loading…
Cancel
Save