mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[REF] Change Hotel by PMS and Property concept
This commit is contained in:
@@ -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>
|
|
||||||
@@ -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>
|
|
||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
@@ -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)
|
|
||||||
@@ -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>
|
|
||||||
@@ -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,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>
|
|
||||||
@@ -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>
|
|
||||||
@@ -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>
|
|
||||||
@@ -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>
|
|
||||||
@@ -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>
|
|
||||||
@@ -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',
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
@@ -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>
|
||||||
|
|
||||||
@@ -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>
|
||||||
@@ -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;}
|
||||||
@@ -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
27
pms/data/menus.xml
Normal 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>
|
||||||
@@ -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
14
pms/data/pms_sequence.xml
Normal 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>
|
||||||
@@ -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
37
pms/models/__init__.py
Normal 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
|
||||||
@@ -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']
|
||||||
@@ -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)
|
||||||
@@ -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'),
|
||||||
35
pms/models/inherited_ir_http.py
Normal file
35
pms/models/inherited_ir_http.py
Normal 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
|
||||||
@@ -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:
|
||||||
@@ -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:
|
||||||
@@ -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."))
|
||||||
@@ -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')
|
||||||
@@ -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 \
|
||||||
@@ -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)
|
||||||
])
|
])
|
||||||
|
|
||||||
27
pms/models/inherited_res_users.py
Normal file
27
pms/models/inherited_res_users.py
Normal 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)
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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')],
|
||||||
@@ -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'),
|
||||||
@@ -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, {
|
||||||
@@ -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)
|
||||||
@@ -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
|
||||||
@@ -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")
|
||||||
@@ -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')
|
||||||
@@ -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
|
||||||
@@ -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)',
|
||||||
@@ -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')
|
||||||
@@ -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(
|
||||||
@@ -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
|
||||||
@@ -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)
|
||||||
@@ -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,
|
||||||
@@ -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')
|
||||||
@@ -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)
|
||||||
@@ -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')
|
||||||
|
|
||||||
@@ -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
|
||||||
@@ -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)
|
||||||
@@ -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)
|
||||||
])
|
])
|
||||||
@@ -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>
|
||||||
@@ -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>
|
||||||
66
pms/security/ir.model.access.csv
Normal file
66
pms/security/ir.model.access.csv
Normal 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
|
||||||
|
22
pms/security/pms_security.xml
Normal file
22
pms/security/pms_security.xml
Normal 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>
|
||||||
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
@@ -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');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
|
|
||||||
});
|
});
|
||||||
@@ -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"/>
|
||||||
@@ -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 <%s>' % (object.hotel_id.partner_id.name, object.hotel_id.partner_id.email) or '')|safe}</field>
|
<field name="email_from">${('%s <%s>' % (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>
|
||||||
@@ -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>
|
||||||
|
|
||||||
@@ -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>
|
||||||
@@ -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>
|
||||||
@@ -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" />
|
||||||
@@ -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"/>
|
||||||
|
|
||||||
@@ -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>
|
||||||
10
pms/views/inherited_webclient_templates.xml
Normal file
10
pms/views/inherited_webclient_templates.xml
Normal 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>
|
||||||
47
pms/views/pms_amenity_type_views.xml
Normal file
47
pms/views/pms_amenity_type_views.xml
Normal 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>
|
||||||
@@ -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>
|
||||||
@@ -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>
|
||||||
47
pms/views/pms_board_service_views.xml
Normal file
47
pms/views/pms_board_service_views.xml
Normal 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>
|
||||||
@@ -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>
|
||||||
@@ -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" />
|
||||||
43
pms/views/pms_floor_views.xml
Normal file
43
pms/views/pms_floor_views.xml
Normal 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>
|
||||||
@@ -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','<=',0)]}">
|
<page name="payments" string="Payments" attrs="{'invisible': [('invoices_paid','<=',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','<=',0)]}">
|
<page name="returns" string="Retun Payments" attrs="{'invisible': [('refund_amount','<=',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
Reference in New Issue
Block a user