[REF] Change Hotel by PMS and Property concept

This commit is contained in:
Darío Lodeiros
2020-07-07 18:05:22 +02:00
parent 8fce730435
commit 0fb48fade2
124 changed files with 1493 additions and 1549 deletions

View File

@@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data noupdate="1">
<!-- Sequences for hotel folio -->
<record model="ir.sequence" id="seq_hotel_folio">
<field name="name">Hotel Folio</field>
<field name="code">hotel.folio</field>
<field name="prefix">F/</field>
<field name="padding">5</field>
</record>
</data>
</odoo>

View File

@@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<menuitem id="hotel_management_menu" name="Hotel Management"
sequence="8" web_icon="hotel,static/description/icon.png"
groups="hotel.group_hotel_user,hotel.group_hotel_call"/>
<menuitem id="hotel_configuration_menu" name="Configuration"
sequence="20" parent="hotel_management_menu"
groups="hotel.group_hotel_user"/>
<menuitem id="hotel_reports_menu" name="Reports"
sequence="15" parent="hotel_management_menu"
groups="hotel.group_hotel_user"/>
<menuitem id="menu_account_finance_xls_reports" name="XLS Reports"
parent="hotel.hotel_reports_menu" sequence="50"/>
<menuitem id="configuration_others" name="Configuration"
parent="hotel.hotel_configuration_menu" sequence="10"
groups="hotel.group_hotel_manager" />
<menuitem id="hotel_massive_change" name="Massive Changes"
parent="hotel.configuration_others"
sequence="10" action="action_hotel_massive_change"/>
</odoo>

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<!--Group for hotel user -->
<record id="group_hotel_user" model="res.groups">
<field name="name">Hotel Management / User</field>
</record>
<!--Group for hotel manager -->
<record id="group_hotel_manager" model="res.groups">
<field name="name">Hotel Management/ Manager</field>
<field name="implied_ids" eval="[(4, ref('hotel.group_hotel_user'))]"/>
</record>
<!--Group for hotel user -->
<record id="group_hotel_call" model="res.groups">
<field name="name">Hotel Management / CallCenter</field>
</record>
</data>
</odoo>

View File

@@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 user_access_hotel_floor user_access_hotel_floor model_hotel_floor hotel.group_hotel_user 1 0 0 0
3 user_access_hotel_amenity user_access_hotel_amenity model_hotel_amenity hotel.group_hotel_user 1 0 0 0
4 user_access_hotel_amenity_type user_access_hotel_amenity_type model_hotel_amenity_type hotel.group_hotel_user 1 0 0 0
5 user_access_hotel_service user_access_hotel_service model_hotel_service hotel.group_hotel_user 1 1 1 1
6 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
7 user_access_hotel_reservation_line user_access_hotel_reservation_line model_hotel_reservation_line hotel.group_hotel_user 1 1 1 1
8 user_access_room_closure_reason user_access_room_closure_reason model_room_closure_reason hotel.group_hotel_user 1 0 0 0
9 user_access_hotel_service_line user_access_hotel_service_line model_hotel_service_line hotel.group_hotel_user 1 1 1 1
10 user_access_hotel_board_service user_access_hotel_board_service model_hotel_board_service hotel.group_hotel_user 1 0 0 0
11 user_access_hotel_checkin_partner user_access_hotel_checkin_partner model_hotel_checkin_partner hotel.group_hotel_user 1 1 1 1
12 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
13 user_access_hotel_room user_access_hotel_room model_hotel_room hotel.group_hotel_user 1 0 0 0
14 user_access_shared_hotel_room user_access_hotel_shared_room model_hotel_shared_room hotel.group_hotel_user 1 0 0 0
15 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
16 user_access_hotel_reservation user_access_hotel_reservation model_hotel_reservation hotel.group_hotel_user 1 1 1 1
17 user_access_hotel_folio user_access_hotel_folio model_hotel_folio hotel.group_hotel_user 1 1 1 1
18 user_access_hotel_room_type user_access_hotel_room_type model_hotel_room_type hotel.group_hotel_user 1 0 0 0
19 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
20 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
21 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
22 user_access_account_partial_reconcile user_access_account_partial_reconcile account.model_account_partial_reconcile hotel.group_hotel_user 1 1 1 1
23 user_access_hotel_cancelation_rule user_access_hotel_cancelation_rule model_hotel_cancelation_rule hotel.group_hotel_user 1 0 0 0
24 user_access_account_full_reconcile user_access_account_full_reconcile account.model_account_full_reconcile hotel.group_hotel_user 1 1 1 1
25 manager_access_hotel_floor manager_access_hotel_floor model_hotel_floor hotel.group_hotel_manager 1 1 1 1
26 manager_access_hotel_amenity manager_access_hotel_amenity model_hotel_amenity hotel.group_hotel_manager 1 1 1 1
27 manager_access_hotel_amenity_type manager_access_hotel_amenity_type model_hotel_amenity_type hotel.group_hotel_manager 1 1 1 1
28 manager_access_hotel_service manager_access_hotel_service model_hotel_service hotel.group_hotel_manager 1 1 1 1
29 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
30 manager_access_hotel_reservation_line manager_access_hotel_reservation_line model_hotel_reservation_line hotel.group_hotel_manager 1 1 1 1
31 manager_access_room_closure_reason manager_access_room_closure_reason model_room_closure_reason hotel.group_hotel_manager 1 1 1 1
32 manager_access_hotel_service_line manager_access_hotel_service_line model_hotel_service_line hotel.group_hotel_manager 1 1 1 1
33 manager_access_hotel_board_service manager_access_hotel_board_service model_hotel_board_service hotel.group_hotel_manager 1 1 1 1
34 manager_access_hotel_checkin_partner manager_access_hotel_checkin_partner model_hotel_checkin_partner hotel.group_hotel_manager 1 1 1 1
35 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
36 manager_access_hotel_room manager_access_hotel_room model_hotel_room hotel.group_hotel_manager 1 1 1 1
37 manager_access_hotel_shared_room manager_access_hotel_shared_room model_hotel_shared_room hotel.group_hotel_manager 1 1 1 1
38 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
39 manager_access_hotel_reservation manager_access_hotel_reservation model_hotel_reservation hotel.group_hotel_manager 1 1 1 1
40 manager_access_hotel_folio manager_access_hotel_folio model_hotel_folio hotel.group_hotel_manager 1 1 1 1
41 manager_access_hotel_room_type manager_access_hotel_room_type model_hotel_room_type hotel.group_hotel_manager 1 1 1 1
42 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
43 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
44 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
45 manager_access_hotel_cancelation_rule manager_access_hotel_cancelation_rule model_hotel_cancelation_rule base.group_user 1 1 1 1
46 call_access_hotel_floor call_access_hotel_floor model_hotel_floor hotel.group_hotel_call 1 0 0 0
47 call_access_hotel_amenity call_access_hotel_amenity model_hotel_amenity hotel.group_hotel_call 1 0 0 0
48 call_access_hotel_amenity_type call_access_hotel_amenity_type model_hotel_amenity_type hotel.group_hotel_call 1 0 0 0
49 call_access_hotel_service call_access_hotel_service model_hotel_service hotel.group_hotel_call 1 1 1 1
50 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
51 call_access_hotel_reservation_line call_access_hotel_reservation_line model_hotel_reservation_line hotel.group_hotel_call 1 1 1 1
52 call_access_room_closure_reason call_access_room_closure_reason model_room_closure_reason hotel.group_hotel_call 1 0 0 0
53 call_access_hotel_service_line call_access_hotel_service_line model_hotel_service_line hotel.group_hotel_call 1 1 1 1
54 call_access_hotel_board_service call_access_hotel_board_service model_hotel_board_service hotel.group_hotel_call 1 0 0 0
55 call_access_hotel_checkin_partner call_access_hotel_checkin_partner model_hotel_checkin_partner hotel.group_hotel_call 1 1 1 1
56 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
57 call_access_hotel_room call_access_hotel_room model_hotel_room hotel.group_hotel_call 1 0 0 0
58 call_access_hotel_shared_room call_access_hotel_shared_room model_hotel_shared_room hotel.group_hotel_call 1 0 0 0
59 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
60 call_access_hotel_reservation call_access_hotel_reservation model_hotel_reservation hotel.group_hotel_call 1 1 1 1
61 call_access_hotel_folio call_access_hotel_folio model_hotel_folio hotel.group_hotel_call 1 1 1 1
62 call_access_hotel_room_type call_access_hotel_room_type model_hotel_room_type hotel.group_hotel_call 1 0 0 0
63 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
64 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
65 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
66 call_access_hotel_cancelation_rule call_access_hotel_cancelation_rule model_hotel_cancelation_rule base.group_user 1 0 0 0

View File

@@ -1,47 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--==== Amenities Type ==== -->
<!-- Form view of hotel room amenities type -->
<record model="ir.ui.view" id="hotel_room_amenity_type_view_form">
<field name="name">hotel.room_amenity_type_form</field>
<field name="model">hotel.amenity.type</field>
<field name="arch" type="xml">
<form string="Hotel Room Amenities Type">
<sheet>
<group>
<field name="name" string="Amenity Type" />
<field name="hotel_ids" widget="many2many_tags"
options="{'no_create': True,'no_open': True}"/>
<!-- <field name="parent_id" domain="[('isamenitytype','=',True)]" /> -->
<!-- <field name="isamenitytype" invisible="1" /> -->
</group>
</sheet>
</form>
</field>
</record>
<!-- Tree view of hotel room amenities type -->
<record model="ir.ui.view" id="hotel_room_amenity_type_view_list">
<field name="name">hotel.room_amenity_type_list</field>
<field name="model">hotel.amenity.type</field>
<field name="arch" type="xml">
<tree string="Hotel Room Amenities Type">
<field name="name" />
</tree>
</field>
</record>
<!-- Action for hotel room amenities type -->
<record model="ir.actions.act_window" id="action_hotel_room_amenity_type_view_form">
<field name="name">Hotel Room amenity Type</field>
<field name="res_model">hotel.amenity.type</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem name="Amenity Types"
id="menu_action_hotel_room_amenity_type_view_form" action="action_hotel_room_amenity_type_view_form"
sequence="3" parent="hotel.menu_amenity" />
</odoo>

View File

@@ -1,51 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--==================================================== Board Services ==================================================== -->
<!-- Form view of hotel board service -->
<record model="ir.ui.view" id="hotel_board_service_form">
<field name="name">hotel.board.service.form</field>
<field name="model">hotel.board.service</field>
<field name="arch" type="xml">
<form string="Board Service Line">
<group>
<field name="name" />
<field name="hotel_ids" widget="many2many_tags"
options="{'no_create': True,'no_open': True}"/>
<field name="amount"/>
<field name="board_service_line_ids">
<tree editable="bottom">
<field name="product_id"/>
<field name="amount" />
</tree>
</field>
</group>
</form>
</field>
</record>
<!-- Tree view of hotel floor -->
<record model="ir.ui.view" id="hotel_board_service_view_tree">
<field name="name">hotel.board.service.tree</field>
<field name="model">hotel.board.service</field>
<field name="arch" type="xml">
<tree string="Hotel Board Services">
<field name="name" />
<field name="amount" />
</tree>
</field>
</record>
<!-- Action of hotel floor -->
<record model="ir.actions.act_window" id="open_hotel_board_service_form_tree">
<field name="name">Board Services</field>
<field name="res_model">hotel.board.service</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem name="Board Services" id="menu_open_hotel_board_service_form_tree"
action="open_hotel_board_service_form_tree" sequence="25"
parent="hotel.configuration_others" />
</odoo>

View File

@@ -1,47 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--==================================================== Floor ==================================================== -->
<!-- Form view of hotel floor -->
<record model="ir.ui.view" id="hotel_floor_view_form">
<field name="name">hotel.floor.form</field>
<field name="model">hotel.floor</field>
<field name="arch" type="xml">
<form string=" Hotel Ubication">
<sheet>
<group>
<field name="name" colspan="1" />
<field name="sequence" select="1" />
<field name="hotel_ids" widget="many2many_tags"
options="{'no_create': True,'no_open': True}"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- Tree view of hotel floor -->
<record model="ir.ui.view" id="hotel_floor_view_tree">
<field name="name">hotel.floor.tree</field>
<field name="model">hotel.floor</field>
<field name="arch" type="xml">
<tree string=" Hotel Ubications">
<field name="name" colspan="1" />
<field name="sequence" select="1" />
</tree>
</field>
</record>
<!-- Action of hotel floor -->
<record model="ir.actions.act_window" id="open_hotel_floor_form_tree">
<field name="name">Floor Structure</field>
<field name="res_model">hotel.floor</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem name="Ubitacions" id="menu_open_hotel_floor_form_tree"
action="open_hotel_floor_form_tree" sequence="21"
parent="hotel.configuration_others" />
</odoo>

View File

@@ -1,43 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Form view of hotel room type class-->
<record model="ir.ui.view" id="hotel_room_closure_reason_view_form">
<field name="name">hotel.room.closure.reason.form</field>
<field name="model">room.closure.reason</field>
<field name="arch" type="xml">
<form string="Hotel Room Closure Reason">
<sheet>
<field name="name" />
<field name="description" />
<field name="hotel_ids" widget="many2many_tags"
options="{'no_create': True,'no_open': True}"/>
</sheet>
</form>
</field>
</record>
<!-- Tree view of hotel room type class -->
<record model="ir.ui.view" id="hotel_room_closure_reason_view_tree">
<field name="name">>hotel.room.closure.reason.tree</field>
<field name="model">room.closure.reason</field>
<field name="arch" type="xml">
<tree string="Hotel Room Closure Reason">
<field name="name"/>
<field name="description" />
</tree>
</field>
</record>
<!-- Action for hotel room type class -->
<record model="ir.actions.act_window" id="open_hotel_room_closure_reason_form_tree">
<field name="name">Room Closure Reason</field>
<field name="res_model">room.closure.reason</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem name="Closure Reasons" id="menu_hotel_room_closure_reason_form_tree"
action="open_hotel_room_closure_reason_form_tree" sequence="25"
parent="hotel.configuration_others" />
</odoo>

View File

@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<template id="assets_backend" name="hotel assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/hotel/static/src/js/widgets/switch_hotel_menu.js"></script>
</xpath>
</template>
</data>
</odoo>

View File

@@ -2,11 +2,11 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{ {
'name': 'roomdoo', 'name': 'pms',
'summary': "A property management system focused on medium-sized hotels", 'summary': "A property management system",
'version': '11.0.2.0.0', 'version': '11.0.2.0.0',
'development_status': 'Beta', 'development_status': 'Beta',
'category': 'Generic Modules/Hotel Management', 'category': 'Generic Modules/Property Management System',
'website': 'https://github.com/hootel/hootel', 'website': 'https://github.com/hootel/hootel',
'author': 'Darío Lodeiros, ' 'author': 'Darío Lodeiros, '
'Alexandre Díaz, ' 'Alexandre Díaz, '
@@ -17,24 +17,24 @@
'installable': True, 'installable': True,
'depends': [ 'depends': [
'base', 'base',
'sale_stock', 'mail',
'account_payment_return', 'account_payment_return',
'partner_firstname', 'partner_firstname',
'account_cancel', 'account_cancel',
'email_template_qweb' 'email_template_qweb'
], ],
'data': [ 'data': [
'security/hotel_security.xml', 'security/pms_security.xml',
'security/ir.model.access.csv', 'security/ir.model.access.csv',
'data/cron_jobs.xml', 'data/cron_jobs.xml',
'data/hotel_data.xml', 'data/pms_data.xml',
'data/hotel_sequence.xml', 'data/pms_sequence.xml',
'data/email_template_cancel.xml', 'data/email_template_cancel.xml',
'data/email_template_reserv.xml', 'data/email_template_reserv.xml',
'data/email_template_exit.xml', 'data/email_template_exit.xml',
'report/hotel_folio.xml', 'report/pms_folio.xml',
'report/hotel_folio_templates.xml', 'report/pms_folio_templates.xml',
'templates/hotel_email_template.xml', 'templates/pms_email_template.xml',
'wizard/massive_changes.xml', 'wizard/massive_changes.xml',
'wizard/massive_price_reservation_days.xml', 'wizard/massive_price_reservation_days.xml',
'wizard/service_on_day.xml', 'wizard/service_on_day.xml',
@@ -42,28 +42,28 @@
'wizard/wizard_reservation.xml', 'wizard/wizard_reservation.xml',
'views/general.xml', 'views/general.xml',
'data/menus.xml', 'data/menus.xml',
'views/hotel_amenity_views.xml', 'views/pms_amenity_views.xml',
'views/hotel_amenity_type_views.xml', 'views/pms_amenity_type_views.xml',
'views/hotel_board_service_views.xml', 'views/pms_board_service_views.xml',
'views/hotel_board_service_room_type_views.xml', 'views/pms_board_service_room_type_views.xml',
'views/hotel_cancelation_rule_views.xml', 'views/pms_cancelation_rule_views.xml',
'views/hotel_checkin_partner_views.xml', 'views/pms_checkin_partner_views.xml',
'views/hotel_floor_views.xml', 'views/pms_floor_views.xml',
'views/hotel_folio_views.xml', 'views/pms_folio_views.xml',
'views/hotel_property_views.xml', 'views/pms_property_views.xml',
'views/hotel_reservation_views.xml', 'views/pms_reservation_views.xml',
'views/hotel_room_type_views.xml', 'views/pms_room_type_views.xml',
'views/hotel_room_views.xml', 'views/pms_room_views.xml',
'views/hotel_room_closure_reason_views.xml', 'views/pms_room_closure_reason_views.xml',
'views/inherited_account_payment_views.xml', 'views/inherited_account_payment_views.xml',
'views/inherited_account_invoice_views.xml', 'views/inherited_account_invoice_views.xml',
'views/inherited_res_users_views.xml', 'views/inherited_res_users_views.xml',
'views/hotel_room_type_class_views.xml', 'views/pms_room_type_class_views.xml',
'views/hotel_room_type_restriction_views.xml', 'views/pms_room_type_restriction_views.xml',
'views/hotel_room_type_restriction_item_views.xml', 'views/pms_room_type_restriction_item_views.xml',
'views/hotel_service_views.xml', 'views/pms_service_views.xml',
'views/hotel_service_line_views.xml', 'views/pms_service_line_views.xml',
'views/hotel_shared_room_views.xml', 'views/pms_shared_room_views.xml',
'views/inherited_res_partner_views.xml', 'views/inherited_res_partner_views.xml',
'views/inherited_product_pricelist_views.xml', 'views/inherited_product_pricelist_views.xml',
'views/inherited_product_template_views.xml', 'views/inherited_product_template_views.xml',
@@ -71,9 +71,9 @@
'wizard/folio_make_invoice_advance_views.xml', 'wizard/folio_make_invoice_advance_views.xml',
], ],
'demo': [ 'demo': [
'demo/hotel_demo.xml' 'demo/pms_demo.xml'
], ],
'qweb': [ 'qweb': [
'static/src/xml/hotel_base_templates.xml', 'static/src/xml/pms_base_templates.xml',
], ],
} }

View File

@@ -10,7 +10,7 @@
<field name="interval_type">days</field> <field name="interval_type">days</field>
<field name="numbercall">-1</field> <field name="numbercall">-1</field>
<field name="doall" eval="False" /> <field name="doall" eval="False" />
<field name="model_id" ref="model_hotel_reservation" /> <field name="model_id" ref="model_pms_reservation" />
<field name="code">model.reservation_reminder_24hrs()</field> <field name="code">model.reservation_reminder_24hrs()</field>
</record> </record>
@@ -23,7 +23,7 @@
<field name="numbercall">-1</field> <field name="numbercall">-1</field>
<field name="doall" eval="False" /> <field name="doall" eval="False" />
<field name="state">code</field> <field name="state">code</field>
<field name="model_id" ref="model_hotel_reservation" /> <field name="model_id" ref="model_pms_reservation" />
<field name="nextcall" eval="(DateTime.now() + timedelta(days=1)).strftime('%Y-%m-%d 05:00:00')"/> <field name="nextcall" eval="(DateTime.now() + timedelta(days=1)).strftime('%Y-%m-%d 05:00:00')"/>
<field name="code">model.autocheckout()</field> <field name="code">model.autocheckout()</field>

View File

@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xml> <!DOCTYPE xml>
<odoo> <odoo>
<data noupdate="1"> <data noupdate="1">
<!-- Email Template For Hotel Reservation --> <!-- Email Template For PMS Reservation -->
<record id="mail_template_hotel_cancel" model="mail.template"> <record id="mail_template_pms_cancel" model="mail.template">
<field name="name">Cancel Reservation-Send by Email</field> <field name="name">Cancel Reservation-Send by Email</field>
<field name="subject">Cancelación de su reserva en ${object.company_id.property_name}</field> <field name="subject">Cancelación de su reserva en ${object.company_id.property_name}</field>
<field name="partner_to">${(object.partner_id.id or '')}</field> <field name="partner_to">${(object.partner_id.id or '')}</field>
<field name="model_id" ref="hotel.model_hotel_folio"/> <field name="model_id" ref="pms.model_pms_folio"/>
<field name="auto_delete" eval="True" /> <field name="auto_delete" eval="True" />
<field name="body_html"> <field name="body_html">
<![CDATA[ <![CDATA[
<style type="text/css"> <style type="text/css">
/*Global Styles*/ /*Global Styles*/
@@ -704,8 +704,8 @@
</tbody> </tbody>
</table> </table>
</div> </div>
]]> ]]>
</field> </field>
</record> </record>
</data> </data>
</odoo> </odoo>

View File

