From 0fb48fade2cce05c3acea0fcf43cd482bb122090 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo=20Lodeiros?= Date: Tue, 7 Jul 2020 18:05:22 +0200 Subject: [PATCH] [REF] Change Hotel by PMS and Property concept --- hotel/data/hotel_sequence.xml | 14 - hotel/data/menus.xml | 27 -- hotel/models/__init__.py | 37 --- hotel/models/inherited_ir_http.py | 35 --- hotel/models/inherited_res_users.py | 27 -- hotel/security/hotel_security.xml | 22 -- hotel/security/ir.model.access.csv | 66 ---- hotel/views/hotel_amenity_type_views.xml | 47 --- hotel/views/hotel_board_service_views.xml | 51 --- hotel/views/hotel_floor_views.xml | 47 --- .../views/hotel_room_closure_reason_views.xml | 43 --- hotel/views/inherited_webclient_templates.xml | 10 - {hotel => pms}/README.rst | 0 {hotel => pms}/__init__.py | 0 {hotel => pms}/__manifest__.py | 62 ++-- {hotel => pms}/data/cron_jobs.xml | 4 +- {hotel => pms}/data/email_template_cancel.xml | 34 +- {hotel => pms}/data/email_template_exit.xml | 6 +- {hotel => pms}/data/email_template_reserv.xml | 30 +- pms/data/menus.xml | 27 ++ .../hotel_data.xml => pms/data/pms_data.xml | 26 +- pms/data/pms_sequence.xml | 14 + .../hotel_demo.xml => pms/demo/pms_demo.xml | 296 +++++++++--------- {hotel => pms}/i18n/es.po | 0 pms/models/__init__.py | 37 +++ .../models/inherited_account_invoice.py | 8 +- .../models/inherited_account_invoice_line.py | 6 +- .../models/inherited_account_payment.py | 6 +- pms/models/inherited_ir_http.py | 35 +++ .../models/inherited_mail_compose_message.py | 4 +- .../models/inherited_payment_return.py | 12 +- .../models/inherited_product_pricelist.py | 26 +- .../models/inherited_product_template.py | 6 +- .../models/inherited_res_company.py | 2 +- .../models/inherited_res_partner.py | 8 +- pms/models/inherited_res_users.py | 27 ++ .../models/pms_amenity.py | 14 +- .../models/pms_amenity_type.py | 12 +- .../models/pms_board_service.py | 20 +- .../models/pms_board_service_line.py | 14 +- .../models/pms_board_service_room_type.py | 72 ++--- .../pms_board_service_room_type_line.py | 8 +- .../models/pms_cancelation_rule.py | 12 +- .../models/pms_checkin_partner.py | 50 +-- .../hotel_floor.py => pms/models/pms_floor.py | 10 +- .../hotel_folio.py => pms/models/pms_folio.py | 66 ++-- .../models/pms_property.py | 28 +- .../models/pms_reservation.py | 151 +++++---- .../models/pms_reservation_line.py | 12 +- .../hotel_room.py => pms/models/pms_room.py | 40 +-- .../models/pms_room_closure_reason.py | 6 +- .../models/pms_room_type.py | 48 +-- .../models/pms_room_type_class.py | 12 +- .../models/pms_room_type_restriction.py | 22 +- .../models/pms_room_type_restriction_item.py | 8 +- .../models/pms_service.py | 48 +-- .../models/pms_service_line.py | 14 +- .../models/pms_shared_room.py | 22 +- {hotel => pms}/readme/CONFIGURE.rst | 0 {hotel => pms}/readme/CONTRIBUTORS.rst | 0 {hotel => pms}/readme/CREDITS.rst | 0 {hotel => pms}/readme/DESCRIPTION.rst | 0 {hotel => pms}/readme/INSTALL.rst | 0 {hotel => pms}/readme/ROADMAP.rst | 0 {hotel => pms}/readme/USAGE.rst | 0 .../report/pms_folio.xml | 6 +- .../report/pms_folio_templates.xml | 2 +- pms/security/ir.model.access.csv | 66 ++++ pms/security/pms_security.xml | 22 ++ {hotel => pms}/static/description/icon.png | Bin .../src/js/views/list/list_controller.js | 8 +- .../src/js/widgets/switch_hotel_menu.js | 30 +- .../static/src/xml/pms_base_templates.xml | 2 +- .../templates/pms_email_template.xml | 46 +-- {hotel => pms}/tests/__init__.py | 0 {hotel => pms}/tests/common.py | 0 {hotel => pms}/tests/test_folio.py | 0 {hotel => pms}/tests/test_hotel_property.py | 0 {hotel => pms}/tests/test_hotel_room.py | 0 {hotel => pms}/tests/test_hotel_room_type.py | 0 .../tests/test_inherited_ir_http.py | 0 .../tests/test_inherited_product_pricelist.py | 0 {hotel => pms}/tests/test_massive_changes.py | 0 {hotel => pms}/tests/test_reservation.py | 0 {hotel => pms}/views/general.xml | 2 +- .../views/inherited_account_invoice_views.xml | 2 +- .../views/inherited_account_payment_views.xml | 0 .../inherited_product_pricelist_views.xml | 4 +- .../inherited_product_template_views.xml | 4 +- .../views/inherited_res_partner_views.xml | 14 +- .../views/inherited_res_users_views.xml | 6 +- pms/views/inherited_webclient_templates.xml | 10 + pms/views/pms_amenity_type_views.xml | 47 +++ .../views/pms_amenity_views.xml | 56 ++-- .../pms_board_service_room_type_views.xml | 14 +- pms/views/pms_board_service_views.xml | 47 +++ .../views/pms_cancelation_rule_views.xml | 26 +- .../views/pms_checkin_partner_views.xml | 30 +- pms/views/pms_floor_views.xml | 43 +++ .../views/pms_folio_views.xml | 74 ++--- .../views/pms_property_views.xml | 32 +- .../views/pms_reservation_views.xml | 77 +++-- pms/views/pms_room_closure_reason_views.xml | 40 +++ .../views/pms_room_type_class_views.xml | 31 +- .../pms_room_type_restriction_item_views.xml | 10 +- .../views/pms_room_type_restriction_views.xml | 16 +- .../views/pms_room_type_views.xml | 43 ++- .../views/pms_room_views.xml | 66 ++-- .../views/pms_service_line_views.xml | 55 ++-- .../views/pms_service_views.xml | 32 +- .../views/pms_shared_room_views.xml | 50 ++- {hotel => pms}/wizard/__init__.py | 0 .../wizard/folio_make_invoice_advance.py | 28 +- .../folio_make_invoice_advance_views.xml | 0 {hotel => pms}/wizard/massive_changes.py | 48 +-- {hotel => pms}/wizard/massive_changes.xml | 16 +- .../wizard/massive_price_reservation_days.py | 6 +- .../wizard/massive_price_reservation_days.xml | 12 +- {hotel => pms}/wizard/service_on_day.py | 8 +- {hotel => pms}/wizard/service_on_day.xml | 0 {hotel => pms}/wizard/split_reservation.py | 4 +- {hotel => pms}/wizard/split_reservation.xml | 12 +- {hotel => pms}/wizard/wizard_reservation.py | 90 +++--- {hotel => pms}/wizard/wizard_reservation.xml | 14 +- 124 files changed, 1493 insertions(+), 1549 deletions(-) delete mode 100644 hotel/data/hotel_sequence.xml delete mode 100644 hotel/data/menus.xml delete mode 100644 hotel/models/__init__.py delete mode 100644 hotel/models/inherited_ir_http.py delete mode 100644 hotel/models/inherited_res_users.py delete mode 100644 hotel/security/hotel_security.xml delete mode 100644 hotel/security/ir.model.access.csv delete mode 100644 hotel/views/hotel_amenity_type_views.xml delete mode 100644 hotel/views/hotel_board_service_views.xml delete mode 100644 hotel/views/hotel_floor_views.xml delete mode 100644 hotel/views/hotel_room_closure_reason_views.xml delete mode 100644 hotel/views/inherited_webclient_templates.xml rename {hotel => pms}/README.rst (100%) rename {hotel => pms}/__init__.py (100%) rename {hotel => pms}/__manifest__.py (53%) rename {hotel => pms}/data/cron_jobs.xml (90%) rename {hotel => pms}/data/email_template_cancel.xml (99%) rename {hotel => pms}/data/email_template_exit.xml (99%) rename {hotel => pms}/data/email_template_reserv.xml (99%) create mode 100644 pms/data/menus.xml rename hotel/data/hotel_data.xml => pms/data/pms_data.xml (51%) create mode 100644 pms/data/pms_sequence.xml rename hotel/demo/hotel_demo.xml => pms/demo/pms_demo.xml (56%) rename {hotel => pms}/i18n/es.po (100%) create mode 100644 pms/models/__init__.py rename {hotel => pms}/models/inherited_account_invoice.py (97%) rename {hotel => pms}/models/inherited_account_invoice_line.py (90%) rename {hotel => pms}/models/inherited_account_payment.py (97%) create mode 100644 pms/models/inherited_ir_http.py rename {hotel => pms}/models/inherited_mail_compose_message.py (86%) rename {hotel => pms}/models/inherited_payment_return.py (82%) rename {hotel => pms}/models/inherited_product_pricelist.py (65%) rename {hotel => pms}/models/inherited_product_template.py (89%) rename {hotel => pms}/models/inherited_res_company.py (93%) rename {hotel => pms}/models/inherited_res_partner.py (87%) create mode 100644 pms/models/inherited_res_users.py rename hotel/models/hotel_amenity.py => pms/models/pms_amenity.py (66%) rename hotel/models/hotel_amenity_type.py => pms/models/pms_amenity_type.py (59%) rename hotel/models/hotel_board_service.py => pms/models/pms_board_service.py (75%) rename hotel/models/hotel_board_service_line.py => pms/models/pms_board_service_line.py (76%) rename hotel/models/hotel_board_service_room_type.py => pms/models/pms_board_service_room_type.py (64%) rename hotel/models/hotel_board_service_room_type_line.py => pms/models/pms_board_service_room_type_line.py (76%) rename hotel/models/hotel_cancelation_rule.py => pms/models/pms_cancelation_rule.py (84%) rename hotel/models/hotel_checkin_partner.py => pms/models/pms_checkin_partner.py (86%) rename hotel/models/hotel_floor.py => pms/models/pms_floor.py (75%) rename hotel/models/hotel_folio.py => pms/models/pms_folio.py (95%) rename hotel/models/hotel_property.py => pms/models/pms_property.py (78%) rename hotel/models/hotel_reservation.py => pms/models/pms_reservation.py (93%) rename hotel/models/hotel_reservation_line.py => pms/models/pms_reservation_line.py (91%) rename hotel/models/hotel_room.py => pms/models/pms_room.py (73%) rename hotel/models/hotel_room_closure_reason.py => pms/models/pms_room_closure_reason.py (82%) rename hotel/models/hotel_room_type.py => pms/models/pms_room_type.py (82%) rename hotel/models/hotel_room_type_class.py => pms/models/pms_room_type_class.py (84%) rename hotel/models/hotel_room_type_restriction.py => pms/models/pms_room_type_restriction.py (54%) rename hotel/models/hotel_room_type_restriction_item.py => pms/models/pms_room_type_restriction_item.py (88%) rename hotel/models/hotel_service.py => pms/models/pms_service.py (94%) rename hotel/models/hotel_service_line.py => pms/models/pms_service_line.py (91%) rename hotel/models/hotel_shared_room.py => pms/models/pms_shared_room.py (90%) rename {hotel => pms}/readme/CONFIGURE.rst (100%) rename {hotel => pms}/readme/CONTRIBUTORS.rst (100%) rename {hotel => pms}/readme/CREDITS.rst (100%) rename {hotel => pms}/readme/DESCRIPTION.rst (100%) rename {hotel => pms}/readme/INSTALL.rst (100%) rename {hotel => pms}/readme/ROADMAP.rst (100%) rename {hotel => pms}/readme/USAGE.rst (100%) rename hotel/report/hotel_folio.xml => pms/report/pms_folio.xml (75%) rename hotel/report/hotel_folio_templates.xml => pms/report/pms_folio_templates.xml (99%) create mode 100644 pms/security/ir.model.access.csv create mode 100644 pms/security/pms_security.xml rename {hotel => pms}/static/description/icon.png (100%) rename {hotel => pms}/static/src/js/views/list/list_controller.js (76%) rename {hotel => pms}/static/src/js/widgets/switch_hotel_menu.js (52%) rename hotel/static/src/xml/hotel_base_templates.xml => pms/static/src/xml/pms_base_templates.xml (90%) rename hotel/templates/hotel_email_template.xml => pms/templates/pms_email_template.xml (73%) rename {hotel => pms}/tests/__init__.py (100%) rename {hotel => pms}/tests/common.py (100%) rename {hotel => pms}/tests/test_folio.py (100%) rename {hotel => pms}/tests/test_hotel_property.py (100%) rename {hotel => pms}/tests/test_hotel_room.py (100%) rename {hotel => pms}/tests/test_hotel_room_type.py (100%) rename {hotel => pms}/tests/test_inherited_ir_http.py (100%) rename {hotel => pms}/tests/test_inherited_product_pricelist.py (100%) rename {hotel => pms}/tests/test_massive_changes.py (100%) rename {hotel => pms}/tests/test_reservation.py (100%) rename {hotel => pms}/views/general.xml (67%) rename {hotel => pms}/views/inherited_account_invoice_views.xml (94%) rename {hotel => pms}/views/inherited_account_payment_views.xml (100%) rename {hotel => pms}/views/inherited_product_pricelist_views.xml (85%) rename {hotel => pms}/views/inherited_product_template_views.xml (90%) rename {hotel => pms}/views/inherited_res_partner_views.xml (77%) rename {hotel => pms}/views/inherited_res_users_views.xml (61%) create mode 100644 pms/views/inherited_webclient_templates.xml create mode 100644 pms/views/pms_amenity_type_views.xml rename hotel/views/hotel_amenity_views.xml => pms/views/pms_amenity_views.xml (74%) rename hotel/views/hotel_board_service_room_type_views.xml => pms/views/pms_board_service_room_type_views.xml (56%) create mode 100644 pms/views/pms_board_service_views.xml rename hotel/views/hotel_cancelation_rule_views.xml => pms/views/pms_cancelation_rule_views.xml (71%) rename hotel/views/hotel_checkin_partner_views.xml => pms/views/pms_checkin_partner_views.xml (88%) create mode 100644 pms/views/pms_floor_views.xml rename hotel/views/hotel_folio_views.xml => pms/views/pms_folio_views.xml (87%) rename hotel/views/hotel_property_views.xml => pms/views/pms_property_views.xml (71%) rename hotel/views/hotel_reservation_views.xml => pms/views/pms_reservation_views.xml (93%) create mode 100644 pms/views/pms_room_closure_reason_views.xml rename hotel/views/hotel_room_type_class_views.xml => pms/views/pms_room_type_class_views.xml (60%) rename hotel/views/hotel_room_type_restriction_item_views.xml => pms/views/pms_room_type_restriction_item_views.xml (76%) rename hotel/views/hotel_room_type_restriction_views.xml => pms/views/pms_room_type_restriction_views.xml (78%) rename hotel/views/hotel_room_type_views.xml => pms/views/pms_room_type_views.xml (69%) rename hotel/views/hotel_room_views.xml => pms/views/pms_room_views.xml (83%) rename hotel/views/hotel_service_line_views.xml => pms/views/pms_service_line_views.xml (65%) rename hotel/views/hotel_service_views.xml => pms/views/pms_service_views.xml (82%) rename hotel/views/hotel_shared_room_views.xml => pms/views/pms_shared_room_views.xml (65%) rename {hotel => pms}/wizard/__init__.py (100%) rename {hotel => pms}/wizard/folio_make_invoice_advance.py (96%) rename {hotel => pms}/wizard/folio_make_invoice_advance_views.xml (100%) rename {hotel => pms}/wizard/massive_changes.py (86%) rename {hotel => pms}/wizard/massive_changes.xml (86%) rename {hotel => pms}/wizard/massive_price_reservation_days.py (86%) rename {hotel => pms}/wizard/massive_price_reservation_days.xml (68%) rename {hotel => pms}/wizard/service_on_day.py (88%) rename {hotel => pms}/wizard/service_on_day.xml (100%) rename {hotel => pms}/wizard/split_reservation.py (85%) rename {hotel => pms}/wizard/split_reservation.xml (62%) rename {hotel => pms}/wizard/wizard_reservation.py (90%) rename {hotel => pms}/wizard/wizard_reservation.xml (93%) diff --git a/hotel/data/hotel_sequence.xml b/hotel/data/hotel_sequence.xml deleted file mode 100644 index 10231a31f..000000000 --- a/hotel/data/hotel_sequence.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - Hotel Folio - hotel.folio - F/ - 5 - - - - diff --git a/hotel/data/menus.xml b/hotel/data/menus.xml deleted file mode 100644 index bdf51467a..000000000 --- a/hotel/data/menus.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/hotel/models/__init__.py b/hotel/models/__init__.py deleted file mode 100644 index 480468fc1..000000000 --- a/hotel/models/__init__.py +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright 2018 Alexandre Díaz -# Copyright 2018 Dario Lodeiros -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from . import inherited_ir_http -from . import inherited_payment_return -from . import hotel_board_service_room_type -from . import hotel_property -from . import inherited_res_users -from . import hotel_floor -from . import hotel_folio -from . import hotel_reservation -from . import hotel_room -from . import hotel_shared_room -from . import hotel_amenity -from . import hotel_amenity_type -from . import hotel_room_type -from . import hotel_service -from . import inherited_account_invoice -from . import inherited_product_template -from . import inherited_res_company -from . import inherited_account_payment -from . import hotel_room_type_restriction -from . import hotel_room_type_restriction_item -from . import hotel_reservation_line -from . import hotel_checkin_partner -from . import inherited_product_pricelist -from . import inherited_res_partner -from . import inherited_mail_compose_message -from . import hotel_room_type_class -from . import hotel_room_closure_reason -from . import hotel_service_line -from . import hotel_board_service -from . import hotel_board_service_room_type_line -from . import hotel_board_service_line -from . import inherited_account_invoice_line -from . import hotel_cancelation_rule diff --git a/hotel/models/inherited_ir_http.py b/hotel/models/inherited_ir_http.py deleted file mode 100644 index bd18b5b49..000000000 --- a/hotel/models/inherited_ir_http.py +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright 2019 Pablo Quesada -# Copyright 2019 Dario Lodeiros -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import models, _ -from odoo.http import request -from odoo.exceptions import MissingError - - -class IrHttp(models.AbstractModel): - _inherit = 'ir.http' - - def session_info(self): - res = super().session_info() - user = request.env.user - display_switch_hotel_menu = len(user.hotel_ids) > 1 - # TODO: limit hotels to the current company? - # or switch company automatically - res['hotel_id'] = request.env.user.hotel_id.id if \ - request.session.uid else None - res['user_hotels'] = { - 'current_hotel': (user.hotel_id.id, user.hotel_id.name), - 'allowed_hotels': [ - (hotel.id, hotel.name) for hotel in user.hotel_ids - ] - } if display_switch_hotel_menu else False - if user.hotel_id.company_id in user.company_ids: - user.company_id = user.hotel_id.company_id - res['company_id'] = user.hotel_id.company_id.id - else: - raise MissingError( - _("Wrong hotel and company access settings for this user. " - "Please review hotel and company for user %s") % user.name) - - return res diff --git a/hotel/models/inherited_res_users.py b/hotel/models/inherited_res_users.py deleted file mode 100644 index 1f4843632..000000000 --- a/hotel/models/inherited_res_users.py +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright 2019 Pablo Quesada -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import models, api, fields - - -class ResUsers(models.Model): - _inherit = 'res.users' - - # Default Methods ang Gets - @api.model - def _get_default_hotel(self): - return self.env.user.hotel_id - - # Fields declaration - hotel_id = fields.Many2one( - 'hotel.property', - string='Hotel', - default=_get_default_hotel, - help='The hotel this user is currently working for.', - context={'user_preference': True}) - hotel_ids = fields.Many2many( - 'hotel.property', - 'hotel_property_users_rel', - 'user_id', - 'hotel_id', - string='Hotels', - default=_get_default_hotel) diff --git a/hotel/security/hotel_security.xml b/hotel/security/hotel_security.xml deleted file mode 100644 index 3214173bd..000000000 --- a/hotel/security/hotel_security.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - Hotel Management / User - - - - - Hotel Management/ Manager - - - - - - Hotel Management / CallCenter - - - - diff --git a/hotel/security/ir.model.access.csv b/hotel/security/ir.model.access.csv deleted file mode 100644 index 6074a4f4a..000000000 --- a/hotel/security/ir.model.access.csv +++ /dev/null @@ -1,66 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -user_access_hotel_floor,user_access_hotel_floor,model_hotel_floor,hotel.group_hotel_user,1,0,0,0 -user_access_hotel_amenity,user_access_hotel_amenity,model_hotel_amenity,hotel.group_hotel_user,1,0,0,0 -user_access_hotel_amenity_type,user_access_hotel_amenity_type,model_hotel_amenity_type,hotel.group_hotel_user,1,0,0,0 -user_access_hotel_service,user_access_hotel_service,model_hotel_service,hotel.group_hotel_user,1,1,1,1 -user_access_hotel_room_type_restriction,user_access_hotel_room_type_restriction,model_hotel_room_type_restriction,hotel.group_hotel_user,1,0,0,0 -user_access_hotel_reservation_line,user_access_hotel_reservation_line,model_hotel_reservation_line,hotel.group_hotel_user,1,1,1,1 -user_access_room_closure_reason,user_access_room_closure_reason,model_room_closure_reason,hotel.group_hotel_user,1,0,0,0 -user_access_hotel_service_line,user_access_hotel_service_line,model_hotel_service_line,hotel.group_hotel_user,1,1,1,1 -user_access_hotel_board_service,user_access_hotel_board_service,model_hotel_board_service,hotel.group_hotel_user,1,0,0,0 -user_access_hotel_checkin_partner,user_access_hotel_checkin_partner,model_hotel_checkin_partner,hotel.group_hotel_user,1,1,1,1 -user_access_hotel_room_type_class,user_access_hotel_room_type_class,model_hotel_room_type_class,hotel.group_hotel_user,1,0,0,0 -user_access_hotel_room,user_access_hotel_room,model_hotel_room,hotel.group_hotel_user,1,0,0,0 -user_access_shared_hotel_room,user_access_hotel_shared_room,model_hotel_shared_room,hotel.group_hotel_user,1,0,0,0 -user_access_hotel_room_type_restriction_item,user_access_hotel_room_type_restriction_item,model_hotel_room_type_restriction_item,hotel.group_hotel_user,1,0,0,0 -user_access_hotel_reservation,user_access_hotel_reservation,model_hotel_reservation,hotel.group_hotel_user,1,1,1,1 -user_access_hotel_folio,user_access_hotel_folio,model_hotel_folio,hotel.group_hotel_user,1,1,1,1 -user_access_hotel_room_type,user_access_hotel_room_type,model_hotel_room_type,hotel.group_hotel_user,1,0,0,0 -user_access_hotel_board_service_room_type,user_access_hotel_board_service_room_type,model_hotel_board_service_room_type,hotel.group_hotel_user,1,0,0,0 -user_access_hotel_board_service_room_type_line,user_access_hotel_board_service_room_type_line,model_hotel_board_service_room_type_line,hotel.group_hotel_user,1,0,0,0 -user_access_hotel_board_service_line,user_access_hotel_board_service_line,model_hotel_board_service_line,hotel.group_hotel_user,1,0,0,0 -user_access_account_partial_reconcile,user_access_account_partial_reconcile,account.model_account_partial_reconcile,hotel.group_hotel_user,1,1,1,1 -user_access_hotel_cancelation_rule,user_access_hotel_cancelation_rule,model_hotel_cancelation_rule,hotel.group_hotel_user,1,0,0,0 -user_access_account_full_reconcile,user_access_account_full_reconcile,account.model_account_full_reconcile,hotel.group_hotel_user,1,1,1,1 -manager_access_hotel_floor,manager_access_hotel_floor,model_hotel_floor,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_amenity,manager_access_hotel_amenity,model_hotel_amenity,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_amenity_type,manager_access_hotel_amenity_type,model_hotel_amenity_type,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_service,manager_access_hotel_service,model_hotel_service,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_room_type_restriction,manager_access_hotel_room_type_restriction,model_hotel_room_type_restriction,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_reservation_line,manager_access_hotel_reservation_line,model_hotel_reservation_line,hotel.group_hotel_manager,1,1,1,1 -manager_access_room_closure_reason,manager_access_room_closure_reason,model_room_closure_reason,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_service_line,manager_access_hotel_service_line,model_hotel_service_line,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_board_service,manager_access_hotel_board_service,model_hotel_board_service,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_checkin_partner,manager_access_hotel_checkin_partner,model_hotel_checkin_partner,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_room_type_class,manager_access_hotel_room_type_class,model_hotel_room_type_class,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_room,manager_access_hotel_room,model_hotel_room,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_shared_room,manager_access_hotel_shared_room,model_hotel_shared_room,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_room_type_restriction_item,manager_access_hotel_room_type_restriction_item,model_hotel_room_type_restriction_item,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_reservation,manager_access_hotel_reservation,model_hotel_reservation,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_folio,manager_access_hotel_folio,model_hotel_folio,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_room_type,manager_access_hotel_room_type,model_hotel_room_type,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_board_service_room_type,manager_access_hotel_board_service_room_type,model_hotel_board_service_room_type,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_board_service_room_type_line,manager_access_hotel_board_service_room_type_line,model_hotel_board_service_room_type_line,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_board_service_line,manager_access_hotel_board_service_line,model_hotel_board_service_line,hotel.group_hotel_manager,1,1,1,1 -manager_access_hotel_cancelation_rule,manager_access_hotel_cancelation_rule,model_hotel_cancelation_rule,base.group_user,1,1,1,1 -call_access_hotel_floor,call_access_hotel_floor,model_hotel_floor,hotel.group_hotel_call,1,0,0,0 -call_access_hotel_amenity,call_access_hotel_amenity,model_hotel_amenity,hotel.group_hotel_call,1,0,0,0 -call_access_hotel_amenity_type,call_access_hotel_amenity_type,model_hotel_amenity_type,hotel.group_hotel_call,1,0,0,0 -call_access_hotel_service,call_access_hotel_service,model_hotel_service,hotel.group_hotel_call,1,1,1,1 -call_access_hotel_room_type_restriction,call_access_hotel_room_type_restriction,model_hotel_room_type_restriction,hotel.group_hotel_call,1,0,0,0 -call_access_hotel_reservation_line,call_access_hotel_reservation_line,model_hotel_reservation_line,hotel.group_hotel_call,1,1,1,1 -call_access_room_closure_reason,call_access_room_closure_reason,model_room_closure_reason,hotel.group_hotel_call,1,0,0,0 -call_access_hotel_service_line,call_access_hotel_service_line,model_hotel_service_line,hotel.group_hotel_call,1,1,1,1 -call_access_hotel_board_service,call_access_hotel_board_service,model_hotel_board_service,hotel.group_hotel_call,1,0,0,0 -call_access_hotel_checkin_partner,call_access_hotel_checkin_partner,model_hotel_checkin_partner,hotel.group_hotel_call,1,1,1,1 -call_access_hotel_room_type_class,call_access_hotel_room_type_class,model_hotel_room_type_class,hotel.group_hotel_call,1,0,0,0 -call_access_hotel_room,call_access_hotel_room,model_hotel_room,hotel.group_hotel_call,1,0,0,0 -call_access_hotel_shared_room,call_access_hotel_shared_room,model_hotel_shared_room,hotel.group_hotel_call,1,0,0,0 -call_access_hotel_room_type_restriction_item,call_access_hotel_room_type_restriction_item,model_hotel_room_type_restriction_item,hotel.group_hotel_call,1,0,0,0 -call_access_hotel_reservation,call_access_hotel_reservation,model_hotel_reservation,hotel.group_hotel_call,1,1,1,1 -call_access_hotel_folio,call_access_hotel_folio,model_hotel_folio,hotel.group_hotel_call,1,1,1,1 -call_access_hotel_room_type,call_access_hotel_room_type,model_hotel_room_type,hotel.group_hotel_call,1,0,0,0 -call_access_hotel_board_service_room_type,call_access_hotel_board_service_room_type,model_hotel_board_service_room_type,hotel.group_hotel_call,1,0,0,0 -call_access_hotel_board_service_room_type_line,call_access_hotel_board_service_room_type_line,model_hotel_board_service_room_type_line,hotel.group_hotel_call,1,0,0,0 -call_access_hotel_board_service_line,call_access_hotel_board_service_line,model_hotel_board_service_line,hotel.group_hotel_call,1,0,0,0 -call_access_hotel_cancelation_rule,call_access_hotel_cancelation_rule,model_hotel_cancelation_rule,base.group_user,1,0,0,0 diff --git a/hotel/views/hotel_amenity_type_views.xml b/hotel/views/hotel_amenity_type_views.xml deleted file mode 100644 index 02c42a9c0..000000000 --- a/hotel/views/hotel_amenity_type_views.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - hotel.room_amenity_type_form - hotel.amenity.type - -
- - - - - - - - -
-
-
- - - - hotel.room_amenity_type_list - hotel.amenity.type - - - - - - - - - - Hotel Room amenity Type - hotel.amenity.type - form - tree,form - - - - -
diff --git a/hotel/views/hotel_board_service_views.xml b/hotel/views/hotel_board_service_views.xml deleted file mode 100644 index 99083ab0f..000000000 --- a/hotel/views/hotel_board_service_views.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - hotel.board.service.form - hotel.board.service - -
- - - - - - - - - - - -
-
-
- - - - hotel.board.service.tree - hotel.board.service - - - - - - - - - - - Board Services - hotel.board.service - form - tree,form - - - - -
diff --git a/hotel/views/hotel_floor_views.xml b/hotel/views/hotel_floor_views.xml deleted file mode 100644 index b52133fd8..000000000 --- a/hotel/views/hotel_floor_views.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - hotel.floor.form - hotel.floor - -
- - - - - - - -
-
-
- - - - hotel.floor.tree - hotel.floor - - - - - - - - - - - Floor Structure - hotel.floor - form - tree,form - - - - -
diff --git a/hotel/views/hotel_room_closure_reason_views.xml b/hotel/views/hotel_room_closure_reason_views.xml deleted file mode 100644 index c22f28e90..000000000 --- a/hotel/views/hotel_room_closure_reason_views.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - hotel.room.closure.reason.form - room.closure.reason - -
- - - - - -
-
-
- - - - >hotel.room.closure.reason.tree - room.closure.reason - - - - - - - - - - - Room Closure Reason - room.closure.reason - form - tree,form - - - -
diff --git a/hotel/views/inherited_webclient_templates.xml b/hotel/views/inherited_webclient_templates.xml deleted file mode 100644 index 10f1dea10..000000000 --- a/hotel/views/inherited_webclient_templates.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/hotel/README.rst b/pms/README.rst similarity index 100% rename from hotel/README.rst rename to pms/README.rst diff --git a/hotel/__init__.py b/pms/__init__.py similarity index 100% rename from hotel/__init__.py rename to pms/__init__.py diff --git a/hotel/__manifest__.py b/pms/__manifest__.py similarity index 53% rename from hotel/__manifest__.py rename to pms/__manifest__.py index c9c64cb47..a6bb73dd2 100644 --- a/hotel/__manifest__.py +++ b/pms/__manifest__.py @@ -2,11 +2,11 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - 'name': 'roomdoo', - 'summary': "A property management system focused on medium-sized hotels", + 'name': 'pms', + 'summary': "A property management system", 'version': '11.0.2.0.0', 'development_status': 'Beta', - 'category': 'Generic Modules/Hotel Management', + 'category': 'Generic Modules/Property Management System', 'website': 'https://github.com/hootel/hootel', 'author': 'Darío Lodeiros, ' 'Alexandre Díaz, ' @@ -17,24 +17,24 @@ 'installable': True, 'depends': [ 'base', - 'sale_stock', + 'mail', 'account_payment_return', 'partner_firstname', 'account_cancel', 'email_template_qweb' ], 'data': [ - 'security/hotel_security.xml', + 'security/pms_security.xml', 'security/ir.model.access.csv', 'data/cron_jobs.xml', - 'data/hotel_data.xml', - 'data/hotel_sequence.xml', + 'data/pms_data.xml', + 'data/pms_sequence.xml', 'data/email_template_cancel.xml', 'data/email_template_reserv.xml', 'data/email_template_exit.xml', - 'report/hotel_folio.xml', - 'report/hotel_folio_templates.xml', - 'templates/hotel_email_template.xml', + 'report/pms_folio.xml', + 'report/pms_folio_templates.xml', + 'templates/pms_email_template.xml', 'wizard/massive_changes.xml', 'wizard/massive_price_reservation_days.xml', 'wizard/service_on_day.xml', @@ -42,28 +42,28 @@ 'wizard/wizard_reservation.xml', 'views/general.xml', 'data/menus.xml', - 'views/hotel_amenity_views.xml', - 'views/hotel_amenity_type_views.xml', - 'views/hotel_board_service_views.xml', - 'views/hotel_board_service_room_type_views.xml', - 'views/hotel_cancelation_rule_views.xml', - 'views/hotel_checkin_partner_views.xml', - 'views/hotel_floor_views.xml', - 'views/hotel_folio_views.xml', - 'views/hotel_property_views.xml', - 'views/hotel_reservation_views.xml', - 'views/hotel_room_type_views.xml', - 'views/hotel_room_views.xml', - 'views/hotel_room_closure_reason_views.xml', + 'views/pms_amenity_views.xml', + 'views/pms_amenity_type_views.xml', + 'views/pms_board_service_views.xml', + 'views/pms_board_service_room_type_views.xml', + 'views/pms_cancelation_rule_views.xml', + 'views/pms_checkin_partner_views.xml', + 'views/pms_floor_views.xml', + 'views/pms_folio_views.xml', + 'views/pms_property_views.xml', + 'views/pms_reservation_views.xml', + 'views/pms_room_type_views.xml', + 'views/pms_room_views.xml', + 'views/pms_room_closure_reason_views.xml', 'views/inherited_account_payment_views.xml', 'views/inherited_account_invoice_views.xml', 'views/inherited_res_users_views.xml', - 'views/hotel_room_type_class_views.xml', - 'views/hotel_room_type_restriction_views.xml', - 'views/hotel_room_type_restriction_item_views.xml', - 'views/hotel_service_views.xml', - 'views/hotel_service_line_views.xml', - 'views/hotel_shared_room_views.xml', + 'views/pms_room_type_class_views.xml', + 'views/pms_room_type_restriction_views.xml', + 'views/pms_room_type_restriction_item_views.xml', + 'views/pms_service_views.xml', + 'views/pms_service_line_views.xml', + 'views/pms_shared_room_views.xml', 'views/inherited_res_partner_views.xml', 'views/inherited_product_pricelist_views.xml', 'views/inherited_product_template_views.xml', @@ -71,9 +71,9 @@ 'wizard/folio_make_invoice_advance_views.xml', ], 'demo': [ - 'demo/hotel_demo.xml' + 'demo/pms_demo.xml' ], 'qweb': [ - 'static/src/xml/hotel_base_templates.xml', + 'static/src/xml/pms_base_templates.xml', ], } \ No newline at end of file diff --git a/hotel/data/cron_jobs.xml b/pms/data/cron_jobs.xml similarity index 90% rename from hotel/data/cron_jobs.xml rename to pms/data/cron_jobs.xml index d49815a42..27b8d2a64 100644 --- a/hotel/data/cron_jobs.xml +++ b/pms/data/cron_jobs.xml @@ -10,7 +10,7 @@ days -1 - + model.reservation_reminder_24hrs() @@ -23,7 +23,7 @@ -1 code - + model.autocheckout() diff --git a/hotel/data/email_template_cancel.xml b/pms/data/email_template_cancel.xml similarity index 99% rename from hotel/data/email_template_cancel.xml rename to pms/data/email_template_cancel.xml index 0eb9cb5f9..898addefb 100644 --- a/hotel/data/email_template_cancel.xml +++ b/pms/data/email_template_cancel.xml @@ -1,15 +1,15 @@ - - - - - - - Cancel Reservation-Send by Email - Cancelación de su reserva en ${object.company_id.property_name} - ${(object.partner_id.id or '')} - - - + + + + + + + Cancel Reservation-Send by Email + Cancelación de su reserva en ${object.company_id.property_name} + ${(object.partner_id.id or '')} + + + /*Global Styles*/ @@ -704,8 +704,8 @@ - ]]> - - - - + ]]> + + + + diff --git a/hotel/data/email_template_exit.xml b/pms/data/email_template_exit.xml similarity index 99% rename from hotel/data/email_template_exit.xml rename to pms/data/email_template_exit.xml index 063ce826d..349f259ea 100644 --- a/hotel/data/email_template_exit.xml +++ b/pms/data/email_template_exit.xml @@ -2,12 +2,12 @@ - - + + Exit Reservation-Send by Email Gracias por alojarse con nosotros en ${object.company_id.property_name} ${(object.partner_id.id or '')} - + /*Global Styles*/ .marco {bgcolor:#f6f6f6; margin: 0; padding: 0; min-width: 100%!important;} diff --git a/hotel/data/email_template_reserv.xml b/pms/data/email_template_reserv.xml similarity index 99% rename from hotel/data/email_template_reserv.xml rename to pms/data/email_template_reserv.xml index 29cf0ccc3..991b46a50 100644 --- a/hotel/data/email_template_reserv.xml +++ b/pms/data/email_template_reserv.xml @@ -1,14 +1,14 @@ - - - - - - - Confirm Reservation-Send by Email - Confirmación de los detalles de su reserva en ${object.company_id.property_name} - ${(object.partner_id.id or '')} - - + + + + + + + Confirm Reservation-Send by Email + Confirmación de los detalles de su reserva en ${object.company_id.property_name} + ${(object.partner_id.id or '')} + + /*Global Styles*/ @@ -1036,7 +1036,7 @@ ]]> - - - - + + + + diff --git a/pms/data/menus.xml b/pms/data/menus.xml new file mode 100644 index 000000000..a6dde37ec --- /dev/null +++ b/pms/data/menus.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + diff --git a/hotel/data/hotel_data.xml b/pms/data/pms_data.xml similarity index 51% rename from hotel/data/hotel_data.xml rename to pms/data/pms_data.xml index deb1db09d..729c57b2b 100644 --- a/hotel/data/hotel_data.xml +++ b/pms/data/pms_data.xml @@ -2,41 +2,41 @@ - + - + - + - + - + Restriction Plan - - My Hotel + + My Property - + Rua Street Demo, s/n - Roomdoo city + Commitsun city 15703 +34 123 456 879 - roomdoo@hoteldemo.roomdoo.com - https://www.roomdoo.com + commitsun@hootel.com + https://www.commitsun.com - - + + \ No newline at end of file diff --git a/pms/data/pms_sequence.xml b/pms/data/pms_sequence.xml new file mode 100644 index 000000000..d0cf5f98c --- /dev/null +++ b/pms/data/pms_sequence.xml @@ -0,0 +1,14 @@ + + + + + + + PMS Folio + pms.folio + F/ + 5 + + + + diff --git a/hotel/demo/hotel_demo.xml b/pms/demo/pms_demo.xml similarity index 56% rename from hotel/demo/hotel_demo.xml rename to pms/demo/pms_demo.xml index 7dcacfd8c..9d1629efc 100644 --- a/hotel/demo/hotel_demo.xml +++ b/pms/demo/pms_demo.xml @@ -2,170 +2,170 @@ - + - + Ground Floor - + First Floor - + Second Floor - + - + Toiletries - + Connectivity - + Kitchen facilities - + - + Shampoo and Soap - + - + High-quality Shampoo and Soap Essential Herbs - + - + Hair Dryer - + - + High speed Wired Internet access - + - + Wi-Fi - + - + Microwave oven - + - + Half-sized Refrigerator - + - + - + Room - + Conference - + - + Economic ECO 21.00 - + + eval="[(4, ref('pms_amenity_0'))]"/> - + Single SNG 20.00 - + + eval="[(4, ref('pms_amenity_0')), (4, ref('pms_amenity_4'))]"/> - + Double DBL 25.00 - + + eval="[(4, ref('pms_amenity_0')), (4, ref('pms_amenity_4'))]"/> - + Triple TRP 35.00 - + + eval="[(4, ref('pms_amenity_0')), (4, ref('pms_amenity_4'))]"/> - + Conference Room CFR 80.00 - + + eval="[(4, ref('pms_amenity_3')), (4, ref('pms_amenity_4'))]"/> - + - + Economic-101 - - + + 2 - + Single-101 - - + + 1 - + Single-102 - - + + 1 - + Single-103 - - + + 1 - + Double-201 - - + + 2 1 - + Double-202 - - + + 2 - + Triple-203 - - + + 3 - + Open Talk Away Room - - + + 1 - + - + Breakfast Buffet 5.0 service @@ -174,7 +174,7 @@ True - + Extra Bed 15.0 service @@ -186,7 +186,7 @@ True - + Late Check-out 10.0 service @@ -195,7 +195,7 @@ False - + Lunch 15.0 service @@ -204,7 +204,7 @@ True - + Dinner 20.0 service @@ -213,7 +213,7 @@ True - + Free Bar 40.0 service @@ -222,71 +222,71 @@ True - + - + BreakFast fixed - + Half Board fixed - + FullBoard fixed - + - - - + + + fixed - - - + + + fixed - - - + + + fixed @@ -294,74 +294,74 @@ - - - + + + fixed - - - + + + fixed - + Maintenance Used for closing of rooms which require a maintenance. You can specify the reason in the own reservation. - + VIP Privacy Used for closing of rooms for extra privacy. - + - + - + - + - + - - + + out - - + + Restriction Plan Demo - - My Hotel Demo + + My pms Demo - + - + - - + + Economic ECO 21.00 - + + eval="[(4, ref('pms_amenity_0'))]"/> - - + + Single SNG 20.00 - + + eval="[(4, ref('pms_amenity_0')), (4, ref('pms_amenity_4'))]"/> diff --git a/hotel/i18n/es.po b/pms/i18n/es.po similarity index 100% rename from hotel/i18n/es.po rename to pms/i18n/es.po diff --git a/pms/models/__init__.py b/pms/models/__init__.py new file mode 100644 index 000000000..2c19117c2 --- /dev/null +++ b/pms/models/__init__.py @@ -0,0 +1,37 @@ +# Copyright 2018 Alexandre Díaz +# Copyright 2018 Dario Lodeiros +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import inherited_ir_http +from . import inherited_payment_return +from . import pms_board_service_room_type +from . import pms_property +from . import inherited_res_users +from . import pms_floor +from . import pms_folio +from . import pms_reservation +from . import pms_room +from . import pms_shared_room +from . import pms_amenity +from . import pms_amenity_type +from . import pms_room_type +from . import pms_service +from . import inherited_account_invoice +from . import inherited_product_template +from . import inherited_res_company +from . import inherited_account_payment +from . import pms_room_type_restriction +from . import pms_room_type_restriction_item +from . import pms_reservation_line +from . import pms_checkin_partner +from . import inherited_product_pricelist +from . import inherited_res_partner +from . import inherited_mail_compose_message +from . import pms_room_type_class +from . import pms_room_closure_reason +from . import pms_service_line +from . import pms_board_service +from . import pms_board_service_room_type_line +from . import pms_board_service_line +from . import inherited_account_invoice_line +from . import pms_cancelation_rule diff --git a/hotel/models/inherited_account_invoice.py b/pms/models/inherited_account_invoice.py similarity index 97% rename from hotel/models/inherited_account_invoice.py rename to pms/models/inherited_account_invoice.py index c673cbf34..af626ef9b 100644 --- a/hotel/models/inherited_account_invoice.py +++ b/pms/models/inherited_account_invoice.py @@ -11,10 +11,10 @@ class AccountInvoice(models.Model): # Field Declarations folio_ids = fields.Many2many( - comodel_name='hotel.folio', + comodel_name='pms.folio', compute='_computed_folio_origin') - hotel_id = fields.Many2one( - 'hotel.property') + pms_property_id = fields.Many2one( + 'pms.property') from_folio = fields.Boolean( compute='_computed_folio_origin') outstanding_folios_debits_widget = fields.Text( @@ -37,7 +37,7 @@ class AccountInvoice(models.Model): def action_folio_payments(self): self.ensure_one() sales = self.mapped('invoice_line_ids.sale_line_ids.order_id') - folios = self.env['hotel.folio'].search([ + folios = self.env['pms.folio'].search([ ('order_id.id', 'in', sales.ids) ]) payments_obj = self.env['account.payment'] diff --git a/hotel/models/inherited_account_invoice_line.py b/pms/models/inherited_account_invoice_line.py similarity index 90% rename from hotel/models/inherited_account_invoice_line.py rename to pms/models/inherited_account_invoice_line.py index d8217c111..c1fa24499 100644 --- a/hotel/models/inherited_account_invoice_line.py +++ b/pms/models/inherited_account_invoice_line.py @@ -9,17 +9,17 @@ class AccountInvoiceLine(models.Model): # Fields declaration reservation_ids = fields.Many2many( - 'hotel.reservation', + 'pms.reservation', 'reservation_invoice_rel', 'invoice_line_id', 'reservation_id', string='Reservations', readonly=True, copy=False) service_ids = fields.Many2many( - 'hotel.service', + 'pms.service', 'service_line_invoice_rel', 'invoice_line_id', 'service_id', string='Services', readonly=True, copy=False) reservation_line_ids = fields.Many2many( - 'hotel.reservation.line', + 'pms.reservation.line', 'reservation_line_invoice_rel', 'invoice_line_id', 'reservation_line_id', string='Reservation Lines', readonly=True, copy=False) diff --git a/hotel/models/inherited_account_payment.py b/pms/models/inherited_account_payment.py similarity index 97% rename from hotel/models/inherited_account_payment.py rename to pms/models/inherited_account_payment.py index 9e15b18d6..0bd351b40 100644 --- a/hotel/models/inherited_account_payment.py +++ b/pms/models/inherited_account_payment.py @@ -9,7 +9,7 @@ class AccountPayment(models.Model): # Fields declaration folio_id = fields.Many2one( - 'hotel.folio', + 'pms.folio', string='Folio') amount_total_folio = fields.Float( compute="_compute_folio_amount", store=True, @@ -28,7 +28,7 @@ class AccountPayment(models.Model): fol = () for payment in self: if payment.folio_id: - fol = payment.env['hotel.folio'].search([ + fol = payment.env['pms.folio'].search([ ('id', '=', payment.folio_id.id) ]) else: @@ -136,7 +136,7 @@ class AccountPayment(models.Model): @api.multi def modify_payment(self): self.ensure_one() - view_form_id = self.env.ref('hotel.account_payment_view_form_folio').id + view_form_id = self.env.ref('pms.account_payment_view_form_folio').id # invoices = self.mapped('invoice_ids.id') return{ 'name': _('Payment'), diff --git a/pms/models/inherited_ir_http.py b/pms/models/inherited_ir_http.py new file mode 100644 index 000000000..e9337fb49 --- /dev/null +++ b/pms/models/inherited_ir_http.py @@ -0,0 +1,35 @@ +# Copyright 2019 Pablo Quesada +# Copyright 2019 Dario Lodeiros +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models, _ +from odoo.http import request +from odoo.exceptions import MissingError + + +class IrHttp(models.AbstractModel): + _inherit = 'ir.http' + + def session_info(self): + res = super().session_info() + user = request.env.user + display_switch_pms_menu = len(user.pms_property_ids) > 1 + # TODO: limit properties to the current company? + # or switch company automatically + res['pms_property_id'] = request.env.user.pms_property_id.id if \ + request.session.uid else None + res['user_properties'] = { + 'current_property': (user.pms_property_id.id, user.pms_property_id.name), + 'allowed_properties': [ + (property.id, property.name) for property in user.pms_property_ids + ] + } if display_switch_pms_menu else False + if user.pms_property_id.company_id in user.company_ids: + user.company_id = user.pms_property_id.company_id + res['company_id'] = user.pms_property_id.company_id.id + else: + raise MissingError( + _("Wrong property and company access settings for this user. " + "Please review property and company for user %s") % user.name) + + return res diff --git a/hotel/models/inherited_mail_compose_message.py b/pms/models/inherited_mail_compose_message.py similarity index 86% rename from hotel/models/inherited_mail_compose_message.py rename to pms/models/inherited_mail_compose_message.py index faf1cffb9..4cc4fda01 100644 --- a/hotel/models/inherited_mail_compose_message.py +++ b/pms/models/inherited_mail_compose_message.py @@ -9,10 +9,10 @@ class MailComposeMessage(models.TransientModel): @api.multi def send_mail(self, auto_commit=False): - if self._context.get('default_model') == 'hotel.folio' and \ + if self._context.get('default_model') == 'pms.folio' and \ self._context.get('default_res_id') and \ self._context.get('mark_so_as_sent'): - folio = self.env['hotel.folio'].browse([ + folio = self.env['pms.folio'].browse([ self._context['default_res_id'] ]) if folio: diff --git a/hotel/models/inherited_payment_return.py b/pms/models/inherited_payment_return.py similarity index 82% rename from hotel/models/inherited_payment_return.py rename to pms/models/inherited_payment_return.py index b7726c609..458e72111 100644 --- a/hotel/models/inherited_payment_return.py +++ b/pms/models/inherited_payment_return.py @@ -8,13 +8,13 @@ class PaymentReturn(models.Model): # Fields declaration folio_id = fields.Many2one( - 'hotel.folio', + 'pms.folio', string='Folio') - hotel_id = fields.Many2one( - 'hotel.property', + pms_property_id = fields.Many2one( + 'pms.property', store=True, readonly=True, - related='folio_id.hotel_id') + related='folio_id.pms_property_id') # Business methods @api.multi @@ -22,12 +22,12 @@ class PaymentReturn(models.Model): pay = super(PaymentReturn, self).action_confirm() if pay: folio_ids = [] - folios = self.env['hotel.folio'].browse(folio_ids) + folios = self.env['pms.folio'].browse(folio_ids) for line in self.line_ids: payments = self.env['account.payment'].search([ ('move_line_ids', 'in', line.move_line_ids.ids) ]) - folios_line = self.env['hotel.folio'].browse( + folios_line = self.env['pms.folio'].browse( payments.mapped('folio_id.id')) for folio in folios_line: if self.id not in folio.return_ids.ids: diff --git a/hotel/models/inherited_product_pricelist.py b/pms/models/inherited_product_pricelist.py similarity index 65% rename from hotel/models/inherited_product_pricelist.py rename to pms/models/inherited_product_pricelist.py index 6797cf9a5..b33d66d25 100644 --- a/hotel/models/inherited_product_pricelist.py +++ b/pms/models/inherited_product_pricelist.py @@ -7,18 +7,18 @@ from odoo.exceptions import ValidationError class ProductPricelist(models.Model): """ Before creating a 'daily' pricelist, you need to consider the following: A pricelist marked as daily is used as a daily rate plan for room types and - therefore is related only with one hotel. + therefore is related only with one property. """ _inherit = 'product.pricelist' # Fields declaration - hotel_ids = fields.Many2many( - 'hotel.property', - string='Hotels', + pms_property_ids = fields.Many2many( + 'pms.property', + string='Properties', required=False, ondelete='restrict') cancelation_rule_id = fields.Many2one( - 'hotel.cancelation.rule', + 'pms.cancelation.rule', string="Cancelation Policy") pricelist_type = fields.Selection([ ('daily', 'Daily Plan')], @@ -27,21 +27,21 @@ class ProductPricelist(models.Model): is_staff = fields.Boolean('Is Staff') # Constraints and onchanges - @api.constrains('pricelist_type', 'hotel_ids') - def _check_pricelist_type_hotel_ids(self): + @api.constrains('pricelist_type', 'pms_property_ids') + def _check_pricelist_type_property_ids(self): for record in self: - if record.pricelist_type == 'daily' and len(record.hotel_ids) != 1: + if record.pricelist_type == 'daily' and len(record.pms_property_ids) != 1: raise ValidationError( _("A daily pricelist is used as a daily Rate Plan " "for room types and therefore must be related with " - "one and only one hotel.")) + "one and only one property.")) - if record.pricelist_type == 'daily' and len(record.hotel_ids) == 1: - hotel_id = self.env['hotel.property'].search([ + if record.pricelist_type == 'daily' and len(record.pms_property_ids) == 1: + pms_property_id = self.env['pms.property'].search([ ('default_pricelist_id', '=', record.id) ]) or None - if hotel_id and hotel_id != record.hotel_ids: + if pms_property_id and pms_property_id != record.pms_property_ids: raise ValidationError( _("Relationship mismatch.") + " " + _("This pricelist is used as default in a " - "different hotel.")) + "different property.")) diff --git a/hotel/models/inherited_product_template.py b/pms/models/inherited_product_template.py similarity index 89% rename from hotel/models/inherited_product_template.py rename to pms/models/inherited_product_template.py index d0937651a..7f47a4798 100644 --- a/hotel/models/inherited_product_template.py +++ b/pms/models/inherited_product_template.py @@ -7,9 +7,9 @@ from odoo import models, fields class ProductTemplate(models.Model): _inherit = "product.template" - hotel_ids = fields.Many2many( - 'hotel.property', - string='Hotels', + pms_property_ids = fields.Many2many( + 'pms.property', + string='Properties', required=False, ondelete='restrict') per_day = fields.Boolean('Unit increment per day') diff --git a/hotel/models/inherited_res_company.py b/pms/models/inherited_res_company.py similarity index 93% rename from hotel/models/inherited_res_company.py rename to pms/models/inherited_res_company.py index 79b3a7eb7..5673e78d2 100644 --- a/hotel/models/inherited_res_company.py +++ b/pms/models/inherited_res_company.py @@ -8,7 +8,7 @@ class ResCompany(models.Model): _inherit = 'res.company' # Fields declaration - hotel_ids = fields.One2many('hotel.property', 'company_id', 'Hotels') + pms_property_ids = fields.One2many('pms.property', 'company_id', 'Properties') # TODO: need extra explanation or remove otherwise # additional_hours = fields.Integer('Additional Hours', # help="Provide the min hours value for \ diff --git a/hotel/models/inherited_res_partner.py b/pms/models/inherited_res_partner.py similarity index 87% rename from hotel/models/inherited_res_partner.py rename to pms/models/inherited_res_partner.py index a2370bf0d..2d12144fb 100644 --- a/hotel/models/inherited_res_partner.py +++ b/pms/models/inherited_res_partner.py @@ -22,16 +22,16 @@ class ResPartner(models.Model): # Compute and Search methods def _compute_reservations_count(self): - hotel_reservation_obj = self.env['hotel.reservation'] + pms_reservation_obj = self.env['pms.reservation'] for record in self: - record.reservations_count = hotel_reservation_obj.search_count([ + record.reservations_count = pms_reservation_obj.search_count([ ('partner_id.id', '=', record.id) ]) def _compute_folios_count(self): - hotel_folio_obj = self.env['hotel.folio'] + pms_folio_obj = self.env['pms.folio'] for record in self: - record.folios_count = hotel_folio_obj.search_count([ + record.folios_count = pms_folio_obj.search_count([ ('partner_id.id', '=', record.id) ]) diff --git a/pms/models/inherited_res_users.py b/pms/models/inherited_res_users.py new file mode 100644 index 000000000..16ab1b4a5 --- /dev/null +++ b/pms/models/inherited_res_users.py @@ -0,0 +1,27 @@ +# Copyright 2019 Pablo Quesada +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import models, api, fields + + +class ResUsers(models.Model): + _inherit = 'res.users' + + # Default Methods ang Gets + @api.model + def _get_default_pms_property(self): + return self.env.user.pms_property_id + + # Fields declaration + pms_property_id = fields.Many2one( + 'pms.property', + string='Property', + default=_get_default_pms_property, + help='The property this user is currently working for.', + context={'user_preference': True}) + pms_property_ids = fields.Many2many( + 'pms.property', + 'pms_property_users_rel', + 'user_id', + 'property_id', + string='Properties', + default=_get_default_pms_property) diff --git a/hotel/models/hotel_amenity.py b/pms/models/pms_amenity.py similarity index 66% rename from hotel/models/hotel_amenity.py rename to pms/models/pms_amenity.py index 43bc47f2b..ba4127903 100644 --- a/hotel/models/hotel_amenity.py +++ b/pms/models/pms_amenity.py @@ -4,21 +4,21 @@ from odoo import models, fields -class HotelRoomAmenity(models.Model): - _name = 'hotel.amenity' +class PmsRoomAmenity(models.Model): + _name = 'pms.amenity' _description = 'Room amenities' # Fields declaration name = fields.Char('Amenity Name', translate=True, required=True) - hotel_ids = fields.Many2many( - 'hotel.property', - string='Hotels', + pms_property_ids = fields.Many2many( + 'pms.property', + string='Properties', required=False, ondelete='restrict') room_amenity_type_id = fields.Many2one( - 'hotel.amenity.type', + 'pms.amenity.type', 'Amenity Category') default_code = fields.Char('Internal Reference') active = fields.Boolean('Active', default=True) - # TODO: Constrain coherence hotel_ids with amenity types hotel_ids + # TODO: Constrain coherence pms_property_ids with amenity types pms_property_ids diff --git a/hotel/models/hotel_amenity_type.py b/pms/models/pms_amenity_type.py similarity index 59% rename from hotel/models/hotel_amenity_type.py rename to pms/models/pms_amenity_type.py index 502861e0a..a94ac3080 100644 --- a/hotel/models/hotel_amenity_type.py +++ b/pms/models/pms_amenity_type.py @@ -4,17 +4,17 @@ from odoo import models, fields -class HotelRoomAmenityType(models.Model): - _name = 'hotel.amenity.type' +class PmsRoomAmenityType(models.Model): + _name = 'pms.amenity.type' _description = 'Amenities Type' # Fields declaration name = fields.Char('Amenity Type Name', translate=True, required=True) - hotel_ids = fields.Many2many( - 'hotel.property', string='Hotels', required=False, ondelete='restrict') - room_amenity_ids = fields.One2many('hotel.amenity', + pms_property_ids = fields.Many2many( + 'pms.property', string='Properties', required=False, ondelete='restrict') + room_amenity_ids = fields.One2many('pms.amenity', 'room_amenity_type_id', 'Amenities in this category') active = fields.Boolean('Active', default=True) - # TODO: Constrain coherence hotel_ids with amenities hotel_ids + # TODO: Constrain coherence pms_property_ids with amenities pms_property_ids diff --git a/hotel/models/hotel_board_service.py b/pms/models/pms_board_service.py similarity index 75% rename from hotel/models/hotel_board_service.py rename to pms/models/pms_board_service.py index 275f284b5..4ee367001 100644 --- a/hotel/models/hotel_board_service.py +++ b/pms/models/pms_board_service.py @@ -4,8 +4,8 @@ from odoo import api, models, fields from odoo.addons import decimal_precision as dp -class HotelBoardService(models.Model): - _name = "hotel.board.service" +class PmsBoardService(models.Model): + _name = "pms.board.service" _description = "Board Services" # Fields declaration @@ -16,16 +16,16 @@ class HotelBoardService(models.Model): required=True, index=True) board_service_line_ids = fields.One2many( - 'hotel.board.service.line', - 'hotel_board_service_id') - hotel_ids = fields.Many2many( - 'hotel.property', - string='Hotels', + 'pms.board.service.line', + 'pms_board_service_id') + pms_property_ids = fields.Many2many( + 'pms.property', + string='Properties', required=False, ondelete='restrict') - hotel_board_service_room_type_ids = fields.One2many( - 'hotel.board.service.room.type', - 'hotel_board_service_id') + pms_board_service_room_type_ids = fields.One2many( + 'pms.board.service.room.type', + 'pms_board_service_id') price_type = fields.Selection([ ('fixed', 'Fixed'), ('percent', 'Percent')], diff --git a/hotel/models/hotel_board_service_line.py b/pms/models/pms_board_service_line.py similarity index 76% rename from hotel/models/hotel_board_service_line.py rename to pms/models/pms_board_service_line.py index 8dfd69071..3c3e996c3 100644 --- a/hotel/models/hotel_board_service_line.py +++ b/pms/models/pms_board_service_line.py @@ -4,8 +4,8 @@ from odoo import api, fields, models from odoo.addons import decimal_precision as dp -class HotelBoardServiceLine(models.Model): - _name = 'hotel.board.service.line' +class PmsBoardServiceLine(models.Model): + _name = 'pms.board.service.line' _description = 'Services on Board Service included' # Default methods @@ -14,8 +14,8 @@ class HotelBoardServiceLine(models.Model): return self.product_id.list_price # Fields declaration - hotel_board_service_id = fields.Many2one( - 'hotel.board.service', + pms_board_service_id = fields.Many2one( + 'pms.board.service', 'Board Service', ondelete='cascade', required=True) @@ -23,9 +23,9 @@ class HotelBoardServiceLine(models.Model): 'product.product', string='Product', required=True) - hotel_ids = fields.Many2many( - 'hotel.property', - related='hotel_board_service_id.hotel_ids') + pms_property_ids = fields.Many2many( + 'pms.property', + related='pms_board_service_id.pms_property_ids') amount = fields.Float( 'Amount', digits=dp.get_precision('Product Price'), diff --git a/hotel/models/hotel_board_service_room_type.py b/pms/models/pms_board_service_room_type.py similarity index 64% rename from hotel/models/hotel_board_service_room_type.py rename to pms/models/pms_board_service_room_type.py index 290182ba0..6876fc19f 100644 --- a/hotel/models/hotel_board_service_room_type.py +++ b/pms/models/pms_board_service_room_type.py @@ -5,10 +5,10 @@ from odoo.addons import decimal_precision as dp from odoo.exceptions import UserError -class HotelBoardServiceRoomType(models.Model): - _name = 'hotel.board.service.room.type' - _table = 'hotel_board_service_room_type_rel' - _rec_name = 'hotel_board_service_id' +class PmsBoardServiceRoomType(models.Model): + _name = 'pms.board.service.room.type' + _table = 'pms_board_service_room_type_rel' + _rec_name = 'pms_board_service_id' _log_access = False _description = 'Board Service included in Room' @@ -19,23 +19,23 @@ class HotelBoardServiceRoomType(models.Model): for res in self: if res.pricelist_id: name = u'%s (%s)' % ( - res.hotel_board_service_id.name, + res.pms_board_service_id.name, res.pricelist_id.name) else: - name = u'%s (%s)' % (res.hotel_board_service_id.name, + name = u'%s (%s)' % (res.pms_board_service_id.name, _('Generic')) result.append((res.id, name)) return result # Fields declaration - hotel_board_service_id = fields.Many2one( - 'hotel.board.service', + pms_board_service_id = fields.Many2one( + 'pms.board.service', string='Board Service', index=True, ondelete='cascade', required=True) - hotel_room_type_id = fields.Many2one( - 'hotel.room.type', + pms_room_type_id = fields.Many2one( + 'pms.room.type', string='Room Type', index=True, ondelete='cascade', @@ -45,11 +45,11 @@ class HotelBoardServiceRoomType(models.Model): string='Pricelist', required=False) board_service_line_ids = fields.One2many( - 'hotel.board.service.room.type.line', - 'hotel_board_service_room_type_id') - hotel_id = fields.Many2one( - 'hotel.property', - related='hotel_room_type_id.hotel_id') + 'pms.board.service.room.type.line', + 'pms_board_service_room_type_id') + pms_property_id = fields.Many2one( + 'pms.property', + related='pms_room_type_id.pms_property_id') price_type = fields.Selection([ ('fixed', 'Fixed'), ('percent', 'Percent')], @@ -76,22 +76,22 @@ class HotelBoardServiceRoomType(models.Model): def constrains_pricelist_id(self): for record in self: if self.pricelist_id: - board_pricelist = self.env['hotel.board.service.room.type'].search([ + board_pricelist = self.env['pms.board.service.room.type'].search([ ('pricelist_id', '=', record.pricelist_id.id), - ('hotel_room_type_id', '=', record.hotel_room_type_id.id), - ('hotel_board_service_id', '=', - record.hotel_board_service_id.id), + ('pms_room_type_id', '=', record.pms_room_type_id.id), + ('pms_board_service_id', '=', + record.pms_board_service_id.id), ('id', '!=', record.id) ]) if board_pricelist: raise UserError( _("This Board Service in this Room can't repeat pricelist")) else: - board_pricelist = self.env['hotel.board.service.room.type'].search([ + board_pricelist = self.env['pms.board.service.room.type'].search([ ('pricelist_id', '=', False), - ('hotel_room_type_id', '=', record.hotel_room_type_id.id), - ('hotel_board_service_id', '=', - record.hotel_board_service_id.id), + ('pms_room_type_id', '=', record.pms_room_type_id.id), + ('pms_board_service_id', '=', + record.pms_board_service_id.id), ('id', '!=', record.id) ]) if board_pricelist: @@ -103,9 +103,9 @@ class HotelBoardServiceRoomType(models.Model): @api.multi def open_board_lines_form(self): action = self.env.ref( - 'hotel.action_hotel_board_service_room_type_view').read()[0] + 'pms.action_pms_board_service_room_type_view').read()[0] action['views'] = [(self.env.ref( - 'hotel.hotel_board_service_room_type_form').id, 'form')] + 'pms.pms_board_service_room_type_form').id, 'form')] action['res_id'] = self.id action['target'] = 'new' return action @@ -115,30 +115,30 @@ class HotelBoardServiceRoomType(models.Model): def init(self): self._cr.execute( 'SELECT indexname FROM pg_indexes WHERE indexname = %s', - ('hotel_board_service_id_hotel_room_type_id_pricelist_id',)) + ('pms_board_service_id_pms_room_type_id_pricelist_id',)) if not self._cr.fetchone(): self._cr.execute( - 'CREATE INDEX hotel_board_service_id_hotel_room_type_id_pricelist_id \ - ON hotel_board_service_room_type_rel \ - (hotel_board_service_id, hotel_room_type_id, pricelist_id)') + 'CREATE INDEX pms_board_service_id_pms_room_type_id_pricelist_id \ + ON pms_board_service_room_type_rel \ + (pms_board_service_id, pms_room_type_id, pricelist_id)') @api.model def create(self, vals): - if 'hotel_board_service_id' in vals: + if 'pms_board_service_id' in vals: vals.update( self.prepare_board_service_reservation_ids( - vals['hotel_board_service_id']) + vals['pms_board_service_id']) ) - return super(HotelBoardServiceRoomType, self).create(vals) + return super(PmsBoardServiceRoomType, self).create(vals) @api.multi def write(self, vals): - if 'hotel_board_service_id' in vals: + if 'pms_board_service_id' in vals: vals.update( self.prepare_board_service_reservation_ids( - vals['hotel_board_service_id']) + vals['pms_board_service_id']) ) - return super(HotelBoardServiceRoomType, self).write(vals) + return super(PmsBoardServiceRoomType, self).write(vals) # Business methods @api.model @@ -147,7 +147,7 @@ class HotelBoardServiceRoomType(models.Model): Prepare line to price products config """ cmds = [(5, 0, 0)] - board_service = self.env['hotel.board.service'].browse( + board_service = self.env['pms.board.service'].browse( board_service_id) for line in board_service.board_service_line_ids: cmds.append((0, False, { diff --git a/hotel/models/hotel_board_service_room_type_line.py b/pms/models/pms_board_service_room_type_line.py similarity index 76% rename from hotel/models/hotel_board_service_room_type_line.py rename to pms/models/pms_board_service_room_type_line.py index 9d423e78a..30dc1f18d 100644 --- a/hotel/models/hotel_board_service_room_type_line.py +++ b/pms/models/pms_board_service_room_type_line.py @@ -4,13 +4,13 @@ from odoo import fields, models from odoo.addons import decimal_precision as dp -class HotelBoardServiceRoomTypeLine(models.Model): - _name = 'hotel.board.service.room.type.line' +class PmsBoardServiceRoomTypeLine(models.Model): + _name = 'pms.board.service.room.type.line' _description = 'Services on Board Service included in Room' # Fields declaration - hotel_board_service_room_type_id = fields.Many2one( - 'hotel.board.service.room.type', + pms_board_service_room_type_id = fields.Many2one( + 'pms.board.service.room.type', 'Board Service Room', ondelete='cascade', required=True) diff --git a/hotel/models/hotel_cancelation_rule.py b/pms/models/pms_cancelation_rule.py similarity index 84% rename from hotel/models/hotel_cancelation_rule.py rename to pms/models/pms_cancelation_rule.py index ec9e39e7e..ae98f98de 100644 --- a/hotel/models/hotel_cancelation_rule.py +++ b/pms/models/pms_cancelation_rule.py @@ -5,8 +5,8 @@ from odoo import models, fields # TODO: refactoring to cancellation.rule -class HotelCancelationRule(models.Model): - _name = 'hotel.cancelation.rule' +class PmsCancelationRule(models.Model): + _name = 'pms.cancelation.rule' _description = 'Cancelation Rules' # Fields declaration @@ -15,9 +15,9 @@ class HotelCancelationRule(models.Model): 'product.pricelist', 'cancelation_rule_id', 'Pricelist that use this rule') - hotel_ids = fields.Many2many( - 'hotel.property', - string='Hotels', + pms_property_ids = fields.Many2many( + 'pms.property', + string='Properties', required=False, ondelete='restrict') active = fields.Boolean('Active', default=True) @@ -37,4 +37,4 @@ class HotelCancelationRule(models.Model): ('days', 'Specify days')], 'No Show apply on', default='all') days_noshow = fields.Integer('NoShow first days', default="2") - # TODO: Constrain coherence hotel_ids pricelist and cancelation_rules + # TODO: Constrain coherence pms_property_ids pricelist and cancelation_rules diff --git a/hotel/models/hotel_checkin_partner.py b/pms/models/pms_checkin_partner.py similarity index 86% rename from hotel/models/hotel_checkin_partner.py rename to pms/models/pms_checkin_partner.py index dff491b18..5c9045226 100644 --- a/hotel/models/hotel_checkin_partner.py +++ b/pms/models/pms_checkin_partner.py @@ -9,13 +9,13 @@ from odoo.tools import ( DEFAULT_SERVER_DATE_FORMAT) -class HotelCheckinPartner(models.Model): - _name = 'hotel.checkin.partner' +class PmsCheckinPartner(models.Model): + _name = 'pms.checkin.partner' # Default Methods ang Gets def _default_reservation_id(self): if 'reservation_id' in self.env.context: - reservation = self.env['hotel.reservation'].browse([ + reservation = self.env['pms.reservation'].browse([ self.env.context['reservation_id'] ]) return reservation @@ -23,7 +23,7 @@ class HotelCheckinPartner(models.Model): def _default_partner_id(self): if 'reservation_id' in self.env.context: - reservation = self.env['hotel.reservation'].browse([ + reservation = self.env['pms.reservation'].browse([ self.env.context['reservation_id'] ]) partner_ids = [] @@ -43,12 +43,12 @@ class HotelCheckinPartner(models.Model): def _default_folio_id(self): if 'folio_id' in self.env.context: - folio = self.env['hotel.folio'].browse([ + folio = self.env['pms.folio'].browse([ self.env.context['folio_id'] ]) return folio if 'reservation_id' in self.env.context: - folio = self.env['hotel.reservation'].browse([ + folio = self.env['pms.reservation'].browse([ self.env.context['reservation_id'] ]).folio_id return folio @@ -56,7 +56,7 @@ class HotelCheckinPartner(models.Model): def _default_enter_date(self): if 'reservation_id' in self.env.context: - reservation = self.env['hotel.reservation'].browse([ + reservation = self.env['pms.reservation'].browse([ self.env.context['reservation_id'] ]) return reservation.checkin @@ -64,15 +64,15 @@ class HotelCheckinPartner(models.Model): def _default_exit_date(self): if 'reservation_id' in self.env.context: - reservation = self.env['hotel.reservation'].browse([ + reservation = self.env['pms.reservation'].browse([ self.env.context['reservation_id'] ]) return reservation.checkout return False @api.model - def _get_default_hotel(self): - return self.env.user.hotel_id + def _get_default_pms_property(self): + return self.env.user.pms_property_id # Fields declaration partner_id = fields.Many2one( @@ -80,16 +80,16 @@ class HotelCheckinPartner(models.Model): default=_default_partner_id, required=True) reservation_id = fields.Many2one( - 'hotel.reservation', + 'pms.reservation', default=_default_reservation_id) folio_id = fields.Many2one( - 'hotel.folio', + 'pms.folio', default=_default_folio_id, readonly=True, required=True) - hotel_id = fields.Many2one( - 'hotel.property', - default=_get_default_hotel, + pms_property_id = fields.Many2one( + 'pms.property', + default=_get_default_pms_property, required=True) email = fields.Char('E-mail', related='partner_id.email') mobile = fields.Char('Mobile', related='partner_id.mobile') @@ -170,7 +170,7 @@ class HotelCheckinPartner(models.Model): master_reservation = \ record.reservation_id.parent_reservation or \ record.reservation_id - splitted_reservs = self.env['hotel.reservation'].search([ + splitted_reservs = self.env['pms.reservation'].search([ ('splitted', '=', True), '|', ('parent_reservation', '=', master_reservation.id), @@ -200,7 +200,7 @@ class HotelCheckinPartner(models.Model): # ORM Overrides @api.model def create(self, vals): - record = super(HotelCheckinPartner, self).create(vals) + record = super(PmsCheckinPartner, self).create(vals) if vals.get('auto_booking', False): record.action_on_board() return record @@ -208,17 +208,17 @@ class HotelCheckinPartner(models.Model): # Business methods def _get_arrival_hour(self): self.ensure_one() - tz_hotel = self.env.user.hotel_id.tz + tz_property = self.env.user.pms_property_id.tz today = fields.Datetime.context_timestamp( - self.with_context(tz=tz_hotel), + self.with_context(tz=tz_property), datetime.datetime.strptime(fields.Date.today(), DEFAULT_SERVER_DATE_FORMAT)) - default_arrival_hour = self.env.user.hotel_id.default_arrival_hour + default_arrival_hour = self.env.user.pms_property_id.default_arrival_hour if self.reservation_id.checkin < today.strftime( DEFAULT_SERVER_DATE_FORMAT): return default_arrival_hour now = fields.Datetime.context_timestamp( - self.with_context(tz=tz_hotel), + self.with_context(tz=tz_property), datetime.datetime.strptime(fields.Datetime.now(), DEFAULT_SERVER_DATETIME_FORMAT)) arrival_hour = now.strftime("%H:%M") @@ -226,17 +226,17 @@ class HotelCheckinPartner(models.Model): def _get_departure_hour(self): self.ensure_one() - tz_hotel = self.env.user.hotel_id.tz + tz_property = self.env.user.pms_property_id.tz today = fields.Datetime.context_timestamp( - self.with_context(tz=tz_hotel), + self.with_context(tz=tz_property), datetime.datetime.strptime(fields.Date.today(), DEFAULT_SERVER_DATE_FORMAT)) - default_departure_hour = self.env.user.hotel_id.default_departure_hour + default_departure_hour = self.env.user.pms_property_id.default_departure_hour if self.reservation_id.checkout < today.strftime( DEFAULT_SERVER_DATE_FORMAT): return default_departure_hour now = fields.Datetime.context_timestamp( - self.with_context(tz=tz_hotel), + self.with_context(tz=tz_property), datetime.datetime.strptime(fields.Datetime.now(), DEFAULT_SERVER_DATETIME_FORMAT)) departure_hour = now.strftime("%H:%M") diff --git a/hotel/models/hotel_floor.py b/pms/models/pms_floor.py similarity index 75% rename from hotel/models/hotel_floor.py rename to pms/models/pms_floor.py index cf422be2b..3322aaf56 100644 --- a/hotel/models/hotel_floor.py +++ b/pms/models/pms_floor.py @@ -3,8 +3,8 @@ from odoo import models, fields -class HotelFloor(models.Model): - _name = "hotel.floor" +class PmsFloor(models.Model): + _name = "pms.floor" _description = "Ubication" # Fields declaration @@ -13,9 +13,9 @@ class HotelFloor(models.Model): size=64, required=True, index=True) - hotel_ids = fields.Many2many( - 'hotel.property', - string='Hotels', + pms_property_ids = fields.Many2many( + 'pms.property', + string='Properties', required=False, ondelete='restrict') sequence = fields.Integer('Sequence') diff --git a/hotel/models/hotel_folio.py b/pms/models/pms_folio.py similarity index 95% rename from hotel/models/hotel_folio.py rename to pms/models/pms_folio.py index 3fe64a4fe..de6767845 100644 --- a/hotel/models/hotel_folio.py +++ b/pms/models/pms_folio.py @@ -5,9 +5,9 @@ from odoo import models, fields, api, _ -class HotelFolio(models.Model): - _name = 'hotel.folio' - _description = 'Hotel Folio' +class PmsFolio(models.Model): + _name = 'pms.folio' + _description = 'PMS Folio' _inherit = ['mail.thread', 'mail.activity.mixin', 'portal.mixin'] _order = 'id' @@ -19,7 +19,7 @@ class HotelFolio(models.Model): this method return diff_invoicing = True, else, return False """ if 'folio_id' in self.env.context: - folio = self.env['hotel.folio'].browse([ + folio = self.env['pms.folio'].browse([ self.env.context['folio_id'] ]) if folio.partner_id.id == folio.partner_invoice_id.id: @@ -31,8 +31,8 @@ class HotelFolio(models.Model): return self.env['crm.team']._get_default_team_id() @api.model - def _get_default_hotel(self): - return self.env.user.hotel_id + def _get_default_pms_property(self): + return self.env.user.pms_property_id # Fields declaration name = fields.Char( @@ -40,32 +40,32 @@ class HotelFolio(models.Model): readonly=True, index=True, default=lambda self: _('New')) - hotel_id = fields.Many2one( - 'hotel.property', - default=_get_default_hotel, + pms_property_id = fields.Many2one( + 'pms.property', + default=_get_default_pms_property, required=True) partner_id = fields.Many2one( 'res.partner', track_visibility='onchange', ondelete='restrict') reservation_ids = fields.One2many( - 'hotel.reservation', + 'pms.reservation', 'folio_id', readonly=False, states={'done': [('readonly', True)]}, - help="Hotel room reservation detail.",) + help="Room reservation detail.",) service_ids = fields.One2many( - 'hotel.service', + 'pms.service', 'folio_id', readonly=False, states={'done': [('readonly', True)]}, - help="Hotel services detail provide to customer and it will " + help="Services detail provide to customer and it will " "include in main Invoice.") company_id = fields.Many2one( 'res.company', 'Company', default=lambda self: self.env['res.company']._company_default_get( - 'hotel.folio')) + 'pms.folio')) analytic_account_id = fields.Many2one( 'account.analytic.account', 'Analytic Account', @@ -111,7 +111,7 @@ class HotelFolio(models.Model): 'account.payment.term', string='Payment Terms') checkin_partner_ids = fields.One2many( - 'hotel.checkin.partner', + 'pms.checkin.partner', 'folio_id') invoice_ids = fields.Many2many( 'account.invoice', @@ -401,7 +401,7 @@ class HotelFolio(models.Model): for rline in self.reservation_ids: if rline.splitted: master_reservation = rline.parent_reservation or rline - has_to_send = self.env['hotel.reservation'].search_count([ + has_to_send = self.env['pms.reservation'].search_count([ ('splitted', '=', True), ('folio_id', '=', self.id), ('to_send', '=', True), @@ -424,7 +424,7 @@ class HotelFolio(models.Model): for rline in self.reservation_ids: if rline.splitted: master_reservation = rline.parent_reservation or rline - has_to_send = self.env['hotel.reservation'].search_count([ + has_to_send = self.env['pms.reservation'].search_count([ ('splitted', '=', True), ('folio_id', '=', self.id), ('to_send', '=', True), @@ -447,7 +447,7 @@ class HotelFolio(models.Model): for rline in self.reservation_ids: if rline.splitted: master_reservation = rline.parent_reservation or rline - nreservs = self.env['hotel.reservation'].search_count([ + nreservs = self.env['pms.reservation'].search_count([ ('splitted', '=', True), ('folio_id', '=', self.id), ('to_send', '=', True), @@ -487,7 +487,7 @@ class HotelFolio(models.Model): addr = self.partner_id.address_get(['invoice']) pricelist = self.partner_id.property_product_pricelist and \ self.partner_id.property_product_pricelist.id or \ - self.env.user.hotel_id.default_pricelist_id.id + self.env.user.pms_property_id.default_pricelist_id.id values = { 'pricelist_id': pricelist, 'payment_term_id': self.partner_id.property_payment_term_id and @@ -509,7 +509,7 @@ class HotelFolio(models.Model): @api.multi @api.onchange('pricelist_id') def onchange_pricelist_id(self): - values = {'reservation_type': self.env['hotel.folio']. + values = {'reservation_type': self.env['pms.folio']. calcule_reservation_type( self.pricelist_id.is_staff, self.reservation_type @@ -522,7 +522,7 @@ class HotelFolio(models.Model): self.ensure_one() partner = self.partner_id.id amount = self.pending_amount - view_id = self.env.ref('hotel.account_payment_view_form_folio').id + view_id = self.env.ref('pms.account_payment_view_form_folio').id return{ 'name': _('Register Payment'), 'view_type': 'form', @@ -590,7 +590,7 @@ class HotelFolio(models.Model): 'name': _('Checkins'), 'view_type': 'form', 'view_mode': 'tree,form', - 'res_model': 'hotel.checkin.partner', + 'res_model': 'pms.checkin.partner', 'type': 'ir.actions.act_window', 'domain': [('reservation_id', 'in', rooms)], 'target': 'new', @@ -610,7 +610,7 @@ class HotelFolio(models.Model): ir_model_data = self.env['ir.model.data'] try: template_id = ir_model_data.get_object_reference( - 'hotel', + 'pms', 'email_template_reservation')[1] except ValueError: template_id = False @@ -622,7 +622,7 @@ class HotelFolio(models.Model): compose_form_id = False ctx = dict() ctx.update({ - 'default_model': 'hotel.folio', + 'default_model': 'pms.folio', 'default_res_id': self._ids[0], 'default_use_template': bool(template_id), 'default_template_id': template_id, @@ -656,8 +656,8 @@ class HotelFolio(models.Model): ir_model_data = self.env['ir.model.data'] try: template_id = ir_model_data.get_object_reference( - 'hotel', - 'mail_template_hotel_exit')[1] + 'pms', + 'mail_template_pms_exit')[1] except ValueError: template_id = False try: @@ -668,7 +668,7 @@ class HotelFolio(models.Model): compose_form_id = False ctx = dict() ctx.update({ - 'default_model': 'hotel.reservation', + 'default_model': 'pms.reservation', 'default_res_id': self._ids[0], 'default_use_template': bool(template_id), 'default_template_id': template_id, @@ -699,8 +699,8 @@ class HotelFolio(models.Model): ir_model_data = self.env['ir.model.data'] try: template_id = ir_model_data.get_object_reference( - 'hotel', - 'mail_template_hotel_cancel')[1] + 'pms', + 'mail_template_pms_cancel')[1] except ValueError: template_id = False try: @@ -711,7 +711,7 @@ class HotelFolio(models.Model): compose_form_id = False ctx = dict() ctx.update({ - 'default_model': 'hotel.reservation', + 'default_model': 'pms.reservation', 'default_res_id': self._ids[0], 'default_use_template': bool(template_id), 'default_template_id': template_id, @@ -738,12 +738,12 @@ class HotelFolio(models.Model): if 'company_id' in vals: vals['name'] = self.env['ir.sequence'].with_context( force_company=vals['company_id'] - ).next_by_code('hotel.folio') or _('New') + ).next_by_code('pms.folio') or _('New') else: vals['name'] = self.env['ir.sequence'].next_by_code( - 'hotel.folio') or _('New') + 'pms.folio') or _('New') vals.update(self._prepare_add_missing_fields(vals)) - result = super(HotelFolio, self).create(vals) + result = super(PmsFolio, self).create(vals) return result # Business methods diff --git a/hotel/models/hotel_property.py b/pms/models/pms_property.py similarity index 78% rename from hotel/models/hotel_property.py rename to pms/models/pms_property.py index b65971e69..cdcf49fa4 100644 --- a/hotel/models/hotel_property.py +++ b/pms/models/pms_property.py @@ -7,46 +7,46 @@ from odoo import models, fields, api, _ from odoo.exceptions import ValidationError -class HotelProperty(models.Model): - _name = 'hotel.property' - _description = 'Hotel' +class PmsProperty(models.Model): + _name = 'pms.property' + _description = 'Property' _inherits = {'res.partner': 'partner_id'} # Fields declaration partner_id = fields.Many2one( 'res.partner', - 'Hotel Property', + 'Property', required=True, delegate=True, ondelete='cascade') company_id = fields.Many2one( 'res.company', required=True, - help='The company that owns or operates this hotel.') + help='The company that owns or operates this property.') user_ids = fields.Many2many( 'res.users', - 'hotel_property_users_rel', - 'hotel_id', + 'pms_property_users_rel', + 'pms_property_id', 'user_id', string='Accepted Users') room_type_ids = fields.One2many( - 'hotel.room.type', - 'hotel_id', + 'pms.room.type', + 'pms_property_id', 'Room Types') room_ids = fields.One2many( - 'hotel.room', - 'hotel_id', + 'pms.room', + 'pms_property_id', 'Rooms') default_pricelist_id = fields.Many2one( 'product.pricelist', string='Product Pricelist', required=True, - help='The default pricelist used in this hotel.') + help='The default pricelist used in this property.') default_restriction_id = fields.Many2one( - 'hotel.room.type.restriction', + 'pms.room.type.restriction', 'Restriction Plan', required=True, - help='The default restriction plan used in this hotel.') + help='The default restriction plan used in this property.') default_arrival_hour = fields.Char('Arrival Hour (GMT)', help="HH:mm Format", default="14:00") default_departure_hour = fields.Char('Departure Hour (GMT)', diff --git a/hotel/models/hotel_reservation.py b/pms/models/pms_reservation.py similarity index 93% rename from hotel/models/hotel_reservation.py rename to pms/models/pms_reservation.py index c2d7a2e39..e63be304b 100644 --- a/hotel/models/hotel_reservation.py +++ b/pms/models/pms_reservation.py @@ -16,9 +16,9 @@ import logging _logger = logging.getLogger(__name__) -class HotelReservation(models.Model): - _name = 'hotel.reservation' - _description = 'Hotel Reservation' +class PmsReservation(models.Model): + _name = 'pms.reservation' + _description = 'Reservation' _inherit = ['mail.thread', 'mail.activity.mixin', 'portal.mixin'] _order = "last_updated_res desc, name" @@ -26,36 +26,36 @@ class HotelReservation(models.Model): def _get_default_checkin(self): folio = False if 'folio_id' in self._context: - folio = self.env['hotel.folio'].search([ + folio = self.env['pms.folio'].search([ ('id', '=', self._context['folio_id']) ]) if folio and folio.reservation_ids: return folio.reservation_ids[0].checkin else: - tz_hotel = self.env.user.hotel_id.tz - today = fields.Date.context_today(self.with_context(tz=tz_hotel)) + tz_property = self.env.user.pms_property_id.tz + today = fields.Date.context_today(self.with_context(tz=tz_property)) return fields.Date.from_string(today).strftime( DEFAULT_SERVER_DATE_FORMAT) def _get_default_checkout(self): folio = False if 'folio_id' in self._context: - folio = self.env['hotel.folio'].search([ + folio = self.env['pms.folio'].search([ ('id', '=', self._context['folio_id']) ]) if folio and folio.reservation_ids: return folio.reservation_ids[0].checkout else: - tz_hotel = self.env.user.hotel_id.tz - today = fields.Date.context_today(self.with_context(tz=tz_hotel)) + tz_property = self.env.user.pms_property_id.tz + today = fields.Date.context_today(self.with_context(tz=tz_property)) return (fields.Date.from_string(today) + timedelta(days=1)).\ strftime(DEFAULT_SERVER_DATE_FORMAT) def _get_default_arrival_hour(self): folio = False - default_arrival_hour = self.env.user.hotel_id.default_arrival_hour + default_arrival_hour = self.env.user.pms_property_id.default_arrival_hour if 'folio_id' in self._context: - folio = self.env['hotel.folio'].search([ + folio = self.env['pms.folio'].search([ ('id', '=', self._context['folio_id']) ]) if folio and folio.reservation_ids: @@ -65,9 +65,9 @@ class HotelReservation(models.Model): def _get_default_departure_hour(self): folio = False - default_departure_hour = self.env.user.hotel_id.default_departure_hour + default_departure_hour = self.env.user.pms_property_id.default_departure_hour if 'folio_id' in self._context: - folio = self.env['hotel.folio'].search([ + folio = self.env['pms.folio'].search([ ('id', '=', self._context['folio_id']) ]) if folio and folio.reservation_ids: @@ -82,7 +82,7 @@ class HotelReservation(models.Model): this method return diff_invoicing = True, else, return False """ if 'reservation_id' in self.env.context: - reservation = self.env['hotel.reservation'].browse([ + reservation = self.env['pms.reservation'].browse([ self.env.context['reservation_id'] ]) if reservation.partner_id.id == reservation.partner_invoice_id.id: @@ -92,20 +92,20 @@ class HotelReservation(models.Model): # Fields declaration name = fields.Text('Reservation Description', required=True) room_id = fields.Many2one( - 'hotel.room', + 'pms.room', string='Room', track_visibility='onchange', ondelete='restrict') folio_id = fields.Many2one( - 'hotel.folio', + 'pms.folio', string='Folio', track_visibility='onchange', ondelete='cascade') board_service_room_id = fields.Many2one( - 'hotel.board.service.room.type', + 'pms.board.service.room.type', string='Board Service') room_type_id = fields.Many2one( - 'hotel.room.type', + 'pms.room.type', string='Room Type', required=True, track_visibility='onchange') @@ -128,27 +128,27 @@ class HotelReservation(models.Model): string='Company', store=True, readonly=True) - hotel_id = fields.Many2one( - 'hotel.property', + pms_property_id = fields.Many2one( + 'pms.property', store=True, readonly=True, - related='folio_id.hotel_id') + related='folio_id.pms_property_id') reservation_line_ids = fields.One2many( - 'hotel.reservation.line', + 'pms.reservation.line', 'reservation_id', required=True) service_ids = fields.One2many( - 'hotel.service', + 'pms.service', 'reservation_id') pricelist_id = fields.Many2one( 'product.pricelist', related='folio_id.pricelist_id') # TODO: Warning Mens to update pricelist checkin_partner_ids = fields.One2many( - 'hotel.checkin.partner', + 'pms.checkin.partner', 'reservation_id') parent_reservation = fields.Many2one( - 'hotel.reservation', + 'pms.reservation', string='Parent Reservation') segmentation_ids = fields.Many2many( related='folio_id.segmentation_ids') @@ -232,7 +232,7 @@ class HotelReservation(models.Model): partner_invoice_lang = fields.Selection(related="partner_invoice_id.lang") # TODO: As checkin_partner_count is a computed field, it can't not # be used in a domain filer Non-stored field - # hotel.reservation.checkin_partner_count cannot be searched + # pms.reservation.checkin_partner_count cannot be searched # searching on a computed field can also be enabled by setting the # search parameter. The value is a method name returning a Domains checkin_partner_count = fields.Integer( @@ -498,7 +498,7 @@ class HotelReservation(models.Model): if not self.overbooking \ and self.state not in ('cancelled') \ and not self._context.get("ignore_avail_restrictions", False): - occupied = self.env['hotel.reservation'].get_reservations( + occupied = self.env['pms.reservation'].get_reservations( self.checkin, (fields.Date.from_string(self.checkout) - timedelta(days=1)). strftime(DEFAULT_SERVER_DATE_FORMAT)) @@ -547,7 +547,7 @@ class HotelReservation(models.Model): addr = self.partner_id.address_get(['invoice']) pricelist = self.partner_id.property_product_pricelist and \ self.partner_id.property_product_pricelist.id or \ - self.env.user.hotel_id.default_pricelist_id.id + self.env.user.pms_property_id.default_pricelist_id.id values = { 'pricelist_id': pricelist, 'partner_invoice_id': addr['invoice'], @@ -557,7 +557,7 @@ class HotelReservation(models.Model): @api.multi @api.onchange('pricelist_id') def onchange_pricelist_id(self): - values = {'reservation_type': self.env['hotel.folio']. + values = {'reservation_type': self.env['pms.folio']. calcule_reservation_type( self.pricelist_id.is_staff, self.reservation_type)} @@ -648,7 +648,7 @@ class HotelReservation(models.Model): if self.overbooking or self.reselling or \ self.state in ('cancelled'): return - occupied = self.env['hotel.reservation'].get_reservations( + occupied = self.env['pms.reservation'].get_reservations( self.checkin, (fields.Date.from_string(self.checkout) - timedelta(days=1)). strftime(DEFAULT_SERVER_DATE_FORMAT)) @@ -682,11 +682,11 @@ class HotelReservation(models.Model): 'folio_id': self.folio_id.id, 'reservation_id': self.id, } - line = self.env['hotel.service'].new(res) + line = self.env['pms.service'].new(res) res.update( - self.env['hotel.service']._prepare_add_missing_fields( + self.env['pms.service']._prepare_add_missing_fields( res)) - res.update(self.env['hotel.service'].prepare_service_ids( + res.update(self.env['pms.service'].prepare_service_ids( dfrom=self.checkin, days=self.nights, per_person=product.per_person, @@ -716,7 +716,7 @@ class HotelReservation(models.Model): action['res_id'] = invoices.ids[0] else: action = self.env.ref( - 'hotel.action_view_folio_advance_payment_inv').read()[0] + 'pms.action_view_folio_advance_payment_inv').read()[0] action['context'] = {'default_reservation_id': self.id, 'default_folio_id': self.folio_id.id} return action @@ -724,7 +724,7 @@ class HotelReservation(models.Model): @api.multi def create_invoice(self): action = self.env.ref( - 'hotel.action_view_folio_advance_payment_inv').read()[0] + 'pms.action_view_folio_advance_payment_inv').read()[0] action['context'] = {'default_reservation_id': self.id, 'default_folio_id': self.folio_id.id} return action @@ -732,10 +732,10 @@ class HotelReservation(models.Model): @api.multi def open_folio(self): action = self.env.ref( - 'hotel.open_hotel_folio1_form_tree_all').read()[0] + 'pms.open_pms_folio1_form_tree_all').read()[0] if self.folio_id: action['views'] = [ - (self.env.ref('hotel.hotel_folio_view_form').id, 'form')] + (self.env.ref('pms.pms_folio_view_form').id, 'form')] action['res_id'] = self.folio_id.id else: action = {'type': 'ir.actions.act_window_close'} @@ -744,9 +744,9 @@ class HotelReservation(models.Model): @api.multi def open_reservation_form(self): action = self.env.ref( - 'hotel.open_hotel_reservation_form_tree_all').read()[0] + 'pms.open_pms_reservation_form_tree_all').read()[0] action['views'] = [ - (self.env.ref('hotel.hotel_reservation_view_form').id, 'form')] + (self.env.ref('pms.pms_reservation_view_form').id, 'form')] action['res_id'] = self.id return action @@ -761,7 +761,7 @@ class HotelReservation(models.Model): partner = self.partner_id.id amount = min(self.price_room_services_set, self.folio_pending_amount) note = self.folio_id.name + ' (' + self.name + ')' - view_id = self.env.ref('hotel.account_payment_view_form_folio').id + view_id = self.env.ref('pms.account_payment_view_form_folio').id return{ 'name': _('Register Payment'), 'view_type': 'form', @@ -792,7 +792,7 @@ class HotelReservation(models.Model): ('folio_id.name', operator, name), ('room_id.name', operator, name) ] - return super(HotelReservation, self).name_search( + return super(PmsReservation, self).name_search( name='', args=args, operator='ilike', limit=limit) @api.multi @@ -809,14 +809,14 @@ class HotelReservation(models.Model): vals.update(self._autoassign(vals)) vals.update(self._prepare_add_missing_fields(vals)) if 'folio_id' in vals and 'channel_type' not in vals: - folio = self.env["hotel.folio"].browse(vals['folio_id']) + folio = self.env["pms.folio"].browse(vals['folio_id']) vals.update({'channel_type': folio.channel_type}) elif 'partner_id' in vals: folio_vals = {'partner_id': int(vals.get('partner_id')), 'channel_type': vals.get('channel_type')} # Create the folio in case of need # (To allow to create reservations direct) - folio = self.env["hotel.folio"].create(folio_vals) + folio = self.env["pms.folio"].create(folio_vals) vals.update({'folio_id': folio.id, 'reservation_type': vals.get('reservation_type'), 'channel_type': vals.get('channel_type')}) @@ -825,7 +825,7 @@ class HotelReservation(models.Model): if service[2]: service[2]['folio_id'] = folio.id user = self.env['res.users'].browse(self.env.uid) - if user.has_group('hotel.group_hotel_call'): + if user.has_group('pms.group_pms_call'): vals.update({ 'to_assign': True, 'channel_type': 'call' @@ -848,7 +848,7 @@ class HotelReservation(models.Model): and 'real_checkin' not in vals and 'real_checkout' not in vals: vals['real_checkin'] = vals['checkin'] vals['real_checkout'] = vals['checkout'] - record = super(HotelReservation, self).create(vals) + record = super(PmsReservation, self).create(vals) if record.preconfirm: record.confirm() return record @@ -883,7 +883,7 @@ class HotelReservation(models.Model): record.service_ids.filtered( lambda r: r.is_board_service is True).unlink() board_services = [] - board = self.env['hotel.board.service.room.type'].browse( + board = self.env['pms.board.service.room.type'].browse( vals['board_service_room_id']) for line in board.board_service_line_ids: res = { @@ -893,7 +893,7 @@ class HotelReservation(models.Model): 'reservation_id': self.id, } res.update( - self.env['hotel.service']._prepare_add_missing_fields( + self.env['pms.service']._prepare_add_missing_fields( res)) board_services.append((0, False, res)) # REVIEW: Why I need add manually the old IDs if @@ -929,11 +929,11 @@ class HotelReservation(models.Model): ('state' in vals and record.state != vals['state']): record.update({'to_send': True}) user = self.env['res.users'].browse(self.env.uid) - if user.has_group('hotel.group_hotel_call'): + if user.has_group('pms.group_pms_call'): vals.update({ 'to_assign': True, }) - record = super(HotelReservation, self).write(vals) + record = super(PmsReservation, self).write(vals) return record # Business methods @@ -1014,7 +1014,7 @@ class HotelReservation(models.Model): room_type_id = values.get('room_type_id') if checkin and checkout and room_type_id: if 'overbooking' not in values: - room_chosen = self.env['hotel.room.type'].\ + room_chosen = self.env['pms.room.type'].\ check_availability_room_type( checkin, (fields.Date.from_string(checkout) - @@ -1024,7 +1024,7 @@ class HotelReservation(models.Model): room_type_id)[0] # Check room_chosen exist else: - room_chosen = self.env['hotel.room.type'].browse( + room_chosen = self.env['pms.room.type'].browse( room_type_id).room_ids[0] res.update({ 'room_id': room_chosen.id @@ -1033,7 +1033,7 @@ class HotelReservation(models.Model): @api.model def autocheckout(self): - reservations = self.env['hotel.reservation'].search([ + reservations = self.env['pms.reservation'].search([ ('state', 'not in', ('done', 'cancelled')), ('checkout', '<', fields.Date.today()) ]) @@ -1097,11 +1097,11 @@ class HotelReservation(models.Model): @param self: object pointer ''' _logger.info('confirm') - hotel_reserv_obj = self.env['hotel.reservation'] + pms_reserv_obj = self.env['pms.reservation'] user = self.env['res.users'].browse(self.env.uid) for record in self: vals = {} - if user.has_group('hotel.group_hotel_call'): + if user.has_group('pms.group_pms_call'): vals.update({'channel_type': 'call'}) if record.checkin_partner_ids: vals.update({'state': 'booking'}) @@ -1116,7 +1116,7 @@ class HotelReservation(models.Model): if record.splitted: master_reservation = record.parent_reservation or record - splitted_reservs = hotel_reserv_obj.search([ + splitted_reservs = pms_reserv_obj.search([ ('splitted', '=', True), '|', ('parent_reservation', '=', master_reservation.id), @@ -1154,7 +1154,7 @@ class HotelReservation(models.Model): record._compute_cancelled_discount() if record.splitted: master_reservation = record.parent_reservation or record - splitted_reservs = self.env['hotel.reservation'].search([ + splitted_reservs = self.env['pms.reservation'].search([ ('splitted', '=', True), '|', ('parent_reservation', '=', master_reservation.id), @@ -1171,9 +1171,9 @@ class HotelReservation(models.Model): self.ensure_one() pricelist = self.pricelist_id if pricelist and pricelist.cancelation_rule_id: - tz_hotel = self.env.user.hotel_id.tz + tz_property = self.env.user.pms_property_id.tz today = fields.Date.context_today(self.with_context( - tz=tz_hotel)) + tz=tz_property)) days_diff = (fields.Date.from_string(self.real_checkin) - fields.Date.from_string(today)).days if days_diff < 0: @@ -1193,7 +1193,7 @@ class HotelReservation(models.Model): }) if record.splitted: master_reservation = record.parent_reservation or record - splitted_reservs = self.env['hotel.reservation'].search([ + splitted_reservs = self.env['pms.reservation'].search([ ('splitted', '=', True), '|', ('parent_reservation', '=', master_reservation.id), @@ -1285,7 +1285,7 @@ class HotelReservation(models.Model): if not vals: vals = {} room_type_id = vals.get('room_type_id') or self.room_type_id.id - product = self.env['hotel.room.type'].browse(room_type_id).product_id + product = self.env['pms.room.type'].browse(room_type_id).product_id partner = self.env['res.partner'].browse( vals.get('partner_id') or self.partner_id.id) if 'discount' in vals and vals.get('discount') > 0: @@ -1336,13 +1336,10 @@ class HotelReservation(models.Model): """ domain = self._get_domain_reservations_occupation(dfrom, dto) # _logger.info(domain) - return self.env['hotel.reservation'].search(domain) + return self.env['pms.reservation'].search(domain) @api.model def _get_domain_reservations_occupation(self, dfrom, dto): - # WARNING If add or remove domain items, - # update _hcalendar_get_count_reservations_json_data - # in calendar module hotel_calendar domain = [('reservation_line_ids.date', '>=', dfrom), ('reservation_line_ids.date', '<=', dto), ('state', '!=', 'cancelled'), @@ -1360,15 +1357,15 @@ class HotelReservation(models.Model): @return: dictionary of lists with reservations (a hash of arrays!) with the reservations dates between dfrom and dto reservations_dates - {'2018-07-30': [hotel.reservation(29,), hotel.reservation(30,), - hotel.reservation(31,)], - '2018-07-31': [hotel.reservation(22,), hotel.reservation(35,), - hotel.reservation(36,)], + {'2018-07-30': [pms.reservation(29,), pms.reservation(30,), + pms.reservation(31,)], + '2018-07-31': [pms.reservation(22,), pms.reservation(35,), + pms.reservation(36,)], } """ domain = [('date', '>=', dfrom), ('date', '<', dto)] - lines = self.env['hotel.reservation.line'].search(domain) + lines = self.env['pms.reservation.line'].search(domain) reservations_dates = {} for record in lines: # kumari.net/index.php/programming/programmingcat/22-python-making-a-dictionary-of-lists-a-hash-of-arrays @@ -1411,7 +1408,7 @@ class HotelReservation(models.Model): lambda check: check.state == 'booking').action_done() if record.splitted: master_reservation = record.parent_reservation or record - splitted_reservs = self.env['hotel.reservation'].search([ + splitted_reservs = self.env['pms.reservation'].search([ ('splitted', '=', True), '|', ('parent_reservation', '=', master_reservation.id), @@ -1428,9 +1425,9 @@ class HotelReservation(models.Model): def action_checks(self): self.ensure_one() action = self.env.ref( - 'hotel.open_hotel_reservation_form_tree_all').read()[0] + 'pms.open_pms_reservation_form_tree_all').read()[0] action['views'] = [ - (self.env.ref('hotel.hotel_reservation_checkin_view_form').id, + (self.env.ref('pms.pms_reservation_checkin_view_form').id, 'form')] action['res_id'] = self.id action['target'] = 'new' @@ -1480,7 +1477,7 @@ class HotelReservation(models.Model): 'reservation_line_ids': reservation_lines[1], 'preconfirm': False, }) - reservation_copy = self.env['hotel.reservation'].with_context({ + reservation_copy = self.env['pms.reservation'].with_context({ 'ignore_avail_restrictions': True}).create(vals) if not reservation_copy: raise ValidationError(_("Unexpected error copying record. \ @@ -1501,7 +1498,7 @@ class HotelReservation(models.Model): master_reservation = self.parent_reservation or self - splitted_reservs = self.env['hotel.reservation'].search([ + splitted_reservs = self.env['pms.reservation'].search([ ('splitted', '=', True), ('folio_id', '=', self.folio_id.id), '|', @@ -1579,9 +1576,9 @@ class HotelReservation(models.Model): if not self.parent_reservation: raise ValidationError(_("This is the parent reservation")) action = self.env.ref( - 'hotel.open_hotel_reservation_form_tree_all').read()[0] + 'pms.open_pms_reservation_form_tree_all').read()[0] action['views'] = [ - (self.env.ref('hotel.hotel_reservation_view_form').id, 'form')] + (self.env.ref('pms.pms_reservation_view_form').id, 'form')] action['res_id'] = self.parent_reservation.id return action @@ -1619,4 +1616,4 @@ class HotelReservation(models.Model): @api.multi def set_call_center_user(self): user = self.env['res.users'].browse(self.env.uid) - return user.has_group('hotel.group_hotel_call') + return user.has_group('pms.group_pms_call') diff --git a/hotel/models/hotel_reservation_line.py b/pms/models/pms_reservation_line.py similarity index 91% rename from hotel/models/hotel_reservation_line.py rename to pms/models/pms_reservation_line.py index b9269d90a..d2300a29a 100644 --- a/hotel/models/hotel_reservation_line.py +++ b/pms/models/pms_reservation_line.py @@ -6,8 +6,8 @@ from odoo.addons import decimal_precision as dp from odoo.exceptions import ValidationError -class HotelReservationLine(models.Model): - _name = "hotel.reservation.line" +class PmsReservationLine(models.Model): + _name = "pms.reservation.line" _order = "date" # Default Methods ang Gets @@ -22,7 +22,7 @@ class HotelReservationLine(models.Model): # Fields declaration reservation_id = fields.Many2one( - 'hotel.reservation', + 'pms.reservation', string='Reservation', ondelete='cascade', required=True, @@ -35,11 +35,11 @@ class HotelReservationLine(models.Model): string='Invoice Lines', readonly=True, copy=False) - hotel_id = fields.Many2one( - 'hotel.property', + pms_property_id = fields.Many2one( + 'pms.property', store=True, readonly=True, - related='reservation_id.hotel_id') + related='reservation_id.pms_property_id') date = fields.Date('Date') state = fields.Selection(related='reservation_id.state') price = fields.Float( diff --git a/hotel/models/hotel_room.py b/pms/models/pms_room.py similarity index 73% rename from hotel/models/hotel_room.py rename to pms/models/pms_room.py index 7fbea57af..c6204fce6 100644 --- a/hotel/models/hotel_room.py +++ b/pms/models/pms_room.py @@ -6,33 +6,33 @@ from odoo import models, fields, api, _ from odoo.exceptions import ValidationError -class HotelRoom(models.Model): +class PmsRoom(models.Model): """ The rooms for lodging can be for sleeping, usually called rooms, and also for speeches (conference rooms), parking, relax with cafe con leche, spa... """ - _name = 'hotel.room' - _description = 'Hotel Room' + _name = 'pms.room' + _description = 'Property Room' _order = "sequence, room_type_id, name" # Fields declaration name = fields.Char('Room Name', required=True) - hotel_id = fields.Many2one( - 'hotel.property', + pms_property_id = fields.Many2one( + 'pms.property', store=True, readonly=True, - related='room_type_id.hotel_id') + related='room_type_id.pms_property_id') room_type_id = fields.Many2one( - 'hotel.room.type', - 'Hotel Room Type', + 'pms.room.type', + 'Property Room Type', required=True, ondelete='restrict') shared_room_id = fields.Many2one( - 'hotel.shared.room', + 'pms.shared.room', 'Shared Room', default=False) floor_id = fields.Many2one( - 'hotel.floor', + 'pms.floor', 'Ubication', help='At which floor the room is located.') capacity = fields.Integer('Capacity') @@ -59,30 +59,30 @@ class HotelRoom(models.Model): # CRUD methods @api.model def create(self, vals): - if vals.get('hotel_id', self.env.user.hotel_id.id) != \ - self.env['hotel.room.type'].browse( - vals['room_type_id']).hotel_id.id: + if vals.get('pms_property_id', self.env.user.pms_property_id.id) != \ + self.env['pms.room.type'].browse( + vals['room_type_id']).pms_property_id.id: raise ValidationError( _("A room cannot be created in a room type \ - of another hotel.")) + of another property.")) return super().create(vals) @api.multi def write(self, vals): for record in self: - if vals.get('hotel_id', record.hotel_id.id) != record.hotel_id.id: + if vals.get('pms_property_id', record.pms_property_id.id) != record.pms_property_id.id: raise ValidationError( - _("A room cannot be changed to another hotel.") + " " + + _("A room cannot be changed to another property.") + " " + _("%s does not belong to %s.") - % (record, record.hotel_id)) - room_type_ids = self.env['hotel.room.type'].search([ - ('hotel_id', '=', record.hotel_id.id) + % (record, record.pms_property_id)) + room_type_ids = self.env['pms.room.type'].search([ + ('pms_property_id', '=', record.pms_property_id.id) ]).ids if vals.get('room_type_id', record.room_type_id.id) \ not in room_type_ids: raise ValidationError( _("A room cannot be changed to a room type of \ - another hotel or unlinked from a room type.")) + another property or unlinked from a room type.")) return super().write(vals) # Business methods diff --git a/hotel/models/hotel_room_closure_reason.py b/pms/models/pms_room_closure_reason.py similarity index 82% rename from hotel/models/hotel_room_closure_reason.py rename to pms/models/pms_room_closure_reason.py index a6940cb1a..d579b551e 100644 --- a/hotel/models/hotel_room_closure_reason.py +++ b/pms/models/pms_room_closure_reason.py @@ -9,9 +9,9 @@ class RoomClosureReason(models.Model): # Fields declaration name = fields.Char('Name', translate=True, required=True) - hotel_ids = fields.Many2many( - 'hotel.property', - string='Hotels', + pms_property_ids = fields.Many2many( + 'pms.property', + string='Properties', required=False, ondelete='restrict') description = fields.Text('Description', translate=True) diff --git a/hotel/models/hotel_room_type.py b/pms/models/pms_room_type.py similarity index 82% rename from hotel/models/hotel_room_type.py rename to pms/models/pms_room_type.py index beadc615b..bb5752b55 100644 --- a/hotel/models/hotel_room_type.py +++ b/pms/models/pms_room_type.py @@ -5,20 +5,20 @@ from odoo import models, fields, api, _ from odoo.exceptions import ValidationError -class HotelRoomType(models.Model): +class PmsRoomType(models.Model): """ Before creating a 'room type', you need to consider the following: With the term 'room type' is meant a sales type of residential accommodation: for example, a Double Room, a Economic Room, an Apartment, a Tent, a Caravan... """ - _name = "hotel.room.type" + _name = "pms.room.type" _description = "Room Type" _inherits = {'product.product': 'product_id'} _order = "sequence, code_type, name" # Default methods @api.model - def _get_default_hotel(self): - return self.env.user.hotel_id + def _get_default_pms_property(self): + return self.env.user.pms_property_id # Fields declaration product_id = fields.Many2one( @@ -27,26 +27,26 @@ class HotelRoomType(models.Model): required=True, delegate=True, ondelete='cascade') - hotel_id = fields.Many2one( - 'hotel.property', - 'Hotel', + pms_property_id = fields.Many2one( + 'pms.property', + 'Property', required=True, ondelete='restrict', - default=_get_default_hotel,) + default=_get_default_pms_property,) room_ids = fields.One2many( - 'hotel.room', + 'pms.room', 'room_type_id', 'Rooms') class_id = fields.Many2one( - 'hotel.room.type.class', - 'Hotel Type Class') + 'pms.room.type.class', + 'Property Type Class') board_service_room_type_ids = fields.One2many( - 'hotel.board.service.room.type', - 'hotel_room_type_id', + 'pms.board.service.room.type', + 'pms_room_type_id', string='Board Services') room_amenity_ids = fields.Many2many( - 'hotel.amenity', - 'hotel_room_type_aminity_rel', + 'pms.amenity', + 'pms_room_type_aminity_rel', 'room_type_ids', 'amenity_ids', string='Room Type Amenities', @@ -60,8 +60,8 @@ class HotelRoomType(models.Model): sequence = fields.Integer('Sequence', default=0) _sql_constraints = [ - ('code_type_hotel_unique', 'unique(code_type, hotel_id)', - 'Room Type Code must be unique by Hotel!'), + ('code_type_pms_unique', 'unique(code_type, pms_property_id)', + 'Room Type Code must be unique by Property!'), ] # Constraints and onchanges @@ -100,15 +100,15 @@ class HotelRoomType(models.Model): Check the max availability for an specific type of room in a range of dates """ - reservations = self.env['hotel.reservation'].get_reservations(dfrom, + reservations = self.env['pms.reservation'].get_reservations(dfrom, dto) reservations_rooms = reservations.mapped('room_id.id') - free_rooms = self.env['hotel.room'].search([ + free_rooms = self.env['pms.room'].search([ ('id', 'not in', reservations_rooms), ('id', 'not in', notthis) ]) if room_type_id: - rooms_linked = self.env['hotel.room.type'].search([ + rooms_linked = self.env['pms.room.type'].search([ ('id', '=', room_type_id) ]).room_ids free_rooms = free_rooms & rooms_linked @@ -127,8 +127,8 @@ class HotelRoomType(models.Model): """ vals = {} room_type_ids = kwargs.get('room_type_ids', False) - room_types = self.env['hotel.room.type'].browse(room_type_ids) if \ - room_type_ids else self.env['hotel.room.type'].search([]) + room_types = self.env['pms.room.type'].browse(room_type_ids) if \ + room_type_ids else self.env['pms.room.type'].search([]) date_from = kwargs.get('date_from', False) days = kwargs.get('days', False) discount = kwargs.get('discount', False) @@ -140,7 +140,7 @@ class HotelRoomType(models.Model): 'pricelist_id', partner.property_product_pricelist.id and partner.property_product_pricelist.id or - self.env.user.hotel_id.default_pricelist_id.id) + self.env.user.pms_property_id.default_pricelist_id.id) vals.update({ 'partner_id': partner_id if partner_id else False, 'discount': discount, @@ -148,7 +148,7 @@ class HotelRoomType(models.Model): rate_vals = {} for room_type in room_types: vals.update({'room_type_id': room_type.id}) - room_vals = self.env['hotel.reservation'].\ + room_vals = self.env['pms.reservation'].\ prepare_reservation_lines( date_from, days, diff --git a/hotel/models/hotel_room_type_class.py b/pms/models/pms_room_type_class.py similarity index 84% rename from hotel/models/hotel_room_type_class.py rename to pms/models/pms_room_type_class.py index 8724f8896..f2769b744 100644 --- a/hotel/models/hotel_room_type_class.py +++ b/pms/models/pms_room_type_class.py @@ -4,26 +4,26 @@ from odoo import models, fields -class HotelRoomTypeClass(models.Model): +class PmsRoomTypeClass(models.Model): """ Before creating a 'room type_class', you need to consider the following: With the term 'room type class' is meant a physical class of residential accommodation: for example, a Room, a Bed, an Apartment, a Tent, a Caravan... """ - _name = "hotel.room.type.class" + _name = "pms.room.type.class" _description = "Room Type Class" _order = "sequence, name, code_class" # Fields declaration name = fields.Char('Class Name', required=True, translate=True) # Relationship between models - hotel_ids = fields.Many2many( - 'hotel.property', - string='Hotels', + pms_property_ids = fields.Many2many( + 'pms.property', + string='Properties', required=False, ondelete='restrict') room_type_ids = fields.One2many( - 'hotel.room.type', + 'pms.room.type', 'class_id', 'Types') code_class = fields.Char('Code') diff --git a/hotel/models/hotel_room_type_restriction.py b/pms/models/pms_room_type_restriction.py similarity index 54% rename from hotel/models/hotel_room_type_restriction.py rename to pms/models/pms_room_type_restriction.py index a9fb4ec7c..d944ebfe1 100644 --- a/hotel/models/hotel_room_type_restriction.py +++ b/pms/models/pms_room_type_restriction.py @@ -3,25 +3,25 @@ from odoo import models, fields, api -class HotelRoomTypeRestriction(models.Model): - """ The hotel room type restriction is used as a daily restriction plan for room types - and therefore is related only with one hotel. """ - _name = 'hotel.room.type.restriction' +class PmsRoomTypeRestriction(models.Model): + """ The room type restriction is used as a daily restriction plan for room types + and therefore is related only with one property. """ + _name = 'pms.room.type.restriction' # Default methods @api.model - def _get_default_hotel(self): - return self.env.user.hotel_id or None + def _get_default_pms_property(self): + return self.env.user.pms_property_id or None # Fields declaration name = fields.Char('Restriction Plan Name', required=True) - hotel_id = fields.Many2one( - 'hotel.property', - 'Hotel', + pms_property_id = fields.Many2one( + 'pms.property', + 'Property', ondelete='restrict', - default=_get_default_hotel) + default=_get_default_pms_property) item_ids = fields.One2many( - 'hotel.room.type.restriction.item', + 'pms.room.type.restriction.item', 'restriction_id', string='Restriction Items', copy=True) diff --git a/hotel/models/hotel_room_type_restriction_item.py b/pms/models/pms_room_type_restriction_item.py similarity index 88% rename from hotel/models/hotel_room_type_restriction_item.py rename to pms/models/pms_room_type_restriction_item.py index 16726b894..546840545 100644 --- a/hotel/models/hotel_room_type_restriction_item.py +++ b/pms/models/pms_room_type_restriction_item.py @@ -4,14 +4,14 @@ from odoo import models, fields, api, _ from odoo.exceptions import ValidationError -class HotelRoomTypeRestrictionItem(models.Model): - _name = 'hotel.room.type.restriction.item' +class PmsRoomTypeRestrictionItem(models.Model): + _name = 'pms.room.type.restriction.item' # Field Declarations - restriction_id = fields.Many2one('hotel.room.type.restriction', + restriction_id = fields.Many2one('pms.room.type.restriction', 'Restriction Plan', ondelete='cascade', index=True) - room_type_id = fields.Many2one('hotel.room.type', 'Room Type', + room_type_id = fields.Many2one('pms.room.type', 'Room Type', required=True, ondelete='cascade') date = fields.Date('Date') diff --git a/hotel/models/hotel_service.py b/pms/models/pms_service.py similarity index 94% rename from hotel/models/hotel_service.py rename to pms/models/pms_service.py index 8a4205ef1..e5d470691 100644 --- a/hotel/models/hotel_service.py +++ b/pms/models/pms_service.py @@ -12,9 +12,9 @@ import logging _logger = logging.getLogger(__name__) -class HotelService(models.Model): - _name = 'hotel.service' - _description = 'Hotel Services and its charges' +class PmsService(models.Model): + _name = 'pms.service' + _description = 'Services and its charges' # Default methods @api.multi @@ -32,7 +32,7 @@ class HotelService(models.Model): def _default_reservation_id(self): if self.env.context.get('reservation_ids'): ids = [item[1] for item in self.env.context['reservation_ids']] - return self.env['hotel.reservation'].browse([ + return self.env['pms.reservation'].browse([ (ids)], limit=1) elif self.env.context.get('default_reservation_id'): return self.env.context.get('default_reservation_id') @@ -52,27 +52,27 @@ class HotelService(models.Model): ondelete='restrict', required=True) folio_id = fields.Many2one( - 'hotel.folio', + 'pms.folio', 'Folio', ondelete='cascade', default=_default_folio_id) reservation_id = fields.Many2one( - 'hotel.reservation', + 'pms.reservation', 'Room', default=_default_reservation_id) service_line_ids = fields.One2many( - 'hotel.service.line', + 'pms.service.line', 'service_id') company_id = fields.Many2one( related='folio_id.company_id', string='Company', store=True, readonly=True) - hotel_id = fields.Many2one( - 'hotel.property', + pms_property_id = fields.Many2one( + 'pms.property', store=True, readonly=True, - related='folio_id.hotel_id') + related='folio_id.pms_property_id') tax_ids = fields.Many2many( 'account.tax', string='Taxes', @@ -233,7 +233,7 @@ class HotelService(models.Model): Compute the amounts of the service line. """ for record in self: - folio = record.folio_id or self.env['hotel.folio'].browse( + folio = record.folio_id or self.env['pms.folio'].browse( self.env.context.get('default_folio_id')) reservation = record.reservation_id or self.env.context.get( 'reservation_id') @@ -280,7 +280,7 @@ class HotelService(models.Model): if record.per_day and record.reservation_id: product = record.product_id if self.env.context.get('default_reservation_id'): - reservation = self.env['hotel.reservation'].browse( + reservation = self.env['pms.reservation'].browse( self.env.context.get('default_reservation_id') ) else: @@ -339,9 +339,9 @@ class HotelService(models.Model): # Action methods @api.multi def open_service_ids(self): - action = self.env.ref('hotel.action_hotel_services_form').read()[0] + action = self.env.ref('pms.action_pms_services_form').read()[0] action['views'] = [ - (self.env.ref('hotel.hotel_service_view_form').id, 'form')] + (self.env.ref('pms.pms_service_view_form').id, 'form')] action['res_id'] = self.id action['target'] = 'new' return action @@ -357,14 +357,14 @@ class HotelService(models.Model): ('reservation_id.name', operator, name), ('name', operator, name) ] - return super(HotelService, self).name_search( + return super(PmsService, self).name_search( name='', args=args, operator='ilike', limit=limit) @api.model def create(self, vals): vals.update(self._prepare_add_missing_fields(vals)) if self.compute_lines_out_vals(vals): - reservation = self.env['hotel.reservation'].browse( + reservation = self.env['pms.reservation'].browse( vals['reservation_id']) product = self.env['product.product'].browse(vals['product_id']) if reservation.splitted: @@ -384,7 +384,7 @@ class HotelService(models.Model): old_day_lines=False, consumed_on=product.consumed_on, )) - record = super(HotelService, self).create(vals) + record = super(PmsService, self).create(vals) return record @api.multi @@ -400,7 +400,7 @@ class HotelService(models.Model): }) else: for record in self: - reservations = self.env['hotel.reservation'] + reservations = self.env['pms.reservation'] reservation = reservations.browse(vals['reservation_id']) \ if 'reservation_id' in vals else record.reservation_id if reservation.splitted: @@ -420,7 +420,7 @@ class HotelService(models.Model): old_line_days=self.service_line_ids, consumed_on=product.consumed_on, )) - res = super(HotelService, self).write(vals) + res = super(PmsService, self).write(vals) return res # Business methods @@ -457,7 +457,7 @@ class HotelService(models.Model): def _compute_tax_ids(self): for record in self: # If company_id is set, always filter taxes by the company - folio = record.folio_id or self.env['hotel.folio'].browse( + folio = record.folio_id or self.env['pms.folio'].browse( self.env.context.get('default_folio_id')) reservation = record.reservation_id or self.env.context.get( 'reservation_id') @@ -512,16 +512,16 @@ class HotelService(models.Model): if reservation and self.is_board_service: board_room_type = reservation.board_service_room_id if board_room_type.price_type == 'fixed': - return self.env['hotel.board.service.room.type.line'].\ + return self.env['pms.board.service.room.type.line'].\ search([ - ('hotel_board_service_room_type_id', + ('pms_board_service_room_type_id', '=', board_room_type.id), ('product_id', '=', self.product_id.id)]).amount else: return (reservation.price_total * - self.env['hotel.board.service.room.type.line']. + self.env['pms.board.service.room.type.line']. search([ - ('hotel_board_service_room_type_id', + ('pms_board_service_room_type_id', '=', board_room_type.id), ('product_id', '=', self.product_id.id)]) .amount) / 100 diff --git a/hotel/models/hotel_service_line.py b/pms/models/pms_service_line.py similarity index 91% rename from hotel/models/hotel_service_line.py rename to pms/models/pms_service_line.py index 402572390..9b9f5c48a 100644 --- a/hotel/models/hotel_service_line.py +++ b/pms/models/pms_service_line.py @@ -5,13 +5,13 @@ from odoo import models, fields, api, _ from odoo.exceptions import ValidationError -class HotelServiceLine(models.Model): - _name = "hotel.service.line" +class PmsServiceLine(models.Model): + _name = "pms.service.line" _order = "date" # Fields declaration service_id = fields.Many2one( - 'hotel.service', + 'pms.service', string='Service Room', ondelete='cascade', required=True, @@ -24,11 +24,11 @@ class HotelServiceLine(models.Model): string='Taxes', related="service_id.tax_ids", readonly="True") - hotel_id = fields.Many2one( - 'hotel.property', + pms_property_id = fields.Many2one( + 'pms.property', store=True, readonly=True, - related='service_id.hotel_id') + related='service_id.pms_property_id') date = fields.Date('Date') day_qty = fields.Integer('Units') price_total = fields.Float( @@ -73,7 +73,7 @@ class HotelServiceLine(models.Model): for record in self: limit = record.product_id.daily_limit if limit > 0: - out_qty = sum(self.env['hotel.service.line'].search([ + out_qty = sum(self.env['pms.service.line'].search([ ('product_id', '=', record.product_id.id), ('date', '=', record.date), ('service_id', '!=', record.service_id.id) diff --git a/hotel/models/hotel_shared_room.py b/pms/models/pms_shared_room.py similarity index 90% rename from hotel/models/hotel_shared_room.py rename to pms/models/pms_shared_room.py index 0926a0f9c..24010fa0b 100644 --- a/hotel/models/hotel_shared_room.py +++ b/pms/models/pms_shared_room.py @@ -6,32 +6,32 @@ from odoo import models, fields, api, _ from odoo.exceptions import ValidationError -class HotelSharedRoom(models.Model): - _name = 'hotel.shared.room' - _description = 'Hotel Shared Room' +class PmsSharedRoom(models.Model): + _name = 'pms.shared.room' + _description = 'Shared Room' _order = "room_type_id, name" # Fields declaration name = fields.Char('Room Name', required=True) room_type_id = fields.Many2one( - 'hotel.room.type', - 'Hotel Room Type', + 'pms.room.type', + 'Room Type', required=True, ondelete='restrict', domain=[('shared_room', '=', True)] ) - hotel_id = fields.Many2one( - 'hotel.property', + pms_property_id = fields.Many2one( + 'pms.property', store=True, readonly=True, - related='room_type_id.hotel_id') + related='room_type_id.pms_property_id') floor_id = fields.Many2one( - 'hotel.floor', + 'pms.floor', 'Ubication', ondelete='restrict', help='At which floor the room is located.') bed_ids = fields.One2many( - 'hotel.room', + 'pms.room', 'shared_room_id', readonly=True, ondelete='restrict',) @@ -56,7 +56,7 @@ class HotelSharedRoom(models.Model): "If you want to eliminate beds in the \ room you must deactivate the beds from your form")) beds = [] - inactive_beds = self.env['hotel.room'].search([ + inactive_beds = self.env['pms.room'].search([ ('active', '=', False), ('shared_room_id', '=', self.id) ]) diff --git a/hotel/readme/CONFIGURE.rst b/pms/readme/CONFIGURE.rst similarity index 100% rename from hotel/readme/CONFIGURE.rst rename to pms/readme/CONFIGURE.rst diff --git a/hotel/readme/CONTRIBUTORS.rst b/pms/readme/CONTRIBUTORS.rst similarity index 100% rename from hotel/readme/CONTRIBUTORS.rst rename to pms/readme/CONTRIBUTORS.rst diff --git a/hotel/readme/CREDITS.rst b/pms/readme/CREDITS.rst similarity index 100% rename from hotel/readme/CREDITS.rst rename to pms/readme/CREDITS.rst diff --git a/hotel/readme/DESCRIPTION.rst b/pms/readme/DESCRIPTION.rst similarity index 100% rename from hotel/readme/DESCRIPTION.rst rename to pms/readme/DESCRIPTION.rst diff --git a/hotel/readme/INSTALL.rst b/pms/readme/INSTALL.rst similarity index 100% rename from hotel/readme/INSTALL.rst rename to pms/readme/INSTALL.rst diff --git a/hotel/readme/ROADMAP.rst b/pms/readme/ROADMAP.rst similarity index 100% rename from hotel/readme/ROADMAP.rst rename to pms/readme/ROADMAP.rst diff --git a/hotel/readme/USAGE.rst b/pms/readme/USAGE.rst similarity index 100% rename from hotel/readme/USAGE.rst rename to pms/readme/USAGE.rst diff --git a/hotel/report/hotel_folio.xml b/pms/report/pms_folio.xml similarity index 75% rename from hotel/report/hotel_folio.xml rename to pms/report/pms_folio.xml index d433f20a0..b9bc673d0 100644 --- a/hotel/report/hotel_folio.xml +++ b/pms/report/pms_folio.xml @@ -4,10 +4,10 @@ diff --git a/hotel/report/hotel_folio_templates.xml b/pms/report/pms_folio_templates.xml similarity index 99% rename from hotel/report/hotel_folio_templates.xml rename to pms/report/pms_folio_templates.xml index 7d7d0d5dc..424a8fab7 100644 --- a/hotel/report/hotel_folio_templates.xml +++ b/pms/report/pms_folio_templates.xml @@ -224,7 +224,7 @@ diff --git a/pms/security/ir.model.access.csv b/pms/security/ir.model.access.csv new file mode 100644 index 000000000..a73e4e250 --- /dev/null +++ b/pms/security/ir.model.access.csv @@ -0,0 +1,66 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +user_access_pms_floor,user_access_pms_floor,model_pms_floor,pms.group_pms_user,1,0,0,0 +user_access_pms_amenity,user_access_pms_amenity,model_pms_amenity,pms.group_pms_user,1,0,0,0 +user_access_pms_amenity_type,user_access_pms_amenity_type,model_pms_amenity_type,pms.group_pms_user,1,0,0,0 +user_access_pms_service,user_access_pms_service,model_pms_service,pms.group_pms_user,1,1,1,1 +user_access_pms_room_type_restriction,user_access_pms_room_type_restriction,model_pms_room_type_restriction,pms.group_pms_user,1,0,0,0 +user_access_pms_reservation_line,user_access_pms_reservation_line,model_pms_reservation_line,pms.group_pms_user,1,1,1,1 +user_access_room_closure_reason,user_access_room_closure_reason,model_room_closure_reason,pms.group_pms_user,1,0,0,0 +user_access_pms_service_line,user_access_pms_service_line,model_pms_service_line,pms.group_pms_user,1,1,1,1 +user_access_pms_board_service,user_access_pms_board_service,model_pms_board_service,pms.group_pms_user,1,0,0,0 +user_access_pms_checkin_partner,user_access_pms_checkin_partner,model_pms_checkin_partner,pms.group_pms_user,1,1,1,1 +user_access_pms_room_type_class,user_access_pms_room_type_class,model_pms_room_type_class,pms.group_pms_user,1,0,0,0 +user_access_pms_room,user_access_pms_room,model_pms_room,pms.group_pms_user,1,0,0,0 +user_access_shared_pms_room,user_access_pms_shared_room,model_pms_shared_room,pms.group_pms_user,1,0,0,0 +user_access_pms_room_type_restriction_item,user_access_pms_room_type_restriction_item,model_pms_room_type_restriction_item,pms.group_pms_user,1,0,0,0 +user_access_pms_reservation,user_access_pms_reservation,model_pms_reservation,pms.group_pms_user,1,1,1,1 +user_access_pms_folio,user_access_pms_folio,model_pms_folio,pms.group_pms_user,1,1,1,1 +user_access_pms_room_type,user_access_pms_room_type,model_pms_room_type,pms.group_pms_user,1,0,0,0 +user_access_pms_board_service_room_type,user_access_pms_board_service_room_type,model_pms_board_service_room_type,pms.group_pms_user,1,0,0,0 +user_access_pms_board_service_room_type_line,user_access_pms_board_service_room_type_line,model_pms_board_service_room_type_line,pms.group_pms_user,1,0,0,0 +user_access_pms_board_service_line,user_access_pms_board_service_line,model_pms_board_service_line,pms.group_pms_user,1,0,0,0 +user_access_account_partial_reconcile,user_access_account_partial_reconcile,account.model_account_partial_reconcile,pms.group_pms_user,1,1,1,1 +user_access_pms_cancelation_rule,user_access_pms_cancelation_rule,model_pms_cancelation_rule,pms.group_pms_user,1,0,0,0 +user_access_account_full_reconcile,user_access_account_full_reconcile,account.model_account_full_reconcile,pms.group_pms_user,1,1,1,1 +manager_access_pms_floor,manager_access_pms_floor,model_pms_floor,pms.group_pms_manager,1,1,1,1 +manager_access_pms_amenity,manager_access_pms_amenity,model_pms_amenity,pms.group_pms_manager,1,1,1,1 +manager_access_pms_amenity_type,manager_access_pms_amenity_type,model_pms_amenity_type,pms.group_pms_manager,1,1,1,1 +manager_access_pms_service,manager_access_pms_service,model_pms_service,pms.group_pms_manager,1,1,1,1 +manager_access_pms_room_type_restriction,manager_access_pms_room_type_restriction,model_pms_room_type_restriction,pms.group_pms_manager,1,1,1,1 +manager_access_pms_reservation_line,manager_access_pms_reservation_line,model_pms_reservation_line,pms.group_pms_manager,1,1,1,1 +manager_access_room_closure_reason,manager_access_room_closure_reason,model_room_closure_reason,pms.group_pms_manager,1,1,1,1 +manager_access_pms_service_line,manager_access_pms_service_line,model_pms_service_line,pms.group_pms_manager,1,1,1,1 +manager_access_pms_board_service,manager_access_pms_board_service,model_pms_board_service,pms.group_pms_manager,1,1,1,1 +manager_access_pms_checkin_partner,manager_access_pms_checkin_partner,model_pms_checkin_partner,pms.group_pms_manager,1,1,1,1 +manager_access_pms_room_type_class,manager_access_pms_room_type_class,model_pms_room_type_class,pms.group_pms_manager,1,1,1,1 +manager_access_pms_room,manager_access_pms_room,model_pms_room,pms.group_pms_manager,1,1,1,1 +manager_access_pms_shared_room,manager_access_pms_shared_room,model_pms_shared_room,pms.group_pms_manager,1,1,1,1 +manager_access_pms_room_type_restriction_item,manager_access_pms_room_type_restriction_item,model_pms_room_type_restriction_item,pms.group_pms_manager,1,1,1,1 +manager_access_pms_reservation,manager_access_pms_reservation,model_pms_reservation,pms.group_pms_manager,1,1,1,1 +manager_access_pms_folio,manager_access_pms_folio,model_pms_folio,pms.group_pms_manager,1,1,1,1 +manager_access_pms_room_type,manager_access_pms_room_type,model_pms_room_type,pms.group_pms_manager,1,1,1,1 +manager_access_pms_board_service_room_type,manager_access_pms_board_service_room_type,model_pms_board_service_room_type,pms.group_pms_manager,1,1,1,1 +manager_access_pms_board_service_room_type_line,manager_access_pms_board_service_room_type_line,model_pms_board_service_room_type_line,pms.group_pms_manager,1,1,1,1 +manager_access_pms_board_service_line,manager_access_pms_board_service_line,model_pms_board_service_line,pms.group_pms_manager,1,1,1,1 +manager_access_pms_cancelation_rule,manager_access_pms_cancelation_rule,model_pms_cancelation_rule,base.group_user,1,1,1,1 +call_access_pms_floor,call_access_pms_floor,model_pms_floor,pms.group_pms_call,1,0,0,0 +call_access_pms_amenity,call_access_pms_amenity,model_pms_amenity,pms.group_pms_call,1,0,0,0 +call_access_pms_amenity_type,call_access_pms_amenity_type,model_pms_amenity_type,pms.group_pms_call,1,0,0,0 +call_access_pms_service,call_access_pms_service,model_pms_service,pms.group_pms_call,1,1,1,1 +call_access_pms_room_type_restriction,call_access_pms_room_type_restriction,model_pms_room_type_restriction,pms.group_pms_call,1,0,0,0 +call_access_pms_reservation_line,call_access_pms_reservation_line,model_pms_reservation_line,pms.group_pms_call,1,1,1,1 +call_access_room_closure_reason,call_access_room_closure_reason,model_room_closure_reason,pms.group_pms_call,1,0,0,0 +call_access_pms_service_line,call_access_pms_service_line,model_pms_service_line,pms.group_pms_call,1,1,1,1 +call_access_pms_board_service,call_access_pms_board_service,model_pms_board_service,pms.group_pms_call,1,0,0,0 +call_access_pms_checkin_partner,call_access_pms_checkin_partner,model_pms_checkin_partner,pms.group_pms_call,1,1,1,1 +call_access_pms_room_type_class,call_access_pms_room_type_class,model_pms_room_type_class,pms.group_pms_call,1,0,0,0 +call_access_pms_room,call_access_pms_room,model_pms_room,pms.group_pms_call,1,0,0,0 +call_access_pms_shared_room,call_access_pms_shared_room,model_pms_shared_room,pms.group_pms_call,1,0,0,0 +call_access_pms_room_type_restriction_item,call_access_pms_room_type_restriction_item,model_pms_room_type_restriction_item,pms.group_pms_call,1,0,0,0 +call_access_pms_reservation,call_access_pms_reservation,model_pms_reservation,pms.group_pms_call,1,1,1,1 +call_access_pms_folio,call_access_pms_folio,model_pms_folio,pms.group_pms_call,1,1,1,1 +call_access_pms_room_type,call_access_pms_room_type,model_pms_room_type,pms.group_pms_call,1,0,0,0 +call_access_pms_board_service_room_type,call_access_pms_board_service_room_type,model_pms_board_service_room_type,pms.group_pms_call,1,0,0,0 +call_access_pms_board_service_room_type_line,call_access_pms_board_service_room_type_line,model_pms_board_service_room_type_line,pms.group_pms_call,1,0,0,0 +call_access_pms_board_service_line,call_access_pms_board_service_line,model_pms_board_service_line,pms.group_pms_call,1,0,0,0 +call_access_pms_cancelation_rule,call_access_pms_cancelation_rule,model_pms_cancelation_rule,base.group_user,1,0,0,0 diff --git a/pms/security/pms_security.xml b/pms/security/pms_security.xml new file mode 100644 index 000000000..ce3f78ca8 --- /dev/null +++ b/pms/security/pms_security.xml @@ -0,0 +1,22 @@ + + + + + + + Property Management / User + + + + + Property Management/ Manager + + + + + + Property Management / CallCenter + + + + diff --git a/hotel/static/description/icon.png b/pms/static/description/icon.png similarity index 100% rename from hotel/static/description/icon.png rename to pms/static/description/icon.png diff --git a/hotel/static/src/js/views/list/list_controller.js b/pms/static/src/js/views/list/list_controller.js similarity index 76% rename from hotel/static/src/js/views/list/list_controller.js rename to pms/static/src/js/views/list/list_controller.js index e45f554cd..c783b9984 100644 --- a/hotel/static/src/js/views/list/list_controller.js +++ b/pms/static/src/js/views/list/list_controller.js @@ -1,7 +1,7 @@ -odoo.define('hotel.ListController', function(require) { +odoo.define('pms.ListController', function(require) { 'use strict'; /* - * Hotel + * Pms * GNU Public License * Alexandre Díaz */ @@ -16,10 +16,10 @@ ListController.include({ renderButtons: function () { this._super.apply(this, arguments); // Sets this.$buttons var self = this; - if (this.modelName === 'hotel.reservation') { + if (this.modelName === 'pms.reservation') { this.$buttons.append(""); this.$buttons.find('.oe_open_reservation_wizard').on('click', function(){ - self.do_action('hotel.open_wizard_reservations'); + self.do_action('pms.open_wizard_reservations'); }); } } diff --git a/hotel/static/src/js/widgets/switch_hotel_menu.js b/pms/static/src/js/widgets/switch_hotel_menu.js similarity index 52% rename from hotel/static/src/js/widgets/switch_hotel_menu.js rename to pms/static/src/js/widgets/switch_hotel_menu.js index fdc5562ef..efe6bad80 100644 --- a/hotel/static/src/js/widgets/switch_hotel_menu.js +++ b/pms/static/src/js/widgets/switch_hotel_menu.js @@ -1,4 +1,4 @@ -odoo.define('hotel.SwitchHotelMenu', function(require) { +odoo.define('pms.SwitchPmsMenu', function(require) { "use strict"; var config = require('web.config'); @@ -9,11 +9,11 @@ var Widget = require('web.Widget'); var _t = core._t; -var SwitchHotelMenu = Widget.extend({ - template: 'hotel.SwitchHotelMenu', +var SwitchPmsMenu = Widget.extend({ + template: 'pms.SwitchPmsMenu', willStart: function() { this.isMobile = config.device.isMobile; - if (!session.user_hotels) { + if (!session.user_pmss) { return $.Deferred().reject(); } return this._super(); @@ -22,40 +22,40 @@ var SwitchHotelMenu = Widget.extend({ var self = this; this.$el.on('click', '.dropdown-menu li a[data-menu]', _.debounce(function(ev) { ev.preventDefault(); - var hotel_id = $(ev.currentTarget).data('hotel-id'); + var pms_property_id = $(ev.currentTarget).data('property-id'); self._rpc({ model: 'res.users', method: 'write', - args: [[session.uid], {'hotel_id': hotel_id}], + args: [[session.uid], {'pms_property_id': pms_property_id}], }) .then(function() { location.reload(); }); }, 1500, true)); - var hotels_list = ''; + var properties_list = ''; if (this.isMobile) { - hotels_list = '
  • ' + _t('Tap on the list to change hotel') + '
  • '; + propertiess_list = '
  • ' + _t('Tap on the list to change property') + '
  • '; } else { - self.$('.oe_topbar_name').text(session.user_hotels.current_hotel[1]); + self.$('.oe_topbar_name').text(session.user_properties.current_property[1]); } - _.each(session.user_hotels.allowed_hotels, function(hotel) { + _.each(session.user_properties.allowed_propierties, function(property) { var a = ''; - if (hotel[0] === session.user_hotels.current_hotel[0]) { + if (property[0] === session.user_properties.current_property[0]) { a = ''; } else { a = ''; } - hotels_list += '
  • ' + a + hotel[1] + '
  • '; + properties_list += '
  • ' + a + property[1] + '
  • '; }); - self.$('.dropdown-menu').html(hotels_list); + self.$('.dropdown-menu').html(properties_list); return this._super(); }, }); -SystrayMenu.Items.push(SwitchHotelMenu); +SystrayMenu.Items.push(SwitchPmsMenu); -return SwitchHotelMenu; +return SwitchPmsMenu; }); diff --git a/hotel/static/src/xml/hotel_base_templates.xml b/pms/static/src/xml/pms_base_templates.xml similarity index 90% rename from hotel/static/src/xml/hotel_base_templates.xml rename to pms/static/src/xml/pms_base_templates.xml index 0a9895114..60a185ef3 100644 --- a/hotel/static/src/xml/hotel_base_templates.xml +++ b/pms/static/src/xml/pms_base_templates.xml @@ -1,6 +1,6 @@