@@ -2,12 +2,12 @@
<!DOCTYPE xml> <!DOCTYPE xml>
<odoo> <odoo>
<data noupdate="1"> <data noupdate="1">
<!-- Email Template For Hotel Reservation --> <!-- Email Template For PMS Reservation -->
<record id="mail_template_hotel_exit" model="mail.template"> <record id="mail_template_pms_exit" model="mail.template">
<field name="name">Exit Reservation-Send by Email</field> <field name="name">Exit Reservation-Send by Email</field>
<field name="subject">Gracias por alojarse con nosotros en ${object.company_id.property_name}</field> <field name="subject">Gracias por alojarse con nosotros en ${object.company_id.property_name}</field>
<field name="partner_to">${(object.partner_id.id or '')}</field> <field name="partner_to">${(object.partner_id.id or '')}</field>
<field name="model_id" ref="hotel.model_hotel_folio"/> <field name="model_id" ref="pms.model_pms_folio"/>
<field name="auto_delete" eval="True" /> <field name="auto_delete" eval="True" />
<field name="body_html"><![CDATA[<style type="text/css">/*Global Styles*/ <field name="body_html"><![CDATA[<style type="text/css">/*Global Styles*/
.marco {bgcolor:#f6f6f6; margin: 0; padding: 0; min-width: 100%!important;} .marco {bgcolor:#f6f6f6; margin: 0; padding: 0; min-width: 100%!important;}

View File

@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xml> <!DOCTYPE xml>
<odoo> <odoo>
<data noupdate="1"> <data noupdate="1">
<!-- Email Template For Hotel Reservation --> <!-- Email Template For PMS Reservation -->
<record id="mail_template_hotel_reservation" model="mail.template"> <record id="mail_template_pms_reservation" model="mail.template">
<field name="name">Confirm Reservation-Send by Email</field> <field name="name">Confirm Reservation-Send by Email</field>
<field name="subject">Confirmación de los detalles de su reserva en ${object.company_id.property_name}</field> <field name="subject">Confirmación de los detalles de su reserva en ${object.company_id.property_name}</field>
<field name="partner_to">${(object.partner_id.id or '')}</field> <field name="partner_to">${(object.partner_id.id or '')}</field>
<field name="model_id" ref="hotel.model_hotel_folio"/> <field name="model_id" ref="pms.model_pms_folio"/>
<field name="auto_delete" eval="True" /> <field name="auto_delete" eval="True" />
<field name="body_html"><![CDATA[ <field name="body_html"><![CDATA[
<style type="text/css"> <style type="text/css">
/*Global Styles*/ /*Global Styles*/
@@ -1036,7 +1036,7 @@
</table> </table>
</div> </div>
]]> ]]>
</field> </field>
</record> </record>
</data> </data>
</odoo> </odoo>

27
pms/data/menus.xml Normal file
View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<menuitem id="pms_management_menu" name="pms Management"
sequence="8" web_icon="pms,static/description/icon.png"
groups="pms.group_pms_user,pms.group_pms_call"/>
<menuitem id="pms_configuration_menu" name="Configuration"
sequence="20" parent="pms_management_menu"
groups="pms.group_pms_user"/>
<menuitem id="pms_reports_menu" name="Reports"
sequence="15" parent="pms_management_menu"
groups="pms.group_pms_user"/>
<menuitem id="menu_account_finance_xls_reports" name="XLS Reports"
parent="pms.pms_reports_menu" sequence="50"/>
<menuitem id="configuration_others" name="Configuration"
parent="pms.pms_configuration_menu" sequence="10"
groups="pms.group_pms_manager" />
<menuitem id="pms_massive_change" name="Massive Changes"
parent="pms.configuration_others"
sequence="10" action="action_pms_massive_change"/>
</odoo>

View File

@@ -2,41 +2,41 @@
<odoo> <odoo>
<data noupdate="1"> <data noupdate="1">
<!-- hotel.users --> <!-- pms.users -->
<record id="base.user_root" model="res.users"> <record id="base.user_root" model="res.users">
<field name="groups_id" eval="[(4,ref('hotel.group_hotel_manager'))]"/> <field name="groups_id" eval="[(4,ref('pms.group_pms_manager'))]"/>
</record> </record>
<record id="base.user_demo" model="res.users"> <record id="base.user_demo" model="res.users">
<field name="groups_id" eval="[(4,ref('hotel.group_hotel_user'))]"/> <field name="groups_id" eval="[(4,ref('pms.group_pms_user'))]"/>
</record> </record>
<!-- Basic hotel --> <!-- Basic pms -->
<record id="main_hotel_room_type_restriction" model="hotel.room.type.restriction"> <record id="main_pms_room_type_restriction" model="pms.room.type.restriction">
<field name="name">Restriction Plan</field> <field name="name">Restriction Plan</field>
</record> </record>
<record id="main_hotel_property" model="hotel.property"> <record id="main_pms_property" model="pms.property">
<field name="name">My Hotel</field> <field name="name">My Property</field>
<field name="company_id" ref="base.main_company"/> <field name="company_id" ref="base.main_company"/>
<field name="default_pricelist_id" ref="product.list0"/> <field name="default_pricelist_id" ref="product.list0"/>
<field name="default_restriction_id" ref="main_hotel_room_type_restriction"/> <field name="default_restriction_id" ref="main_pms_room_type_restriction"/>
<field name="street">Rua Street Demo, s/n</field> <field name="street">Rua Street Demo, s/n</field>
<field name="city">Roomdoo city</field> <field name="city">Commitsun city</field>
<field name="country_id" ref="base.es"/> <field name="country_id" ref="base.es"/>
<field name="zip">15703</field> <field name="zip">15703</field>
<field name="phone">+34 123 456 879</field> <field name="phone">+34 123 456 879</field>
<field name="email">roomdoo@hoteldemo.roomdoo.com</field> <field name="email">commitsun@hootel.com</field>
<field name="website">https://www.roomdoo.com</field> <field name="website">https://www.commitsun.com</field>
</record> </record>
<record model="res.users" id="base.user_root"> <record model="res.users" id="base.user_root">
<field name="company_id" ref="base.main_company"/> <field name="company_id" ref="base.main_company"/>
<field name="company_ids" eval="[(4, ref('base.main_company'))]"/> <field name="company_ids" eval="[(4, ref('base.main_company'))]"/>
<field name="hotel_id" ref="main_hotel_property"/> <field name="pms_property_id" ref="main_pms_property"/>
<field name="hotel_ids" eval="[(4, ref('main_hotel_property'))]"/> <field name="pms_property_ids" eval="[(4, ref('main_pms_property'))]"/>
</record> </record>
</data> </data>
</odoo> </odoo>

14
pms/data/pms_sequence.xml Normal file
View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data noupdate="1">
<!-- Sequences for pms folio -->
<record model="ir.sequence" id="seq_pms_folio">
<field name="name">PMS Folio</field>
<field name="code">pms.folio</field>
<field name="prefix">F/</field>
<field name="padding">5</field>
</record>
</data>
</odoo>

View File

@@ -2,170 +2,170 @@
<odoo> <odoo>
<data noupdate="1"> <data noupdate="1">
<!-- hotel.floor --> <!-- pms.floor -->
<record id="hotel_floor_0" model="hotel.floor"> <record id="pms_floor_0" model="pms.floor">
<field name="name">Ground Floor</field> <field name="name">Ground Floor</field>
</record> </record>
<record id="hotel_floor_1" model="hotel.floor"> <record id="pms_floor_1" model="pms.floor">
<field name="name">First Floor</field> <field name="name">First Floor</field>
</record> </record>
<record id="hotel_floor_2" model="hotel.floor"> <record id="pms_floor_2" model="pms.floor">
<field name="name">Second Floor</field> <field name="name">Second Floor</field>
</record> </record>
<!-- hotel.amenity.type --> <!-- pms.amenity.type -->
<record id="hotel_amenity_type_0" model="hotel.amenity.type"> <record id="pms_amenity_type_0" model="pms.amenity.type">
<field name="name">Toiletries</field> <field name="name">Toiletries</field>
</record> </record>
<record id="hotel_amenity_type_1" model="hotel.amenity.type"> <record id="pms_amenity_type_1" model="pms.amenity.type">
<field name="name">Connectivity</field> <field name="name">Connectivity</field>
</record> </record>
<record id="hotel_amenity_type_2" model="hotel.amenity.type"> <record id="pms_amenity_type_2" model="pms.amenity.type">
<field name="name">Kitchen facilities</field> <field name="name">Kitchen facilities</field>
</record> </record>
<!-- hotel.amenity --> <!-- pms.amenity -->
<record id="hotel_amenity_0" model="hotel.amenity"> <record id="pms_amenity_0" model="pms.amenity">
<field name="name">Shampoo and Soap</field> <field name="name">Shampoo and Soap</field>
<field name="room_amenity_type_id" ref="hotel_amenity_type_0"/> <field name="room_amenity_type_id" ref="pms_amenity_type_0"/>
</record> </record>
<record id="hotel_amenity_1" model="hotel.amenity"> <record id="pms_amenity_1" model="pms.amenity">
<field name="name">High-quality Shampoo and Soap Essential Herbs</field> <field name="name">High-quality Shampoo and Soap Essential Herbs</field>
<field name="room_amenity_type_id" ref="hotel_amenity_type_0"/> <field name="room_amenity_type_id" ref="pms_amenity_type_0"/>
</record> </record>
<record id="hotel_amenity_2" model="hotel.amenity"> <record id="pms_amenity_2" model="pms.amenity">
<field name="name">Hair Dryer</field> <field name="name">Hair Dryer</field>
<field name="room_amenity_type_id" ref="hotel_amenity_type_0"/> <field name="room_amenity_type_id" ref="pms_amenity_type_0"/>
</record> </record>
<record id="hotel_amenity_3" model="hotel.amenity"> <record id="pms_amenity_3" model="pms.amenity">
<field name="name">High speed Wired Internet access</field> <field name="name">High speed Wired Internet access</field>
<field name="room_amenity_type_id" ref="hotel_amenity_type_1"/> <field name="room_amenity_type_id" ref="pms_amenity_type_1"/>
</record> </record>
<record id="hotel_amenity_4" model="hotel.amenity"> <record id="pms_amenity_4" model="pms.amenity">
<field name="name">Wi-Fi</field> <field name="name">Wi-Fi</field>
<field name="room_amenity_type_id" ref="hotel_amenity_type_1"/> <field name="room_amenity_type_id" ref="pms_amenity_type_1"/>
</record> </record>
<record id="hotel_amenity_5" model="hotel.amenity"> <record id="pms_amenity_5" model="pms.amenity">
<field name="name">Microwave oven</field> <field name="name">Microwave oven</field>
<field name="room_amenity_type_id" ref="hotel_amenity_type_2"/> <field name="room_amenity_type_id" ref="pms_amenity_type_2"/>
</record> </record>
<record id="hotel_amenity_6" model="hotel.amenity"> <record id="pms_amenity_6" model="pms.amenity">
<field name="name">Half-sized Refrigerator</field> <field name="name">Half-sized Refrigerator</field>
<field name="room_amenity_type_id" ref="hotel_amenity_type_2"/> <field name="room_amenity_type_id" ref="pms_amenity_type_2"/>
</record> </record>
<!-- hotel.room.type.class --> <!-- pms.room.type.class -->
<record id="hotel_room_type_class_0" model="hotel.room.type.class"> <record id="pms_room_type_class_0" model="pms.room.type.class">
<field name="name">Room</field> <field name="name">Room</field>
</record> </record>
<record id="hotel_room_type_class_1" model="hotel.room.type.class"> <record id="pms_room_type_class_1" model="pms.room.type.class">
<field name="name">Conference</field> <field name="name">Conference</field>
</record> </record>
<!-- hotel.room.type --> <!-- pms.room.type -->
<record id="hotel_room_type_0" model="hotel.room.type"> <record id="pms_room_type_0" model="pms.room.type">
<field name="name">Economic</field> <field name="name">Economic</field>
<field name="code_type">ECO</field> <field name="code_type">ECO</field>
<field name="list_price">21.00</field> <field name="list_price">21.00</field>
<field name="class_id" ref="hotel_room_type_class_0"/> <field name="class_id" ref="pms_room_type_class_0"/>
<field name="room_amenity_ids" <field name="room_amenity_ids"
eval="[(4, ref('hotel_amenity_0'))]"/> eval="[(4, ref('pms_amenity_0'))]"/>
</record> </record>
<record id="hotel_room_type_1" model="hotel.room.type"> <record id="pms_room_type_1" model="pms.room.type">
<field name="name">Single</field> <field name="name">Single</field>
<field name="code_type">SNG</field> <field name="code_type">SNG</field>
<field name="list_price">20.00</field> <field name="list_price">20.00</field>
<field name="class_id" ref="hotel_room_type_class_0"/> <field name="class_id" ref="pms_room_type_class_0"/>
<field name="room_amenity_ids" <field name="room_amenity_ids"
eval="[(4, ref('hotel_amenity_0')), (4, ref('hotel_amenity_4'))]"/> eval="[(4, ref('pms_amenity_0')), (4, ref('pms_amenity_4'))]"/>
</record> </record>
<record id="hotel_room_type_2" model="hotel.room.type"> <record id="pms_room_type_2" model="pms.room.type">
<field name="name">Double</field> <field name="name">Double</field>
<field name="code_type">DBL</field> <field name="code_type">DBL</field>
<field name="list_price">25.00</field> <field name="list_price">25.00</field>
<field name="class_id" ref="hotel_room_type_class_0"/> <field name="class_id" ref="pms_room_type_class_0"/>
<field name="room_amenity_ids" <field name="room_amenity_ids"
eval="[(4, ref('hotel_amenity_0')), (4, ref('hotel_amenity_4'))]"/> eval="[(4, ref('pms_amenity_0')), (4, ref('pms_amenity_4'))]"/>
</record> </record>
<record id="hotel_room_type_3" model="hotel.room.type"> <record id="pms_room_type_3" model="pms.room.type">
<field name="name">Triple</field> <field name="name">Triple</field>
<field name="code_type">TRP</field> <field name="code_type">TRP</field>
<field name="list_price">35.00</field> <field name="list_price">35.00</field>
<field name="class_id" ref="hotel_room_type_class_0"/> <field name="class_id" ref="pms_room_type_class_0"/>
<field name="room_amenity_ids" <field name="room_amenity_ids"
eval="[(4, ref('hotel_amenity_0')), (4, ref('hotel_amenity_4'))]"/> eval="[(4, ref('pms_amenity_0')), (4, ref('pms_amenity_4'))]"/>
</record> </record>
<record id="hotel_room_type_4" model="hotel.room.type"> <record id="pms_room_type_4" model="pms.room.type">
<field name="name">Conference Room</field> <field name="name">Conference Room</field>
<field name="code_type">CFR</field> <field name="code_type">CFR</field>
<field name="list_price">80.00</field> <field name="list_price">80.00</field>
<field name="class_id" ref="hotel_room_type_class_1"/> <field name="class_id" ref="pms_room_type_class_1"/>
<field name="room_amenity_ids" <field name="room_amenity_ids"
eval="[(4, ref('hotel_amenity_3')), (4, ref('hotel_amenity_4'))]"/> eval="[(4, ref('pms_amenity_3')), (4, ref('pms_amenity_4'))]"/>
</record> </record>
<!-- hotel.room --> <!-- pms.room -->
<record id="hotel_room_0" model="hotel.room"> <record id="pms_room_0" model="pms.room">
<field name="name">Economic-101</field> <field name="name">Economic-101</field>
<field name="room_type_id" ref="hotel_room_type_0"/> <field name="room_type_id" ref="pms_room_type_0"/>
<field name="floor_id" ref="hotel_floor_1"/> <field name="floor_id" ref="pms_floor_1"/>
<field name="capacity">2</field> <field name="capacity">2</field>
</record> </record>
<record id="hotel_room_1" model="hotel.room"> <record id="pms_room_1" model="pms.room">
<field name="name">Single-101</field> <field name="name">Single-101</field>
<field name="room_type_id" ref="hotel_room_type_1"/> <field name="room_type_id" ref="pms_room_type_1"/>
<field name="floor_id" ref="hotel_floor_1"/> <field name="floor_id" ref="pms_floor_1"/>
<field name="capacity">1</field> <field name="capacity">1</field>
</record> </record>
<record id="hotel_room_2" model="hotel.room"> <record id="pms_room_2" model="pms.room">
<field name="name">Single-102</field> <field name="name">Single-102</field>
<field name="room_type_id" ref="hotel_room_type_1"/> <field name="room_type_id" ref="pms_room_type_1"/>
<field name="floor_id" ref="hotel_floor_1"/> <field name="floor_id" ref="pms_floor_1"/>
<field name="capacity">1</field> <field name="capacity">1</field>
</record> </record>
<record id="hotel_room_3" model="hotel.room"> <record id="pms_room_3" model="pms.room">
<field name="name">Single-103</field> <field name="name">Single-103</field>
<field name="room_type_id" ref="hotel_room_type_1"/> <field name="room_type_id" ref="pms_room_type_1"/>
<field name="floor_id" ref="hotel_floor_1"/> <field name="floor_id" ref="pms_floor_1"/>
<field name="capacity">1</field> <field name="capacity">1</field>
</record> </record>
<record id="hotel_room_4" model="hotel.room"> <record id="pms_room_4" model="pms.room">
<field name="name">Double-201</field> <field name="name">Double-201</field>
<field name="room_type_id" ref="hotel_room_type_2"/> <field name="room_type_id" ref="pms_room_type_2"/>
<field name="floor_id" ref="hotel_floor_2"/> <field name="floor_id" ref="pms_floor_2"/>
<field name="capacity">2</field> <field name="capacity">2</field>
<field name="extra_beds_allowed">1</field> <field name="extra_beds_allowed">1</field>
</record> </record>
<record id="hotel_room_5" model="hotel.room"> <record id="pms_room_5" model="pms.room">
<field name="name">Double-202</field> <field name="name">Double-202</field>
<field name="room_type_id" ref="hotel_room_type_2"/> <field name="room_type_id" ref="pms_room_type_2"/>
<field name="floor_id" ref="hotel_floor_2"/> <field name="floor_id" ref="pms_floor_2"/>
<field name="capacity">2</field> <field name="capacity">2</field>
</record> </record>
<record id="hotel_room_6" model="hotel.room"> <record id="pms_room_6" model="pms.room">
<field name="name">Triple-203</field> <field name="name">Triple-203</field>
<field name="room_type_id" ref="hotel_room_type_3"/> <field name="room_type_id" ref="pms_room_type_3"/>
<field name="floor_id" ref="hotel_floor_2"/> <field name="floor_id" ref="pms_floor_2"/>
<field name="capacity">3</field> <field name="capacity">3</field>
</record> </record>
<record id="hotel_room_7" model="hotel.room"> <record id="pms_room_7" model="pms.room">
<field name="name">Open Talk Away Room</field> <field name="name">Open Talk Away Room</field>
<field name="room_type_id" ref="hotel_room_type_4"/> <field name="room_type_id" ref="pms_room_type_4"/>
<field name="floor_id" ref="hotel_floor_0"/> <field name="floor_id" ref="pms_floor_0"/>
<field name="capacity">1</field> <field name="capacity">1</field>
</record> </record>
<!-- product.product for hotel services --> <!-- product.product for pms services -->
<record id="hotel_service_0" model="product.product"> <record id="pms_service_0" model="product.product">
<field name="name">Breakfast Buffet</field> <field name="name">Breakfast Buffet</field>
<field name="list_price">5.0</field> <field name="list_price">5.0</field>
<field name="type">service</field> <field name="type">service</field>
@@ -174,7 +174,7 @@
<field name="per_person">True</field> <field name="per_person">True</field>
</record> </record>
<record id="hotel_service_1" model="product.product"> <record id="pms_service_1" model="product.product">
<field name="name">Extra Bed</field> <field name="name">Extra Bed</field>
<field name="list_price">15.0</field> <field name="list_price">15.0</field>
<field name="type">service</field> <field name="type">service</field>
@@ -186,7 +186,7 @@
<field name="show_in_calendar">True</field> <field name="show_in_calendar">True</field>
</record> </record>
<record id="hotel_service_3" model="product.product"> <record id="pms_service_3" model="product.product">
<field name="name">Late Check-out</field> <field name="name">Late Check-out</field>
<field name="list_price">10.0</field> <field name="list_price">10.0</field>
<field name="type">service</field> <field name="type">service</field>
@@ -195,7 +195,7 @@
<field name="per_person">False</field> <field name="per_person">False</field>
</record> </record>
<record id="hotel_service_4" model="product.product"> <record id="pms_service_4" model="product.product">
<field name="name">Lunch</field> <field name="name">Lunch</field>
<field name="list_price">15.0</field> <field name="list_price">15.0</field>
<field name="type">service</field> <field name="type">service</field>
@@ -204,7 +204,7 @@
<field name="per_person">True</field> <field name="per_person">True</field>
</record> </record>
<record id="hotel_service_5" model="product.product"> <record id="pms_service_5" model="product.product">
<field name="name">Dinner</field> <field name="name">Dinner</field>
<field name="list_price">20.0</field> <field name="list_price">20.0</field>
<field name="type">service</field> <field name="type">service</field>
@@ -213,7 +213,7 @@
<field name="per_person">True</field> <field name="per_person">True</field>
</record> </record>
<record id="hotel_service_6" model="product.product"> <record id="pms_service_6" model="product.product">
<field name="name">Free Bar</field> <field name="name">Free Bar</field>
<field name="list_price">40.0</field> <field name="list_price">40.0</field>
<field name="type">service</field> <field name="type">service</field>
@@ -222,71 +222,71 @@
<field name="per_person">True</field> <field name="per_person">True</field>
</record> </record>
<!-- hotel.board.service --> <!-- pms.board.service -->
<record id="hotel_board_service_0" model="hotel.board.service"> <record id="pms_board_service_0" model="pms.board.service">
<field name="name">BreakFast</field> <field name="name">BreakFast</field>
<field name="board_service_line_ids" <field name="board_service_line_ids"
eval="[(5, 0), (0, 0, { eval="[(5, 0), (0, 0, {
'product_id': ref('hotel_service_0'), 'product_id': ref('pms_service_0'),
'amount': 3})]"/> 'amount': 3})]"/>
<field name="price_type">fixed</field> <field name="price_type">fixed</field>
</record> </record>
<record id="hotel_board_service_1" model="hotel.board.service"> <record id="pms_board_service_1" model="pms.board.service">
<field name="name">Half Board</field> <field name="name">Half Board</field>
<field name="board_service_line_ids" <field name="board_service_line_ids"
eval="[(5, 0), (0, 0, { eval="[(5, 0), (0, 0, {
'product_id': ref('hotel_service_0'), 'product_id': ref('pms_service_0'),
'amount': 3}), 'amount': 3}),
(0, 0, {'product_id': ref('hotel_service_5'), (0, 0, {'product_id': ref('pms_service_5'),
'amount': 8}) 'amount': 8})
]"/> ]"/>
<field name="price_type">fixed</field> <field name="price_type">fixed</field>
</record> </record>
<record id="hotel_board_service_2" model="hotel.board.service"> <record id="pms_board_service_2" model="pms.board.service">
<field name="name">FullBoard</field> <field name="name">FullBoard</field>
<field name="board_service_line_ids" <field name="board_service_line_ids"
eval="[(5, 0), (0, 0, { eval="[(5, 0), (0, 0, {
'product_id': ref('hotel_service_0'), 'product_id': ref('pms_service_0'),
'amount': 3}), 'amount': 3}),
(0, 0, {'product_id': ref('hotel_service_4'), (0, 0, {'product_id': ref('pms_service_4'),
'amount': 8}), 'amount': 8}),
(0, 0, {'product_id': ref('hotel_service_5'), (0, 0, {'product_id': ref('pms_service_5'),
'amount': 8}) 'amount': 8})
]"/> ]"/>
<field name="price_type">fixed</field> <field name="price_type">fixed</field>
</record> </record>
<!-- hotel.board.service.room.type --> <!-- pms.board.service.room.type -->
<!--Room 0 Economic--> <!--Room 0 Economic-->
<record id="hotel_board_service_room_0" <record id="pms_board_service_room_0"
model="hotel.board.service.room.type"> model="pms.board.service.room.type">
<field name="hotel_board_service_id" <field name="pms_board_service_id"
ref="hotel_board_service_0"/> ref="pms_board_service_0"/>
<field name="hotel_room_type_id" <field name="pms_room_type_id"
ref="hotel_room_type_0"/> ref="pms_room_type_0"/>
<field name="price_type">fixed</field> <field name="price_type">fixed</field>
</record> </record>
<record id="hotel_board_service_room_1" <record id="pms_board_service_room_1"
model="hotel.board.service.room.type"> model="pms.board.service.room.type">
<field name="hotel_board_service_id" <field name="pms_board_service_id"
ref="hotel_board_service_1"/> ref="pms_board_service_1"/>
<field name="hotel_room_type_id" <field name="pms_room_type_id"
ref="hotel_room_type_0"/> ref="pms_room_type_0"/>
<field name="price_type">fixed</field> <field name="price_type">fixed</field>
</record> </record>
<record id="hotel_board_service_room_2" <record id="pms_board_service_room_2"
model="hotel.board.service.room.type"> model="pms.board.service.room.type">
<field name="hotel_board_service_id" <field name="pms_board_service_id"
ref="hotel_board_service_1"/> ref="pms_board_service_1"/>
<field name="hotel_room_type_id" <field name="pms_room_type_id"
ref="hotel_room_type_0"/> ref="pms_room_type_0"/>
<field name="pricelist_id" <field name="pricelist_id"
ref="product.list0"/> ref="product.list0"/>
<field name="price_type">fixed</field> <field name="price_type">fixed</field>
@@ -294,74 +294,74 @@
<!--Room 3 Triple--> <!--Room 3 Triple-->
<record id="hotel_board_service_room_3" <record id="pms_board_service_room_3"
model="hotel.board.service.room.type"> model="pms.board.service.room.type">
<field name="hotel_board_service_id" <field name="pms_board_service_id"
ref="hotel_board_service_0"/> ref="pms_board_service_0"/>
<field name="hotel_room_type_id" <field name="pms_room_type_id"
ref="hotel_room_type_3"/> ref="pms_room_type_3"/>
<field name="price_type">fixed</field> <field name="price_type">fixed</field>
</record> </record>
<record id="hotel_board_service_room_4" <record id="pms_board_service_room_4"
model="hotel.board.service.room.type"> model="pms.board.service.room.type">
<field name="hotel_board_service_id" <field name="pms_board_service_id"
ref="hotel_board_service_2"/> ref="pms_board_service_2"/>
<field name="hotel_room_type_id" <field name="pms_room_type_id"
ref="hotel_room_type_3"/> ref="pms_room_type_3"/>
<field name="price_type">fixed</field> <field name="price_type">fixed</field>
</record> </record>
<!-- room.closure.reason --> <!-- room.closure.reason -->
<record id="hotel_room_closure_reason_0" model="room.closure.reason"> <record id="pms_room_closure_reason_0" model="room.closure.reason">
<field name="name">Maintenance</field> <field name="name">Maintenance</field>
<field name="description">Used for closing of rooms which require a maintenance. You can specify the reason in the own reservation.</field> <field name="description">Used for closing of rooms which require a maintenance. You can specify the reason in the own reservation.</field>
</record> </record>
<record id="hotel_room_closure_reason_1" model="room.closure.reason"> <record id="pms_room_closure_reason_1" model="room.closure.reason">
<field name="name">VIP Privacy</field> <field name="name">VIP Privacy</field>
<field name="description">Used for closing of rooms for extra privacy.</field> <field name="description">Used for closing of rooms for extra privacy.</field>
</record> </record>
<!-- hotel.folio --> <!-- pms.folio -->
<!-- reservation of 1 economic room for 1 person --> <!-- reservation of 1 economic room for 1 person -->
<record id="hotel_folio_0" model="hotel.folio"> <record id="pms_folio_0" model="pms.folio">
<field name="partner_id" ref="base.res_partner_address_27"/> <field name="partner_id" ref="base.res_partner_address_27"/>
<field name="reservation_ids" <field name="reservation_ids"
eval="[(5, 0), (0, 0, { eval="[(5, 0), (0, 0, {
'pricelist_id': 1, 'pricelist_id': 1,
'room_type_id': ref('hotel_room_type_0'), 'room_type_id': ref('pms_room_type_0'),
'checkin': DateTime.today().strftime('%Y-%m-%d'), 'checkin': DateTime.today().strftime('%Y-%m-%d'),
'checkout': (DateTime.today() + timedelta(days=2)).strftime('%Y-%m-%d'), 'checkout': (DateTime.today() + timedelta(days=2)).strftime('%Y-%m-%d'),
'adults': 2, 'adults': 2,
'state': 'confirm', 'state': 'confirm',
'board_service_room_id': ref('hotel_board_service_room_1'), 'board_service_room_id': ref('pms_board_service_room_1'),
})]"/> })]"/>
</record> </record>
<!-- reservation of 1 triple room for 3 people on behalf on the company --> <!-- reservation of 1 triple room for 3 people on behalf on the company -->
<record id="hotel_folio_1" model="hotel.folio"> <record id="pms_folio_1" model="pms.folio">
<field name="partner_id" ref="base.res_partner_12"/> <field name="partner_id" ref="base.res_partner_12"/>
<field name="reservation_ids" <field name="reservation_ids"
eval="[(5, 0), (0, 0, { eval="[(5, 0), (0, 0, {
'pricelist_id': 1, 'pricelist_id': 1,
'room_type_id': ref('hotel_room_type_3'), 'room_type_id': ref('pms_room_type_3'),
'checkin': (DateTime.today() + timedelta(days=2)).strftime('%Y-%m-%d'), 'checkin': (DateTime.today() + timedelta(days=2)).strftime('%Y-%m-%d'),
'checkout': (DateTime.today() + timedelta(days=4)).strftime('%Y-%m-%d'), 'checkout': (DateTime.today() + timedelta(days=4)).strftime('%Y-%m-%d'),
'adults': 3, 'adults': 3,
'board_service_room_id': ref('hotel_board_service_room_3'), 'board_service_room_id': ref('pms_board_service_room_3'),
})]"/> })]"/>
</record> </record>
<!-- reservation of 3 single rooms for 3 people with 1 cancelled --> <!-- reservation of 3 single rooms for 3 people with 1 cancelled -->
<!-- TODO: The third reservation is marked from State: Cancelled to Pending Entry at Folio creation --> <!-- TODO: The third reservation is marked from State: Cancelled to Pending Entry at Folio creation -->
<record id="hotel_folio_2" model="hotel.folio"> <record id="pms_folio_2" model="pms.folio">
<field name="partner_id" ref="base.res_partner_address_10"/> <field name="partner_id" ref="base.res_partner_address_10"/>
<field name="reservation_ids" <field name="reservation_ids"
eval="[(5, 0), eval="[(5, 0),
(0, 0, { (0, 0, {
'pricelist_id': 1, 'pricelist_id': 1,
'room_type_id': ref('hotel_room_type_1'), 'room_type_id': ref('pms_room_type_1'),
'checkin': (DateTime.today() + timedelta(days=2)).strftime('%Y-%m-%d'), 'checkin': (DateTime.today() + timedelta(days=2)).strftime('%Y-%m-%d'),
'checkout': (DateTime.today() + timedelta(days=4)).strftime('%Y-%m-%d'), 'checkout': (DateTime.today() + timedelta(days=4)).strftime('%Y-%m-%d'),
'adults': 1, 'adults': 1,
@@ -369,7 +369,7 @@
}), }),
(0, 0, { (0, 0, {
'pricelist_id': 1, 'pricelist_id': 1,
'room_type_id': ref('hotel_room_type_1'), 'room_type_id': ref('pms_room_type_1'),
'checkin': (DateTime.today() + timedelta(days=2)).strftime('%Y-%m-%d'), 'checkin': (DateTime.today() + timedelta(days=2)).strftime('%Y-%m-%d'),
'checkout': (DateTime.today() + timedelta(days=4)).strftime('%Y-%m-%d'), 'checkout': (DateTime.today() + timedelta(days=4)).strftime('%Y-%m-%d'),
'adults': 1, 'adults': 1,
@@ -377,7 +377,7 @@
}), }),
(0, 0, { (0, 0, {
'pricelist_id': 1, 'pricelist_id': 1,
'room_type_id': ref('hotel_room_type_1'), 'room_type_id': ref('pms_room_type_1'),
'checkin': (DateTime.today() + timedelta(days=2)).strftime('%Y-%m-%d'), 'checkin': (DateTime.today() + timedelta(days=2)).strftime('%Y-%m-%d'),
'checkout': (DateTime.today() + timedelta(days=4)).strftime('%Y-%m-%d'), 'checkout': (DateTime.today() + timedelta(days=4)).strftime('%Y-%m-%d'),
'adults': 1, 'adults': 1,
@@ -385,12 +385,12 @@
})]"/> })]"/>
</record> </record>
<!-- reservation of the conference room for 1 day on behalf of a company --> <!-- reservation of the conference room for 1 day on behalf of a company -->
<record id="hotel_folio_3" model="hotel.folio"> <record id="pms_folio_3" model="pms.folio">
<field name="partner_id" ref="base.res_partner_12"/> <field name="partner_id" ref="base.res_partner_12"/>
<field name="reservation_ids" <field name="reservation_ids"
eval="[(5, 0), (0, 0, { eval="[(5, 0), (0, 0, {
'pricelist_id': 1, 'pricelist_id': 1,
'room_type_id': ref('hotel_room_type_4'), 'room_type_id': ref('pms_room_type_4'),
'checkin': (DateTime.today() + timedelta(days=3)).strftime('%Y-%m-%d'), 'checkin': (DateTime.today() + timedelta(days=3)).strftime('%Y-%m-%d'),
'checkout': (DateTime.today() + timedelta(days=4)).strftime('%Y-%m-%d'), 'checkout': (DateTime.today() + timedelta(days=4)).strftime('%Y-%m-%d'),
'adults': 1, 'adults': 1,
@@ -398,55 +398,55 @@
})]"/> })]"/>
</record> </record>
<!-- out of service room --> <!-- out of service room -->
<record id="hotel_folio_4" model="hotel.folio"> <record id="pms_folio_4" model="pms.folio">
<field name="partner_id" ref="main_hotel_property"/> <field name="partner_id" ref="main_pms_property"/>
<field name="reservation_type">out</field> <field name="reservation_type">out</field>
<field name="reservation_ids" <field name="reservation_ids"
eval="[(5, 0), (0, 0, { eval="[(5, 0), (0, 0, {
'pricelist_id': 1, 'pricelist_id': 1,
'room_type_id': ref('hotel_room_type_1'), 'room_type_id': ref('pms_room_type_1'),
'checkin': DateTime.today().strftime('%Y-%m-%d'), 'checkin': DateTime.today().strftime('%Y-%m-%d'),
'checkout': (DateTime.today() + timedelta(days=2)).strftime('%Y-%m-%d'), 'checkout': (DateTime.today() + timedelta(days=2)).strftime('%Y-%m-%d'),
'adults': 1, 'adults': 1,
'state': 'confirm', 'state': 'confirm',
'reservation_type': 'out', 'reservation_type': 'out',
'closure_reason_id': ref('hotel_room_closure_reason_0'), 'closure_reason_id': ref('pms_room_closure_reason_0'),
'out_service_description': 'Change of lighting', 'out_service_description': 'Change of lighting',
})]"/> })]"/>
</record> </record>
<!-- Multi Hotel Demo --> <!-- Multi pms Demo -->
<record id="demo_hotel_room_type_restriction" model="hotel.room.type.restriction"> <record id="demo_pms_room_type_restriction" model="pms.room.type.restriction">
<field name="name">Restriction Plan Demo</field> <field name="name">Restriction Plan Demo</field>
</record> </record>
<record id="demo_hotel_property" model="hotel.property"> <record id="demo_pms_property" model="pms.property">
<field name="name">My Hotel Demo</field> <field name="name">My pms Demo</field>
<field name="company_id" ref="base.main_company"/> <field name="company_id" ref="base.main_company"/>
<field name="default_pricelist_id" ref="product.list0"/> <field name="default_pricelist_id" ref="product.list0"/>
<field name="default_restriction_id" ref="demo_hotel_room_type_restriction"/> <field name="default_restriction_id" ref="demo_pms_room_type_restriction"/>
</record> </record>
<!-- hotel.room.type --> <!-- pms.room.type -->
<record id="demo_hotel_room_type_0" model="hotel.room.type"> <record id="demo_pms_room_type_0" model="pms.room.type">
<field name="hotel_id" ref="hotel.demo_hotel_property"/> <field name="pms_id" ref="pms.demo_pms_property"/>
<field name="name">Economic</field> <field name="name">Economic</field>
<field name="code_type">ECO</field> <field name="code_type">ECO</field>
<field name="list_price">21.00</field> <field name="list_price">21.00</field>
<field name="class_id" ref="hotel_room_type_class_0"/> <field name="class_id" ref="pms_room_type_class_0"/>
<field name="room_amenity_ids" <field name="room_amenity_ids"
eval="[(4, ref('hotel_amenity_0'))]"/> eval="[(4, ref('pms_amenity_0'))]"/>
</record> </record>
<record id="demo_hotel_room_type_1" model="hotel.room.type"> <record id="demo_pms_room_type_1" model="pms.room.type">
<field name="hotel_id" ref="hotel.demo_hotel_property"/> <field name="pms_id" ref="pms.demo_pms_property"/>
<field name="name">Single</field> <field name="name">Single</field>
<field name="code_type">SNG</field> <field name="code_type">SNG</field>
<field name="list_price">20.00</field> <field name="list_price">20.00</field>
<field name="class_id" ref="hotel_room_type_class_0"/> <field name="class_id" ref="pms_room_type_class_0"/>
<field name="room_amenity_ids" <field name="room_amenity_ids"
eval="[(4, ref('hotel_amenity_0')), (4, ref('hotel_amenity_4'))]"/> eval="[(4, ref('pms_amenity_0')), (4, ref('pms_amenity_4'))]"/>
</record> </record>
</data> </data>

37
pms/models/__init__.py Normal file
View File

@@ -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

View File

@@ -11,10 +11,10 @@ class AccountInvoice(models.Model):
# Field Declarations # Field Declarations
folio_ids = fields.Many2many( folio_ids = fields.Many2many(
comodel_name='hotel.folio', comodel_name='pms.folio',
compute='_computed_folio_origin') compute='_computed_folio_origin')
hotel_id = fields.Many2one( pms_property_id = fields.Many2one(
'hotel.property') 'pms.property')
from_folio = fields.Boolean( from_folio = fields.Boolean(
compute='_computed_folio_origin') compute='_computed_folio_origin')
outstanding_folios_debits_widget = fields.Text( outstanding_folios_debits_widget = fields.Text(
@@ -37,7 +37,7 @@ class AccountInvoice(models.Model):
def action_folio_payments(self): def action_folio_payments(self):
self.ensure_one() self.ensure_one()
sales = self.mapped('invoice_line_ids.sale_line_ids.order_id') 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) ('order_id.id', 'in', sales.ids)
]) ])
payments_obj = self.env['account.payment'] payments_obj = self.env['account.payment']

View File

@@ -9,17 +9,17 @@ class AccountInvoiceLine(models.Model):
# Fields declaration # Fields declaration
reservation_ids = fields.Many2many( reservation_ids = fields.Many2many(
'hotel.reservation', 'pms.reservation',
'reservation_invoice_rel', 'reservation_invoice_rel',
'invoice_line_id', 'reservation_id', 'invoice_line_id', 'reservation_id',
string='Reservations', readonly=True, copy=False) string='Reservations', readonly=True, copy=False)
service_ids = fields.Many2many( service_ids = fields.Many2many(
'hotel.service', 'pms.service',
'service_line_invoice_rel', 'service_line_invoice_rel',
'invoice_line_id', 'service_id', 'invoice_line_id', 'service_id',
string='Services', readonly=True, copy=False) string='Services', readonly=True, copy=False)
reservation_line_ids = fields.Many2many( reservation_line_ids = fields.Many2many(
'hotel.reservation.line', 'pms.reservation.line',
'reservation_line_invoice_rel', 'reservation_line_invoice_rel',
'invoice_line_id', 'reservation_line_id', 'invoice_line_id', 'reservation_line_id',
string='Reservation Lines', readonly=True, copy=False) string='Reservation Lines', readonly=True, copy=False)

View File

@@ -9,7 +9,7 @@ class AccountPayment(models.Model):
# Fields declaration # Fields declaration
folio_id = fields.Many2one( folio_id = fields.Many2one(
'hotel.folio', 'pms.folio',
string='Folio') string='Folio')
amount_total_folio = fields.Float( amount_total_folio = fields.Float(
compute="_compute_folio_amount", store=True, compute="_compute_folio_amount", store=True,
@@ -28,7 +28,7 @@ class AccountPayment(models.Model):
fol = () fol = ()
for payment in self: for payment in self:
if payment.folio_id: if payment.folio_id:
fol = payment.env['hotel.folio'].search([ fol = payment.env['pms.folio'].search([
('id', '=', payment.folio_id.id) ('id', '=', payment.folio_id.id)
]) ])
else: else:
@@ -136,7 +136,7 @@ class AccountPayment(models.Model):
@api.multi @api.multi
def modify_payment(self): def modify_payment(self):
self.ensure_one() 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') # invoices = self.mapped('invoice_ids.id')
return{ return{
'name': _('Payment'), 'name': _('Payment'),

View File

@@ -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

View File

@@ -9,10 +9,10 @@ class MailComposeMessage(models.TransientModel):
@api.multi @api.multi
def send_mail(self, auto_commit=False): 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('default_res_id') and \
self._context.get('mark_so_as_sent'): self._context.get('mark_so_as_sent'):
folio = self.env['hotel.folio'].browse([ folio = self.env['pms.folio'].browse([
self._context['default_res_id'] self._context['default_res_id']
]) ])
if folio: if folio:

View File

@@ -8,13 +8,13 @@ class PaymentReturn(models.Model):
# Fields declaration # Fields declaration
folio_id = fields.Many2one( folio_id = fields.Many2one(
'hotel.folio', 'pms.folio',
string='Folio') string='Folio')
hotel_id = fields.Many2one( pms_property_id = fields.Many2one(
'hotel.property', 'pms.property',
store=True, store=True,
readonly=True, readonly=True,
related='folio_id.hotel_id') related='folio_id.pms_property_id')
# Business methods # Business methods
@api.multi @api.multi
@@ -22,12 +22,12 @@ class PaymentReturn(models.Model):
pay = super(PaymentReturn, self).action_confirm() pay = super(PaymentReturn, self).action_confirm()
if pay: if pay:
folio_ids = [] folio_ids = []
folios = self.env['hotel.folio'].browse(folio_ids) folios = self.env['pms.folio'].browse(folio_ids)
for line in self.line_ids: for line in self.line_ids:
payments = self.env['account.payment'].search([ payments = self.env['account.payment'].search([
('move_line_ids', 'in', line.move_line_ids.ids) ('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')) payments.mapped('folio_id.id'))
for folio in folios_line: for folio in folios_line:
if self.id not in folio.return_ids.ids: if self.id not in folio.return_ids.ids:

View File

@@ -7,18 +7,18 @@ from odoo.exceptions import ValidationError
class ProductPricelist(models.Model): class ProductPricelist(models.Model):
""" Before creating a 'daily' pricelist, you need to consider the following: """ 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 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' _inherit = 'product.pricelist'
# Fields declaration # Fields declaration
hotel_ids = fields.Many2many( pms_property_ids = fields.Many2many(
'hotel.property', 'pms.property',
string='Hotels', string='Properties',
required=False, required=False,
ondelete='restrict') ondelete='restrict')
cancelation_rule_id = fields.Many2one( cancelation_rule_id = fields.Many2one(
'hotel.cancelation.rule', 'pms.cancelation.rule',
string="Cancelation Policy") string="Cancelation Policy")
pricelist_type = fields.Selection([ pricelist_type = fields.Selection([
('daily', 'Daily Plan')], ('daily', 'Daily Plan')],
@@ -27,21 +27,21 @@ class ProductPricelist(models.Model):
is_staff = fields.Boolean('Is Staff') is_staff = fields.Boolean('Is Staff')
# Constraints and onchanges # Constraints and onchanges
@api.constrains('pricelist_type', 'hotel_ids') @api.constrains('pricelist_type', 'pms_property_ids')
def _check_pricelist_type_hotel_ids(self): def _check_pricelist_type_property_ids(self):
for record in 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( raise ValidationError(
_("A daily pricelist is used as a daily Rate Plan " _("A daily pricelist is used as a daily Rate Plan "
"for room types and therefore must be related with " "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: if record.pricelist_type == 'daily' and len(record.pms_property_ids) == 1:
hotel_id = self.env['hotel.property'].search([ pms_property_id = self.env['pms.property'].search([
('default_pricelist_id', '=', record.id) ('default_pricelist_id', '=', record.id)
]) or None ]) 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( raise ValidationError(
_("Relationship mismatch.") + " " + _("Relationship mismatch.") + " " +
_("This pricelist is used as default in a " _("This pricelist is used as default in a "
"different hotel.")) "different property."))

View File

@@ -7,9 +7,9 @@ from odoo import models, fields
class ProductTemplate(models.Model): class ProductTemplate(models.Model):
_inherit = "product.template" _inherit = "product.template"
hotel_ids = fields.Many2many( pms_property_ids = fields.Many2many(
'hotel.property', 'pms.property',
string='Hotels', string='Properties',
required=False, required=False,
ondelete='restrict') ondelete='restrict')
per_day = fields.Boolean('Unit increment per day') per_day = fields.Boolean('Unit increment per day')

View File

@@ -8,7 +8,7 @@ class ResCompany(models.Model):
_inherit = 'res.company' _inherit = 'res.company'
# Fields declaration # 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 # TODO: need extra explanation or remove otherwise
# additional_hours = fields.Integer('Additional Hours', # additional_hours = fields.Integer('Additional Hours',
# help="Provide the min hours value for \ # help="Provide the min hours value for \

View File

@@ -22,16 +22,16 @@ class ResPartner(models.Model):
# Compute and Search methods # Compute and Search methods
def _compute_reservations_count(self): def _compute_reservations_count(self):
hotel_reservation_obj = self.env['hotel.reservation'] pms_reservation_obj = self.env['pms.reservation']
for record in self: 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) ('partner_id.id', '=', record.id)
]) ])
def _compute_folios_count(self): def _compute_folios_count(self):
hotel_folio_obj = self.env['hotel.folio'] pms_folio_obj = self.env['pms.folio']
for record in self: 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) ('partner_id.id', '=', record.id)
]) ])

View File

@@ -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)

View File

@@ -4,21 +4,21 @@
from odoo import models, fields from odoo import models, fields
class HotelRoomAmenity(models.Model): class PmsRoomAmenity(models.Model):
_name = 'hotel.amenity' _name = 'pms.amenity'
_description = 'Room amenities' _description = 'Room amenities'
# Fields declaration # Fields declaration
name = fields.Char('Amenity Name', translate=True, required=True) name = fields.Char('Amenity Name', translate=True, required=True)
hotel_ids = fields.Many2many( pms_property_ids = fields.Many2many(
'hotel.property', 'pms.property',
string='Hotels', string='Properties',
required=False, required=False,
ondelete='restrict') ondelete='restrict')
room_amenity_type_id = fields.Many2one( room_amenity_type_id = fields.Many2one(
'hotel.amenity.type', 'pms.amenity.type',
'Amenity Category') 'Amenity Category')
default_code = fields.Char('Internal Reference') default_code = fields.Char('Internal Reference')
active = fields.Boolean('Active', default=True) 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

View File

@@ -4,17 +4,17 @@
from odoo import models, fields from odoo import models, fields
class HotelRoomAmenityType(models.Model): class PmsRoomAmenityType(models.Model):
_name = 'hotel.amenity.type' _name = 'pms.amenity.type'
_description = 'Amenities Type' _description = 'Amenities Type'
# Fields declaration # Fields declaration
name = fields.Char('Amenity Type Name', translate=True, required=True) name = fields.Char('Amenity Type Name', translate=True, required=True)
hotel_ids = fields.Many2many( pms_property_ids = fields.Many2many(
'hotel.property', string='Hotels', required=False, ondelete='restrict') 'pms.property', string='Properties', required=False, ondelete='restrict')
room_amenity_ids = fields.One2many('hotel.amenity', room_amenity_ids = fields.One2many('pms.amenity',
'room_amenity_type_id', 'room_amenity_type_id',
'Amenities in this category') 'Amenities in this category')
active = fields.Boolean('Active', default=True) 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

View File

@@ -4,8 +4,8 @@ from odoo import api, models, fields
from odoo.addons import decimal_precision as dp from odoo.addons import decimal_precision as dp
class HotelBoardService(models.Model): class PmsBoardService(models.Model):
_name = "hotel.board.service" _name = "pms.board.service"
_description = "Board Services" _description = "Board Services"
# Fields declaration # Fields declaration
@@ -16,16 +16,16 @@ class HotelBoardService(models.Model):
required=True, required=True,
index=True) index=True)
board_service_line_ids = fields.One2many( board_service_line_ids = fields.One2many(
'hotel.board.service.line', 'pms.board.service.line',
'hotel_board_service_id') 'pms_board_service_id')
hotel_ids = fields.Many2many( pms_property_ids = fields.Many2many(
'hotel.property', 'pms.property',
string='Hotels', string='Properties',
required=False, required=False,
ondelete='restrict') ondelete='restrict')
hotel_board_service_room_type_ids = fields.One2many( pms_board_service_room_type_ids = fields.One2many(
'hotel.board.service.room.type', 'pms.board.service.room.type',
'hotel_board_service_id') 'pms_board_service_id')
price_type = fields.Selection([ price_type = fields.Selection([
('fixed', 'Fixed'), ('fixed', 'Fixed'),
('percent', 'Percent')], ('percent', 'Percent')],

View File

@@ -4,8 +4,8 @@ from odoo import api, fields, models
from odoo.addons import decimal_precision as dp from odoo.addons import decimal_precision as dp
class HotelBoardServiceLine(models.Model): class PmsBoardServiceLine(models.Model):
_name = 'hotel.board.service.line' _name = 'pms.board.service.line'
_description = 'Services on Board Service included' _description = 'Services on Board Service included'
# Default methods # Default methods
@@ -14,8 +14,8 @@ class HotelBoardServiceLine(models.Model):
return self.product_id.list_price return self.product_id.list_price
# Fields declaration # Fields declaration
hotel_board_service_id = fields.Many2one( pms_board_service_id = fields.Many2one(
'hotel.board.service', 'pms.board.service',
'Board Service', 'Board Service',
ondelete='cascade', ondelete='cascade',
required=True) required=True)
@@ -23,9 +23,9 @@ class HotelBoardServiceLine(models.Model):
'product.product', 'product.product',
string='Product', string='Product',
required=True) required=True)
hotel_ids = fields.Many2many( pms_property_ids = fields.Many2many(
'hotel.property', 'pms.property',
related='hotel_board_service_id.hotel_ids') related='pms_board_service_id.pms_property_ids')
amount = fields.Float( amount = fields.Float(
'Amount', 'Amount',
digits=dp.get_precision('Product Price'), digits=dp.get_precision('Product Price'),

View File

@@ -5,10 +5,10 @@ from odoo.addons import decimal_precision as dp
from odoo.exceptions import UserError from odoo.exceptions import UserError
class HotelBoardServiceRoomType(models.Model): class PmsBoardServiceRoomType(models.Model):
_name = 'hotel.board.service.room.type' _name = 'pms.board.service.room.type'
_table = 'hotel_board_service_room_type_rel' _table = 'pms_board_service_room_type_rel'
_rec_name = 'hotel_board_service_id' _rec_name = 'pms_board_service_id'
_log_access = False _log_access = False
_description = 'Board Service included in Room' _description = 'Board Service included in Room'
@@ -19,23 +19,23 @@ class HotelBoardServiceRoomType(models.Model):
for res in self: for res in self:
if res.pricelist_id: if res.pricelist_id:
name = u'%s (%s)' % ( name = u'%s (%s)' % (
res.hotel_board_service_id.name, res.pms_board_service_id.name,
res.pricelist_id.name) res.pricelist_id.name)
else: else:
name = u'%s (%s)' % (res.hotel_board_service_id.name, name = u'%s (%s)' % (res.pms_board_service_id.name,
_('Generic')) _('Generic'))
result.append((res.id, name)) result.append((res.id, name))
return result return result
# Fields declaration # Fields declaration
hotel_board_service_id = fields.Many2one( pms_board_service_id = fields.Many2one(
'hotel.board.service', 'pms.board.service',
string='Board Service', string='Board Service',
index=True, index=True,
ondelete='cascade', ondelete='cascade',
required=True) required=True)
hotel_room_type_id = fields.Many2one( pms_room_type_id = fields.Many2one(
'hotel.room.type', 'pms.room.type',
string='Room Type', string='Room Type',
index=True, index=True,
ondelete='cascade', ondelete='cascade',
@@ -45,11 +45,11 @@ class HotelBoardServiceRoomType(models.Model):
string='Pricelist', string='Pricelist',
required=False) required=False)
board_service_line_ids = fields.One2many( board_service_line_ids = fields.One2many(
'hotel.board.service.room.type.line', 'pms.board.service.room.type.line',
'hotel_board_service_room_type_id') 'pms_board_service_room_type_id')
hotel_id = fields.Many2one( pms_property_id = fields.Many2one(
'hotel.property', 'pms.property',
related='hotel_room_type_id.hotel_id') related='pms_room_type_id.pms_property_id')
price_type = fields.Selection([ price_type = fields.Selection([
('fixed', 'Fixed'), ('fixed', 'Fixed'),
('percent', 'Percent')], ('percent', 'Percent')],
@@ -76,22 +76,22 @@ class HotelBoardServiceRoomType(models.Model):
def constrains_pricelist_id(self): def constrains_pricelist_id(self):
for record in self: for record in self:
if self.pricelist_id: 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), ('pricelist_id', '=', record.pricelist_id.id),
('hotel_room_type_id', '=', record.hotel_room_type_id.id), ('pms_room_type_id', '=', record.pms_room_type_id.id),
('hotel_board_service_id', '=', ('pms_board_service_id', '=',
record.hotel_board_service_id.id), record.pms_board_service_id.id),
('id', '!=', record.id) ('id', '!=', record.id)
]) ])
if board_pricelist: if board_pricelist:
raise UserError( raise UserError(
_("This Board Service in this Room can't repeat pricelist")) _("This Board Service in this Room can't repeat pricelist"))
else: else:
board_pricelist = self.env['hotel.board.service.room.type'].search([ board_pricelist = self.env['pms.board.service.room.type'].search([
('pricelist_id', '=', False), ('pricelist_id', '=', False),
('hotel_room_type_id', '=', record.hotel_room_type_id.id), ('pms_room_type_id', '=', record.pms_room_type_id.id),
('hotel_board_service_id', '=', ('pms_board_service_id', '=',
record.hotel_board_service_id.id), record.pms_board_service_id.id),
('id', '!=', record.id) ('id', '!=', record.id)
]) ])
if board_pricelist: if board_pricelist:
@@ -103,9 +103,9 @@ class HotelBoardServiceRoomType(models.Model):
@api.multi @api.multi
def open_board_lines_form(self): def open_board_lines_form(self):
action = self.env.ref( 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( 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['res_id'] = self.id
action['target'] = 'new' action['target'] = 'new'
return action return action
@@ -115,30 +115,30 @@ class HotelBoardServiceRoomType(models.Model):
def init(self): def init(self):
self._cr.execute( self._cr.execute(
'SELECT indexname FROM pg_indexes WHERE indexname = %s', '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(): if not self._cr.fetchone():
self._cr.execute( self._cr.execute(
'CREATE INDEX hotel_board_service_id_hotel_room_type_id_pricelist_id \ 'CREATE INDEX pms_board_service_id_pms_room_type_id_pricelist_id \
ON hotel_board_service_room_type_rel \ ON pms_board_service_room_type_rel \
(hotel_board_service_id, hotel_room_type_id, pricelist_id)') (pms_board_service_id, pms_room_type_id, pricelist_id)')
@api.model @api.model
def create(self, vals): def create(self, vals):
if 'hotel_board_service_id' in vals: if 'pms_board_service_id' in vals:
vals.update( vals.update(
self.prepare_board_service_reservation_ids( 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 @api.multi
def write(self, vals): def write(self, vals):
if 'hotel_board_service_id' in vals: if 'pms_board_service_id' in vals:
vals.update( vals.update(
self.prepare_board_service_reservation_ids( 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 # Business methods
@api.model @api.model
@@ -147,7 +147,7 @@ class HotelBoardServiceRoomType(models.Model):
Prepare line to price products config Prepare line to price products config
""" """
cmds = [(5, 0, 0)] cmds = [(5, 0, 0)]
board_service = self.env['hotel.board.service'].browse( board_service = self.env['pms.board.service'].browse(
board_service_id) board_service_id)
for line in board_service.board_service_line_ids: for line in board_service.board_service_line_ids:
cmds.append((0, False, { cmds.append((0, False, {

View File

@@ -4,13 +4,13 @@ from odoo import fields, models
from odoo.addons import decimal_precision as dp from odoo.addons import decimal_precision as dp
class HotelBoardServiceRoomTypeLine(models.Model): class PmsBoardServiceRoomTypeLine(models.Model):
_name = 'hotel.board.service.room.type.line' _name = 'pms.board.service.room.type.line'
_description = 'Services on Board Service included in Room' _description = 'Services on Board Service included in Room'
# Fields declaration # Fields declaration
hotel_board_service_room_type_id = fields.Many2one( pms_board_service_room_type_id = fields.Many2one(
'hotel.board.service.room.type', 'pms.board.service.room.type',
'Board Service Room', 'Board Service Room',
ondelete='cascade', ondelete='cascade',
required=True) required=True)

View File

@@ -5,8 +5,8 @@ from odoo import models, fields
# TODO: refactoring to cancellation.rule # TODO: refactoring to cancellation.rule
class HotelCancelationRule(models.Model): class PmsCancelationRule(models.Model):
_name = 'hotel.cancelation.rule' _name = 'pms.cancelation.rule'
_description = 'Cancelation Rules' _description = 'Cancelation Rules'
# Fields declaration # Fields declaration
@@ -15,9 +15,9 @@ class HotelCancelationRule(models.Model):
'product.pricelist', 'product.pricelist',
'cancelation_rule_id', 'cancelation_rule_id',
'Pricelist that use this rule') 'Pricelist that use this rule')
hotel_ids = fields.Many2many( pms_property_ids = fields.Many2many(
'hotel.property', 'pms.property',
string='Hotels', string='Properties',
required=False, required=False,
ondelete='restrict') ondelete='restrict')
active = fields.Boolean('Active', default=True) active = fields.Boolean('Active', default=True)
@@ -37,4 +37,4 @@ class HotelCancelationRule(models.Model):
('days', 'Specify days')], 'No Show apply on', default='all') ('days', 'Specify days')], 'No Show apply on', default='all')
days_noshow = fields.Integer('NoShow first days', default="2") 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

View File

@@ -9,13 +9,13 @@ from odoo.tools import (
DEFAULT_SERVER_DATE_FORMAT) DEFAULT_SERVER_DATE_FORMAT)
class HotelCheckinPartner(models.Model): class PmsCheckinPartner(models.Model):
_name = 'hotel.checkin.partner' _name = 'pms.checkin.partner'
# Default Methods ang Gets # Default Methods ang Gets
def _default_reservation_id(self): def _default_reservation_id(self):
if 'reservation_id' in self.env.context: if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].browse([ reservation = self.env['pms.reservation'].browse([
self.env.context['reservation_id'] self.env.context['reservation_id']
]) ])
return reservation return reservation
@@ -23,7 +23,7 @@ class HotelCheckinPartner(models.Model):
def _default_partner_id(self): def _default_partner_id(self):
if 'reservation_id' in self.env.context: if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].browse([ reservation = self.env['pms.reservation'].browse([
self.env.context['reservation_id'] self.env.context['reservation_id']
]) ])
partner_ids = [] partner_ids = []
@@ -43,12 +43,12 @@ class HotelCheckinPartner(models.Model):
def _default_folio_id(self): def _default_folio_id(self):
if 'folio_id' in self.env.context: if 'folio_id' in self.env.context:
folio = self.env['hotel.folio'].browse([ folio = self.env['pms.folio'].browse([
self.env.context['folio_id'] self.env.context['folio_id']
]) ])
return folio return folio
if 'reservation_id' in self.env.context: if 'reservation_id' in self.env.context:
folio = self.env['hotel.reservation'].browse([ folio = self.env['pms.reservation'].browse([
self.env.context['reservation_id'] self.env.context['reservation_id']
]).folio_id ]).folio_id
return folio return folio
@@ -56,7 +56,7 @@ class HotelCheckinPartner(models.Model):
def _default_enter_date(self): def _default_enter_date(self):
if 'reservation_id' in self.env.context: if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].browse([ reservation = self.env['pms.reservation'].browse([
self.env.context['reservation_id'] self.env.context['reservation_id']
]) ])
return reservation.checkin return reservation.checkin
@@ -64,15 +64,15 @@ class HotelCheckinPartner(models.Model):
def _default_exit_date(self): def _default_exit_date(self):
if 'reservation_id' in self.env.context: if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].browse([ reservation = self.env['pms.reservation'].browse([
self.env.context['reservation_id'] self.env.context['reservation_id']
]) ])
return reservation.checkout return reservation.checkout
return False return False
@api.model @api.model
def _get_default_hotel(self): def _get_default_pms_property(self):
return self.env.user.hotel_id return self.env.user.pms_property_id
# Fields declaration # Fields declaration
partner_id = fields.Many2one( partner_id = fields.Many2one(
@@ -80,16 +80,16 @@ class HotelCheckinPartner(models.Model):
default=_default_partner_id, default=_default_partner_id,
required=True) required=True)
reservation_id = fields.Many2one( reservation_id = fields.Many2one(
'hotel.reservation', 'pms.reservation',
default=_default_reservation_id) default=_default_reservation_id)
folio_id = fields.Many2one( folio_id = fields.Many2one(
'hotel.folio', 'pms.folio',
default=_default_folio_id, default=_default_folio_id,
readonly=True, readonly=True,
required=True) required=True)
hotel_id = fields.Many2one( pms_property_id = fields.Many2one(
'hotel.property', 'pms.property',
default=_get_default_hotel, default=_get_default_pms_property,
required=True) required=True)
email = fields.Char('E-mail', related='partner_id.email') email = fields.Char('E-mail', related='partner_id.email')
mobile = fields.Char('Mobile', related='partner_id.mobile') mobile = fields.Char('Mobile', related='partner_id.mobile')
@@ -170,7 +170,7 @@ class HotelCheckinPartner(models.Model):
master_reservation = \ master_reservation = \
record.reservation_id.parent_reservation or \ record.reservation_id.parent_reservation or \
record.reservation_id record.reservation_id
splitted_reservs = self.env['hotel.reservation'].search([ splitted_reservs = self.env['pms.reservation'].search([
('splitted', '=', True), ('splitted', '=', True),
'|', '|',
('parent_reservation', '=', master_reservation.id), ('parent_reservation', '=', master_reservation.id),
@@ -200,7 +200,7 @@ class HotelCheckinPartner(models.Model):
# ORM Overrides # ORM Overrides
@api.model @api.model
def create(self, vals): def create(self, vals):
record = super(HotelCheckinPartner, self).create(vals) record = super(PmsCheckinPartner, self).create(vals)
if vals.get('auto_booking', False): if vals.get('auto_booking', False):
record.action_on_board() record.action_on_board()
return record return record
@@ -208,17 +208,17 @@ class HotelCheckinPartner(models.Model):
# Business methods # Business methods
def _get_arrival_hour(self): def _get_arrival_hour(self):
self.ensure_one() 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( today = fields.Datetime.context_timestamp(
self.with_context(tz=tz_hotel), self.with_context(tz=tz_property),
datetime.datetime.strptime(fields.Date.today(), datetime.datetime.strptime(fields.Date.today(),
DEFAULT_SERVER_DATE_FORMAT)) 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( if self.reservation_id.checkin < today.strftime(
DEFAULT_SERVER_DATE_FORMAT): DEFAULT_SERVER_DATE_FORMAT):
return default_arrival_hour return default_arrival_hour
now = fields.Datetime.context_timestamp( now = fields.Datetime.context_timestamp(
self.with_context(tz=tz_hotel), self.with_context(tz=tz_property),
datetime.datetime.strptime(fields.Datetime.now(), datetime.datetime.strptime(fields.Datetime.now(),
DEFAULT_SERVER_DATETIME_FORMAT)) DEFAULT_SERVER_DATETIME_FORMAT))
arrival_hour = now.strftime("%H:%M") arrival_hour = now.strftime("%H:%M")
@@ -226,17 +226,17 @@ class HotelCheckinPartner(models.Model):
def _get_departure_hour(self): def _get_departure_hour(self):
self.ensure_one() 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( today = fields.Datetime.context_timestamp(
self.with_context(tz=tz_hotel), self.with_context(tz=tz_property),
datetime.datetime.strptime(fields.Date.today(), datetime.datetime.strptime(fields.Date.today(),
DEFAULT_SERVER_DATE_FORMAT)) 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( if self.reservation_id.checkout < today.strftime(
DEFAULT_SERVER_DATE_FORMAT): DEFAULT_SERVER_DATE_FORMAT):
return default_departure_hour return default_departure_hour
now = fields.Datetime.context_timestamp( now = fields.Datetime.context_timestamp(
self.with_context(tz=tz_hotel), self.with_context(tz=tz_property),
datetime.datetime.strptime(fields.Datetime.now(), datetime.datetime.strptime(fields.Datetime.now(),
DEFAULT_SERVER_DATETIME_FORMAT)) DEFAULT_SERVER_DATETIME_FORMAT))
departure_hour = now.strftime("%H:%M") departure_hour = now.strftime("%H:%M")

View File

@@ -3,8 +3,8 @@
from odoo import models, fields from odoo import models, fields
class HotelFloor(models.Model): class PmsFloor(models.Model):
_name = "hotel.floor" _name = "pms.floor"
_description = "Ubication" _description = "Ubication"
# Fields declaration # Fields declaration
@@ -13,9 +13,9 @@ class HotelFloor(models.Model):
size=64, size=64,
required=True, required=True,
index=True) index=True)
hotel_ids = fields.Many2many( pms_property_ids = fields.Many2many(
'hotel.property', 'pms.property',
string='Hotels', string='Properties',
required=False, required=False,
ondelete='restrict') ondelete='restrict')
sequence = fields.Integer('Sequence') sequence = fields.Integer('Sequence')

View File

@@ -5,9 +5,9 @@
from odoo import models, fields, api, _ from odoo import models, fields, api, _
class HotelFolio(models.Model): class PmsFolio(models.Model):
_name = 'hotel.folio' _name = 'pms.folio'
_description = 'Hotel Folio' _description = 'PMS Folio'
_inherit = ['mail.thread', 'mail.activity.mixin', 'portal.mixin'] _inherit = ['mail.thread', 'mail.activity.mixin', 'portal.mixin']
_order = 'id' _order = 'id'
@@ -19,7 +19,7 @@ class HotelFolio(models.Model):
this method return diff_invoicing = True, else, return False this method return diff_invoicing = True, else, return False
""" """
if 'folio_id' in self.env.context: if 'folio_id' in self.env.context:
folio = self.env['hotel.folio'].browse([ folio = self.env['pms.folio'].browse([
self.env.context['folio_id'] self.env.context['folio_id']
]) ])
if folio.partner_id.id == folio.partner_invoice_id.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() return self.env['crm.team']._get_default_team_id()
@api.model @api.model
def _get_default_hotel(self): def _get_default_pms_property(self):
return self.env.user.hotel_id return self.env.user.pms_property_id
# Fields declaration # Fields declaration
name = fields.Char( name = fields.Char(
@@ -40,32 +40,32 @@ class HotelFolio(models.Model):
readonly=True, readonly=True,
index=True, index=True,
default=lambda self: _('New')) default=lambda self: _('New'))
hotel_id = fields.Many2one( pms_property_id = fields.Many2one(
'hotel.property', 'pms.property',
default=_get_default_hotel, default=_get_default_pms_property,
required=True) required=True)
partner_id = fields.Many2one( partner_id = fields.Many2one(
'res.partner', 'res.partner',
track_visibility='onchange', track_visibility='onchange',
ondelete='restrict') ondelete='restrict')
reservation_ids = fields.One2many( reservation_ids = fields.One2many(
'hotel.reservation', 'pms.reservation',
'folio_id', 'folio_id',
readonly=False, readonly=False,
states={'done': [('readonly', True)]}, states={'done': [('readonly', True)]},
help="Hotel room reservation detail.",) help="Room reservation detail.",)
service_ids = fields.One2many( service_ids = fields.One2many(
'hotel.service', 'pms.service',
'folio_id', 'folio_id',
readonly=False, readonly=False,
states={'done': [('readonly', True)]}, 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.") "include in main Invoice.")
company_id = fields.Many2one( company_id = fields.Many2one(
'res.company', 'res.company',
'Company', 'Company',
default=lambda self: self.env['res.company']._company_default_get( default=lambda self: self.env['res.company']._company_default_get(
'hotel.folio')) 'pms.folio'))
analytic_account_id = fields.Many2one( analytic_account_id = fields.Many2one(
'account.analytic.account', 'account.analytic.account',
'Analytic Account', 'Analytic Account',
@@ -111,7 +111,7 @@ class HotelFolio(models.Model):
'account.payment.term', 'account.payment.term',
string='Payment Terms') string='Payment Terms')
checkin_partner_ids = fields.One2many( checkin_partner_ids = fields.One2many(
'hotel.checkin.partner', 'pms.checkin.partner',
'folio_id') 'folio_id')
invoice_ids = fields.Many2many( invoice_ids = fields.Many2many(
'account.invoice', 'account.invoice',
@@ -401,7 +401,7 @@ class HotelFolio(models.Model):
for rline in self.reservation_ids: for rline in self.reservation_ids:
if rline.splitted: if rline.splitted:
master_reservation = rline.parent_reservation or rline 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), ('splitted', '=', True),
('folio_id', '=', self.id), ('folio_id', '=', self.id),
('to_send', '=', True), ('to_send', '=', True),
@@ -424,7 +424,7 @@ class HotelFolio(models.Model):
for rline in self.reservation_ids: for rline in self.reservation_ids:
if rline.splitted: if rline.splitted:
master_reservation = rline.parent_reservation or rline 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), ('splitted', '=', True),
('folio_id', '=', self.id), ('folio_id', '=', self.id),
('to_send', '=', True), ('to_send', '=', True),
@@ -447,7 +447,7 @@ class HotelFolio(models.Model):
for rline in self.reservation_ids: for rline in self.reservation_ids:
if rline.splitted: if rline.splitted:
master_reservation = rline.parent_reservation or rline master_reservation = rline.parent_reservation or rline
nreservs = self.env['hotel.reservation'].search_count([ nreservs = self.env['pms.reservation'].search_count([
('splitted', '=', True), ('splitted', '=', True),
('folio_id', '=', self.id), ('folio_id', '=', self.id),
('to_send', '=', True), ('to_send', '=', True),
@@ -487,7 +487,7 @@ class HotelFolio(models.Model):
addr = self.partner_id.address_get(['invoice']) addr = self.partner_id.address_get(['invoice'])
pricelist = self.partner_id.property_product_pricelist and \ pricelist = self.partner_id.property_product_pricelist and \
self.partner_id.property_product_pricelist.id or \ 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 = { values = {
'pricelist_id': pricelist, 'pricelist_id': pricelist,
'payment_term_id': self.partner_id.property_payment_term_id and 'payment_term_id': self.partner_id.property_payment_term_id and
@@ -509,7 +509,7 @@ class HotelFolio(models.Model):
@api.multi @api.multi
@api.onchange('pricelist_id') @api.onchange('pricelist_id')
def onchange_pricelist_id(self): def onchange_pricelist_id(self):
values = {'reservation_type': self.env['hotel.folio']. values = {'reservation_type': self.env['pms.folio'].
calcule_reservation_type( calcule_reservation_type(
self.pricelist_id.is_staff, self.pricelist_id.is_staff,
self.reservation_type self.reservation_type
@@ -522,7 +522,7 @@ class HotelFolio(models.Model):
self.ensure_one() self.ensure_one()
partner = self.partner_id.id partner = self.partner_id.id
amount = self.pending_amount 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{ return{
'name': _('Register Payment'), 'name': _('Register Payment'),
'view_type': 'form', 'view_type': 'form',
@@ -590,7 +590,7 @@ class HotelFolio(models.Model):
'name': _('Checkins'), 'name': _('Checkins'),
'view_type': 'form', 'view_type': 'form',
'view_mode': 'tree,form', 'view_mode': 'tree,form',
'res_model': 'hotel.checkin.partner', 'res_model': 'pms.checkin.partner',
'type': 'ir.actions.act_window', 'type': 'ir.actions.act_window',
'domain': [('reservation_id', 'in', rooms)], 'domain': [('reservation_id', 'in', rooms)],
'target': 'new', 'target': 'new',
@@ -610,7 +610,7 @@ class HotelFolio(models.Model):
ir_model_data = self.env['ir.model.data'] ir_model_data = self.env['ir.model.data']
try: try:
template_id = ir_model_data.get_object_reference( template_id = ir_model_data.get_object_reference(
'hotel', 'pms',
'email_template_reservation')[1] 'email_template_reservation')[1]
except ValueError: except ValueError:
template_id = False template_id = False
@@ -622,7 +622,7 @@ class HotelFolio(models.Model):
compose_form_id = False compose_form_id = False
ctx = dict() ctx = dict()
ctx.update({ ctx.update({
'default_model': 'hotel.folio', 'default_model': 'pms.folio',
'default_res_id': self._ids[0], 'default_res_id': self._ids[0],
'default_use_template': bool(template_id), 'default_use_template': bool(template_id),
'default_template_id': template_id, 'default_template_id': template_id,
@@ -656,8 +656,8 @@ class HotelFolio(models.Model):
ir_model_data = self.env['ir.model.data'] ir_model_data = self.env['ir.model.data']
try: try:
template_id = ir_model_data.get_object_reference( template_id = ir_model_data.get_object_reference(
'hotel', 'pms',
'mail_template_hotel_exit')[1] 'mail_template_pms_exit')[1]
except ValueError: except ValueError:
template_id = False template_id = False
try: try:
@@ -668,7 +668,7 @@ class HotelFolio(models.Model):
compose_form_id = False compose_form_id = False
ctx = dict() ctx = dict()
ctx.update({ ctx.update({
'default_model': 'hotel.reservation', 'default_model': 'pms.reservation',
'default_res_id': self._ids[0], 'default_res_id': self._ids[0],
'default_use_template': bool(template_id), 'default_use_template': bool(template_id),
'default_template_id': template_id, 'default_template_id': template_id,
@@ -699,8 +699,8 @@ class HotelFolio(models.Model):
ir_model_data = self.env['ir.model.data'] ir_model_data = self.env['ir.model.data']
try: try:
template_id = ir_model_data.get_object_reference( template_id = ir_model_data.get_object_reference(
'hotel', 'pms',
'mail_template_hotel_cancel')[1] 'mail_template_pms_cancel')[1]
except ValueError: except ValueError:
template_id = False template_id = False
try: try:
@@ -711,7 +711,7 @@ class HotelFolio(models.Model):
compose_form_id = False compose_form_id = False
ctx = dict() ctx = dict()
ctx.update({ ctx.update({
'default_model': 'hotel.reservation', 'default_model': 'pms.reservation',
'default_res_id': self._ids[0], 'default_res_id': self._ids[0],
'default_use_template': bool(template_id), 'default_use_template': bool(template_id),
'default_template_id': template_id, 'default_template_id': template_id,
@@ -738,12 +738,12 @@ class HotelFolio(models.Model):
if 'company_id' in vals: if 'company_id' in vals:
vals['name'] = self.env['ir.sequence'].with_context( vals['name'] = self.env['ir.sequence'].with_context(
force_company=vals['company_id'] force_company=vals['company_id']
).next_by_code('hotel.folio') or _('New') ).next_by_code('pms.folio') or _('New')
else: else:
vals['name'] = self.env['ir.sequence'].next_by_code( 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)) vals.update(self._prepare_add_missing_fields(vals))
result = super(HotelFolio, self).create(vals) result = super(PmsFolio, self).create(vals)
return result return result
# Business methods # Business methods

View File

@@ -7,46 +7,46 @@ from odoo import models, fields, api, _
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
class HotelProperty(models.Model): class PmsProperty(models.Model):
_name = 'hotel.property' _name = 'pms.property'
_description = 'Hotel' _description = 'Property'
_inherits = {'res.partner': 'partner_id'} _inherits = {'res.partner': 'partner_id'}
# Fields declaration # Fields declaration
partner_id = fields.Many2one( partner_id = fields.Many2one(
'res.partner', 'res.partner',
'Hotel Property', 'Property',
required=True, required=True,
delegate=True, delegate=True,
ondelete='cascade') ondelete='cascade')
company_id = fields.Many2one( company_id = fields.Many2one(
'res.company', 'res.company',
required=True, required=True,
help='The company that owns or operates this hotel.') help='The company that owns or operates this property.')
user_ids = fields.Many2many( user_ids = fields.Many2many(
'res.users', 'res.users',
'hotel_property_users_rel', 'pms_property_users_rel',
'hotel_id', 'pms_property_id',
'user_id', 'user_id',
string='Accepted Users') string='Accepted Users')
room_type_ids = fields.One2many( room_type_ids = fields.One2many(
'hotel.room.type', 'pms.room.type',
'hotel_id', 'pms_property_id',
'Room Types') 'Room Types')
room_ids = fields.One2many( room_ids = fields.One2many(
'hotel.room', 'pms.room',
'hotel_id', 'pms_property_id',
'Rooms') 'Rooms')
default_pricelist_id = fields.Many2one( default_pricelist_id = fields.Many2one(
'product.pricelist', 'product.pricelist',
string='Product Pricelist', string='Product Pricelist',
required=True, required=True,
help='The default pricelist used in this hotel.') help='The default pricelist used in this property.')
default_restriction_id = fields.Many2one( default_restriction_id = fields.Many2one(
'hotel.room.type.restriction', 'pms.room.type.restriction',
'Restriction Plan', 'Restriction Plan',
required=True, 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)', default_arrival_hour = fields.Char('Arrival Hour (GMT)',
help="HH:mm Format", default="14:00") help="HH:mm Format", default="14:00")
default_departure_hour = fields.Char('Departure Hour (GMT)', default_departure_hour = fields.Char('Departure Hour (GMT)',

View File

@@ -16,9 +16,9 @@ import logging
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
class HotelReservation(models.Model): class PmsReservation(models.Model):
_name = 'hotel.reservation' _name = 'pms.reservation'
_description = 'Hotel Reservation' _description = 'Reservation'
_inherit = ['mail.thread', 'mail.activity.mixin', 'portal.mixin'] _inherit = ['mail.thread', 'mail.activity.mixin', 'portal.mixin']
_order = "last_updated_res desc, name" _order = "last_updated_res desc, name"
@@ -26,36 +26,36 @@ class HotelReservation(models.Model):
def _get_default_checkin(self): def _get_default_checkin(self):
folio = False folio = False
if 'folio_id' in self._context: if 'folio_id' in self._context:
folio = self.env['hotel.folio'].search([ folio = self.env['pms.folio'].search([
('id', '=', self._context['folio_id']) ('id', '=', self._context['folio_id'])
]) ])
if folio and folio.reservation_ids: if folio and folio.reservation_ids:
return folio.reservation_ids[0].checkin return folio.reservation_ids[0].checkin
else: else:
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)) today = fields.Date.context_today(self.with_context(tz=tz_property))
return fields.Date.from_string(today).strftime( return fields.Date.from_string(today).strftime(
DEFAULT_SERVER_DATE_FORMAT) DEFAULT_SERVER_DATE_FORMAT)
def _get_default_checkout(self): def _get_default_checkout(self):
folio = False folio = False
if 'folio_id' in self._context: if 'folio_id' in self._context:
folio = self.env['hotel.folio'].search([ folio = self.env['pms.folio'].search([
('id', '=', self._context['folio_id']) ('id', '=', self._context['folio_id'])
]) ])
if folio and folio.reservation_ids: if folio and folio.reservation_ids:
return folio.reservation_ids[0].checkout return folio.reservation_ids[0].checkout
else: else:
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)) today = fields.Date.context_today(self.with_context(tz=tz_property))
return (fields.Date.from_string(today) + timedelta(days=1)).\ return (fields.Date.from_string(today) + timedelta(days=1)).\
strftime(DEFAULT_SERVER_DATE_FORMAT) strftime(DEFAULT_SERVER_DATE_FORMAT)
def _get_default_arrival_hour(self): def _get_default_arrival_hour(self):
folio = False 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: if 'folio_id' in self._context:
folio = self.env['hotel.folio'].search([ folio = self.env['pms.folio'].search([
('id', '=', self._context['folio_id']) ('id', '=', self._context['folio_id'])
]) ])
if folio and folio.reservation_ids: if folio and folio.reservation_ids:
@@ -65,9 +65,9 @@ class HotelReservation(models.Model):
def _get_default_departure_hour(self): def _get_default_departure_hour(self):
folio = False 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: if 'folio_id' in self._context:
folio = self.env['hotel.folio'].search([ folio = self.env['pms.folio'].search([
('id', '=', self._context['folio_id']) ('id', '=', self._context['folio_id'])
]) ])
if folio and folio.reservation_ids: if folio and folio.reservation_ids:
@@ -82,7 +82,7 @@ class HotelReservation(models.Model):
this method return diff_invoicing = True, else, return False this method return diff_invoicing = True, else, return False
""" """
if 'reservation_id' in self.env.context: if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].browse([ reservation = self.env['pms.reservation'].browse([
self.env.context['reservation_id'] self.env.context['reservation_id']
]) ])
if reservation.partner_id.id == reservation.partner_invoice_id.id: if reservation.partner_id.id == reservation.partner_invoice_id.id:
@@ -92,20 +92,20 @@ class HotelReservation(models.Model):
# Fields declaration # Fields declaration
name = fields.Text('Reservation Description', required=True) name = fields.Text('Reservation Description', required=True)
room_id = fields.Many2one( room_id = fields.Many2one(
'hotel.room', 'pms.room',
string='Room', string='Room',
track_visibility='onchange', track_visibility='onchange',
ondelete='restrict') ondelete='restrict')
folio_id = fields.Many2one( folio_id = fields.Many2one(
'hotel.folio', 'pms.folio',
string='Folio', string='Folio',
track_visibility='onchange', track_visibility='onchange',
ondelete='cascade') ondelete='cascade')
board_service_room_id = fields.Many2one( board_service_room_id = fields.Many2one(
'hotel.board.service.room.type', 'pms.board.service.room.type',
string='Board Service') string='Board Service')
room_type_id = fields.Many2one( room_type_id = fields.Many2one(
'hotel.room.type', 'pms.room.type',
string='Room Type', string='Room Type',
required=True, required=True,
track_visibility='onchange') track_visibility='onchange')
@@ -128,27 +128,27 @@ class HotelReservation(models.Model):
string='Company', string='Company',
store=True, store=True,
readonly=True) readonly=True)
hotel_id = fields.Many2one( pms_property_id = fields.Many2one(
'hotel.property', 'pms.property',
store=True, store=True,
readonly=True, readonly=True,
related='folio_id.hotel_id') related='folio_id.pms_property_id')
reservation_line_ids = fields.One2many( reservation_line_ids = fields.One2many(
'hotel.reservation.line', 'pms.reservation.line',
'reservation_id', 'reservation_id',
required=True) required=True)
service_ids = fields.One2many( service_ids = fields.One2many(
'hotel.service', 'pms.service',
'reservation_id') 'reservation_id')
pricelist_id = fields.Many2one( pricelist_id = fields.Many2one(
'product.pricelist', 'product.pricelist',
related='folio_id.pricelist_id') related='folio_id.pricelist_id')
# TODO: Warning Mens to update pricelist # TODO: Warning Mens to update pricelist
checkin_partner_ids = fields.One2many( checkin_partner_ids = fields.One2many(
'hotel.checkin.partner', 'pms.checkin.partner',
'reservation_id') 'reservation_id')
parent_reservation = fields.Many2one( parent_reservation = fields.Many2one(
'hotel.reservation', 'pms.reservation',
string='Parent Reservation') string='Parent Reservation')
segmentation_ids = fields.Many2many( segmentation_ids = fields.Many2many(
related='folio_id.segmentation_ids') related='folio_id.segmentation_ids')
@@ -232,7 +232,7 @@ class HotelReservation(models.Model):
partner_invoice_lang = fields.Selection(related="partner_invoice_id.lang") partner_invoice_lang = fields.Selection(related="partner_invoice_id.lang")
# TODO: As checkin_partner_count is a computed field, it can't not # TODO: As checkin_partner_count is a computed field, it can't not
# be used in a domain filer Non-stored field # 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 # searching on a computed field can also be enabled by setting the
# search parameter. The value is a method name returning a Domains # search parameter. The value is a method name returning a Domains
checkin_partner_count = fields.Integer( checkin_partner_count = fields.Integer(
@@ -498,7 +498,7 @@ class HotelReservation(models.Model):
if not self.overbooking \ if not self.overbooking \
and self.state not in ('cancelled') \ and self.state not in ('cancelled') \
and not self._context.get("ignore_avail_restrictions", False): 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, self.checkin,
(fields.Date.from_string(self.checkout) - timedelta(days=1)). (fields.Date.from_string(self.checkout) - timedelta(days=1)).
strftime(DEFAULT_SERVER_DATE_FORMAT)) strftime(DEFAULT_SERVER_DATE_FORMAT))
@@ -547,7 +547,7 @@ class HotelReservation(models.Model):
addr = self.partner_id.address_get(['invoice']) addr = self.partner_id.address_get(['invoice'])
pricelist = self.partner_id.property_product_pricelist and \ pricelist = self.partner_id.property_product_pricelist and \
self.partner_id.property_product_pricelist.id or \ 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 = { values = {
'pricelist_id': pricelist, 'pricelist_id': pricelist,
'partner_invoice_id': addr['invoice'], 'partner_invoice_id': addr['invoice'],
@@ -557,7 +557,7 @@ class HotelReservation(models.Model):
@api.multi @api.multi
@api.onchange('pricelist_id') @api.onchange('pricelist_id')
def onchange_pricelist_id(self): def onchange_pricelist_id(self):
values = {'reservation_type': self.env['hotel.folio']. values = {'reservation_type': self.env['pms.folio'].
calcule_reservation_type( calcule_reservation_type(
self.pricelist_id.is_staff, self.pricelist_id.is_staff,
self.reservation_type)} self.reservation_type)}
@@ -648,7 +648,7 @@ class HotelReservation(models.Model):
if self.overbooking or self.reselling or \ if self.overbooking or self.reselling or \
self.state in ('cancelled'): self.state in ('cancelled'):
return return
occupied = self.env['hotel.reservation'].get_reservations( occupied = self.env['pms.reservation'].get_reservations(
self.checkin, self.checkin,
(fields.Date.from_string(self.checkout) - timedelta(days=1)). (fields.Date.from_string(self.checkout) - timedelta(days=1)).
strftime(DEFAULT_SERVER_DATE_FORMAT)) strftime(DEFAULT_SERVER_DATE_FORMAT))
@@ -682,11 +682,11 @@ class HotelReservation(models.Model):
'folio_id': self.folio_id.id, 'folio_id': self.folio_id.id,
'reservation_id': self.id, 'reservation_id': self.id,
} }
line = self.env['hotel.service'].new(res) line = self.env['pms.service'].new(res)
res.update( res.update(
self.env['hotel.service']._prepare_add_missing_fields( self.env['pms.service']._prepare_add_missing_fields(
res)) res))
res.update(self.env['hotel.service'].prepare_service_ids( res.update(self.env['pms.service'].prepare_service_ids(
dfrom=self.checkin, dfrom=self.checkin,
days=self.nights, days=self.nights,
per_person=product.per_person, per_person=product.per_person,
@@ -716,7 +716,7 @@ class HotelReservation(models.Model):
action['res_id'] = invoices.ids[0] action['res_id'] = invoices.ids[0]
else: else:
action = self.env.ref( 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, action['context'] = {'default_reservation_id': self.id,
'default_folio_id': self.folio_id.id} 'default_folio_id': self.folio_id.id}
return action return action
@@ -724,7 +724,7 @@ class HotelReservation(models.Model):
@api.multi @api.multi
def create_invoice(self): def create_invoice(self):
action = self.env.ref( 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, action['context'] = {'default_reservation_id': self.id,
'default_folio_id': self.folio_id.id} 'default_folio_id': self.folio_id.id}
return action return action
@@ -732,10 +732,10 @@ class HotelReservation(models.Model):
@api.multi @api.multi
def open_folio(self): def open_folio(self):
action = self.env.ref( 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: if self.folio_id:
action['views'] = [ 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 action['res_id'] = self.folio_id.id
else: else:
action = {'type': 'ir.actions.act_window_close'} action = {'type': 'ir.actions.act_window_close'}
@@ -744,9 +744,9 @@ class HotelReservation(models.Model):
@api.multi @api.multi
def open_reservation_form(self): def open_reservation_form(self):
action = self.env.ref( action = self.env.ref(
'hotel.open_hotel_reservation_form_tree_all').read()[0] 'pms.open_pms_reservation_form_tree_all').read()[0]
action['views'] = [ 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 action['res_id'] = self.id
return action return action
@@ -761,7 +761,7 @@ class HotelReservation(models.Model):
partner = self.partner_id.id partner = self.partner_id.id
amount = min(self.price_room_services_set, self.folio_pending_amount) amount = min(self.price_room_services_set, self.folio_pending_amount)
note = self.folio_id.name + ' (' + self.name + ')' 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{ return{
'name': _('Register Payment'), 'name': _('Register Payment'),
'view_type': 'form', 'view_type': 'form',
@@ -792,7 +792,7 @@ class HotelReservation(models.Model):
('folio_id.name', operator, name), ('folio_id.name', operator, name),
('room_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) name='', args=args, operator='ilike', limit=limit)
@api.multi @api.multi
@@ -809,14 +809,14 @@ class HotelReservation(models.Model):
vals.update(self._autoassign(vals)) vals.update(self._autoassign(vals))
vals.update(self._prepare_add_missing_fields(vals)) vals.update(self._prepare_add_missing_fields(vals))
if 'folio_id' in vals and 'channel_type' not in 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}) vals.update({'channel_type': folio.channel_type})
elif 'partner_id' in vals: elif 'partner_id' in vals:
folio_vals = {'partner_id': int(vals.get('partner_id')), folio_vals = {'partner_id': int(vals.get('partner_id')),
'channel_type': vals.get('channel_type')} 'channel_type': vals.get('channel_type')}
# Create the folio in case of need # Create the folio in case of need
# (To allow to create reservations direct) # (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, vals.update({'folio_id': folio.id,
'reservation_type': vals.get('reservation_type'), 'reservation_type': vals.get('reservation_type'),
'channel_type': vals.get('channel_type')}) 'channel_type': vals.get('channel_type')})
@@ -825,7 +825,7 @@ class HotelReservation(models.Model):
if service[2]: if service[2]:
service[2]['folio_id'] = folio.id service[2]['folio_id'] = folio.id
user = self.env['res.users'].browse(self.env.uid) 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({ vals.update({
'to_assign': True, 'to_assign': True,
'channel_type': 'call' 'channel_type': 'call'
@@ -848,7 +848,7 @@ class HotelReservation(models.Model):
and 'real_checkin' not in vals and 'real_checkout' not in vals: and 'real_checkin' not in vals and 'real_checkout' not in vals:
vals['real_checkin'] = vals['checkin'] vals['real_checkin'] = vals['checkin']
vals['real_checkout'] = vals['checkout'] vals['real_checkout'] = vals['checkout']
record = super(HotelReservation, self).create(vals) record = super(PmsReservation, self).create(vals)
if record.preconfirm: if record.preconfirm:
record.confirm() record.confirm()
return record return record
@@ -883,7 +883,7 @@ class HotelReservation(models.Model):
record.service_ids.filtered( record.service_ids.filtered(
lambda r: r.is_board_service is True).unlink() lambda r: r.is_board_service is True).unlink()
board_services = [] 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']) vals['board_service_room_id'])
for line in board.board_service_line_ids: for line in board.board_service_line_ids:
res = { res = {
@@ -893,7 +893,7 @@ class HotelReservation(models.Model):
'reservation_id': self.id, 'reservation_id': self.id,
} }
res.update( res.update(
self.env['hotel.service']._prepare_add_missing_fields( self.env['pms.service']._prepare_add_missing_fields(
res)) res))
board_services.append((0, False, res)) board_services.append((0, False, res))
# REVIEW: Why I need add manually the old IDs if # 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']): ('state' in vals and record.state != vals['state']):
record.update({'to_send': True}) record.update({'to_send': True})
user = self.env['res.users'].browse(self.env.uid) 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({ vals.update({
'to_assign': True, 'to_assign': True,
}) })
record = super(HotelReservation, self).write(vals) record = super(PmsReservation, self).write(vals)
return record return record
# Business methods # Business methods
@@ -1014,7 +1014,7 @@ class HotelReservation(models.Model):
room_type_id = values.get('room_type_id') room_type_id = values.get('room_type_id')
if checkin and checkout and room_type_id: if checkin and checkout and room_type_id:
if 'overbooking' not in values: if 'overbooking' not in values:
room_chosen = self.env['hotel.room.type'].\ room_chosen = self.env['pms.room.type'].\
check_availability_room_type( check_availability_room_type(
checkin, checkin,
(fields.Date.from_string(checkout) - (fields.Date.from_string(checkout) -
@@ -1024,7 +1024,7 @@ class HotelReservation(models.Model):
room_type_id)[0] room_type_id)[0]
# Check room_chosen exist # Check room_chosen exist
else: else:
room_chosen = self.env['hotel.room.type'].browse( room_chosen = self.env['pms.room.type'].browse(
room_type_id).room_ids[0] room_type_id).room_ids[0]
res.update({ res.update({
'room_id': room_chosen.id 'room_id': room_chosen.id
@@ -1033,7 +1033,7 @@ class HotelReservation(models.Model):
@api.model @api.model
def autocheckout(self): def autocheckout(self):
reservations = self.env['hotel.reservation'].search([ reservations = self.env['pms.reservation'].search([
('state', 'not in', ('done', 'cancelled')), ('state', 'not in', ('done', 'cancelled')),
('checkout', '<', fields.Date.today()) ('checkout', '<', fields.Date.today())
]) ])
@@ -1097,11 +1097,11 @@ class HotelReservation(models.Model):
@param self: object pointer @param self: object pointer
''' '''
_logger.info('confirm') _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) user = self.env['res.users'].browse(self.env.uid)
for record in self: for record in self:
vals = {} vals = {}
if user.has_group('hotel.group_hotel_call'): if user.has_group('pms.group_pms_call'):
vals.update({'channel_type': 'call'}) vals.update({'channel_type': 'call'})
if record.checkin_partner_ids: if record.checkin_partner_ids:
vals.update({'state': 'booking'}) vals.update({'state': 'booking'})
@@ -1116,7 +1116,7 @@ class HotelReservation(models.Model):
if record.splitted: if record.splitted:
master_reservation = record.parent_reservation or record master_reservation = record.parent_reservation or record
splitted_reservs = hotel_reserv_obj.search([ splitted_reservs = pms_reserv_obj.search([
('splitted', '=', True), ('splitted', '=', True),
'|', '|',
('parent_reservation', '=', master_reservation.id), ('parent_reservation', '=', master_reservation.id),
@@ -1154,7 +1154,7 @@ class HotelReservation(models.Model):
record._compute_cancelled_discount() record._compute_cancelled_discount()
if record.splitted: if record.splitted:
master_reservation = record.parent_reservation or record master_reservation = record.parent_reservation or record
splitted_reservs = self.env['hotel.reservation'].search([ splitted_reservs = self.env['pms.reservation'].search([
('splitted', '=', True), ('splitted', '=', True),
'|', '|',
('parent_reservation', '=', master_reservation.id), ('parent_reservation', '=', master_reservation.id),
@@ -1171,9 +1171,9 @@ class HotelReservation(models.Model):
self.ensure_one() self.ensure_one()
pricelist = self.pricelist_id pricelist = self.pricelist_id
if pricelist and pricelist.cancelation_rule_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( today = fields.Date.context_today(self.with_context(
tz=tz_hotel)) tz=tz_property))
days_diff = (fields.Date.from_string(self.real_checkin) - days_diff = (fields.Date.from_string(self.real_checkin) -
fields.Date.from_string(today)).days fields.Date.from_string(today)).days
if days_diff < 0: if days_diff < 0:
@@ -1193,7 +1193,7 @@ class HotelReservation(models.Model):
}) })
if record.splitted: if record.splitted:
master_reservation = record.parent_reservation or record master_reservation = record.parent_reservation or record
splitted_reservs = self.env['hotel.reservation'].search([ splitted_reservs = self.env['pms.reservation'].search([
('splitted', '=', True), ('splitted', '=', True),
'|', '|',
('parent_reservation', '=', master_reservation.id), ('parent_reservation', '=', master_reservation.id),
@@ -1285,7 +1285,7 @@ class HotelReservation(models.Model):
if not vals: if not vals:
vals = {} vals = {}
room_type_id = vals.get('room_type_id') or self.room_type_id.id 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( partner = self.env['res.partner'].browse(
vals.get('partner_id') or self.partner_id.id) vals.get('partner_id') or self.partner_id.id)
if 'discount' in vals and vals.get('discount') > 0: 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) domain = self._get_domain_reservations_occupation(dfrom, dto)
# _logger.info(domain) # _logger.info(domain)
return self.env['hotel.reservation'].search(domain) return self.env['pms.reservation'].search(domain)
@api.model @api.model
def _get_domain_reservations_occupation(self, dfrom, dto): 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), domain = [('reservation_line_ids.date', '>=', dfrom),
('reservation_line_ids.date', '<=', dto), ('reservation_line_ids.date', '<=', dto),
('state', '!=', 'cancelled'), ('state', '!=', 'cancelled'),
@@ -1360,15 +1357,15 @@ class HotelReservation(models.Model):
@return: dictionary of lists with reservations (a hash of arrays!) @return: dictionary of lists with reservations (a hash of arrays!)
with the reservations dates between dfrom and dto with the reservations dates between dfrom and dto
reservations_dates reservations_dates
{'2018-07-30': [hotel.reservation(29,), hotel.reservation(30,), {'2018-07-30': [pms.reservation(29,), pms.reservation(30,),
hotel.reservation(31,)], pms.reservation(31,)],
'2018-07-31': [hotel.reservation(22,), hotel.reservation(35,), '2018-07-31': [pms.reservation(22,), pms.reservation(35,),
hotel.reservation(36,)], pms.reservation(36,)],
} }
""" """
domain = [('date', '>=', dfrom), domain = [('date', '>=', dfrom),
('date', '<', dto)] ('date', '<', dto)]
lines = self.env['hotel.reservation.line'].search(domain) lines = self.env['pms.reservation.line'].search(domain)
reservations_dates = {} reservations_dates = {}
for record in lines: for record in lines:
# kumari.net/index.php/programming/programmingcat/22-python-making-a-dictionary-of-lists-a-hash-of-arrays # 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() lambda check: check.state == 'booking').action_done()
if record.splitted: if record.splitted:
master_reservation = record.parent_reservation or record master_reservation = record.parent_reservation or record
splitted_reservs = self.env['hotel.reservation'].search([ splitted_reservs = self.env['pms.reservation'].search([
('splitted', '=', True), ('splitted', '=', True),
'|', '|',
('parent_reservation', '=', master_reservation.id), ('parent_reservation', '=', master_reservation.id),
@@ -1428,9 +1425,9 @@ class HotelReservation(models.Model):
def action_checks(self): def action_checks(self):
self.ensure_one() self.ensure_one()
action = self.env.ref( action = self.env.ref(
'hotel.open_hotel_reservation_form_tree_all').read()[0] 'pms.open_pms_reservation_form_tree_all').read()[0]
action['views'] = [ action['views'] = [
(self.env.ref('hotel.hotel_reservation_checkin_view_form').id, (self.env.ref('pms.pms_reservation_checkin_view_form').id,
'form')] 'form')]
action['res_id'] = self.id action['res_id'] = self.id
action['target'] = 'new' action['target'] = 'new'
@@ -1480,7 +1477,7 @@ class HotelReservation(models.Model):
'reservation_line_ids': reservation_lines[1], 'reservation_line_ids': reservation_lines[1],
'preconfirm': False, 'preconfirm': False,
}) })
reservation_copy = self.env['hotel.reservation'].with_context({ reservation_copy = self.env['pms.reservation'].with_context({
'ignore_avail_restrictions': True}).create(vals) 'ignore_avail_restrictions': True}).create(vals)
if not reservation_copy: if not reservation_copy:
raise ValidationError(_("Unexpected error copying record. \ raise ValidationError(_("Unexpected error copying record. \
@@ -1501,7 +1498,7 @@ class HotelReservation(models.Model):
master_reservation = self.parent_reservation or self master_reservation = self.parent_reservation or self
splitted_reservs = self.env['hotel.reservation'].search([ splitted_reservs = self.env['pms.reservation'].search([
('splitted', '=', True), ('splitted', '=', True),
('folio_id', '=', self.folio_id.id), ('folio_id', '=', self.folio_id.id),
'|', '|',
@@ -1579,9 +1576,9 @@ class HotelReservation(models.Model):
if not self.parent_reservation: if not self.parent_reservation:
raise ValidationError(_("This is the parent reservation")) raise ValidationError(_("This is the parent reservation"))
action = self.env.ref( action = self.env.ref(
'hotel.open_hotel_reservation_form_tree_all').read()[0] 'pms.open_pms_reservation_form_tree_all').read()[0]
action['views'] = [ 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 action['res_id'] = self.parent_reservation.id
return action return action
@@ -1619,4 +1616,4 @@ class HotelReservation(models.Model):
@api.multi @api.multi
def set_call_center_user(self): def set_call_center_user(self):
user = self.env['res.users'].browse(self.env.uid) 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')

View File

@@ -6,8 +6,8 @@ from odoo.addons import decimal_precision as dp
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
class HotelReservationLine(models.Model): class PmsReservationLine(models.Model):
_name = "hotel.reservation.line" _name = "pms.reservation.line"
_order = "date" _order = "date"
# Default Methods ang Gets # Default Methods ang Gets
@@ -22,7 +22,7 @@ class HotelReservationLine(models.Model):
# Fields declaration # Fields declaration
reservation_id = fields.Many2one( reservation_id = fields.Many2one(
'hotel.reservation', 'pms.reservation',
string='Reservation', string='Reservation',
ondelete='cascade', ondelete='cascade',
required=True, required=True,
@@ -35,11 +35,11 @@ class HotelReservationLine(models.Model):
string='Invoice Lines', string='Invoice Lines',
readonly=True, readonly=True,
copy=False) copy=False)
hotel_id = fields.Many2one( pms_property_id = fields.Many2one(
'hotel.property', 'pms.property',
store=True, store=True,
readonly=True, readonly=True,
related='reservation_id.hotel_id') related='reservation_id.pms_property_id')
date = fields.Date('Date') date = fields.Date('Date')
state = fields.Selection(related='reservation_id.state') state = fields.Selection(related='reservation_id.state')
price = fields.Float( price = fields.Float(

View File

@@ -6,33 +6,33 @@ from odoo import models, fields, api, _
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
class HotelRoom(models.Model): class PmsRoom(models.Model):
""" The rooms for lodging can be for sleeping, usually called rooms, """ The rooms for lodging can be for sleeping, usually called rooms,
and also for speeches (conference rooms), parking, and also for speeches (conference rooms), parking,
relax with cafe con leche, spa... relax with cafe con leche, spa...
""" """
_name = 'hotel.room' _name = 'pms.room'
_description = 'Hotel Room' _description = 'Property Room'
_order = "sequence, room_type_id, name" _order = "sequence, room_type_id, name"
# Fields declaration # Fields declaration
name = fields.Char('Room Name', required=True) name = fields.Char('Room Name', required=True)
hotel_id = fields.Many2one( pms_property_id = fields.Many2one(
'hotel.property', 'pms.property',
store=True, store=True,
readonly=True, readonly=True,
related='room_type_id.hotel_id') related='room_type_id.pms_property_id')
room_type_id = fields.Many2one( room_type_id = fields.Many2one(
'hotel.room.type', 'pms.room.type',
'Hotel Room Type', 'Property Room Type',
required=True, required=True,
ondelete='restrict') ondelete='restrict')
shared_room_id = fields.Many2one( shared_room_id = fields.Many2one(
'hotel.shared.room', 'pms.shared.room',
'Shared Room', 'Shared Room',
default=False) default=False)
floor_id = fields.Many2one( floor_id = fields.Many2one(
'hotel.floor', 'pms.floor',
'Ubication', 'Ubication',
help='At which floor the room is located.') help='At which floor the room is located.')
capacity = fields.Integer('Capacity') capacity = fields.Integer('Capacity')
@@ -59,30 +59,30 @@ class HotelRoom(models.Model):
# CRUD methods # CRUD methods
@api.model @api.model
def create(self, vals): def create(self, vals):
if vals.get('hotel_id', self.env.user.hotel_id.id) != \ if vals.get('pms_property_id', self.env.user.pms_property_id.id) != \
self.env['hotel.room.type'].browse( self.env['pms.room.type'].browse(
vals['room_type_id']).hotel_id.id: vals['room_type_id']).pms_property_id.id:
raise ValidationError( raise ValidationError(
_("A room cannot be created in a room type \ _("A room cannot be created in a room type \
of another hotel.")) of another property."))
return super().create(vals) return super().create(vals)
@api.multi @api.multi
def write(self, vals): def write(self, vals):
for record in self: 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( raise ValidationError(
_("A room cannot be changed to another hotel.") + " " + _("A room cannot be changed to another property.") + " " +
_("%s does not belong to %s.") _("%s does not belong to %s.")
% (record, record.hotel_id)) % (record, record.pms_property_id))
room_type_ids = self.env['hotel.room.type'].search([ room_type_ids = self.env['pms.room.type'].search([
('hotel_id', '=', record.hotel_id.id) ('pms_property_id', '=', record.pms_property_id.id)
]).ids ]).ids
if vals.get('room_type_id', record.room_type_id.id) \ if vals.get('room_type_id', record.room_type_id.id) \
not in room_type_ids: not in room_type_ids:
raise ValidationError( raise ValidationError(
_("A room cannot be changed to a room type of \ _("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) return super().write(vals)
# Business methods # Business methods

View File

@@ -9,9 +9,9 @@ class RoomClosureReason(models.Model):
# Fields declaration # Fields declaration
name = fields.Char('Name', translate=True, required=True) name = fields.Char('Name', translate=True, required=True)
hotel_ids = fields.Many2many( pms_property_ids = fields.Many2many(
'hotel.property', 'pms.property',
string='Hotels', string='Properties',
required=False, required=False,
ondelete='restrict') ondelete='restrict')
description = fields.Text('Description', translate=True) description = fields.Text('Description', translate=True)

View File

@@ -5,20 +5,20 @@ from odoo import models, fields, api, _
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
class HotelRoomType(models.Model): class PmsRoomType(models.Model):
""" Before creating a 'room type', you need to consider the following: """ 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 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... example, a Double Room, a Economic Room, an Apartment, a Tent, a Caravan...
""" """
_name = "hotel.room.type" _name = "pms.room.type"
_description = "Room Type" _description = "Room Type"
_inherits = {'product.product': 'product_id'} _inherits = {'product.product': 'product_id'}
_order = "sequence, code_type, name" _order = "sequence, code_type, name"
# Default methods # Default methods
@api.model @api.model
def _get_default_hotel(self): def _get_default_pms_property(self):
return self.env.user.hotel_id return self.env.user.pms_property_id
# Fields declaration # Fields declaration
product_id = fields.Many2one( product_id = fields.Many2one(
@@ -27,26 +27,26 @@ class HotelRoomType(models.Model):
required=True, required=True,
delegate=True, delegate=True,
ondelete='cascade') ondelete='cascade')
hotel_id = fields.Many2one( pms_property_id = fields.Many2one(
'hotel.property', 'pms.property',
'Hotel', 'Property',
required=True, required=True,
ondelete='restrict', ondelete='restrict',
default=_get_default_hotel,) default=_get_default_pms_property,)
room_ids = fields.One2many( room_ids = fields.One2many(
'hotel.room', 'pms.room',
'room_type_id', 'room_type_id',
'Rooms') 'Rooms')
class_id = fields.Many2one( class_id = fields.Many2one(
'hotel.room.type.class', 'pms.room.type.class',
'Hotel Type Class') 'Property Type Class')
board_service_room_type_ids = fields.One2many( board_service_room_type_ids = fields.One2many(
'hotel.board.service.room.type', 'pms.board.service.room.type',
'hotel_room_type_id', 'pms_room_type_id',
string='Board Services') string='Board Services')
room_amenity_ids = fields.Many2many( room_amenity_ids = fields.Many2many(
'hotel.amenity', 'pms.amenity',
'hotel_room_type_aminity_rel', 'pms_room_type_aminity_rel',
'room_type_ids', 'room_type_ids',
'amenity_ids', 'amenity_ids',
string='Room Type Amenities', string='Room Type Amenities',
@@ -60,8 +60,8 @@ class HotelRoomType(models.Model):
sequence = fields.Integer('Sequence', default=0) sequence = fields.Integer('Sequence', default=0)
_sql_constraints = [ _sql_constraints = [
('code_type_hotel_unique', 'unique(code_type, hotel_id)', ('code_type_pms_unique', 'unique(code_type, pms_property_id)',
'Room Type Code must be unique by Hotel!'), 'Room Type Code must be unique by Property!'),
] ]
# Constraints and onchanges # Constraints and onchanges
@@ -100,15 +100,15 @@ class HotelRoomType(models.Model):
Check the max availability for an specific Check the max availability for an specific
type of room in a range of dates 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) dto)
reservations_rooms = reservations.mapped('room_id.id') 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', reservations_rooms),
('id', 'not in', notthis) ('id', 'not in', notthis)
]) ])
if room_type_id: if room_type_id:
rooms_linked = self.env['hotel.room.type'].search([ rooms_linked = self.env['pms.room.type'].search([
('id', '=', room_type_id) ('id', '=', room_type_id)
]).room_ids ]).room_ids
free_rooms = free_rooms & rooms_linked free_rooms = free_rooms & rooms_linked
@@ -127,8 +127,8 @@ class HotelRoomType(models.Model):
""" """
vals = {} vals = {}
room_type_ids = kwargs.get('room_type_ids', False) room_type_ids = kwargs.get('room_type_ids', False)
room_types = self.env['hotel.room.type'].browse(room_type_ids) if \ room_types = self.env['pms.room.type'].browse(room_type_ids) if \
room_type_ids else self.env['hotel.room.type'].search([]) room_type_ids else self.env['pms.room.type'].search([])
date_from = kwargs.get('date_from', False) date_from = kwargs.get('date_from', False)
days = kwargs.get('days', False) days = kwargs.get('days', False)
discount = kwargs.get('discount', False) discount = kwargs.get('discount', False)
@@ -140,7 +140,7 @@ class HotelRoomType(models.Model):
'pricelist_id', 'pricelist_id',
partner.property_product_pricelist.id and partner.property_product_pricelist.id and
partner.property_product_pricelist.id or 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({ vals.update({
'partner_id': partner_id if partner_id else False, 'partner_id': partner_id if partner_id else False,
'discount': discount, 'discount': discount,
@@ -148,7 +148,7 @@ class HotelRoomType(models.Model):
rate_vals = {} rate_vals = {}
for room_type in room_types: for room_type in room_types:
vals.update({'room_type_id': room_type.id}) vals.update({'room_type_id': room_type.id})
room_vals = self.env['hotel.reservation'].\ room_vals = self.env['pms.reservation'].\
prepare_reservation_lines( prepare_reservation_lines(
date_from, date_from,
days, days,

View File

@@ -4,26 +4,26 @@
from odoo import models, fields 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: """ Before creating a 'room type_class', you need to consider the following:
With the term 'room type class' is meant a physical class of With the term 'room type class' is meant a physical class of
residential accommodation: for example, a Room, a Bed, an Apartment, residential accommodation: for example, a Room, a Bed, an Apartment,
a Tent, a Caravan... a Tent, a Caravan...
""" """
_name = "hotel.room.type.class" _name = "pms.room.type.class"
_description = "Room Type Class" _description = "Room Type Class"
_order = "sequence, name, code_class" _order = "sequence, name, code_class"
# Fields declaration # Fields declaration
name = fields.Char('Class Name', required=True, translate=True) name = fields.Char('Class Name', required=True, translate=True)
# Relationship between models # Relationship between models
hotel_ids = fields.Many2many( pms_property_ids = fields.Many2many(
'hotel.property', 'pms.property',
string='Hotels', string='Properties',
required=False, required=False,
ondelete='restrict') ondelete='restrict')
room_type_ids = fields.One2many( room_type_ids = fields.One2many(
'hotel.room.type', 'pms.room.type',
'class_id', 'class_id',
'Types') 'Types')
code_class = fields.Char('Code') code_class = fields.Char('Code')

View File

@@ -3,25 +3,25 @@
from odoo import models, fields, api from odoo import models, fields, api
class HotelRoomTypeRestriction(models.Model): class PmsRoomTypeRestriction(models.Model):
""" The hotel room type restriction is used as a daily restriction plan for room types """ The room type restriction is used as a daily restriction plan for room types
and therefore is related only with one hotel. """ and therefore is related only with one property. """
_name = 'hotel.room.type.restriction' _name = 'pms.room.type.restriction'
# Default methods # Default methods
@api.model @api.model
def _get_default_hotel(self): def _get_default_pms_property(self):
return self.env.user.hotel_id or None return self.env.user.pms_property_id or None
# Fields declaration # Fields declaration
name = fields.Char('Restriction Plan Name', required=True) name = fields.Char('Restriction Plan Name', required=True)
hotel_id = fields.Many2one( pms_property_id = fields.Many2one(
'hotel.property', 'pms.property',
'Hotel', 'Property',
ondelete='restrict', ondelete='restrict',
default=_get_default_hotel) default=_get_default_pms_property)
item_ids = fields.One2many( item_ids = fields.One2many(
'hotel.room.type.restriction.item', 'pms.room.type.restriction.item',
'restriction_id', 'restriction_id',
string='Restriction Items', string='Restriction Items',
copy=True) copy=True)

View File

@@ -4,14 +4,14 @@ from odoo import models, fields, api, _
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
class HotelRoomTypeRestrictionItem(models.Model): class PmsRoomTypeRestrictionItem(models.Model):
_name = 'hotel.room.type.restriction.item' _name = 'pms.room.type.restriction.item'
# Field Declarations # Field Declarations
restriction_id = fields.Many2one('hotel.room.type.restriction', restriction_id = fields.Many2one('pms.room.type.restriction',
'Restriction Plan', ondelete='cascade', 'Restriction Plan', ondelete='cascade',
index=True) 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') required=True, ondelete='cascade')
date = fields.Date('Date') date = fields.Date('Date')

View File

@@ -12,9 +12,9 @@ import logging
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
class HotelService(models.Model): class PmsService(models.Model):
_name = 'hotel.service' _name = 'pms.service'
_description = 'Hotel Services and its charges' _description = 'Services and its charges'
# Default methods # Default methods
@api.multi @api.multi
@@ -32,7 +32,7 @@ class HotelService(models.Model):
def _default_reservation_id(self): def _default_reservation_id(self):
if self.env.context.get('reservation_ids'): if self.env.context.get('reservation_ids'):
ids = [item[1] for item in self.env.context['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) (ids)], limit=1)
elif self.env.context.get('default_reservation_id'): elif self.env.context.get('default_reservation_id'):
return 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', ondelete='restrict',
required=True) required=True)
folio_id = fields.Many2one( folio_id = fields.Many2one(
'hotel.folio', 'pms.folio',
'Folio', 'Folio',
ondelete='cascade', ondelete='cascade',
default=_default_folio_id) default=_default_folio_id)
reservation_id = fields.Many2one( reservation_id = fields.Many2one(
'hotel.reservation', 'pms.reservation',
'Room', 'Room',
default=_default_reservation_id) default=_default_reservation_id)
service_line_ids = fields.One2many( service_line_ids = fields.One2many(
'hotel.service.line', 'pms.service.line',
'service_id') 'service_id')
company_id = fields.Many2one( company_id = fields.Many2one(
related='folio_id.company_id', related='folio_id.company_id',
string='Company', string='Company',
store=True, store=True,
readonly=True) readonly=True)
hotel_id = fields.Many2one( pms_property_id = fields.Many2one(
'hotel.property', 'pms.property',
store=True, store=True,
readonly=True, readonly=True,
related='folio_id.hotel_id') related='folio_id.pms_property_id')
tax_ids = fields.Many2many( tax_ids = fields.Many2many(
'account.tax', 'account.tax',
string='Taxes', string='Taxes',
@@ -233,7 +233,7 @@ class HotelService(models.Model):
Compute the amounts of the service line. Compute the amounts of the service line.
""" """
for record in self: 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')) self.env.context.get('default_folio_id'))
reservation = record.reservation_id or self.env.context.get( reservation = record.reservation_id or self.env.context.get(
'reservation_id') 'reservation_id')
@@ -280,7 +280,7 @@ class HotelService(models.Model):
if record.per_day and record.reservation_id: if record.per_day and record.reservation_id:
product = record.product_id product = record.product_id
if self.env.context.get('default_reservation_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') self.env.context.get('default_reservation_id')
) )
else: else:
@@ -339,9 +339,9 @@ class HotelService(models.Model):
# Action methods # Action methods
@api.multi @api.multi
def open_service_ids(self): 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'] = [ 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['res_id'] = self.id
action['target'] = 'new' action['target'] = 'new'
return action return action
@@ -357,14 +357,14 @@ class HotelService(models.Model):
('reservation_id.name', operator, name), ('reservation_id.name', operator, name),
('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) name='', args=args, operator='ilike', limit=limit)
@api.model @api.model
def create(self, vals): def create(self, vals):
vals.update(self._prepare_add_missing_fields(vals)) vals.update(self._prepare_add_missing_fields(vals))
if self.compute_lines_out_vals(vals): if self.compute_lines_out_vals(vals):
reservation = self.env['hotel.reservation'].browse( reservation = self.env['pms.reservation'].browse(
vals['reservation_id']) vals['reservation_id'])
product = self.env['product.product'].browse(vals['product_id']) product = self.env['product.product'].browse(vals['product_id'])
if reservation.splitted: if reservation.splitted:
@@ -384,7 +384,7 @@ class HotelService(models.Model):
old_day_lines=False, old_day_lines=False,
consumed_on=product.consumed_on, consumed_on=product.consumed_on,
)) ))
record = super(HotelService, self).create(vals) record = super(PmsService, self).create(vals)
return record return record
@api.multi @api.multi
@@ -400,7 +400,7 @@ class HotelService(models.Model):
}) })
else: else:
for record in self: for record in self:
reservations = self.env['hotel.reservation'] reservations = self.env['pms.reservation']
reservation = reservations.browse(vals['reservation_id']) \ reservation = reservations.browse(vals['reservation_id']) \
if 'reservation_id' in vals else record.reservation_id if 'reservation_id' in vals else record.reservation_id
if reservation.splitted: if reservation.splitted:
@@ -420,7 +420,7 @@ class HotelService(models.Model):
old_line_days=self.service_line_ids, old_line_days=self.service_line_ids,
consumed_on=product.consumed_on, consumed_on=product.consumed_on,
)) ))
res = super(HotelService, self).write(vals) res = super(PmsService, self).write(vals)
return res return res
# Business methods # Business methods
@@ -457,7 +457,7 @@ class HotelService(models.Model):
def _compute_tax_ids(self): def _compute_tax_ids(self):
for record in self: for record in self:
# If company_id is set, always filter taxes by the company # 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')) self.env.context.get('default_folio_id'))
reservation = record.reservation_id or self.env.context.get( reservation = record.reservation_id or self.env.context.get(
'reservation_id') 'reservation_id')
@@ -512,16 +512,16 @@ class HotelService(models.Model):
if reservation and self.is_board_service: if reservation and self.is_board_service:
board_room_type = reservation.board_service_room_id board_room_type = reservation.board_service_room_id
if board_room_type.price_type == 'fixed': 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([ search([
('hotel_board_service_room_type_id', ('pms_board_service_room_type_id',
'=', board_room_type.id), '=', board_room_type.id),
('product_id', '=', self.product_id.id)]).amount ('product_id', '=', self.product_id.id)]).amount
else: else:
return (reservation.price_total * return (reservation.price_total *
self.env['hotel.board.service.room.type.line']. self.env['pms.board.service.room.type.line'].
search([ search([
('hotel_board_service_room_type_id', ('pms_board_service_room_type_id',
'=', board_room_type.id), '=', board_room_type.id),
('product_id', '=', self.product_id.id)]) ('product_id', '=', self.product_id.id)])
.amount) / 100 .amount) / 100

View File

@@ -5,13 +5,13 @@ from odoo import models, fields, api, _
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
class HotelServiceLine(models.Model): class PmsServiceLine(models.Model):
_name = "hotel.service.line" _name = "pms.service.line"
_order = "date" _order = "date"
# Fields declaration # Fields declaration
service_id = fields.Many2one( service_id = fields.Many2one(
'hotel.service', 'pms.service',
string='Service Room', string='Service Room',
ondelete='cascade', ondelete='cascade',
required=True, required=True,
@@ -24,11 +24,11 @@ class HotelServiceLine(models.Model):
string='Taxes', string='Taxes',
related="service_id.tax_ids", related="service_id.tax_ids",
readonly="True") readonly="True")
hotel_id = fields.Many2one( pms_property_id = fields.Many2one(
'hotel.property', 'pms.property',
store=True, store=True,
readonly=True, readonly=True,
related='service_id.hotel_id') related='service_id.pms_property_id')
date = fields.Date('Date') date = fields.Date('Date')
day_qty = fields.Integer('Units') day_qty = fields.Integer('Units')
price_total = fields.Float( price_total = fields.Float(
@@ -73,7 +73,7 @@ class HotelServiceLine(models.Model):
for record in self: for record in self:
limit = record.product_id.daily_limit limit = record.product_id.daily_limit
if limit > 0: 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), ('product_id', '=', record.product_id.id),
('date', '=', record.date), ('date', '=', record.date),
('service_id', '!=', record.service_id.id) ('service_id', '!=', record.service_id.id)

View File

@@ -6,32 +6,32 @@ from odoo import models, fields, api, _
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
class HotelSharedRoom(models.Model): class PmsSharedRoom(models.Model):
_name = 'hotel.shared.room' _name = 'pms.shared.room'
_description = 'Hotel Shared Room' _description = 'Shared Room'
_order = "room_type_id, name" _order = "room_type_id, name"
# Fields declaration # Fields declaration
name = fields.Char('Room Name', required=True) name = fields.Char('Room Name', required=True)
room_type_id = fields.Many2one( room_type_id = fields.Many2one(
'hotel.room.type', 'pms.room.type',
'Hotel Room Type', 'Room Type',
required=True, required=True,
ondelete='restrict', ondelete='restrict',
domain=[('shared_room', '=', True)] domain=[('shared_room', '=', True)]
) )
hotel_id = fields.Many2one( pms_property_id = fields.Many2one(
'hotel.property', 'pms.property',
store=True, store=True,
readonly=True, readonly=True,
related='room_type_id.hotel_id') related='room_type_id.pms_property_id')
floor_id = fields.Many2one( floor_id = fields.Many2one(
'hotel.floor', 'pms.floor',
'Ubication', 'Ubication',
ondelete='restrict', ondelete='restrict',
help='At which floor the room is located.') help='At which floor the room is located.')
bed_ids = fields.One2many( bed_ids = fields.One2many(
'hotel.room', 'pms.room',
'shared_room_id', 'shared_room_id',
readonly=True, readonly=True,
ondelete='restrict',) ondelete='restrict',)
@@ -56,7 +56,7 @@ class HotelSharedRoom(models.Model):
"If you want to eliminate beds in the \ "If you want to eliminate beds in the \
room you must deactivate the beds from your form")) room you must deactivate the beds from your form"))
beds = [] beds = []
inactive_beds = self.env['hotel.room'].search([ inactive_beds = self.env['pms.room'].search([
('active', '=', False), ('active', '=', False),
('shared_room_id', '=', self.id) ('shared_room_id', '=', self.id)
]) ])

View File

@@ -4,10 +4,10 @@
<report <report
id="action_report_folio" id="action_report_folio"
string="Folio" string="Folio"
model="hotel.folio" model="pms.folio"
report_type="qweb-pdf" report_type="qweb-pdf"
file="hotel.report_folio" file="pms.report_folio"
name="hotel.report_folio" name="pms.report_folio"
print_report_name="(object.state in ('draft', 'sent') and 'Quotation - %s' % (object.name)) or 'Order - %s' % (object.name)" print_report_name="(object.state in ('draft', 'sent') and 'Quotation - %s' % (object.name)) or 'Order - %s' % (object.name)"
/> />
</data> </data>

View File

@@ -224,7 +224,7 @@
<template id="report_folio"> <template id="report_folio">
<t t-call="web.html_container"> <t t-call="web.html_container">
<t t-foreach="docs" t-as="doc"> <t t-foreach="docs" t-as="doc">
<t t-call="hotel.report_folio_document" t-lang="doc.partner_id.lang"/> <t t-call="pms.report_folio_document" t-lang="doc.partner_id.lang"/>
</t> </t>
</t> </t>
</template> </template>

View File

@@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 user_access_pms_floor user_access_pms_floor model_pms_floor pms.group_pms_user 1 0 0 0
3 user_access_pms_amenity user_access_pms_amenity model_pms_amenity pms.group_pms_user 1 0 0 0
4 user_access_pms_amenity_type user_access_pms_amenity_type model_pms_amenity_type pms.group_pms_user 1 0 0 0
5 user_access_pms_service user_access_pms_service model_pms_service pms.group_pms_user 1 1 1 1
6 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
7 user_access_pms_reservation_line user_access_pms_reservation_line model_pms_reservation_line pms.group_pms_user 1 1 1 1
8 user_access_room_closure_reason user_access_room_closure_reason model_room_closure_reason pms.group_pms_user 1 0 0 0
9 user_access_pms_service_line user_access_pms_service_line model_pms_service_line pms.group_pms_user 1 1 1 1
10 user_access_pms_board_service user_access_pms_board_service model_pms_board_service pms.group_pms_user 1 0 0 0
11 user_access_pms_checkin_partner user_access_pms_checkin_partner model_pms_checkin_partner pms.group_pms_user 1 1 1 1
12 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
13 user_access_pms_room user_access_pms_room model_pms_room pms.group_pms_user 1 0 0 0
14 user_access_shared_pms_room user_access_pms_shared_room model_pms_shared_room pms.group_pms_user 1 0 0 0
15 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
16 user_access_pms_reservation user_access_pms_reservation model_pms_reservation pms.group_pms_user 1 1 1 1
17 user_access_pms_folio user_access_pms_folio model_pms_folio pms.group_pms_user 1 1 1 1
18 user_access_pms_room_type user_access_pms_room_type model_pms_room_type pms.group_pms_user 1 0 0 0
19 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
20 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
21 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
22 user_access_account_partial_reconcile user_access_account_partial_reconcile account.model_account_partial_reconcile pms.group_pms_user 1 1 1 1
23 user_access_pms_cancelation_rule user_access_pms_cancelation_rule model_pms_cancelation_rule pms.group_pms_user 1 0 0 0
24 user_access_account_full_reconcile user_access_account_full_reconcile account.model_account_full_reconcile pms.group_pms_user 1 1 1 1
25 manager_access_pms_floor manager_access_pms_floor model_pms_floor pms.group_pms_manager 1 1 1 1
26 manager_access_pms_amenity manager_access_pms_amenity model_pms_amenity pms.group_pms_manager 1 1 1 1
27 manager_access_pms_amenity_type manager_access_pms_amenity_type model_pms_amenity_type pms.group_pms_manager 1 1 1 1
28 manager_access_pms_service manager_access_pms_service model_pms_service pms.group_pms_manager 1 1 1 1
29 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
30 manager_access_pms_reservation_line manager_access_pms_reservation_line model_pms_reservation_line pms.group_pms_manager 1 1 1 1
31 manager_access_room_closure_reason manager_access_room_closure_reason model_room_closure_reason pms.group_pms_manager 1 1 1 1
32 manager_access_pms_service_line manager_access_pms_service_line model_pms_service_line pms.group_pms_manager 1 1 1 1
33 manager_access_pms_board_service manager_access_pms_board_service model_pms_board_service pms.group_pms_manager 1 1 1 1
34 manager_access_pms_checkin_partner manager_access_pms_checkin_partner model_pms_checkin_partner pms.group_pms_manager 1 1 1 1
35 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
36 manager_access_pms_room manager_access_pms_room model_pms_room pms.group_pms_manager 1 1 1 1
37 manager_access_pms_shared_room manager_access_pms_shared_room model_pms_shared_room pms.group_pms_manager 1 1 1 1
38 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
39 manager_access_pms_reservation manager_access_pms_reservation model_pms_reservation pms.group_pms_manager 1 1 1 1
40 manager_access_pms_folio manager_access_pms_folio model_pms_folio pms.group_pms_manager 1 1 1 1
41 manager_access_pms_room_type manager_access_pms_room_type model_pms_room_type pms.group_pms_manager 1 1 1 1
42 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
43 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
44 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
45 manager_access_pms_cancelation_rule manager_access_pms_cancelation_rule model_pms_cancelation_rule base.group_user 1 1 1 1
46 call_access_pms_floor call_access_pms_floor model_pms_floor pms.group_pms_call 1 0 0 0
47 call_access_pms_amenity call_access_pms_amenity model_pms_amenity pms.group_pms_call 1 0 0 0
48 call_access_pms_amenity_type call_access_pms_amenity_type model_pms_amenity_type pms.group_pms_call 1 0 0 0
49 call_access_pms_service call_access_pms_service model_pms_service pms.group_pms_call 1 1 1 1
50 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
51 call_access_pms_reservation_line call_access_pms_reservation_line model_pms_reservation_line pms.group_pms_call 1 1 1 1
52 call_access_room_closure_reason call_access_room_closure_reason model_room_closure_reason pms.group_pms_call 1 0 0 0
53 call_access_pms_service_line call_access_pms_service_line model_pms_service_line pms.group_pms_call 1 1 1 1
54 call_access_pms_board_service call_access_pms_board_service model_pms_board_service pms.group_pms_call 1 0 0 0
55 call_access_pms_checkin_partner call_access_pms_checkin_partner model_pms_checkin_partner pms.group_pms_call 1 1 1 1
56 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
57 call_access_pms_room call_access_pms_room model_pms_room pms.group_pms_call 1 0 0 0
58 call_access_pms_shared_room call_access_pms_shared_room model_pms_shared_room pms.group_pms_call 1 0 0 0
59 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
60 call_access_pms_reservation call_access_pms_reservation model_pms_reservation pms.group_pms_call 1 1 1 1
61 call_access_pms_folio call_access_pms_folio model_pms_folio pms.group_pms_call 1 1 1 1
62 call_access_pms_room_type call_access_pms_room_type model_pms_room_type pms.group_pms_call 1 0 0 0
63 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
64 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
65 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
66 call_access_pms_cancelation_rule call_access_pms_cancelation_rule model_pms_cancelation_rule base.group_user 1 0 0 0

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<!--Group for pms user -->
<record id="group_pms_user" model="res.groups">
<field name="name">Property Management / User</field>
</record>
<!--Group for pms manager -->
<record id="group_pms_manager" model="res.groups">
<field name="name">Property Management/ Manager</field>
<field name="implied_ids" eval="[(4, ref('pms.group_pms_user'))]"/>
</record>
<!--Group for pms user -->
<record id="group_pms_call" model="res.groups">
<field name="name">Property Management / CallCenter</field>
</record>
</data>
</odoo>

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -1,7 +1,7 @@
odoo.define('hotel.ListController', function(require) { odoo.define('pms.ListController', function(require) {
'use strict'; 'use strict';
/* /*
* Hotel * Pms
* GNU Public License * GNU Public License
* Alexandre Díaz <dev@redneboa.es> * Alexandre Díaz <dev@redneboa.es>
*/ */
@@ -16,10 +16,10 @@ ListController.include({
renderButtons: function () { renderButtons: function () {
this._super.apply(this, arguments); // Sets this.$buttons this._super.apply(this, arguments); // Sets this.$buttons
var self = this; var self = this;
if (this.modelName === 'hotel.reservation') { if (this.modelName === 'pms.reservation') {
this.$buttons.append("<button class='btn btn-sm oe_open_reservation_wizard oe_highlight' type='button'>"+_t('Open Wizard')+"</button>"); this.$buttons.append("<button class='btn btn-sm oe_open_reservation_wizard oe_highlight' type='button'>"+_t('Open Wizard')+"</button>");
this.$buttons.find('.oe_open_reservation_wizard').on('click', function(){ this.$buttons.find('.oe_open_reservation_wizard').on('click', function(){
self.do_action('hotel.open_wizard_reservations'); self.do_action('pms.open_wizard_reservations');
}); });
} }
} }

View File

@@ -1,4 +1,4 @@
odoo.define('hotel.SwitchHotelMenu', function(require) { odoo.define('pms.SwitchPmsMenu', function(require) {
"use strict"; "use strict";
var config = require('web.config'); var config = require('web.config');
@@ -9,11 +9,11 @@ var Widget = require('web.Widget');
var _t = core._t; var _t = core._t;
var SwitchHotelMenu = Widget.extend({ var SwitchPmsMenu = Widget.extend({
template: 'hotel.SwitchHotelMenu', template: 'pms.SwitchPmsMenu',
willStart: function() { willStart: function() {
this.isMobile = config.device.isMobile; this.isMobile = config.device.isMobile;
if (!session.user_hotels) { if (!session.user_pmss) {
return $.Deferred().reject(); return $.Deferred().reject();
} }
return this._super(); return this._super();
@@ -22,40 +22,40 @@ var SwitchHotelMenu = Widget.extend({
var self = this; var self = this;
this.$el.on('click', '.dropdown-menu li a[data-menu]', _.debounce(function(ev) { this.$el.on('click', '.dropdown-menu li a[data-menu]', _.debounce(function(ev) {
ev.preventDefault(); ev.preventDefault();
var hotel_id = $(ev.currentTarget).data('hotel-id'); var pms_property_id = $(ev.currentTarget).data('property-id');
self._rpc({ self._rpc({
model: 'res.users', model: 'res.users',
method: 'write', method: 'write',
args: [[session.uid], {'hotel_id': hotel_id}], args: [[session.uid], {'pms_property_id': pms_property_id}],
}) })
.then(function() { .then(function() {
location.reload(); location.reload();
}); });
}, 1500, true)); }, 1500, true));
var hotels_list = ''; var properties_list = '';
if (this.isMobile) { if (this.isMobile) {
hotels_list = '<li class="bg-info">' + _t('Tap on the list to change hotel') + '</li>'; propertiess_list = '<li class="bg-info">' + _t('Tap on the list to change property') + '</li>';
} }
else { 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 = ''; var a = '';
if (hotel[0] === session.user_hotels.current_hotel[0]) { if (property[0] === session.user_properties.current_property[0]) {
a = '<i class="fa fa-check mr8"></i>'; a = '<i class="fa fa-check mr8"></i>';
} else { } else {
a = '<span class="mr24"/>'; a = '<span class="mr24"/>';
} }
hotels_list += '<li><a href="#" data-menu="hotel" data-hotel-id="' + hotel[0] + '">' + a + hotel[1] + '</a></li>'; properties_list += '<li><a href="#" data-menu="property" data-property-id="' + property[0] + '">' + a + property[1] + '</a></li>';
}); });
self.$('.dropdown-menu').html(hotels_list); self.$('.dropdown-menu').html(properties_list);
return this._super(); return this._super();
}, },
}); });
SystrayMenu.Items.push(SwitchHotelMenu); SystrayMenu.Items.push(SwitchPmsMenu);
return SwitchHotelMenu; return SwitchPmsMenu;
}); });

View File

@@ -1,6 +1,6 @@
<template> <template>
<t t-name="hotel.SwitchHotelMenu"> <t t-name="pms.SwitchPmsMenu">
<li class="o_switch_company_menu"> <li class="o_switch_company_menu">
<a class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false" href="#"> <a class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false" href="#">
<span t-attf-class="#{widget.isMobile ? 'fa fa-building-o' : 'oe_topbar_name'}"/> <span class="caret"/> <span t-attf-class="#{widget.isMobile ? 'fa fa-building-o' : 'oe_topbar_name'}"/> <span class="caret"/>

View File

@@ -3,21 +3,21 @@
<data noupdate="0"> <data noupdate="0">
<template id="template_header"> <template id="template_header">
<h1 t-field="object.hotel_id.name" /> <h1 t-field="object.pms_property_id.name" />
<div class="row"> <div class="row">
<div class="col-sm-4"> <div class="col-sm-4">
<t t-esc="object.hotel_id.street" /> <t t-esc="object.pms_property_id.street" />
<t t-if="object.hotel_id.street2" >- <t t-esc="object.hotel_id.street2" /></t> <br /> <t t-if="object.pms_property_id.street2" >- <t t-esc="object.pms_property_id.street2" /></t> <br />
<t t-esc="object.hotel_id.zip" /> <t t-esc="object.pms_property_id.zip" />
<t t-esc="object.hotel_id.city" />, <t t-esc="object.pms_property_id.city" />,
<t t-esc="object.hotel_id.state_id.name" /> <br /> <t t-esc="object.pms_property_id.state_id.name" /> <br />
<t t-esc="object.hotel_id.country_id.name" /> <t t-esc="object.pms_property_id.country_id.name" />
</div> </div>
<div class="col-sm-4"> <div class="col-sm-4">
<i class="glyphicon glyphicon-phone-alt" /> <t t-esc="object.hotel_id.phone" /> <br /> <i class="glyphicon glyphicon-phone-alt" /> <t t-esc="object.pms_property_id.phone" /> <br />
<i class="glyphicon glyphicon-envelope" /> <t t-esc="object.hotel_id.email" /> <br /> <i class="glyphicon glyphicon-envelope" /> <t t-esc="object.pms_property_id.email" /> <br />
<i class="glyphicon glyphicon-home" /> <t t-esc="object.hotel_id.website" /> <br /> <i class="glyphicon glyphicon-home" /> <t t-esc="object.pms_property_id.website" /> <br />
</div> </div>
</div> </div>
</template> </template>
@@ -62,12 +62,12 @@
</div> </div>
</div> </div>
<t t-call="hotel.template_reservation_details"/> <t t-call="pms.template_reservation_details"/>
<div class="row" style="padding-top: 20px;"> <div class="row" style="padding-top: 20px;">
<div class="col-sm-12"> <div class="col-sm-12">
If you have any questions, please do not hesitate to contact with the hotel's staff. <br/> If you have any questions, please do not hesitate to contact with the property's staff. <br/>
Looking forward to seeing you at our hotel, <br /> Looking forward to seeing you at our property, <br />
Best regards. Best regards.
</div> </div>
</div> </div>
@@ -76,13 +76,13 @@
<template id="template_footer"> <template id="template_footer">
<div class="row" style="padding-top: 20px;"> <div class="row" style="padding-top: 20px;">
<div class="col-sm-12"> <div class="col-sm-12">
Privacy Policy: We use your Personal Information only for managing your reservation. By using the hotel, you Privacy Policy: We use your Personal Information only for managing your reservation. By using the property, you
agree to the collection and use of information in accordance with this policy. agree to the collection and use of information in accordance with this policy.
</div> </div>
</div> </div>
</template> </template>
<template id="template_reservation_confirmed" name="Hotel Reservation Confirmed"> <template id="template_reservation_confirmed" name="Property Reservation Confirmed">
<t t-call="web.layout"> <t t-call="web.layout">
<t t-set="head"> <t t-set="head">
<!-- TODO: ensure bootstrap in shipped within the email --> <!-- TODO: ensure bootstrap in shipped within the email -->
@@ -92,25 +92,25 @@
</t> </t>
<t t-set="body_classname" t-value="'container'"/> <t t-set="body_classname" t-value="'container'"/>
<div class="container"> <div class="container">
<t t-call="hotel.template_header"/> <t t-call="pms.template_header"/>
<t t-call="hotel.template_reservation"/> <t t-call="pms.template_reservation"/>
<t t-call="hotel.template_footer"/> <t t-call="pms.template_footer"/>
</div> </div>
</t> </t>
</template> </template>
<!-- notify customer that reservation has been confirmed --> <!-- notify customer that reservation has been confirmed -->
<record id="email_template_reservation" model="mail.template"> <record id="email_template_reservation" model="mail.template">
<field name="name">Hotel: Reservation Confirmed</field> <field name="name">Property: Reservation Confirmed</field>
<field name="model_id" ref="hotel.model_hotel_folio"/> <field name="model_id" ref="pms.model_pms_folio"/>
<field name="email_from">${('%s &lt;%s&gt;' % (object.hotel_id.partner_id.name, object.hotel_id.partner_id.email) or '')|safe}</field> <field name="email_from">${('%s &lt;%s&gt;' % (object.pms_property_id.partner_id.name, object.pms_property_id.partner_id.email) or '')|safe}</field>
<field name="email_to">${(object.email or '')|safe}</field> <field name="email_to">${(object.email or '')|safe}</field>
<field name="partner_to">${(object.partner_id.id or '')}</field> <field name="partner_to">${(object.partner_id.id or '')}</field>
<field name="lang">${object.partner_id.lang}</field> <field name="lang">${object.partner_id.lang}</field>
<field name="subject">Your reservation ${object.name} has been confirmed by the hotel staff</field> <field name="subject">Your reservation ${object.name} has been confirmed by the property staff</field>
<field name="auto_delete" eval="True"/> <field name="auto_delete" eval="True"/>
<field name="body_type">qweb</field> <field name="body_type">qweb</field>
<field name="body_view_id" ref="hotel.template_reservation_confirmed"/> <field name="body_view_id" ref="pms.template_reservation_confirmed"/>
</record> </record>
</data> </data>

View File

@@ -4,7 +4,7 @@
<!-- Backend stuff --> <!-- Backend stuff -->
<template id="assets_backend" inherit_id="web.assets_backend"> <template id="assets_backend" inherit_id="web.assets_backend">
<xpath expr="." position="inside"> <xpath expr="." position="inside">
<script type="text/javascript" src="/hotel/static/src/js/views/list/list_controller.js"></script> <script type="text/javascript" src="/pms/static/src/js/views/list/list_controller.js"></script>
</xpath> </xpath>
</template> </template>

View File

@@ -8,7 +8,7 @@
<xpath expr="//field[@name='date_invoice']" position="after"> <xpath expr="//field[@name='date_invoice']" position="after">
<field name="folio_ids" widget="many2many_tags"/> <field name="folio_ids" widget="many2many_tags"/>
<field name="from_folio" invisible="1" /> <field name="from_folio" invisible="1" />
<field name="hotel_id" invisible="1"/> <field name="pms_property_id" invisible="1"/>
</xpath> </xpath>
<xpath expr="//button[@name='%(account.action_account_invoice_payment)d']" position="attributes"> <xpath expr="//button[@name='%(account.action_account_invoice_payment)d']" position="attributes">
<attribute name="attrs">{'invisible': ['|',('from_folio','=',True)]}</attribute> <attribute name="attrs">{'invisible': ['|',('from_folio','=',True)]}</attribute>

View File

@@ -7,7 +7,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//field[@name='country_group_ids']" position="before"> <xpath expr="//field[@name='country_group_ids']" position="before">
<field name="hotel_ids" widget="many2many_tags" <field name="pms_property_ids" widget="many2many_tags"
options="{'no_create': True,'no_open': True}"/> options="{'no_create': True,'no_open': True}"/>
<field name="pricelist_type" /> <field name="pricelist_type" />
<field name="cancelation_rule_id" /> <field name="cancelation_rule_id" />
@@ -18,6 +18,6 @@
<menuitem name="Pricelist" id="pricelist_menu" <menuitem name="Pricelist" id="pricelist_menu"
action="product.product_pricelist_action2" sequence="22" action="product.product_pricelist_action2" sequence="22"
parent="hotel.configuration_others" /> parent="pms.configuration_others" />
</odoo> </odoo>

View File

@@ -7,10 +7,10 @@
<field name="inherit_id" ref="product.product_template_form_view" /> <field name="inherit_id" ref="product.product_template_form_view" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//page[@name='sales']" position="before"> <xpath expr="//page[@name='sales']" position="before">
<page string="Hotel Service"> <page string="Service">
<group colspan="4"> <group colspan="4">
<group> <group>
<field name="hotel_ids" widget="many2many_tags" <field name="pms_property_ids" widget="many2many_tags"
options="{'no_create': True,'no_open': True}"/> options="{'no_create': True,'no_open': True}"/>
<field name="is_extra_bed" /> <field name="is_extra_bed" />
<field name="daily_limit" /> <field name="daily_limit" />

View File

@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<odoo> <odoo>
<record id="hotel_partner_reservations" model="ir.actions.act_window"> <record id="pms_partner_reservations" model="ir.actions.act_window">
<field name="name">Reservations</field> <field name="name">Reservations</field>
<field name="res_model">hotel.reservation</field> <field name="res_model">pms.reservation</field>
<field name="domain">[('partner_id', '=',active_id)]</field> <field name="domain">[('partner_id', '=',active_id)]</field>
</record> </record>
<record id="hotel_partner_folios" model="ir.actions.act_window"> <record id="pms_partner_folios" model="ir.actions.act_window">
<field name="name">Folios</field> <field name="name">Folios</field>
<field name="res_model">hotel.folio</field> <field name="res_model">pms.folio</field>
<field name="domain">[('partner_id', '=',active_id)]</field> <field name="domain">[('partner_id', '=',active_id)]</field>
</record> </record>
@@ -21,12 +21,12 @@
<xpath expr='//div[@name="button_box"]' position='inside'> <xpath expr='//div[@name="button_box"]' position='inside'>
<button class="oe_stat_button" type="action" icon="fa-bed" <button class="oe_stat_button" type="action" icon="fa-bed"
name="%(hotel.hotel_partner_reservations)d" name="%(pms.pms_partner_reservations)d"
help="Reservations related with this contact"> help="Reservations related with this contact">
<field string="Reservations" name="reservations_count" widget="statinfo"/> <field string="Reservations" name="reservations_count" widget="statinfo"/>
</button> </button>
<button class="oe_stat_button" type="action" icon="fa-file" <button class="oe_stat_button" type="action" icon="fa-file"
name="%(hotel.hotel_partner_folios)d" name="%(pms.pms_partner_folios)d"
help="Folios related with this contact"> help="Folios related with this contact">
<field string="Folios" name="folios_count" widget="statinfo"/> <field string="Folios" name="folios_count" widget="statinfo"/>
</button> </button>
@@ -39,7 +39,7 @@
</field> </field>
</record> </record>
<menuitem name="Customers" id="menu_hotel_customer" <menuitem name="Customers" id="menu_pms_customer"
action="base.action_partner_form" sequence="500" action="base.action_partner_form" sequence="500"
parent="menu_all_folio"/> parent="menu_all_folio"/>

View File

@@ -6,9 +6,9 @@
<field name="inherit_id" ref="base.view_users_form" /> <field name="inherit_id" ref="base.view_users_form" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//page[@name='access_rights']/group" position="after"> <xpath expr="//page[@name='access_rights']/group" position="after">
<group string="Multi Hotels"> <group string="Multi Properties">
<field string="Allowed Hotels" name="hotel_ids" widget="many2many_tags"/> <field string="Allowed Properties" name="pms_property_ids" widget="many2many_tags"/>
<field string="Current Hotel" name="hotel_id" context="{'user_preference': 0}"/> <field string="Current Property" name="pms_property_id" context="{'user_preference': 0}"/>
</group> </group>
</xpath> </xpath>
</field> </field>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<template id="assets_backend" name="pms assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/pms/static/src/js/widgets/switch_pms_menu.js"></script>
</xpath>
</template>
</data>
</odoo>

View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--==== Amenities Type ==== -->
<!-- Form view of pms room amenities type -->
<record model="ir.ui.view" id="pms_room_amenity_type_view_form">
<field name="name">pms.room_amenity_type_form</field>
<field name="model">pms.amenity.type</field>
<field name="arch" type="xml">
<form string="Room Amenities Type">
<sheet>
<group>
<field name="name" string="Amenity Type" />
<field name="pms_property_ids" widget="many2many_tags"
options="{'no_create': True,'no_open': True}"/>
<!-- <field name="parent_id" domain="[('isamenitytype','=',True)]" /> -->
<!-- <field name="isamenitytype" invisible="1" /> -->
</group>
</sheet>
</form>
</field>
</record>
<!-- Tree view of pms room amenities type -->
<record model="ir.ui.view" id="pms_room_amenity_type_view_list">
<field name="name">pms.room_amenity_type_list</field>
<field name="model">pms.amenity.type</field>
<field name="arch" type="xml">
<tree string="Room Amenities Type">
<field name="name" />
</tree>
</field>
</record>
<!-- Action for pms room amenities type -->
<record model="ir.actions.act_window" id="action_pms_room_amenity_type_view_form">
<field name="name">Room amenity Type</field>
<field name="res_model">pms.amenity.type</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem name="Amenity Types"
id="menu_action_pms_room_amenity_type_view_form" action="action_pms_room_amenity_type_view_form"
sequence="3" parent="pms.menu_amenity" />
</odoo>

View File

@@ -2,12 +2,12 @@
<odoo> <odoo>
<!--===== Room Amenities ===== --> <!--===== Room Amenities ===== -->
<!-- Form view of hotel room amenities --> <!-- Form view of pms room amenities -->
<record id="hotel_amenity_view_form" model="ir.ui.view"> <record id="pms_amenity_view_form" model="ir.ui.view">
<field name="name">hotel.amenity.form</field> <field name="name">pms.amenity.form</field>
<field name="model">hotel.amenity</field> <field name="model">pms.amenity</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Hotel Room Amenities"> <form string="Room Amenities">
<sheet> <sheet>
<h1> <h1>
<label string="Amenity" /> <label string="Amenity" />
@@ -19,7 +19,7 @@
<notebook> <notebook>
<page string="Information"> <page string="Information">
<group colspan="4" col="4"> <group colspan="4" col="4">
<field name="hotel_ids" widget="many2many_tags" <field name="pms_property_ids" widget="many2many_tags"
options="{'no_create': True,'no_open': True}"/> options="{'no_create': True,'no_open': True}"/>
<field name="room_amenity_type_id" select="2" string="Amenity Type" /> <field name="room_amenity_type_id" select="2" string="Amenity Type" />
<!-- <field name="categ_id" select="1" <!-- <field name="categ_id" select="1"
@@ -64,12 +64,12 @@
</field> </field>
</record> </record>
<!-- Search view of hotel room amenities --> <!-- Search view of pms room amenities -->
<record model="ir.ui.view" id="hotel_amenity_search"> <record model="ir.ui.view" id="pms_amenity_search">
<field name="name">hotel.room_amenity_search</field> <field name="name">pms.room_amenity_search</field>
<field name="model">hotel.amenity</field> <field name="model">pms.amenity</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Hotel Room Amenities"> <search string="Room Amenities">
<field name="name" /> <field name="name" />
<field name="room_amenity_type_id" select="1" /> <field name="room_amenity_type_id" select="1" />
<!-- <field name="list_price" string="ty rate" /> --> <!-- <field name="list_price" string="ty rate" /> -->
@@ -83,12 +83,12 @@
</field> </field>
</record> </record>
<!-- Tree view of hotel room amenities --> <!-- Tree view of pms room amenities -->
<record model="ir.ui.view" id="hotel_amenity_view_list"> <record model="ir.ui.view" id="pms_amenity_view_list">
<field name="name">hotel.room_amenity_list</field> <field name="name">pms.room_amenity_list</field>
<field name="model">hotel.amenity</field> <field name="model">pms.amenity</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="Hotel Room Amenities"> <tree string="Room Amenities">
<field name="name" /> <field name="name" />
<field name="room_amenity_type_id" select="1" /> <field name="room_amenity_type_id" select="1" />
<!-- <field name="list_price" string="Ty rate" invisible="1" /> --> <!-- <field name="list_price" string="Ty rate" invisible="1" /> -->
@@ -96,25 +96,25 @@
</field> </field>
</record> </record>
<!-- Action for hotel room amenities --> <!-- Action for pms room amenities -->
<record model="ir.actions.act_window" id="action_hotel_room_amenity_view_form"> <record model="ir.actions.act_window" id="action_pms_room_amenity_view_form">
<field name="name">Hotel Room Amenities</field> <field name="name">Room Amenities</field>
<field name="res_model">hotel.amenity</field> <field name="res_model">pms.amenity</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
<field name="view_id" ref="hotel_amenity_view_list" /> <field name="view_id" ref="pms_amenity_view_list" />
</record> </record>
<menuitem id="menu_amenity" name="Amenity" <menuitem id="menu_amenity" name="Amenity"
parent="hotel.hotel_configuration_menu" sequence="2" /> parent="pms.pms_configuration_menu" sequence="2" />
<menuitem name="Amenities" id="menu_action_hotel_room_amenity_view_form" <menuitem name="Amenities" id="menu_action_pms_room_amenity_view_form"
action="action_hotel_room_amenity_view_form" sequence="2" action="action_pms_room_amenity_view_form" sequence="2"
parent="hotel.menu_amenity" /> parent="pms.menu_amenity" />
<!-- Amenities Categories --> <!-- Amenities Categories -->
<!-- <record model="ir.actions.act_window" id="hotel_ty_category_action"> <!-- <record model="ir.actions.act_window" id="pms_ty_category_action">
<field name="name">Amenities by Category</field> <field name="name">Amenities by Category</field>
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>
<field name="res_model">product.category</field> <field name="res_model">product.category</field>
@@ -130,7 +130,7 @@
<field eval="'ir.actions.act_window,%d'%action_room_cate" name="value"/> <field eval="'ir.actions.act_window,%d'%action_room_cate" name="value"/>
</record--> </record-->
<!-- <menuitem name="Amenities by Type" id="menu_hotel_ty_category_action" <!-- <menuitem name="Amenities by Type" id="menu_pms_ty_category_action"
action="hotel_ty_category_action" sequence="4" parent="hotel.menu_amenity" /> --> action="pms_ty_category_action" sequence="4" parent="pms.menu_amenity" /> -->
</odoo> </odoo>

View File

@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<odoo> <odoo>
<record model="ir.ui.view" id="hotel_board_service_room_type_form"> <record model="ir.ui.view" id="pms_board_service_room_type_form">
<field name="name">hotel.board.service.room.type.form</field> <field name="name">pms.board.service.room.type.form</field>
<field name="model">hotel.board.service.room.type</field> <field name="model">pms.board.service.room.type</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Board Service Line"> <form string="Board Service Line">
<group> <group>
<field name="amount"/> <field name="amount"/>
<field name="board_service_line_ids"> <field name="board_service_line_ids">
<tree editable="bottom"> <tree editable="bottom">
<field name="hotel_board_service_room_type_id" invisible="1"/> <field name="pms_board_service_room_type_id" invisible="1"/>
<field name="product_id"/> <field name="product_id"/>
<field name="amount" /> <field name="amount" />
</tree> </tree>
@@ -20,9 +20,9 @@
</field> </field>
</record> </record>
<record model="ir.actions.act_window" id="action_hotel_board_service_room_type_view"> <record model="ir.actions.act_window" id="action_pms_board_service_room_type_view">
<field name="name">Hotel Board Service</field> <field name="name">Board Service</field>
<field name="res_model">hotel.board.service.room.type</field> <field name="res_model">board.service.room.type</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">form</field> <field name="view_mode">form</field>
</record> </record>

View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record model="ir.ui.view" id="pms_board_service_form">
<field name="name">pms.board.service.form</field>
<field name="model">pms.board.service</field>
<field name="arch" type="xml">
<form string="Board Service Line">
<group>
<field name="name" />
<field name="pms_property_ids" widget="many2many_tags"
options="{'no_create': True,'no_open': True}"/>
<field name="amount"/>
<field name="board_service_line_ids">
<tree editable="bottom">
<field name="product_id"/>
<field name="amount" />
</tree>
</field>
</group>
</form>
</field>
</record>
<record model="ir.ui.view" id="pms_board_service_view_tree">
<field name="name">pms.board.service.tree</field>
<field name="model">pms.board.service</field>
<field name="arch" type="xml">
<tree string="Board Services">
<field name="name" />
<field name="amount" />
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="open_pms_board_service_form_tree">
<field name="name">Board Services</field>
<field name="res_model">pms.board.service</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem name="Board Services" id="menu_open_pms_board_service_form_tree"
action="open_pms_board_service_form_tree" sequence="25"
parent="pms.configuration_others" />
</odoo>

View File

@@ -3,15 +3,15 @@
<!--==================================================== Cancelation Rules ==================================================== --> <!--==================================================== Cancelation Rules ==================================================== -->
<!-- Form view of cancelation rules --> <!-- Form view of cancelation rules -->
<record model="ir.ui.view" id="hotel_cancelation_rule_form"> <record model="ir.ui.view" id="pms_cancelation_rule_form">
<field name="name">hotel.cancelation.rule.form</field> <field name="name">pms.cancelation.rule.form</field>
<field name="model">hotel.cancelation.rule</field> <field name="model">pms.cancelation.rule</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Cancelation Rules"> <form string="Cancelation Rules">
<sheet> <sheet>
<h3> <h3>
<field name="name" /> <field name="name" />
<field name="hotel_ids" widget="many2many_tags" <field name="pms_property_ids" widget="many2many_tags"
options="{'no_create': True,'no_open': True}"/> options="{'no_create': True,'no_open': True}"/>
<separator /> <separator />
<label for="name" string="Max. days InTime before Checkin" /> <label for="name" string="Max. days InTime before Checkin" />
@@ -35,9 +35,9 @@
</record> </record>
<!-- Tree view of cancelation rules --> <!-- Tree view of cancelation rules -->
<record model="ir.ui.view" id="hotel_cancelation_rule_view_tree"> <record model="ir.ui.view" id="pms_cancelation_rule_view_tree">
<field name="name">hotel.cancelation.rule.tree</field> <field name="name">pms.cancelation.rule.tree</field>
<field name="model">hotel.cancelation.rule</field> <field name="model">pms.cancelation.rule</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="Cancelation Rules"> <tree string="Cancelation Rules">
<field name="name" /> <field name="name" />
@@ -50,16 +50,16 @@
</field> </field>
</record> </record>
<!-- Action of hotel cancelation rules --> <!-- Action of pms cancelation rules -->
<record model="ir.actions.act_window" id="action_hotel_cancelation_rule"> <record model="ir.actions.act_window" id="action_pms_cancelation_rule">
<field name="name">Cancelation Rules</field> <field name="name">Cancelation Rules</field>
<field name="res_model">hotel.cancelation.rule</field> <field name="res_model">pms.cancelation.rule</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
</record> </record>
<menuitem name="Cancelation Rules" id="menu_hotel_cancelation_rule" <menuitem name="Cancelation Rules" id="menu_pms_cancelation_rule"
action="action_hotel_cancelation_rule" sequence="25" action="action_pms_cancelation_rule" sequence="25"
parent="hotel.configuration_others" /> parent="pms.configuration_others" />
</odoo> </odoo>

View File

@@ -4,19 +4,19 @@
<act_window <act_window
id="action_checkin_partner" id="action_checkin_partner"
name="Action checkin" name="Action checkin"
res_model="hotel.checkin.partner" res_model="pms.checkin.partner"
view_mode="tree,form" /> view_mode="tree,form" />
<menuitem <menuitem
id="menu_hotel_checkin_partner" id="menu_pms_checkin_partner"
name="Checkins" name="Checkins"
parent="hotel.hotel_reports_menu" parent="pms.pms_reports_menu"
sequence="25" sequence="25"
action="action_checkin_partner" /> action="action_checkin_partner" />
<record id="hotel_checkin_partner_view_form" model="ir.ui.view"> <record id="pms_checkin_partner_view_form" model="ir.ui.view">
<field name="name">Checkin Form</field> <field name="name">Checkin Form</field>
<field name="model">hotel.checkin.partner</field> <field name="model">pms.checkin.partner</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form create="false"> <form create="false">
<sheet> <sheet>
@@ -24,7 +24,7 @@
<group name="group_left"> <group name="group_left">
<field name="partner_id" required="True" <field name="partner_id" required="True"
domain="[('is_company','=', False)]"/> domain="[('is_company','=', False)]"/>
<field name="hotel_id" invisible="1"/> <field name="pms_property_id" invisible="1"/>
<field name="enter_date"/> <field name="enter_date"/>
<field name="exit_date"/> <field name="exit_date"/>
<field name="arrival_hour"/> <field name="arrival_hour"/>
@@ -39,9 +39,9 @@
</field> </field>
</record> </record>
<record id="hotel_checkin_partner_reservation_view_tree" model="ir.ui.view"> <record id="pms_checkin_partner_reservation_view_tree" model="ir.ui.view">
<field name="name">hotel.checkin.partner.reservation.view.tree</field> <field name="name">pms.checkin.partner.reservation.view.tree</field>
<field name="model">hotel.checkin.partner</field> <field name="model">pms.checkin.partner</field>
<field name="priority">20</field> <field name="priority">20</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree editable="bottom" create="1" <tree editable="bottom" create="1"
@@ -68,9 +68,9 @@
</field> </field>
</record> </record>
<record id="hotel_checkin_partner_view_tree" model="ir.ui.view"> <record id="pms_checkin_partner_view_tree" model="ir.ui.view">
<field name="name">hotel.checkin.partner.view.tree</field> <field name="name">pms.checkin.partner.view.tree</field>
<field name="model">hotel.checkin.partner</field> <field name="model">pms.checkin.partner</field>
<field name="priority">10</field> <field name="priority">10</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree create="false" <tree create="false"
@@ -96,9 +96,9 @@
</field> </field>
</record> </record>
<record model="ir.ui.view" id="hotel_checkin_partner_view_search"> <record model="ir.ui.view" id="pms_checkin_partner_view_search">
<field name="name">hotel.checkin.partner.search</field> <field name="name">pms.checkin.partner.search</field>
<field name="model">hotel.checkin.partner</field> <field name="model">pms.checkin.partner</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Checkin Detail"> <search string="Checkin Detail">
<field name="partner_id" /> <field name="partner_id" />

View File

@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record model="ir.ui.view" id="pms_floor_view_form">
<field name="name">pms.floor.form</field>
<field name="model">pms.floor</field>
<field name="arch" type="xml">
<form string="Property Ubication">
<sheet>
<group>
<field name="name" colspan="1" />
<field name="sequence" select="1" />
<field name="pms_property_ids" widget="many2many_tags"
options="{'no_create': True,'no_open': True}"/>
</group>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="pms_floor_view_tree">
<field name="name">pms.floor.tree</field>
<field name="model">pms.floor</field>
<field name="arch" type="xml">
<tree string=" Property Ubications">
<field name="name" colspan="1" />
<field name="sequence" select="1" />
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="open_pms_floor_form_tree">
<field name="name">Floor Structure</field>
<field name="res_model">pms.floor</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem name="Ubitacions" id="menu_open_pms_floor_form_tree"
action="open_pms_floor_form_tree" sequence="21"
parent="pms.configuration_others" />
</odoo>

View File

@@ -1,18 +1,16 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<odoo> <odoo>
<!--=== Hotel Folio ==== -->
<act_window id="action_view_folio_advance_payment_inv" <act_window id="action_view_folio_advance_payment_inv"
name="Invoice Folio" name="Invoice Folio"
src_model="hotel.folio" src_model="pms.folio"
res_model="folio.advance.payment.inv" res_model="folio.advance.payment.inv"
key2="client_action_multi" target="new" key2="client_action_multi" target="new"
view_mode="form" multi="True"/> view_mode="form" multi="True"/>
<!-- Form view of hotel folio --> <record model="ir.ui.view" id="pms_folio_view_form">
<record model="ir.ui.view" id="hotel_folio_view_form"> <field name="name">pms.folio.form</field>
<field name="name">hotel.folio.form</field> <field name="model">pms.folio</field>
<field name="model">hotel.folio</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Folio"> <form string="Folio">
<header> <header>
@@ -27,7 +25,7 @@
attrs="{'invisible': [('has_cancelled_reservations_to_send', '=', False)]}" class="oe_highlight"/> --> attrs="{'invisible': [('has_cancelled_reservations_to_send', '=', False)]}" class="oe_highlight"/> -->
<!-- <button name="send_exit_mail" type="object" string="Send Exit Email" <!-- <button name="send_exit_mail" type="object" string="Send Exit Email"
attrs="{'invisible': [('has_checkout_to_send', '=', False)]}" class="oe_highlight"/> --> attrs="{'invisible': [('has_checkout_to_send', '=', False)]}" class="oe_highlight"/> -->
<button name="%(hotel.action_view_folio_advance_payment_inv)d" <button name="%(pms.action_view_folio_advance_payment_inv)d"
string="Create Invoice" type="action" class="btn-primary" string="Create Invoice" type="action" class="btn-primary"
attrs="{'invisible': [('state', '!=', 'confirm')]}"/> attrs="{'invisible': [('state', '!=', 'confirm')]}"/>
<!-- <button name="action_cancel_draft" states="cancel,sale" string="Set to Draft" <!-- <button name="action_cancel_draft" states="cancel,sale" string="Set to Draft"
@@ -36,7 +34,7 @@
attrs="{'invisible': [('state', 'not in', ('confirm','draft'))]}" attrs="{'invisible': [('state', 'not in', ('confirm','draft'))]}"
type="object" /> type="object" />
<button name="action_done" type="object" string="Set to Done" <button name="action_done" type="object" string="Set to Done"
help="If a Hotel Folio is done, you cannot modify it manually anymore. However, you will still be able to invoice. This is used to freeze the Hotel Folio." /> help="If a Folio is done, you cannot modify it manually anymore. However, you will still be able to invoice. This is used to freeze the Folio." />
<!-- <button name="print_quotation" string="Print" type="object" states="sent,sale"/> --> <!-- <button name="print_quotation" string="Print" type="object" states="sent,sale"/> -->
<field name="state" select="2" widget="statusbar" <field name="state" select="2" widget="statusbar"
statusbar_visible="draft,sent,sale,done" /> statusbar_visible="draft,sent,sale,done" />
@@ -86,7 +84,7 @@
<field name="cancelled_reason" attrs="{'invisible':[('state','not in',('cancel'))]}"/> <field name="cancelled_reason" attrs="{'invisible':[('state','not in',('cancel'))]}"/>
</group> </group>
<group> <group>
<field name="hotel_id" invisible="0"/> <field name="pms_property_id" invisible="0"/>
<field name="pricelist_id" /> <field name="pricelist_id" />
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/> <field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
<field name="reservation_type" attrs="{'readonly':[('state','not in',('draft'))]}"/> <field name="reservation_type" attrs="{'readonly':[('state','not in',('draft'))]}"/>
@@ -125,12 +123,12 @@
<notebook colspan="4" col="1"> <notebook colspan="4" col="1">
<page string="Reservation Rooms"> <page string="Reservation Rooms">
<field name="reservation_ids" colspan="4" string="Room Line" <field name="reservation_ids" colspan="4" string="Room Line"
nolabel="1" context="{'from_folio':True,'reservation_ids':reservation_ids,'folio_id': id,'tree_view_ref':'hotel.hotel_reservation_view_bottom_tree', 'form_view_ref':'hotel.hotel_reservation_view_form'}"/> nolabel="1" context="{'from_folio':True,'reservation_ids':reservation_ids,'folio_id': id,'tree_view_ref':'pms.pms_reservation_view_bottom_tree', 'form_view_ref':'pms.pms_reservation_view_form'}"/>
</page> </page>
<page string="Services"> <page string="Services">
<separator string="Service Lines" colspan="4"/> <separator string="Service Lines" colspan="4"/>
<field name="service_ids" <field name="service_ids"
context="{'from_room':False,'folio_id': id,'tree_view_ref':'hotel.hotel_service_view_tree', 'form_view_ref':'hotel.hotel_service_view_form'}" context="{'from_room':False,'folio_id': id,'tree_view_ref':'pms.pms_service_view_tree', 'form_view_ref':'pms.pms_service_view_form'}"
nolabel="1" /> nolabel="1" />
</page> </page>
<!--TODO: Add precheckin with indeterminate select room?? --> <!--TODO: Add precheckin with indeterminate select room?? -->
@@ -139,7 +137,7 @@
context="{ context="{
'default_reservation_id': id, 'default_reservation_id': id,
'reservation_id': id, 'reservation_id': id,
'tree_view_ref':'hotel.hotel_checkin_partner_reservation_view_tree', 'tree_view_ref':'pms.pms_checkin_partner_reservation_view_tree',
}" }"
/> />
</page> </page>
@@ -190,7 +188,7 @@
</page> </page>
<page name="payments" string="Payments" attrs="{'invisible': [('invoices_paid','&lt;=',0)]}"> <page name="payments" string="Payments" attrs="{'invisible': [('invoices_paid','&lt;=',0)]}">
<field name="payment_ids" <field name="payment_ids"
context="{'tree_view_ref':'hotel.account_payment_view_tree_folio', 'form_view_ref':'hotel.account_payment_view_form_folio'}" context="{'tree_view_ref':'pms.account_payment_view_tree_folio', 'form_view_ref':'pms.account_payment_view_form_folio'}"
options="{'no_create': True}" /> options="{'no_create': True}" />
</page> </page>
<page name="returns" string="Retun Payments" attrs="{'invisible': [('refund_amount','&lt;=',0)]}"> <page name="returns" string="Retun Payments" attrs="{'invisible': [('refund_amount','&lt;=',0)]}">
@@ -228,12 +226,11 @@
</field> </field>
</record> </record>
<!-- Tree view of hotel folio --> <record model="ir.ui.view" id="pms_folio_view_tree">
<record model="ir.ui.view" id="hotel_folio_view_tree"> <field name="name">pms.folio.tree</field>
<field name="name">hotel.folio.tree</field> <field name="model">pms.folio</field>
<field name="model">hotel.folio</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="Hotel Folio" decoration-info="state == 'draft'" <tree string="Folio" decoration-info="state == 'draft'"
decoration-muted="state == 'cancel'" decoration-muted="state == 'cancel'"
default_order="create_date desc"> default_order="create_date desc">
<field name="state"/> <field name="state"/>
@@ -244,15 +241,15 @@
<field name="amount_total" sum="Total amount"/> <field name="amount_total" sum="Total amount"/>
<field name="pending_amount" sum="Total debt"/> <field name="pending_amount" sum="Total debt"/>
<field name="invoice_status" /> <field name="invoice_status" />
<field name="hotel_id" invisible="0"/> <field name="pms_property_id" invisible="0"/>
</tree> </tree>
</field> </field>
</record> </record>
<!-- Folio Kanban View --> <!-- Folio Kanban View -->
<record model="ir.ui.view" id="hotel_folio_view_kanban"> <record model="ir.ui.view" id="pms_folio_view_kanban">
<field name="name">hotel.folio.kanban</field> <field name="name">pms.folio.kanban</field>
<field name="model">hotel.folio</field> <field name="model">pms.folio</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<kanban class="o_res_partner_kanban" limit="80"> <kanban class="o_res_partner_kanban" limit="80">
<field name="name"/> <field name="name"/>
@@ -289,10 +286,9 @@
</field> </field>
</record> </record>
<!-- Search view of hotel folio --> <record model="ir.ui.view" id="pms_folio_view_search">
<record model="ir.ui.view" id="hotel_folio_view_search"> <field name="name">pms.folio.search</field>
<field name="name">hotel.folio.search</field> <field name="model">pms.folio</field>
<field name="model">hotel.folio</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Tables Detail"> <search string="Tables Detail">
<field name="partner_id" /> <field name="partner_id" />
@@ -314,10 +310,9 @@
</field> </field>
</record> </record>
<!--graph view of hotel folio --> <record id="pms_folio_view_graph" model="ir.ui.view">
<record id="hotel_folio_view_graph" model="ir.ui.view"> <field name="name">view.pms.folio.graph</field>
<field name="name">view.hotel.folio.graph</field> <field name="model">pms.folio</field>
<field name="model">hotel.folio</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph type="bar"> <graph type="bar">
</graph> </graph>
@@ -328,7 +323,7 @@
<act_window name="Send Confirm Mail" <act_window name="Send Confirm Mail"
res_model="mail.compose.message" res_model="mail.compose.message"
src_model="hotel.folio" src_model="pms.folio"
view_mode="form" view_mode="form"
multi="False" multi="False"
view_type="form" view_type="form"
@@ -336,26 +331,25 @@
key2="client_action_multi" key2="client_action_multi"
id="action_view_folio_send_confirm_mail" id="action_view_folio_send_confirm_mail"
context="{ context="{
'default_model': 'hotel.folio', 'default_model': 'pms.folio',
'default_res_id': active_id, 'default_res_id': active_id,
'default_use_template': True, 'default_use_template': True,
'default_template_id': ref('hotel.email_template_reservation'), 'default_template_id': ref('pms.email_template_reservation'),
'default_composition_mode': 'comment', 'default_composition_mode': 'comment',
'force_send': True, 'force_send': True,
'mark_so_as_sent': True, 'mark_so_as_sent': True,
}" /> }" />
<!-- Action for hotel folio --> <record model="ir.actions.act_window" id="open_pms_folio1_form_tree_all">
<record model="ir.actions.act_window" id="open_hotel_folio1_form_tree_all"> <field name="name">Folio</field>
<field name="name">Hotel Folio</field> <field name="res_model">pms.folio</field>
<field name="res_model">hotel.folio</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">tree,form,graph</field> <field name="view_mode">tree,form,graph</field>
</record> </record>
<menuitem id="menu_all_folio" name="Reservations" <menuitem id="menu_all_folio" name="Reservations"
parent="hotel.hotel_management_menu" sequence="4"/> parent="pms.pms_management_menu" sequence="4"/>
<menuitem name="Folios" id="menu_open_hotel_folio1_form_tree_all" <menuitem name="Folios" id="menu_open_pms_folio1_form_tree_all"
action="open_hotel_folio1_form_tree_all" sequence="15" parent="menu_all_folio" /> action="open_pms_folio1_form_tree_all" sequence="15" parent="menu_all_folio" />
</odoo> </odoo>

Some files were not shown because too many files have changed in this diff Show More