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).
|
||||
|
||||
{
|
||||
'name': 'roomdoo',
|
||||
'summary': "A property management system focused on medium-sized hotels",
|
||||
'name': 'pms',
|
||||
'summary': "A property management system",
|
||||
'version': '11.0.2.0.0',
|
||||
'development_status': 'Beta',
|
||||
'category': 'Generic Modules/Hotel Management',
|
||||
'category': 'Generic Modules/Property Management System',
|
||||
'website': 'https://github.com/hootel/hootel',
|
||||
'author': 'Darío Lodeiros, '
|
||||
'Alexandre Díaz, '
|
||||
@@ -17,24 +17,24 @@
|
||||
'installable': True,
|
||||
'depends': [
|
||||
'base',
|
||||
'sale_stock',
|
||||
'mail',
|
||||
'account_payment_return',
|
||||
'partner_firstname',
|
||||
'account_cancel',
|
||||
'email_template_qweb'
|
||||
],
|
||||
'data': [
|
||||
'security/hotel_security.xml',
|
||||
'security/pms_security.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'data/cron_jobs.xml',
|
||||
'data/hotel_data.xml',
|
||||
'data/hotel_sequence.xml',
|
||||
'data/pms_data.xml',
|
||||
'data/pms_sequence.xml',
|
||||
'data/email_template_cancel.xml',
|
||||
'data/email_template_reserv.xml',
|
||||
'data/email_template_exit.xml',
|
||||
'report/hotel_folio.xml',
|
||||
'report/hotel_folio_templates.xml',
|
||||
'templates/hotel_email_template.xml',
|
||||
'report/pms_folio.xml',
|
||||
'report/pms_folio_templates.xml',
|
||||
'templates/pms_email_template.xml',
|
||||
'wizard/massive_changes.xml',
|
||||
'wizard/massive_price_reservation_days.xml',
|
||||
'wizard/service_on_day.xml',
|
||||
@@ -42,28 +42,28 @@
|
||||
'wizard/wizard_reservation.xml',
|
||||
'views/general.xml',
|
||||
'data/menus.xml',
|
||||
'views/hotel_amenity_views.xml',
|
||||
'views/hotel_amenity_type_views.xml',
|
||||
'views/hotel_board_service_views.xml',
|
||||
'views/hotel_board_service_room_type_views.xml',
|
||||
'views/hotel_cancelation_rule_views.xml',
|
||||
'views/hotel_checkin_partner_views.xml',
|
||||
'views/hotel_floor_views.xml',
|
||||
'views/hotel_folio_views.xml',
|
||||
'views/hotel_property_views.xml',
|
||||
'views/hotel_reservation_views.xml',
|
||||
'views/hotel_room_type_views.xml',
|
||||
'views/hotel_room_views.xml',
|
||||
'views/hotel_room_closure_reason_views.xml',
|
||||
'views/pms_amenity_views.xml',
|
||||
'views/pms_amenity_type_views.xml',
|
||||
'views/pms_board_service_views.xml',
|
||||
'views/pms_board_service_room_type_views.xml',
|
||||
'views/pms_cancelation_rule_views.xml',
|
||||
'views/pms_checkin_partner_views.xml',
|
||||
'views/pms_floor_views.xml',
|
||||
'views/pms_folio_views.xml',
|
||||
'views/pms_property_views.xml',
|
||||
'views/pms_reservation_views.xml',
|
||||
'views/pms_room_type_views.xml',
|
||||
'views/pms_room_views.xml',
|
||||
'views/pms_room_closure_reason_views.xml',
|
||||
'views/inherited_account_payment_views.xml',
|
||||
'views/inherited_account_invoice_views.xml',
|
||||
'views/inherited_res_users_views.xml',
|
||||
'views/hotel_room_type_class_views.xml',
|
||||
'views/hotel_room_type_restriction_views.xml',
|
||||
'views/hotel_room_type_restriction_item_views.xml',
|
||||
'views/hotel_service_views.xml',
|
||||
'views/hotel_service_line_views.xml',
|
||||
'views/hotel_shared_room_views.xml',
|
||||
'views/pms_room_type_class_views.xml',
|
||||
'views/pms_room_type_restriction_views.xml',
|
||||
'views/pms_room_type_restriction_item_views.xml',
|
||||
'views/pms_service_views.xml',
|
||||
'views/pms_service_line_views.xml',
|
||||
'views/pms_shared_room_views.xml',
|
||||
'views/inherited_res_partner_views.xml',
|
||||
'views/inherited_product_pricelist_views.xml',
|
||||
'views/inherited_product_template_views.xml',
|
||||
@@ -71,9 +71,9 @@
|
||||
'wizard/folio_make_invoice_advance_views.xml',
|
||||
],
|
||||
'demo': [
|
||||
'demo/hotel_demo.xml'
|
||||
'demo/pms_demo.xml'
|
||||
],
|
||||
'qweb': [
|
||||
'static/src/xml/hotel_base_templates.xml',
|
||||
'static/src/xml/pms_base_templates.xml',
|
||||
],
|
||||
}
|
||||
@@ -10,7 +10,7 @@
|
||||
<field name="interval_type">days</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<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>
|
||||
</record>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="doall" eval="False" />
|
||||
<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="code">model.autocheckout()</field>
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE xml>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<!-- Email Template For Hotel Reservation -->
|
||||
<record id="mail_template_hotel_cancel" model="mail.template">
|
||||
<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="partner_to">${(object.partner_id.id or '')}</field>
|
||||
<field name="model_id" ref="hotel.model_hotel_folio"/>
|
||||
<field name="auto_delete" eval="True" />
|
||||
<field name="body_html">
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE xml>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<!-- Email Template For PMS Reservation -->
|
||||
<record id="mail_template_pms_cancel" model="mail.template">
|
||||
<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="partner_to">${(object.partner_id.id or '')}</field>
|
||||
<field name="model_id" ref="pms.model_pms_folio"/>
|
||||
<field name="auto_delete" eval="True" />
|
||||
<field name="body_html">
|
||||
<![CDATA[
|
||||
<style type="text/css">
|
||||
/*Global Styles*/
|
||||
@@ -704,8 +704,8 @@
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
@@ -2,12 +2,12 @@
|
||||
<!DOCTYPE xml>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<!-- Email Template For Hotel Reservation -->
|
||||
<record id="mail_template_hotel_exit" model="mail.template">
|
||||
<!-- Email Template For PMS Reservation -->
|
||||
<record id="mail_template_pms_exit" model="mail.template">
|
||||
<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="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="body_html"><![CDATA[<style type="text/css">/*Global Styles*/
|
||||
.marco {bgcolor:#f6f6f6; margin: 0; padding: 0; min-width: 100%!important;}
|
||||
@@ -1,14 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE xml>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<!-- Email Template For Hotel Reservation -->
|
||||
<record id="mail_template_hotel_reservation" model="mail.template">
|
||||
<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="partner_to">${(object.partner_id.id or '')}</field>
|
||||
<field name="model_id" ref="hotel.model_hotel_folio"/>
|
||||
<field name="auto_delete" eval="True" />
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE xml>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<!-- Email Template For PMS Reservation -->
|
||||
<record id="mail_template_pms_reservation" model="mail.template">
|
||||
<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="partner_to">${(object.partner_id.id or '')}</field>
|
||||
<field name="model_id" ref="pms.model_pms_folio"/>
|
||||
<field name="auto_delete" eval="True" />
|
||||
<field name="body_html"><![CDATA[
|
||||
<style type="text/css">
|
||||
/*Global Styles*/
|
||||
@@ -1036,7 +1036,7 @@
|
||||
</table>
|
||||
</div>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</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>
|
||||
<data noupdate="1">
|
||||
|
||||
<!-- hotel.users -->
|
||||
<!-- pms.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 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>
|
||||
|
||||
<!-- 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>
|
||||
</record>
|
||||
|
||||
<record id="main_hotel_property" model="hotel.property">
|
||||
<field name="name">My Hotel</field>
|
||||
<record id="main_pms_property" model="pms.property">
|
||||
<field name="name">My Property</field>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
<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="city">Roomdoo city</field>
|
||||
<field name="city">Commitsun city</field>
|
||||
<field name="country_id" ref="base.es"/>
|
||||
<field name="zip">15703</field>
|
||||
<field name="phone">+34 123 456 879</field>
|
||||
<field name="email">roomdoo@hoteldemo.roomdoo.com</field>
|
||||
<field name="website">https://www.roomdoo.com</field>
|
||||
<field name="email">commitsun@hootel.com</field>
|
||||
<field name="website">https://www.commitsun.com</field>
|
||||
</record>
|
||||
|
||||
<record model="res.users" id="base.user_root">
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
<field name="company_ids" eval="[(4, ref('base.main_company'))]"/>
|
||||
<field name="hotel_id" ref="main_hotel_property"/>
|
||||
<field name="hotel_ids" eval="[(4, ref('main_hotel_property'))]"/>
|
||||
<field name="pms_property_id" ref="main_pms_property"/>
|
||||
<field name="pms_property_ids" eval="[(4, ref('main_pms_property'))]"/>
|
||||
</record>
|
||||
</data>
|
||||
</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>
|
||||
<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>
|
||||
</record>
|
||||
<record id="hotel_floor_1" model="hotel.floor">
|
||||
<record id="pms_floor_1" model="pms.floor">
|
||||
<field name="name">First Floor</field>
|
||||
</record>
|
||||
<record id="hotel_floor_2" model="hotel.floor">
|
||||
<record id="pms_floor_2" model="pms.floor">
|
||||
<field name="name">Second Floor</field>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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="room_amenity_type_id" ref="hotel_amenity_type_0"/>
|
||||
<field name="room_amenity_type_id" ref="pms_amenity_type_0"/>
|
||||
</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="room_amenity_type_id" ref="hotel_amenity_type_0"/>
|
||||
<field name="room_amenity_type_id" ref="pms_amenity_type_0"/>
|
||||
</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="room_amenity_type_id" ref="hotel_amenity_type_0"/>
|
||||
<field name="room_amenity_type_id" ref="pms_amenity_type_0"/>
|
||||
</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="room_amenity_type_id" ref="hotel_amenity_type_1"/>
|
||||
<field name="room_amenity_type_id" ref="pms_amenity_type_1"/>
|
||||
</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="room_amenity_type_id" ref="hotel_amenity_type_1"/>
|
||||
<field name="room_amenity_type_id" ref="pms_amenity_type_1"/>
|
||||
</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="room_amenity_type_id" ref="hotel_amenity_type_2"/>
|
||||
<field name="room_amenity_type_id" ref="pms_amenity_type_2"/>
|
||||
</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="room_amenity_type_id" ref="hotel_amenity_type_2"/>
|
||||
<field name="room_amenity_type_id" ref="pms_amenity_type_2"/>
|
||||
</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>
|
||||
</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>
|
||||
</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="code_type">ECO</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"
|
||||
eval="[(4, ref('hotel_amenity_0'))]"/>
|
||||
eval="[(4, ref('pms_amenity_0'))]"/>
|
||||
|
||||
</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="code_type">SNG</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"
|
||||
eval="[(4, ref('hotel_amenity_0')), (4, ref('hotel_amenity_4'))]"/>
|
||||
eval="[(4, ref('pms_amenity_0')), (4, ref('pms_amenity_4'))]"/>
|
||||
</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="code_type">DBL</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"
|
||||
eval="[(4, ref('hotel_amenity_0')), (4, ref('hotel_amenity_4'))]"/>
|
||||
eval="[(4, ref('pms_amenity_0')), (4, ref('pms_amenity_4'))]"/>
|
||||
</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="code_type">TRP</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"
|
||||
eval="[(4, ref('hotel_amenity_0')), (4, ref('hotel_amenity_4'))]"/>
|
||||
eval="[(4, ref('pms_amenity_0')), (4, ref('pms_amenity_4'))]"/>
|
||||
</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="code_type">CFR</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"
|
||||
eval="[(4, ref('hotel_amenity_3')), (4, ref('hotel_amenity_4'))]"/>
|
||||
eval="[(4, ref('pms_amenity_3')), (4, ref('pms_amenity_4'))]"/>
|
||||
</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="room_type_id" ref="hotel_room_type_0"/>
|
||||
<field name="floor_id" ref="hotel_floor_1"/>
|
||||
<field name="room_type_id" ref="pms_room_type_0"/>
|
||||
<field name="floor_id" ref="pms_floor_1"/>
|
||||
<field name="capacity">2</field>
|
||||
</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="room_type_id" ref="hotel_room_type_1"/>
|
||||
<field name="floor_id" ref="hotel_floor_1"/>
|
||||
<field name="room_type_id" ref="pms_room_type_1"/>
|
||||
<field name="floor_id" ref="pms_floor_1"/>
|
||||
<field name="capacity">1</field>
|
||||
</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="room_type_id" ref="hotel_room_type_1"/>
|
||||
<field name="floor_id" ref="hotel_floor_1"/>
|
||||
<field name="room_type_id" ref="pms_room_type_1"/>
|
||||
<field name="floor_id" ref="pms_floor_1"/>
|
||||
<field name="capacity">1</field>
|
||||
</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="room_type_id" ref="hotel_room_type_1"/>
|
||||
<field name="floor_id" ref="hotel_floor_1"/>
|
||||
<field name="room_type_id" ref="pms_room_type_1"/>
|
||||
<field name="floor_id" ref="pms_floor_1"/>
|
||||
<field name="capacity">1</field>
|
||||
</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="room_type_id" ref="hotel_room_type_2"/>
|
||||
<field name="floor_id" ref="hotel_floor_2"/>
|
||||
<field name="room_type_id" ref="pms_room_type_2"/>
|
||||
<field name="floor_id" ref="pms_floor_2"/>
|
||||
<field name="capacity">2</field>
|
||||
<field name="extra_beds_allowed">1</field>
|
||||
</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="room_type_id" ref="hotel_room_type_2"/>
|
||||
<field name="floor_id" ref="hotel_floor_2"/>
|
||||
<field name="room_type_id" ref="pms_room_type_2"/>
|
||||
<field name="floor_id" ref="pms_floor_2"/>
|
||||
<field name="capacity">2</field>
|
||||
</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="room_type_id" ref="hotel_room_type_3"/>
|
||||
<field name="floor_id" ref="hotel_floor_2"/>
|
||||
<field name="room_type_id" ref="pms_room_type_3"/>
|
||||
<field name="floor_id" ref="pms_floor_2"/>
|
||||
<field name="capacity">3</field>
|
||||
</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="room_type_id" ref="hotel_room_type_4"/>
|
||||
<field name="floor_id" ref="hotel_floor_0"/>
|
||||
<field name="room_type_id" ref="pms_room_type_4"/>
|
||||
<field name="floor_id" ref="pms_floor_0"/>
|
||||
<field name="capacity">1</field>
|
||||
</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="list_price">5.0</field>
|
||||
<field name="type">service</field>
|
||||
@@ -174,7 +174,7 @@
|
||||
<field name="per_person">True</field>
|
||||
</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="list_price">15.0</field>
|
||||
<field name="type">service</field>
|
||||
@@ -186,7 +186,7 @@
|
||||
<field name="show_in_calendar">True</field>
|
||||
</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="list_price">10.0</field>
|
||||
<field name="type">service</field>
|
||||
@@ -195,7 +195,7 @@
|
||||
<field name="per_person">False</field>
|
||||
</record>
|
||||
|
||||
<record id="hotel_service_4" model="product.product">
|
||||
<record id="pms_service_4" model="product.product">
|
||||
<field name="name">Lunch</field>
|
||||
<field name="list_price">15.0</field>
|
||||
<field name="type">service</field>
|
||||
@@ -204,7 +204,7 @@
|
||||
<field name="per_person">True</field>
|
||||
</record>
|
||||
|
||||
<record id="hotel_service_5" model="product.product">
|
||||
<record id="pms_service_5" model="product.product">
|
||||
<field name="name">Dinner</field>
|
||||
<field name="list_price">20.0</field>
|
||||
<field name="type">service</field>
|
||||
@@ -213,7 +213,7 @@
|
||||
<field name="per_person">True</field>
|
||||
</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="list_price">40.0</field>
|
||||
<field name="type">service</field>
|
||||
@@ -222,71 +222,71 @@
|
||||
<field name="per_person">True</field>
|
||||
</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="board_service_line_ids"
|
||||
eval="[(5, 0), (0, 0, {
|
||||
'product_id': ref('hotel_service_0'),
|
||||
'product_id': ref('pms_service_0'),
|
||||
'amount': 3})]"/>
|
||||
<field name="price_type">fixed</field>
|
||||
</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="board_service_line_ids"
|
||||
eval="[(5, 0), (0, 0, {
|
||||
'product_id': ref('hotel_service_0'),
|
||||
'product_id': ref('pms_service_0'),
|
||||
'amount': 3}),
|
||||
(0, 0, {'product_id': ref('hotel_service_5'),
|
||||
(0, 0, {'product_id': ref('pms_service_5'),
|
||||
'amount': 8})
|
||||
]"/>
|
||||
<field name="price_type">fixed</field>
|
||||
</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="board_service_line_ids"
|
||||
eval="[(5, 0), (0, 0, {
|
||||
'product_id': ref('hotel_service_0'),
|
||||
'product_id': ref('pms_service_0'),
|
||||
'amount': 3}),
|
||||
(0, 0, {'product_id': ref('hotel_service_4'),
|
||||
(0, 0, {'product_id': ref('pms_service_4'),
|
||||
'amount': 8}),
|
||||
(0, 0, {'product_id': ref('hotel_service_5'),
|
||||
(0, 0, {'product_id': ref('pms_service_5'),
|
||||
'amount': 8})
|
||||
]"/>
|
||||
<field name="price_type">fixed</field>
|
||||
</record>
|
||||
|
||||
<!-- hotel.board.service.room.type -->
|
||||
<!-- pms.board.service.room.type -->
|
||||
|
||||
<!--Room 0 Economic-->
|
||||
|
||||
<record id="hotel_board_service_room_0"
|
||||
model="hotel.board.service.room.type">
|
||||
<field name="hotel_board_service_id"
|
||||
ref="hotel_board_service_0"/>
|
||||
<field name="hotel_room_type_id"
|
||||
ref="hotel_room_type_0"/>
|
||||
<record id="pms_board_service_room_0"
|
||||
model="pms.board.service.room.type">
|
||||
<field name="pms_board_service_id"
|
||||
ref="pms_board_service_0"/>
|
||||
<field name="pms_room_type_id"
|
||||
ref="pms_room_type_0"/>
|
||||
<field name="price_type">fixed</field>
|
||||
</record>
|
||||
|
||||
<record id="hotel_board_service_room_1"
|
||||
model="hotel.board.service.room.type">
|
||||
<field name="hotel_board_service_id"
|
||||
ref="hotel_board_service_1"/>
|
||||
<field name="hotel_room_type_id"
|
||||
ref="hotel_room_type_0"/>
|
||||
<record id="pms_board_service_room_1"
|
||||
model="pms.board.service.room.type">
|
||||
<field name="pms_board_service_id"
|
||||
ref="pms_board_service_1"/>
|
||||
<field name="pms_room_type_id"
|
||||
ref="pms_room_type_0"/>
|
||||
<field name="price_type">fixed</field>
|
||||
</record>
|
||||
|
||||
<record id="hotel_board_service_room_2"
|
||||
model="hotel.board.service.room.type">
|
||||
<field name="hotel_board_service_id"
|
||||
ref="hotel_board_service_1"/>
|
||||
<field name="hotel_room_type_id"
|
||||
ref="hotel_room_type_0"/>
|
||||
<record id="pms_board_service_room_2"
|
||||
model="pms.board.service.room.type">
|
||||
<field name="pms_board_service_id"
|
||||
ref="pms_board_service_1"/>
|
||||
<field name="pms_room_type_id"
|
||||
ref="pms_room_type_0"/>
|
||||
<field name="pricelist_id"
|
||||
ref="product.list0"/>
|
||||
<field name="price_type">fixed</field>
|
||||
@@ -294,74 +294,74 @@
|
||||
|
||||
<!--Room 3 Triple-->
|
||||
|
||||
<record id="hotel_board_service_room_3"
|
||||
model="hotel.board.service.room.type">
|
||||
<field name="hotel_board_service_id"
|
||||
ref="hotel_board_service_0"/>
|
||||
<field name="hotel_room_type_id"
|
||||
ref="hotel_room_type_3"/>
|
||||
<record id="pms_board_service_room_3"
|
||||
model="pms.board.service.room.type">
|
||||
<field name="pms_board_service_id"
|
||||
ref="pms_board_service_0"/>
|
||||
<field name="pms_room_type_id"
|
||||
ref="pms_room_type_3"/>
|
||||
<field name="price_type">fixed</field>
|
||||
</record>
|
||||
|
||||
<record id="hotel_board_service_room_4"
|
||||
model="hotel.board.service.room.type">
|
||||
<field name="hotel_board_service_id"
|
||||
ref="hotel_board_service_2"/>
|
||||
<field name="hotel_room_type_id"
|
||||
ref="hotel_room_type_3"/>
|
||||
<record id="pms_board_service_room_4"
|
||||
model="pms.board.service.room.type">
|
||||
<field name="pms_board_service_id"
|
||||
ref="pms_board_service_2"/>
|
||||
<field name="pms_room_type_id"
|
||||
ref="pms_room_type_3"/>
|
||||
<field name="price_type">fixed</field>
|
||||
</record>
|
||||
|
||||
<!-- 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="description">Used for closing of rooms which require a maintenance. You can specify the reason in the own reservation.</field>
|
||||
</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="description">Used for closing of rooms for extra privacy.</field>
|
||||
</record>
|
||||
|
||||
<!-- hotel.folio -->
|
||||
<!-- pms.folio -->
|
||||
|
||||
<!-- 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="reservation_ids"
|
||||
eval="[(5, 0), (0, 0, {
|
||||
'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'),
|
||||
'checkout': (DateTime.today() + timedelta(days=2)).strftime('%Y-%m-%d'),
|
||||
'adults': 2,
|
||||
'state': 'confirm',
|
||||
'board_service_room_id': ref('hotel_board_service_room_1'),
|
||||
'board_service_room_id': ref('pms_board_service_room_1'),
|
||||
})]"/>
|
||||
</record>
|
||||
<!-- 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="reservation_ids"
|
||||
eval="[(5, 0), (0, 0, {
|
||||
'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'),
|
||||
'checkout': (DateTime.today() + timedelta(days=4)).strftime('%Y-%m-%d'),
|
||||
'adults': 3,
|
||||
'board_service_room_id': ref('hotel_board_service_room_3'),
|
||||
'board_service_room_id': ref('pms_board_service_room_3'),
|
||||
})]"/>
|
||||
</record>
|
||||
<!-- 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 -->
|
||||
<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="reservation_ids"
|
||||
eval="[(5, 0),
|
||||
(0, 0, {
|
||||
'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'),
|
||||
'checkout': (DateTime.today() + timedelta(days=4)).strftime('%Y-%m-%d'),
|
||||
'adults': 1,
|
||||
@@ -369,7 +369,7 @@
|
||||
}),
|
||||
(0, 0, {
|
||||
'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'),
|
||||
'checkout': (DateTime.today() + timedelta(days=4)).strftime('%Y-%m-%d'),
|
||||
'adults': 1,
|
||||
@@ -377,7 +377,7 @@
|
||||
}),
|
||||
(0, 0, {
|
||||
'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'),
|
||||
'checkout': (DateTime.today() + timedelta(days=4)).strftime('%Y-%m-%d'),
|
||||
'adults': 1,
|
||||
@@ -385,12 +385,12 @@
|
||||
})]"/>
|
||||
</record>
|
||||
<!-- 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="reservation_ids"
|
||||
eval="[(5, 0), (0, 0, {
|
||||
'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'),
|
||||
'checkout': (DateTime.today() + timedelta(days=4)).strftime('%Y-%m-%d'),
|
||||
'adults': 1,
|
||||
@@ -398,55 +398,55 @@
|
||||
})]"/>
|
||||
</record>
|
||||
<!-- out of service room -->
|
||||
<record id="hotel_folio_4" model="hotel.folio">
|
||||
<field name="partner_id" ref="main_hotel_property"/>
|
||||
<record id="pms_folio_4" model="pms.folio">
|
||||
<field name="partner_id" ref="main_pms_property"/>
|
||||
<field name="reservation_type">out</field>
|
||||
<field name="reservation_ids"
|
||||
eval="[(5, 0), (0, 0, {
|
||||
'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'),
|
||||
'checkout': (DateTime.today() + timedelta(days=2)).strftime('%Y-%m-%d'),
|
||||
'adults': 1,
|
||||
'state': 'confirm',
|
||||
'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',
|
||||
})]"/>
|
||||
</record>
|
||||
|
||||
<!-- Multi Hotel Demo -->
|
||||
<record id="demo_hotel_room_type_restriction" model="hotel.room.type.restriction">
|
||||
<!-- Multi pms Demo -->
|
||||
<record id="demo_pms_room_type_restriction" model="pms.room.type.restriction">
|
||||
<field name="name">Restriction Plan Demo</field>
|
||||
</record>
|
||||
|
||||
<record id="demo_hotel_property" model="hotel.property">
|
||||
<field name="name">My Hotel Demo</field>
|
||||
<record id="demo_pms_property" model="pms.property">
|
||||
<field name="name">My pms Demo</field>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
<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>
|
||||
|
||||
<!-- hotel.room.type -->
|
||||
<!-- pms.room.type -->
|
||||
|
||||
<record id="demo_hotel_room_type_0" model="hotel.room.type">
|
||||
<field name="hotel_id" ref="hotel.demo_hotel_property"/>
|
||||
<record id="demo_pms_room_type_0" model="pms.room.type">
|
||||
<field name="pms_id" ref="pms.demo_pms_property"/>
|
||||
<field name="name">Economic</field>
|
||||
<field name="code_type">ECO</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"
|
||||
eval="[(4, ref('hotel_amenity_0'))]"/>
|
||||
eval="[(4, ref('pms_amenity_0'))]"/>
|
||||
|
||||
</record>
|
||||
<record id="demo_hotel_room_type_1" model="hotel.room.type">
|
||||
<field name="hotel_id" ref="hotel.demo_hotel_property"/>
|
||||
<record id="demo_pms_room_type_1" model="pms.room.type">
|
||||
<field name="pms_id" ref="pms.demo_pms_property"/>
|
||||
<field name="name">Single</field>
|
||||
<field name="code_type">SNG</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"
|
||||
eval="[(4, ref('hotel_amenity_0')), (4, ref('hotel_amenity_4'))]"/>
|
||||
eval="[(4, ref('pms_amenity_0')), (4, ref('pms_amenity_4'))]"/>
|
||||
</record>
|
||||
|
||||
</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
|
||||
folio_ids = fields.Many2many(
|
||||
comodel_name='hotel.folio',
|
||||
comodel_name='pms.folio',
|
||||
compute='_computed_folio_origin')
|
||||
hotel_id = fields.Many2one(
|
||||
'hotel.property')
|
||||
pms_property_id = fields.Many2one(
|
||||
'pms.property')
|
||||
from_folio = fields.Boolean(
|
||||
compute='_computed_folio_origin')
|
||||
outstanding_folios_debits_widget = fields.Text(
|
||||
@@ -37,7 +37,7 @@ class AccountInvoice(models.Model):
|
||||
def action_folio_payments(self):
|
||||
self.ensure_one()
|
||||
sales = self.mapped('invoice_line_ids.sale_line_ids.order_id')
|
||||
folios = self.env['hotel.folio'].search([
|
||||
folios = self.env['pms.folio'].search([
|
||||
('order_id.id', 'in', sales.ids)
|
||||
])
|
||||
payments_obj = self.env['account.payment']
|
||||
@@ -9,17 +9,17 @@ class AccountInvoiceLine(models.Model):
|
||||
|
||||
# Fields declaration
|
||||
reservation_ids = fields.Many2many(
|
||||
'hotel.reservation',
|
||||
'pms.reservation',
|
||||
'reservation_invoice_rel',
|
||||
'invoice_line_id', 'reservation_id',
|
||||
string='Reservations', readonly=True, copy=False)
|
||||
service_ids = fields.Many2many(
|
||||
'hotel.service',
|
||||
'pms.service',
|
||||
'service_line_invoice_rel',
|
||||
'invoice_line_id', 'service_id',
|
||||
string='Services', readonly=True, copy=False)
|
||||
reservation_line_ids = fields.Many2many(
|
||||
'hotel.reservation.line',
|
||||
'pms.reservation.line',
|
||||
'reservation_line_invoice_rel',
|
||||
'invoice_line_id', 'reservation_line_id',
|
||||
string='Reservation Lines', readonly=True, copy=False)
|
||||
@@ -9,7 +9,7 @@ class AccountPayment(models.Model):
|
||||
|
||||
# Fields declaration
|
||||
folio_id = fields.Many2one(
|
||||
'hotel.folio',
|
||||
'pms.folio',
|
||||
string='Folio')
|
||||
amount_total_folio = fields.Float(
|
||||
compute="_compute_folio_amount", store=True,
|
||||
@@ -28,7 +28,7 @@ class AccountPayment(models.Model):
|
||||
fol = ()
|
||||
for payment in self:
|
||||
if payment.folio_id:
|
||||
fol = payment.env['hotel.folio'].search([
|
||||
fol = payment.env['pms.folio'].search([
|
||||
('id', '=', payment.folio_id.id)
|
||||
])
|
||||
else:
|
||||
@@ -136,7 +136,7 @@ class AccountPayment(models.Model):
|
||||
@api.multi
|
||||
def modify_payment(self):
|
||||
self.ensure_one()
|
||||
view_form_id = self.env.ref('hotel.account_payment_view_form_folio').id
|
||||
view_form_id = self.env.ref('pms.account_payment_view_form_folio').id
|
||||
# invoices = self.mapped('invoice_ids.id')
|
||||
return{
|
||||
'name': _('Payment'),
|
||||
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
|
||||
def send_mail(self, auto_commit=False):
|
||||
if self._context.get('default_model') == 'hotel.folio' and \
|
||||
if self._context.get('default_model') == 'pms.folio' and \
|
||||
self._context.get('default_res_id') and \
|
||||
self._context.get('mark_so_as_sent'):
|
||||
folio = self.env['hotel.folio'].browse([
|
||||
folio = self.env['pms.folio'].browse([
|
||||
self._context['default_res_id']
|
||||
])
|
||||
if folio:
|
||||
@@ -8,13 +8,13 @@ class PaymentReturn(models.Model):
|
||||
|
||||
# Fields declaration
|
||||
folio_id = fields.Many2one(
|
||||
'hotel.folio',
|
||||
'pms.folio',
|
||||
string='Folio')
|
||||
hotel_id = fields.Many2one(
|
||||
'hotel.property',
|
||||
pms_property_id = fields.Many2one(
|
||||
'pms.property',
|
||||
store=True,
|
||||
readonly=True,
|
||||
related='folio_id.hotel_id')
|
||||
related='folio_id.pms_property_id')
|
||||
|
||||
# Business methods
|
||||
@api.multi
|
||||
@@ -22,12 +22,12 @@ class PaymentReturn(models.Model):
|
||||
pay = super(PaymentReturn, self).action_confirm()
|
||||
if pay:
|
||||
folio_ids = []
|
||||
folios = self.env['hotel.folio'].browse(folio_ids)
|
||||
folios = self.env['pms.folio'].browse(folio_ids)
|
||||
for line in self.line_ids:
|
||||
payments = self.env['account.payment'].search([
|
||||
('move_line_ids', 'in', line.move_line_ids.ids)
|
||||
])
|
||||
folios_line = self.env['hotel.folio'].browse(
|
||||
folios_line = self.env['pms.folio'].browse(
|
||||
payments.mapped('folio_id.id'))
|
||||
for folio in folios_line:
|
||||
if self.id not in folio.return_ids.ids:
|
||||
@@ -7,18 +7,18 @@ from odoo.exceptions import ValidationError
|
||||
class ProductPricelist(models.Model):
|
||||
""" Before creating a 'daily' pricelist, you need to consider the following:
|
||||
A pricelist marked as daily is used as a daily rate plan for room types and
|
||||
therefore is related only with one hotel.
|
||||
therefore is related only with one property.
|
||||
"""
|
||||
_inherit = 'product.pricelist'
|
||||
|
||||
# Fields declaration
|
||||
hotel_ids = fields.Many2many(
|
||||
'hotel.property',
|
||||
string='Hotels',
|
||||
pms_property_ids = fields.Many2many(
|
||||
'pms.property',
|
||||
string='Properties',
|
||||
required=False,
|
||||
ondelete='restrict')
|
||||
cancelation_rule_id = fields.Many2one(
|
||||
'hotel.cancelation.rule',
|
||||
'pms.cancelation.rule',
|
||||
string="Cancelation Policy")
|
||||
pricelist_type = fields.Selection([
|
||||
('daily', 'Daily Plan')],
|
||||
@@ -27,21 +27,21 @@ class ProductPricelist(models.Model):
|
||||
is_staff = fields.Boolean('Is Staff')
|
||||
|
||||
# Constraints and onchanges
|
||||
@api.constrains('pricelist_type', 'hotel_ids')
|
||||
def _check_pricelist_type_hotel_ids(self):
|
||||
@api.constrains('pricelist_type', 'pms_property_ids')
|
||||
def _check_pricelist_type_property_ids(self):
|
||||
for record in self:
|
||||
if record.pricelist_type == 'daily' and len(record.hotel_ids) != 1:
|
||||
if record.pricelist_type == 'daily' and len(record.pms_property_ids) != 1:
|
||||
raise ValidationError(
|
||||
_("A daily pricelist is used as a daily Rate Plan "
|
||||
"for room types and therefore must be related with "
|
||||
"one and only one hotel."))
|
||||
"one and only one property."))
|
||||
|
||||
if record.pricelist_type == 'daily' and len(record.hotel_ids) == 1:
|
||||
hotel_id = self.env['hotel.property'].search([
|
||||
if record.pricelist_type == 'daily' and len(record.pms_property_ids) == 1:
|
||||
pms_property_id = self.env['pms.property'].search([
|
||||
('default_pricelist_id', '=', record.id)
|
||||
]) or None
|
||||
if hotel_id and hotel_id != record.hotel_ids:
|
||||
if pms_property_id and pms_property_id != record.pms_property_ids:
|
||||
raise ValidationError(
|
||||
_("Relationship mismatch.") + " " +
|
||||
_("This pricelist is used as default in a "
|
||||
"different hotel."))
|
||||
"different property."))
|
||||
@@ -7,9 +7,9 @@ from odoo import models, fields
|
||||
class ProductTemplate(models.Model):
|
||||
_inherit = "product.template"
|
||||
|
||||
hotel_ids = fields.Many2many(
|
||||
'hotel.property',
|
||||
string='Hotels',
|
||||
pms_property_ids = fields.Many2many(
|
||||
'pms.property',
|
||||
string='Properties',
|
||||
required=False,
|
||||
ondelete='restrict')
|
||||
per_day = fields.Boolean('Unit increment per day')
|
||||
@@ -8,7 +8,7 @@ class ResCompany(models.Model):
|
||||
_inherit = 'res.company'
|
||||
|
||||
# Fields declaration
|
||||
hotel_ids = fields.One2many('hotel.property', 'company_id', 'Hotels')
|
||||
pms_property_ids = fields.One2many('pms.property', 'company_id', 'Properties')
|
||||
# TODO: need extra explanation or remove otherwise
|
||||
# additional_hours = fields.Integer('Additional Hours',
|
||||
# help="Provide the min hours value for \
|
||||
@@ -22,16 +22,16 @@ class ResPartner(models.Model):
|
||||
|
||||
# Compute and Search methods
|
||||
def _compute_reservations_count(self):
|
||||
hotel_reservation_obj = self.env['hotel.reservation']
|
||||
pms_reservation_obj = self.env['pms.reservation']
|
||||
for record in self:
|
||||
record.reservations_count = hotel_reservation_obj.search_count([
|
||||
record.reservations_count = pms_reservation_obj.search_count([
|
||||
('partner_id.id', '=', record.id)
|
||||
])
|
||||
|
||||
def _compute_folios_count(self):
|
||||
hotel_folio_obj = self.env['hotel.folio']
|
||||
pms_folio_obj = self.env['pms.folio']
|
||||
for record in self:
|
||||
record.folios_count = hotel_folio_obj.search_count([
|
||||
record.folios_count = pms_folio_obj.search_count([
|
||||
('partner_id.id', '=', record.id)
|
||||
])
|
||||
|
||||
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
|
||||
|
||||
|
||||
class HotelRoomAmenity(models.Model):
|
||||
_name = 'hotel.amenity'
|
||||
class PmsRoomAmenity(models.Model):
|
||||
_name = 'pms.amenity'
|
||||
_description = 'Room amenities'
|
||||
|
||||
# Fields declaration
|
||||
name = fields.Char('Amenity Name', translate=True, required=True)
|
||||
hotel_ids = fields.Many2many(
|
||||
'hotel.property',
|
||||
string='Hotels',
|
||||
pms_property_ids = fields.Many2many(
|
||||
'pms.property',
|
||||
string='Properties',
|
||||
required=False,
|
||||
ondelete='restrict')
|
||||
room_amenity_type_id = fields.Many2one(
|
||||
'hotel.amenity.type',
|
||||
'pms.amenity.type',
|
||||
'Amenity Category')
|
||||
default_code = fields.Char('Internal Reference')
|
||||
active = fields.Boolean('Active', default=True)
|
||||
|
||||
# TODO: Constrain coherence hotel_ids with amenity types hotel_ids
|
||||
# TODO: Constrain coherence pms_property_ids with amenity types pms_property_ids
|
||||
@@ -4,17 +4,17 @@
|
||||
from odoo import models, fields
|
||||
|
||||
|
||||
class HotelRoomAmenityType(models.Model):
|
||||
_name = 'hotel.amenity.type'
|
||||
class PmsRoomAmenityType(models.Model):
|
||||
_name = 'pms.amenity.type'
|
||||
_description = 'Amenities Type'
|
||||
|
||||
# Fields declaration
|
||||
name = fields.Char('Amenity Type Name', translate=True, required=True)
|
||||
hotel_ids = fields.Many2many(
|
||||
'hotel.property', string='Hotels', required=False, ondelete='restrict')
|
||||
room_amenity_ids = fields.One2many('hotel.amenity',
|
||||
pms_property_ids = fields.Many2many(
|
||||
'pms.property', string='Properties', required=False, ondelete='restrict')
|
||||
room_amenity_ids = fields.One2many('pms.amenity',
|
||||
'room_amenity_type_id',
|
||||
'Amenities in this category')
|
||||
active = fields.Boolean('Active', default=True)
|
||||
|
||||
# TODO: Constrain coherence hotel_ids with amenities hotel_ids
|
||||
# TODO: Constrain coherence pms_property_ids with amenities pms_property_ids
|
||||
@@ -4,8 +4,8 @@ from odoo import api, models, fields
|
||||
from odoo.addons import decimal_precision as dp
|
||||
|
||||
|
||||
class HotelBoardService(models.Model):
|
||||
_name = "hotel.board.service"
|
||||
class PmsBoardService(models.Model):
|
||||
_name = "pms.board.service"
|
||||
_description = "Board Services"
|
||||
|
||||
# Fields declaration
|
||||
@@ -16,16 +16,16 @@ class HotelBoardService(models.Model):
|
||||
required=True,
|
||||
index=True)
|
||||
board_service_line_ids = fields.One2many(
|
||||
'hotel.board.service.line',
|
||||
'hotel_board_service_id')
|
||||
hotel_ids = fields.Many2many(
|
||||
'hotel.property',
|
||||
string='Hotels',
|
||||
'pms.board.service.line',
|
||||
'pms_board_service_id')
|
||||
pms_property_ids = fields.Many2many(
|
||||
'pms.property',
|
||||
string='Properties',
|
||||
required=False,
|
||||
ondelete='restrict')
|
||||
hotel_board_service_room_type_ids = fields.One2many(
|
||||
'hotel.board.service.room.type',
|
||||
'hotel_board_service_id')
|
||||
pms_board_service_room_type_ids = fields.One2many(
|
||||
'pms.board.service.room.type',
|
||||
'pms_board_service_id')
|
||||
price_type = fields.Selection([
|
||||
('fixed', 'Fixed'),
|
||||
('percent', 'Percent')],
|
||||
@@ -4,8 +4,8 @@ from odoo import api, fields, models
|
||||
from odoo.addons import decimal_precision as dp
|
||||
|
||||
|
||||
class HotelBoardServiceLine(models.Model):
|
||||
_name = 'hotel.board.service.line'
|
||||
class PmsBoardServiceLine(models.Model):
|
||||
_name = 'pms.board.service.line'
|
||||
_description = 'Services on Board Service included'
|
||||
|
||||
# Default methods
|
||||
@@ -14,8 +14,8 @@ class HotelBoardServiceLine(models.Model):
|
||||
return self.product_id.list_price
|
||||
|
||||
# Fields declaration
|
||||
hotel_board_service_id = fields.Many2one(
|
||||
'hotel.board.service',
|
||||
pms_board_service_id = fields.Many2one(
|
||||
'pms.board.service',
|
||||
'Board Service',
|
||||
ondelete='cascade',
|
||||
required=True)
|
||||
@@ -23,9 +23,9 @@ class HotelBoardServiceLine(models.Model):
|
||||
'product.product',
|
||||
string='Product',
|
||||
required=True)
|
||||
hotel_ids = fields.Many2many(
|
||||
'hotel.property',
|
||||
related='hotel_board_service_id.hotel_ids')
|
||||
pms_property_ids = fields.Many2many(
|
||||
'pms.property',
|
||||
related='pms_board_service_id.pms_property_ids')
|
||||
amount = fields.Float(
|
||||
'Amount',
|
||||
digits=dp.get_precision('Product Price'),
|
||||
@@ -5,10 +5,10 @@ from odoo.addons import decimal_precision as dp
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
|
||||
class HotelBoardServiceRoomType(models.Model):
|
||||
_name = 'hotel.board.service.room.type'
|
||||
_table = 'hotel_board_service_room_type_rel'
|
||||
_rec_name = 'hotel_board_service_id'
|
||||
class PmsBoardServiceRoomType(models.Model):
|
||||
_name = 'pms.board.service.room.type'
|
||||
_table = 'pms_board_service_room_type_rel'
|
||||
_rec_name = 'pms_board_service_id'
|
||||
_log_access = False
|
||||
_description = 'Board Service included in Room'
|
||||
|
||||
@@ -19,23 +19,23 @@ class HotelBoardServiceRoomType(models.Model):
|
||||
for res in self:
|
||||
if res.pricelist_id:
|
||||
name = u'%s (%s)' % (
|
||||
res.hotel_board_service_id.name,
|
||||
res.pms_board_service_id.name,
|
||||
res.pricelist_id.name)
|
||||
else:
|
||||
name = u'%s (%s)' % (res.hotel_board_service_id.name,
|
||||
name = u'%s (%s)' % (res.pms_board_service_id.name,
|
||||
_('Generic'))
|
||||
result.append((res.id, name))
|
||||
return result
|
||||
|
||||
# Fields declaration
|
||||
hotel_board_service_id = fields.Many2one(
|
||||
'hotel.board.service',
|
||||
pms_board_service_id = fields.Many2one(
|
||||
'pms.board.service',
|
||||
string='Board Service',
|
||||
index=True,
|
||||
ondelete='cascade',
|
||||
required=True)
|
||||
hotel_room_type_id = fields.Many2one(
|
||||
'hotel.room.type',
|
||||
pms_room_type_id = fields.Many2one(
|
||||
'pms.room.type',
|
||||
string='Room Type',
|
||||
index=True,
|
||||
ondelete='cascade',
|
||||
@@ -45,11 +45,11 @@ class HotelBoardServiceRoomType(models.Model):
|
||||
string='Pricelist',
|
||||
required=False)
|
||||
board_service_line_ids = fields.One2many(
|
||||
'hotel.board.service.room.type.line',
|
||||
'hotel_board_service_room_type_id')
|
||||
hotel_id = fields.Many2one(
|
||||
'hotel.property',
|
||||
related='hotel_room_type_id.hotel_id')
|
||||
'pms.board.service.room.type.line',
|
||||
'pms_board_service_room_type_id')
|
||||
pms_property_id = fields.Many2one(
|
||||
'pms.property',
|
||||
related='pms_room_type_id.pms_property_id')
|
||||
price_type = fields.Selection([
|
||||
('fixed', 'Fixed'),
|
||||
('percent', 'Percent')],
|
||||
@@ -76,22 +76,22 @@ class HotelBoardServiceRoomType(models.Model):
|
||||
def constrains_pricelist_id(self):
|
||||
for record in self:
|
||||
if self.pricelist_id:
|
||||
board_pricelist = self.env['hotel.board.service.room.type'].search([
|
||||
board_pricelist = self.env['pms.board.service.room.type'].search([
|
||||
('pricelist_id', '=', record.pricelist_id.id),
|
||||
('hotel_room_type_id', '=', record.hotel_room_type_id.id),
|
||||
('hotel_board_service_id', '=',
|
||||
record.hotel_board_service_id.id),
|
||||
('pms_room_type_id', '=', record.pms_room_type_id.id),
|
||||
('pms_board_service_id', '=',
|
||||
record.pms_board_service_id.id),
|
||||
('id', '!=', record.id)
|
||||
])
|
||||
if board_pricelist:
|
||||
raise UserError(
|
||||
_("This Board Service in this Room can't repeat pricelist"))
|
||||
else:
|
||||
board_pricelist = self.env['hotel.board.service.room.type'].search([
|
||||
board_pricelist = self.env['pms.board.service.room.type'].search([
|
||||
('pricelist_id', '=', False),
|
||||
('hotel_room_type_id', '=', record.hotel_room_type_id.id),
|
||||
('hotel_board_service_id', '=',
|
||||
record.hotel_board_service_id.id),
|
||||
('pms_room_type_id', '=', record.pms_room_type_id.id),
|
||||
('pms_board_service_id', '=',
|
||||
record.pms_board_service_id.id),
|
||||
('id', '!=', record.id)
|
||||
])
|
||||
if board_pricelist:
|
||||
@@ -103,9 +103,9 @@ class HotelBoardServiceRoomType(models.Model):
|
||||
@api.multi
|
||||
def open_board_lines_form(self):
|
||||
action = self.env.ref(
|
||||
'hotel.action_hotel_board_service_room_type_view').read()[0]
|
||||
'pms.action_pms_board_service_room_type_view').read()[0]
|
||||
action['views'] = [(self.env.ref(
|
||||
'hotel.hotel_board_service_room_type_form').id, 'form')]
|
||||
'pms.pms_board_service_room_type_form').id, 'form')]
|
||||
action['res_id'] = self.id
|
||||
action['target'] = 'new'
|
||||
return action
|
||||
@@ -115,30 +115,30 @@ class HotelBoardServiceRoomType(models.Model):
|
||||
def init(self):
|
||||
self._cr.execute(
|
||||
'SELECT indexname FROM pg_indexes WHERE indexname = %s',
|
||||
('hotel_board_service_id_hotel_room_type_id_pricelist_id',))
|
||||
('pms_board_service_id_pms_room_type_id_pricelist_id',))
|
||||
if not self._cr.fetchone():
|
||||
self._cr.execute(
|
||||
'CREATE INDEX hotel_board_service_id_hotel_room_type_id_pricelist_id \
|
||||
ON hotel_board_service_room_type_rel \
|
||||
(hotel_board_service_id, hotel_room_type_id, pricelist_id)')
|
||||
'CREATE INDEX pms_board_service_id_pms_room_type_id_pricelist_id \
|
||||
ON pms_board_service_room_type_rel \
|
||||
(pms_board_service_id, pms_room_type_id, pricelist_id)')
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
if 'hotel_board_service_id' in vals:
|
||||
if 'pms_board_service_id' in vals:
|
||||
vals.update(
|
||||
self.prepare_board_service_reservation_ids(
|
||||
vals['hotel_board_service_id'])
|
||||
vals['pms_board_service_id'])
|
||||
)
|
||||
return super(HotelBoardServiceRoomType, self).create(vals)
|
||||
return super(PmsBoardServiceRoomType, self).create(vals)
|
||||
|
||||
@api.multi
|
||||
def write(self, vals):
|
||||
if 'hotel_board_service_id' in vals:
|
||||
if 'pms_board_service_id' in vals:
|
||||
vals.update(
|
||||
self.prepare_board_service_reservation_ids(
|
||||
vals['hotel_board_service_id'])
|
||||
vals['pms_board_service_id'])
|
||||
)
|
||||
return super(HotelBoardServiceRoomType, self).write(vals)
|
||||
return super(PmsBoardServiceRoomType, self).write(vals)
|
||||
|
||||
# Business methods
|
||||
@api.model
|
||||
@@ -147,7 +147,7 @@ class HotelBoardServiceRoomType(models.Model):
|
||||
Prepare line to price products config
|
||||
"""
|
||||
cmds = [(5, 0, 0)]
|
||||
board_service = self.env['hotel.board.service'].browse(
|
||||
board_service = self.env['pms.board.service'].browse(
|
||||
board_service_id)
|
||||
for line in board_service.board_service_line_ids:
|
||||
cmds.append((0, False, {
|
||||
@@ -4,13 +4,13 @@ from odoo import fields, models
|
||||
from odoo.addons import decimal_precision as dp
|
||||
|
||||
|
||||
class HotelBoardServiceRoomTypeLine(models.Model):
|
||||
_name = 'hotel.board.service.room.type.line'
|
||||
class PmsBoardServiceRoomTypeLine(models.Model):
|
||||
_name = 'pms.board.service.room.type.line'
|
||||
_description = 'Services on Board Service included in Room'
|
||||
|
||||
# Fields declaration
|
||||
hotel_board_service_room_type_id = fields.Many2one(
|
||||
'hotel.board.service.room.type',
|
||||
pms_board_service_room_type_id = fields.Many2one(
|
||||
'pms.board.service.room.type',
|
||||
'Board Service Room',
|
||||
ondelete='cascade',
|
||||
required=True)
|
||||
@@ -5,8 +5,8 @@ from odoo import models, fields
|
||||
|
||||
|
||||
# TODO: refactoring to cancellation.rule
|
||||
class HotelCancelationRule(models.Model):
|
||||
_name = 'hotel.cancelation.rule'
|
||||
class PmsCancelationRule(models.Model):
|
||||
_name = 'pms.cancelation.rule'
|
||||
_description = 'Cancelation Rules'
|
||||
|
||||
# Fields declaration
|
||||
@@ -15,9 +15,9 @@ class HotelCancelationRule(models.Model):
|
||||
'product.pricelist',
|
||||
'cancelation_rule_id',
|
||||
'Pricelist that use this rule')
|
||||
hotel_ids = fields.Many2many(
|
||||
'hotel.property',
|
||||
string='Hotels',
|
||||
pms_property_ids = fields.Many2many(
|
||||
'pms.property',
|
||||
string='Properties',
|
||||
required=False,
|
||||
ondelete='restrict')
|
||||
active = fields.Boolean('Active', default=True)
|
||||
@@ -37,4 +37,4 @@ class HotelCancelationRule(models.Model):
|
||||
('days', 'Specify days')], 'No Show apply on', default='all')
|
||||
days_noshow = fields.Integer('NoShow first days', default="2")
|
||||
|
||||
# TODO: Constrain coherence hotel_ids pricelist and cancelation_rules
|
||||
# TODO: Constrain coherence pms_property_ids pricelist and cancelation_rules
|
||||
@@ -9,13 +9,13 @@ from odoo.tools import (
|
||||
DEFAULT_SERVER_DATE_FORMAT)
|
||||
|
||||
|
||||
class HotelCheckinPartner(models.Model):
|
||||
_name = 'hotel.checkin.partner'
|
||||
class PmsCheckinPartner(models.Model):
|
||||
_name = 'pms.checkin.partner'
|
||||
|
||||
# Default Methods ang Gets
|
||||
def _default_reservation_id(self):
|
||||
if 'reservation_id' in self.env.context:
|
||||
reservation = self.env['hotel.reservation'].browse([
|
||||
reservation = self.env['pms.reservation'].browse([
|
||||
self.env.context['reservation_id']
|
||||
])
|
||||
return reservation
|
||||
@@ -23,7 +23,7 @@ class HotelCheckinPartner(models.Model):
|
||||
|
||||
def _default_partner_id(self):
|
||||
if 'reservation_id' in self.env.context:
|
||||
reservation = self.env['hotel.reservation'].browse([
|
||||
reservation = self.env['pms.reservation'].browse([
|
||||
self.env.context['reservation_id']
|
||||
])
|
||||
partner_ids = []
|
||||
@@ -43,12 +43,12 @@ class HotelCheckinPartner(models.Model):
|
||||
|
||||
def _default_folio_id(self):
|
||||
if 'folio_id' in self.env.context:
|
||||
folio = self.env['hotel.folio'].browse([
|
||||
folio = self.env['pms.folio'].browse([
|
||||
self.env.context['folio_id']
|
||||
])
|
||||
return folio
|
||||
if 'reservation_id' in self.env.context:
|
||||
folio = self.env['hotel.reservation'].browse([
|
||||
folio = self.env['pms.reservation'].browse([
|
||||
self.env.context['reservation_id']
|
||||
]).folio_id
|
||||
return folio
|
||||
@@ -56,7 +56,7 @@ class HotelCheckinPartner(models.Model):
|
||||
|
||||
def _default_enter_date(self):
|
||||
if 'reservation_id' in self.env.context:
|
||||
reservation = self.env['hotel.reservation'].browse([
|
||||
reservation = self.env['pms.reservation'].browse([
|
||||
self.env.context['reservation_id']
|
||||
])
|
||||
return reservation.checkin
|
||||
@@ -64,15 +64,15 @@ class HotelCheckinPartner(models.Model):
|
||||
|
||||
def _default_exit_date(self):
|
||||
if 'reservation_id' in self.env.context:
|
||||
reservation = self.env['hotel.reservation'].browse([
|
||||
reservation = self.env['pms.reservation'].browse([
|
||||
self.env.context['reservation_id']
|
||||
])
|
||||
return reservation.checkout
|
||||
return False
|
||||
|
||||
@api.model
|
||||
def _get_default_hotel(self):
|
||||
return self.env.user.hotel_id
|
||||
def _get_default_pms_property(self):
|
||||
return self.env.user.pms_property_id
|
||||
|
||||
# Fields declaration
|
||||
partner_id = fields.Many2one(
|
||||
@@ -80,16 +80,16 @@ class HotelCheckinPartner(models.Model):
|
||||
default=_default_partner_id,
|
||||
required=True)
|
||||
reservation_id = fields.Many2one(
|
||||
'hotel.reservation',
|
||||
'pms.reservation',
|
||||
default=_default_reservation_id)
|
||||
folio_id = fields.Many2one(
|
||||
'hotel.folio',
|
||||
'pms.folio',
|
||||
default=_default_folio_id,
|
||||
readonly=True,
|
||||
required=True)
|
||||
hotel_id = fields.Many2one(
|
||||
'hotel.property',
|
||||
default=_get_default_hotel,
|
||||
pms_property_id = fields.Many2one(
|
||||
'pms.property',
|
||||
default=_get_default_pms_property,
|
||||
required=True)
|
||||
email = fields.Char('E-mail', related='partner_id.email')
|
||||
mobile = fields.Char('Mobile', related='partner_id.mobile')
|
||||
@@ -170,7 +170,7 @@ class HotelCheckinPartner(models.Model):
|
||||
master_reservation = \
|
||||
record.reservation_id.parent_reservation or \
|
||||
record.reservation_id
|
||||
splitted_reservs = self.env['hotel.reservation'].search([
|
||||
splitted_reservs = self.env['pms.reservation'].search([
|
||||
('splitted', '=', True),
|
||||
'|',
|
||||
('parent_reservation', '=', master_reservation.id),
|
||||
@@ -200,7 +200,7 @@ class HotelCheckinPartner(models.Model):
|
||||
# ORM Overrides
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
record = super(HotelCheckinPartner, self).create(vals)
|
||||
record = super(PmsCheckinPartner, self).create(vals)
|
||||
if vals.get('auto_booking', False):
|
||||
record.action_on_board()
|
||||
return record
|
||||
@@ -208,17 +208,17 @@ class HotelCheckinPartner(models.Model):
|
||||
# Business methods
|
||||
def _get_arrival_hour(self):
|
||||
self.ensure_one()
|
||||
tz_hotel = self.env.user.hotel_id.tz
|
||||
tz_property = self.env.user.pms_property_id.tz
|
||||
today = fields.Datetime.context_timestamp(
|
||||
self.with_context(tz=tz_hotel),
|
||||
self.with_context(tz=tz_property),
|
||||
datetime.datetime.strptime(fields.Date.today(),
|
||||
DEFAULT_SERVER_DATE_FORMAT))
|
||||
default_arrival_hour = self.env.user.hotel_id.default_arrival_hour
|
||||
default_arrival_hour = self.env.user.pms_property_id.default_arrival_hour
|
||||
if self.reservation_id.checkin < today.strftime(
|
||||
DEFAULT_SERVER_DATE_FORMAT):
|
||||
return default_arrival_hour
|
||||
now = fields.Datetime.context_timestamp(
|
||||
self.with_context(tz=tz_hotel),
|
||||
self.with_context(tz=tz_property),
|
||||
datetime.datetime.strptime(fields.Datetime.now(),
|
||||
DEFAULT_SERVER_DATETIME_FORMAT))
|
||||
arrival_hour = now.strftime("%H:%M")
|
||||
@@ -226,17 +226,17 @@ class HotelCheckinPartner(models.Model):
|
||||
|
||||
def _get_departure_hour(self):
|
||||
self.ensure_one()
|
||||
tz_hotel = self.env.user.hotel_id.tz
|
||||
tz_property = self.env.user.pms_property_id.tz
|
||||
today = fields.Datetime.context_timestamp(
|
||||
self.with_context(tz=tz_hotel),
|
||||
self.with_context(tz=tz_property),
|
||||
datetime.datetime.strptime(fields.Date.today(),
|
||||
DEFAULT_SERVER_DATE_FORMAT))
|
||||
default_departure_hour = self.env.user.hotel_id.default_departure_hour
|
||||
default_departure_hour = self.env.user.pms_property_id.default_departure_hour
|
||||
if self.reservation_id.checkout < today.strftime(
|
||||
DEFAULT_SERVER_DATE_FORMAT):
|
||||
return default_departure_hour
|
||||
now = fields.Datetime.context_timestamp(
|
||||
self.with_context(tz=tz_hotel),
|
||||
self.with_context(tz=tz_property),
|
||||
datetime.datetime.strptime(fields.Datetime.now(),
|
||||
DEFAULT_SERVER_DATETIME_FORMAT))
|
||||
departure_hour = now.strftime("%H:%M")
|
||||
@@ -3,8 +3,8 @@
|
||||
from odoo import models, fields
|
||||
|
||||
|
||||
class HotelFloor(models.Model):
|
||||
_name = "hotel.floor"
|
||||
class PmsFloor(models.Model):
|
||||
_name = "pms.floor"
|
||||
_description = "Ubication"
|
||||
|
||||
# Fields declaration
|
||||
@@ -13,9 +13,9 @@ class HotelFloor(models.Model):
|
||||
size=64,
|
||||
required=True,
|
||||
index=True)
|
||||
hotel_ids = fields.Many2many(
|
||||
'hotel.property',
|
||||
string='Hotels',
|
||||
pms_property_ids = fields.Many2many(
|
||||
'pms.property',
|
||||
string='Properties',
|
||||
required=False,
|
||||
ondelete='restrict')
|
||||
sequence = fields.Integer('Sequence')
|
||||
@@ -5,9 +5,9 @@
|
||||
from odoo import models, fields, api, _
|
||||
|
||||
|
||||
class HotelFolio(models.Model):
|
||||
_name = 'hotel.folio'
|
||||
_description = 'Hotel Folio'
|
||||
class PmsFolio(models.Model):
|
||||
_name = 'pms.folio'
|
||||
_description = 'PMS Folio'
|
||||
_inherit = ['mail.thread', 'mail.activity.mixin', 'portal.mixin']
|
||||
_order = 'id'
|
||||
|
||||
@@ -19,7 +19,7 @@ class HotelFolio(models.Model):
|
||||
this method return diff_invoicing = True, else, return False
|
||||
"""
|
||||
if 'folio_id' in self.env.context:
|
||||
folio = self.env['hotel.folio'].browse([
|
||||
folio = self.env['pms.folio'].browse([
|
||||
self.env.context['folio_id']
|
||||
])
|
||||
if folio.partner_id.id == folio.partner_invoice_id.id:
|
||||
@@ -31,8 +31,8 @@ class HotelFolio(models.Model):
|
||||
return self.env['crm.team']._get_default_team_id()
|
||||
|
||||
@api.model
|
||||
def _get_default_hotel(self):
|
||||
return self.env.user.hotel_id
|
||||
def _get_default_pms_property(self):
|
||||
return self.env.user.pms_property_id
|
||||
|
||||
# Fields declaration
|
||||
name = fields.Char(
|
||||
@@ -40,32 +40,32 @@ class HotelFolio(models.Model):
|
||||
readonly=True,
|
||||
index=True,
|
||||
default=lambda self: _('New'))
|
||||
hotel_id = fields.Many2one(
|
||||
'hotel.property',
|
||||
default=_get_default_hotel,
|
||||
pms_property_id = fields.Many2one(
|
||||
'pms.property',
|
||||
default=_get_default_pms_property,
|
||||
required=True)
|
||||
partner_id = fields.Many2one(
|
||||
'res.partner',
|
||||
track_visibility='onchange',
|
||||
ondelete='restrict')
|
||||
reservation_ids = fields.One2many(
|
||||
'hotel.reservation',
|
||||
'pms.reservation',
|
||||
'folio_id',
|
||||
readonly=False,
|
||||
states={'done': [('readonly', True)]},
|
||||
help="Hotel room reservation detail.",)
|
||||
help="Room reservation detail.",)
|
||||
service_ids = fields.One2many(
|
||||
'hotel.service',
|
||||
'pms.service',
|
||||
'folio_id',
|
||||
readonly=False,
|
||||
states={'done': [('readonly', True)]},
|
||||
help="Hotel services detail provide to customer and it will "
|
||||
help="Services detail provide to customer and it will "
|
||||
"include in main Invoice.")
|
||||
company_id = fields.Many2one(
|
||||
'res.company',
|
||||
'Company',
|
||||
default=lambda self: self.env['res.company']._company_default_get(
|
||||
'hotel.folio'))
|
||||
'pms.folio'))
|
||||
analytic_account_id = fields.Many2one(
|
||||
'account.analytic.account',
|
||||
'Analytic Account',
|
||||
@@ -111,7 +111,7 @@ class HotelFolio(models.Model):
|
||||
'account.payment.term',
|
||||
string='Payment Terms')
|
||||
checkin_partner_ids = fields.One2many(
|
||||
'hotel.checkin.partner',
|
||||
'pms.checkin.partner',
|
||||
'folio_id')
|
||||
invoice_ids = fields.Many2many(
|
||||
'account.invoice',
|
||||
@@ -401,7 +401,7 @@ class HotelFolio(models.Model):
|
||||
for rline in self.reservation_ids:
|
||||
if rline.splitted:
|
||||
master_reservation = rline.parent_reservation or rline
|
||||
has_to_send = self.env['hotel.reservation'].search_count([
|
||||
has_to_send = self.env['pms.reservation'].search_count([
|
||||
('splitted', '=', True),
|
||||
('folio_id', '=', self.id),
|
||||
('to_send', '=', True),
|
||||
@@ -424,7 +424,7 @@ class HotelFolio(models.Model):
|
||||
for rline in self.reservation_ids:
|
||||
if rline.splitted:
|
||||
master_reservation = rline.parent_reservation or rline
|
||||
has_to_send = self.env['hotel.reservation'].search_count([
|
||||
has_to_send = self.env['pms.reservation'].search_count([
|
||||
('splitted', '=', True),
|
||||
('folio_id', '=', self.id),
|
||||
('to_send', '=', True),
|
||||
@@ -447,7 +447,7 @@ class HotelFolio(models.Model):
|
||||
for rline in self.reservation_ids:
|
||||
if rline.splitted:
|
||||
master_reservation = rline.parent_reservation or rline
|
||||
nreservs = self.env['hotel.reservation'].search_count([
|
||||
nreservs = self.env['pms.reservation'].search_count([
|
||||
('splitted', '=', True),
|
||||
('folio_id', '=', self.id),
|
||||
('to_send', '=', True),
|
||||
@@ -487,7 +487,7 @@ class HotelFolio(models.Model):
|
||||
addr = self.partner_id.address_get(['invoice'])
|
||||
pricelist = self.partner_id.property_product_pricelist and \
|
||||
self.partner_id.property_product_pricelist.id or \
|
||||
self.env.user.hotel_id.default_pricelist_id.id
|
||||
self.env.user.pms_property_id.default_pricelist_id.id
|
||||
values = {
|
||||
'pricelist_id': pricelist,
|
||||
'payment_term_id': self.partner_id.property_payment_term_id and
|
||||
@@ -509,7 +509,7 @@ class HotelFolio(models.Model):
|
||||
@api.multi
|
||||
@api.onchange('pricelist_id')
|
||||
def onchange_pricelist_id(self):
|
||||
values = {'reservation_type': self.env['hotel.folio'].
|
||||
values = {'reservation_type': self.env['pms.folio'].
|
||||
calcule_reservation_type(
|
||||
self.pricelist_id.is_staff,
|
||||
self.reservation_type
|
||||
@@ -522,7 +522,7 @@ class HotelFolio(models.Model):
|
||||
self.ensure_one()
|
||||
partner = self.partner_id.id
|
||||
amount = self.pending_amount
|
||||
view_id = self.env.ref('hotel.account_payment_view_form_folio').id
|
||||
view_id = self.env.ref('pms.account_payment_view_form_folio').id
|
||||
return{
|
||||
'name': _('Register Payment'),
|
||||
'view_type': 'form',
|
||||
@@ -590,7 +590,7 @@ class HotelFolio(models.Model):
|
||||
'name': _('Checkins'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'tree,form',
|
||||
'res_model': 'hotel.checkin.partner',
|
||||
'res_model': 'pms.checkin.partner',
|
||||
'type': 'ir.actions.act_window',
|
||||
'domain': [('reservation_id', 'in', rooms)],
|
||||
'target': 'new',
|
||||
@@ -610,7 +610,7 @@ class HotelFolio(models.Model):
|
||||
ir_model_data = self.env['ir.model.data']
|
||||
try:
|
||||
template_id = ir_model_data.get_object_reference(
|
||||
'hotel',
|
||||
'pms',
|
||||
'email_template_reservation')[1]
|
||||
except ValueError:
|
||||
template_id = False
|
||||
@@ -622,7 +622,7 @@ class HotelFolio(models.Model):
|
||||
compose_form_id = False
|
||||
ctx = dict()
|
||||
ctx.update({
|
||||
'default_model': 'hotel.folio',
|
||||
'default_model': 'pms.folio',
|
||||
'default_res_id': self._ids[0],
|
||||
'default_use_template': bool(template_id),
|
||||
'default_template_id': template_id,
|
||||
@@ -656,8 +656,8 @@ class HotelFolio(models.Model):
|
||||
ir_model_data = self.env['ir.model.data']
|
||||
try:
|
||||
template_id = ir_model_data.get_object_reference(
|
||||
'hotel',
|
||||
'mail_template_hotel_exit')[1]
|
||||
'pms',
|
||||
'mail_template_pms_exit')[1]
|
||||
except ValueError:
|
||||
template_id = False
|
||||
try:
|
||||
@@ -668,7 +668,7 @@ class HotelFolio(models.Model):
|
||||
compose_form_id = False
|
||||
ctx = dict()
|
||||
ctx.update({
|
||||
'default_model': 'hotel.reservation',
|
||||
'default_model': 'pms.reservation',
|
||||
'default_res_id': self._ids[0],
|
||||
'default_use_template': bool(template_id),
|
||||
'default_template_id': template_id,
|
||||
@@ -699,8 +699,8 @@ class HotelFolio(models.Model):
|
||||
ir_model_data = self.env['ir.model.data']
|
||||
try:
|
||||
template_id = ir_model_data.get_object_reference(
|
||||
'hotel',
|
||||
'mail_template_hotel_cancel')[1]
|
||||
'pms',
|
||||
'mail_template_pms_cancel')[1]
|
||||
except ValueError:
|
||||
template_id = False
|
||||
try:
|
||||
@@ -711,7 +711,7 @@ class HotelFolio(models.Model):
|
||||
compose_form_id = False
|
||||
ctx = dict()
|
||||
ctx.update({
|
||||
'default_model': 'hotel.reservation',
|
||||
'default_model': 'pms.reservation',
|
||||
'default_res_id': self._ids[0],
|
||||
'default_use_template': bool(template_id),
|
||||
'default_template_id': template_id,
|
||||
@@ -738,12 +738,12 @@ class HotelFolio(models.Model):
|
||||
if 'company_id' in vals:
|
||||
vals['name'] = self.env['ir.sequence'].with_context(
|
||||
force_company=vals['company_id']
|
||||
).next_by_code('hotel.folio') or _('New')
|
||||
).next_by_code('pms.folio') or _('New')
|
||||
else:
|
||||
vals['name'] = self.env['ir.sequence'].next_by_code(
|
||||
'hotel.folio') or _('New')
|
||||
'pms.folio') or _('New')
|
||||
vals.update(self._prepare_add_missing_fields(vals))
|
||||
result = super(HotelFolio, self).create(vals)
|
||||
result = super(PmsFolio, self).create(vals)
|
||||
return result
|
||||
|
||||
# Business methods
|
||||
@@ -7,46 +7,46 @@ from odoo import models, fields, api, _
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class HotelProperty(models.Model):
|
||||
_name = 'hotel.property'
|
||||
_description = 'Hotel'
|
||||
class PmsProperty(models.Model):
|
||||
_name = 'pms.property'
|
||||
_description = 'Property'
|
||||
_inherits = {'res.partner': 'partner_id'}
|
||||
|
||||
# Fields declaration
|
||||
partner_id = fields.Many2one(
|
||||
'res.partner',
|
||||
'Hotel Property',
|
||||
'Property',
|
||||
required=True,
|
||||
delegate=True,
|
||||
ondelete='cascade')
|
||||
company_id = fields.Many2one(
|
||||
'res.company',
|
||||
required=True,
|
||||
help='The company that owns or operates this hotel.')
|
||||
help='The company that owns or operates this property.')
|
||||
user_ids = fields.Many2many(
|
||||
'res.users',
|
||||
'hotel_property_users_rel',
|
||||
'hotel_id',
|
||||
'pms_property_users_rel',
|
||||
'pms_property_id',
|
||||
'user_id',
|
||||
string='Accepted Users')
|
||||
room_type_ids = fields.One2many(
|
||||
'hotel.room.type',
|
||||
'hotel_id',
|
||||
'pms.room.type',
|
||||
'pms_property_id',
|
||||
'Room Types')
|
||||
room_ids = fields.One2many(
|
||||
'hotel.room',
|
||||
'hotel_id',
|
||||
'pms.room',
|
||||
'pms_property_id',
|
||||
'Rooms')
|
||||
default_pricelist_id = fields.Many2one(
|
||||
'product.pricelist',
|
||||
string='Product Pricelist',
|
||||
required=True,
|
||||
help='The default pricelist used in this hotel.')
|
||||
help='The default pricelist used in this property.')
|
||||
default_restriction_id = fields.Many2one(
|
||||
'hotel.room.type.restriction',
|
||||
'pms.room.type.restriction',
|
||||
'Restriction Plan',
|
||||
required=True,
|
||||
help='The default restriction plan used in this hotel.')
|
||||
help='The default restriction plan used in this property.')
|
||||
default_arrival_hour = fields.Char('Arrival Hour (GMT)',
|
||||
help="HH:mm Format", default="14:00")
|
||||
default_departure_hour = fields.Char('Departure Hour (GMT)',
|
||||
@@ -16,9 +16,9 @@ import logging
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class HotelReservation(models.Model):
|
||||
_name = 'hotel.reservation'
|
||||
_description = 'Hotel Reservation'
|
||||
class PmsReservation(models.Model):
|
||||
_name = 'pms.reservation'
|
||||
_description = 'Reservation'
|
||||
_inherit = ['mail.thread', 'mail.activity.mixin', 'portal.mixin']
|
||||
_order = "last_updated_res desc, name"
|
||||
|
||||
@@ -26,36 +26,36 @@ class HotelReservation(models.Model):
|
||||
def _get_default_checkin(self):
|
||||
folio = False
|
||||
if 'folio_id' in self._context:
|
||||
folio = self.env['hotel.folio'].search([
|
||||
folio = self.env['pms.folio'].search([
|
||||
('id', '=', self._context['folio_id'])
|
||||
])
|
||||
if folio and folio.reservation_ids:
|
||||
return folio.reservation_ids[0].checkin
|
||||
else:
|
||||
tz_hotel = self.env.user.hotel_id.tz
|
||||
today = fields.Date.context_today(self.with_context(tz=tz_hotel))
|
||||
tz_property = self.env.user.pms_property_id.tz
|
||||
today = fields.Date.context_today(self.with_context(tz=tz_property))
|
||||
return fields.Date.from_string(today).strftime(
|
||||
DEFAULT_SERVER_DATE_FORMAT)
|
||||
|
||||
def _get_default_checkout(self):
|
||||
folio = False
|
||||
if 'folio_id' in self._context:
|
||||
folio = self.env['hotel.folio'].search([
|
||||
folio = self.env['pms.folio'].search([
|
||||
('id', '=', self._context['folio_id'])
|
||||
])
|
||||
if folio and folio.reservation_ids:
|
||||
return folio.reservation_ids[0].checkout
|
||||
else:
|
||||
tz_hotel = self.env.user.hotel_id.tz
|
||||
today = fields.Date.context_today(self.with_context(tz=tz_hotel))
|
||||
tz_property = self.env.user.pms_property_id.tz
|
||||
today = fields.Date.context_today(self.with_context(tz=tz_property))
|
||||
return (fields.Date.from_string(today) + timedelta(days=1)).\
|
||||
strftime(DEFAULT_SERVER_DATE_FORMAT)
|
||||
|
||||
def _get_default_arrival_hour(self):
|
||||
folio = False
|
||||
default_arrival_hour = self.env.user.hotel_id.default_arrival_hour
|
||||
default_arrival_hour = self.env.user.pms_property_id.default_arrival_hour
|
||||
if 'folio_id' in self._context:
|
||||
folio = self.env['hotel.folio'].search([
|
||||
folio = self.env['pms.folio'].search([
|
||||
('id', '=', self._context['folio_id'])
|
||||
])
|
||||
if folio and folio.reservation_ids:
|
||||
@@ -65,9 +65,9 @@ class HotelReservation(models.Model):
|
||||
|
||||
def _get_default_departure_hour(self):
|
||||
folio = False
|
||||
default_departure_hour = self.env.user.hotel_id.default_departure_hour
|
||||
default_departure_hour = self.env.user.pms_property_id.default_departure_hour
|
||||
if 'folio_id' in self._context:
|
||||
folio = self.env['hotel.folio'].search([
|
||||
folio = self.env['pms.folio'].search([
|
||||
('id', '=', self._context['folio_id'])
|
||||
])
|
||||
if folio and folio.reservation_ids:
|
||||
@@ -82,7 +82,7 @@ class HotelReservation(models.Model):
|
||||
this method return diff_invoicing = True, else, return False
|
||||
"""
|
||||
if 'reservation_id' in self.env.context:
|
||||
reservation = self.env['hotel.reservation'].browse([
|
||||
reservation = self.env['pms.reservation'].browse([
|
||||
self.env.context['reservation_id']
|
||||
])
|
||||
if reservation.partner_id.id == reservation.partner_invoice_id.id:
|
||||
@@ -92,20 +92,20 @@ class HotelReservation(models.Model):
|
||||
# Fields declaration
|
||||
name = fields.Text('Reservation Description', required=True)
|
||||
room_id = fields.Many2one(
|
||||
'hotel.room',
|
||||
'pms.room',
|
||||
string='Room',
|
||||
track_visibility='onchange',
|
||||
ondelete='restrict')
|
||||
folio_id = fields.Many2one(
|
||||
'hotel.folio',
|
||||
'pms.folio',
|
||||
string='Folio',
|
||||
track_visibility='onchange',
|
||||
ondelete='cascade')
|
||||
board_service_room_id = fields.Many2one(
|
||||
'hotel.board.service.room.type',
|
||||
'pms.board.service.room.type',
|
||||
string='Board Service')
|
||||
room_type_id = fields.Many2one(
|
||||
'hotel.room.type',
|
||||
'pms.room.type',
|
||||
string='Room Type',
|
||||
required=True,
|
||||
track_visibility='onchange')
|
||||
@@ -128,27 +128,27 @@ class HotelReservation(models.Model):
|
||||
string='Company',
|
||||
store=True,
|
||||
readonly=True)
|
||||
hotel_id = fields.Many2one(
|
||||
'hotel.property',
|
||||
pms_property_id = fields.Many2one(
|
||||
'pms.property',
|
||||
store=True,
|
||||
readonly=True,
|
||||
related='folio_id.hotel_id')
|
||||
related='folio_id.pms_property_id')
|
||||
reservation_line_ids = fields.One2many(
|
||||
'hotel.reservation.line',
|
||||
'pms.reservation.line',
|
||||
'reservation_id',
|
||||
required=True)
|
||||
service_ids = fields.One2many(
|
||||
'hotel.service',
|
||||
'pms.service',
|
||||
'reservation_id')
|
||||
pricelist_id = fields.Many2one(
|
||||
'product.pricelist',
|
||||
related='folio_id.pricelist_id')
|
||||
# TODO: Warning Mens to update pricelist
|
||||
checkin_partner_ids = fields.One2many(
|
||||
'hotel.checkin.partner',
|
||||
'pms.checkin.partner',
|
||||
'reservation_id')
|
||||
parent_reservation = fields.Many2one(
|
||||
'hotel.reservation',
|
||||
'pms.reservation',
|
||||
string='Parent Reservation')
|
||||
segmentation_ids = fields.Many2many(
|
||||
related='folio_id.segmentation_ids')
|
||||
@@ -232,7 +232,7 @@ class HotelReservation(models.Model):
|
||||
partner_invoice_lang = fields.Selection(related="partner_invoice_id.lang")
|
||||
# TODO: As checkin_partner_count is a computed field, it can't not
|
||||
# be used in a domain filer Non-stored field
|
||||
# hotel.reservation.checkin_partner_count cannot be searched
|
||||
# pms.reservation.checkin_partner_count cannot be searched
|
||||
# searching on a computed field can also be enabled by setting the
|
||||
# search parameter. The value is a method name returning a Domains
|
||||
checkin_partner_count = fields.Integer(
|
||||
@@ -498,7 +498,7 @@ class HotelReservation(models.Model):
|
||||
if not self.overbooking \
|
||||
and self.state not in ('cancelled') \
|
||||
and not self._context.get("ignore_avail_restrictions", False):
|
||||
occupied = self.env['hotel.reservation'].get_reservations(
|
||||
occupied = self.env['pms.reservation'].get_reservations(
|
||||
self.checkin,
|
||||
(fields.Date.from_string(self.checkout) - timedelta(days=1)).
|
||||
strftime(DEFAULT_SERVER_DATE_FORMAT))
|
||||
@@ -547,7 +547,7 @@ class HotelReservation(models.Model):
|
||||
addr = self.partner_id.address_get(['invoice'])
|
||||
pricelist = self.partner_id.property_product_pricelist and \
|
||||
self.partner_id.property_product_pricelist.id or \
|
||||
self.env.user.hotel_id.default_pricelist_id.id
|
||||
self.env.user.pms_property_id.default_pricelist_id.id
|
||||
values = {
|
||||
'pricelist_id': pricelist,
|
||||
'partner_invoice_id': addr['invoice'],
|
||||
@@ -557,7 +557,7 @@ class HotelReservation(models.Model):
|
||||
@api.multi
|
||||
@api.onchange('pricelist_id')
|
||||
def onchange_pricelist_id(self):
|
||||
values = {'reservation_type': self.env['hotel.folio'].
|
||||
values = {'reservation_type': self.env['pms.folio'].
|
||||
calcule_reservation_type(
|
||||
self.pricelist_id.is_staff,
|
||||
self.reservation_type)}
|
||||
@@ -648,7 +648,7 @@ class HotelReservation(models.Model):
|
||||
if self.overbooking or self.reselling or \
|
||||
self.state in ('cancelled'):
|
||||
return
|
||||
occupied = self.env['hotel.reservation'].get_reservations(
|
||||
occupied = self.env['pms.reservation'].get_reservations(
|
||||
self.checkin,
|
||||
(fields.Date.from_string(self.checkout) - timedelta(days=1)).
|
||||
strftime(DEFAULT_SERVER_DATE_FORMAT))
|
||||
@@ -682,11 +682,11 @@ class HotelReservation(models.Model):
|
||||
'folio_id': self.folio_id.id,
|
||||
'reservation_id': self.id,
|
||||
}
|
||||
line = self.env['hotel.service'].new(res)
|
||||
line = self.env['pms.service'].new(res)
|
||||
res.update(
|
||||
self.env['hotel.service']._prepare_add_missing_fields(
|
||||
self.env['pms.service']._prepare_add_missing_fields(
|
||||
res))
|
||||
res.update(self.env['hotel.service'].prepare_service_ids(
|
||||
res.update(self.env['pms.service'].prepare_service_ids(
|
||||
dfrom=self.checkin,
|
||||
days=self.nights,
|
||||
per_person=product.per_person,
|
||||
@@ -716,7 +716,7 @@ class HotelReservation(models.Model):
|
||||
action['res_id'] = invoices.ids[0]
|
||||
else:
|
||||
action = self.env.ref(
|
||||
'hotel.action_view_folio_advance_payment_inv').read()[0]
|
||||
'pms.action_view_folio_advance_payment_inv').read()[0]
|
||||
action['context'] = {'default_reservation_id': self.id,
|
||||
'default_folio_id': self.folio_id.id}
|
||||
return action
|
||||
@@ -724,7 +724,7 @@ class HotelReservation(models.Model):
|
||||
@api.multi
|
||||
def create_invoice(self):
|
||||
action = self.env.ref(
|
||||
'hotel.action_view_folio_advance_payment_inv').read()[0]
|
||||
'pms.action_view_folio_advance_payment_inv').read()[0]
|
||||
action['context'] = {'default_reservation_id': self.id,
|
||||
'default_folio_id': self.folio_id.id}
|
||||
return action
|
||||
@@ -732,10 +732,10 @@ class HotelReservation(models.Model):
|
||||
@api.multi
|
||||
def open_folio(self):
|
||||
action = self.env.ref(
|
||||
'hotel.open_hotel_folio1_form_tree_all').read()[0]
|
||||
'pms.open_pms_folio1_form_tree_all').read()[0]
|
||||
if self.folio_id:
|
||||
action['views'] = [
|
||||
(self.env.ref('hotel.hotel_folio_view_form').id, 'form')]
|
||||
(self.env.ref('pms.pms_folio_view_form').id, 'form')]
|
||||
action['res_id'] = self.folio_id.id
|
||||
else:
|
||||
action = {'type': 'ir.actions.act_window_close'}
|
||||
@@ -744,9 +744,9 @@ class HotelReservation(models.Model):
|
||||
@api.multi
|
||||
def open_reservation_form(self):
|
||||
action = self.env.ref(
|
||||
'hotel.open_hotel_reservation_form_tree_all').read()[0]
|
||||
'pms.open_pms_reservation_form_tree_all').read()[0]
|
||||
action['views'] = [
|
||||
(self.env.ref('hotel.hotel_reservation_view_form').id, 'form')]
|
||||
(self.env.ref('pms.pms_reservation_view_form').id, 'form')]
|
||||
action['res_id'] = self.id
|
||||
return action
|
||||
|
||||
@@ -761,7 +761,7 @@ class HotelReservation(models.Model):
|
||||
partner = self.partner_id.id
|
||||
amount = min(self.price_room_services_set, self.folio_pending_amount)
|
||||
note = self.folio_id.name + ' (' + self.name + ')'
|
||||
view_id = self.env.ref('hotel.account_payment_view_form_folio').id
|
||||
view_id = self.env.ref('pms.account_payment_view_form_folio').id
|
||||
return{
|
||||
'name': _('Register Payment'),
|
||||
'view_type': 'form',
|
||||
@@ -792,7 +792,7 @@ class HotelReservation(models.Model):
|
||||
('folio_id.name', operator, name),
|
||||
('room_id.name', operator, name)
|
||||
]
|
||||
return super(HotelReservation, self).name_search(
|
||||
return super(PmsReservation, self).name_search(
|
||||
name='', args=args, operator='ilike', limit=limit)
|
||||
|
||||
@api.multi
|
||||
@@ -809,14 +809,14 @@ class HotelReservation(models.Model):
|
||||
vals.update(self._autoassign(vals))
|
||||
vals.update(self._prepare_add_missing_fields(vals))
|
||||
if 'folio_id' in vals and 'channel_type' not in vals:
|
||||
folio = self.env["hotel.folio"].browse(vals['folio_id'])
|
||||
folio = self.env["pms.folio"].browse(vals['folio_id'])
|
||||
vals.update({'channel_type': folio.channel_type})
|
||||
elif 'partner_id' in vals:
|
||||
folio_vals = {'partner_id': int(vals.get('partner_id')),
|
||||
'channel_type': vals.get('channel_type')}
|
||||
# Create the folio in case of need
|
||||
# (To allow to create reservations direct)
|
||||
folio = self.env["hotel.folio"].create(folio_vals)
|
||||
folio = self.env["pms.folio"].create(folio_vals)
|
||||
vals.update({'folio_id': folio.id,
|
||||
'reservation_type': vals.get('reservation_type'),
|
||||
'channel_type': vals.get('channel_type')})
|
||||
@@ -825,7 +825,7 @@ class HotelReservation(models.Model):
|
||||
if service[2]:
|
||||
service[2]['folio_id'] = folio.id
|
||||
user = self.env['res.users'].browse(self.env.uid)
|
||||
if user.has_group('hotel.group_hotel_call'):
|
||||
if user.has_group('pms.group_pms_call'):
|
||||
vals.update({
|
||||
'to_assign': True,
|
||||
'channel_type': 'call'
|
||||
@@ -848,7 +848,7 @@ class HotelReservation(models.Model):
|
||||
and 'real_checkin' not in vals and 'real_checkout' not in vals:
|
||||
vals['real_checkin'] = vals['checkin']
|
||||
vals['real_checkout'] = vals['checkout']
|
||||
record = super(HotelReservation, self).create(vals)
|
||||
record = super(PmsReservation, self).create(vals)
|
||||
if record.preconfirm:
|
||||
record.confirm()
|
||||
return record
|
||||
@@ -883,7 +883,7 @@ class HotelReservation(models.Model):
|
||||
record.service_ids.filtered(
|
||||
lambda r: r.is_board_service is True).unlink()
|
||||
board_services = []
|
||||
board = self.env['hotel.board.service.room.type'].browse(
|
||||
board = self.env['pms.board.service.room.type'].browse(
|
||||
vals['board_service_room_id'])
|
||||
for line in board.board_service_line_ids:
|
||||
res = {
|
||||
@@ -893,7 +893,7 @@ class HotelReservation(models.Model):
|
||||
'reservation_id': self.id,
|
||||
}
|
||||
res.update(
|
||||
self.env['hotel.service']._prepare_add_missing_fields(
|
||||
self.env['pms.service']._prepare_add_missing_fields(
|
||||
res))
|
||||
board_services.append((0, False, res))
|
||||
# REVIEW: Why I need add manually the old IDs if
|
||||
@@ -929,11 +929,11 @@ class HotelReservation(models.Model):
|
||||
('state' in vals and record.state != vals['state']):
|
||||
record.update({'to_send': True})
|
||||
user = self.env['res.users'].browse(self.env.uid)
|
||||
if user.has_group('hotel.group_hotel_call'):
|
||||
if user.has_group('pms.group_pms_call'):
|
||||
vals.update({
|
||||
'to_assign': True,
|
||||
})
|
||||
record = super(HotelReservation, self).write(vals)
|
||||
record = super(PmsReservation, self).write(vals)
|
||||
return record
|
||||
|
||||
# Business methods
|
||||
@@ -1014,7 +1014,7 @@ class HotelReservation(models.Model):
|
||||
room_type_id = values.get('room_type_id')
|
||||
if checkin and checkout and room_type_id:
|
||||
if 'overbooking' not in values:
|
||||
room_chosen = self.env['hotel.room.type'].\
|
||||
room_chosen = self.env['pms.room.type'].\
|
||||
check_availability_room_type(
|
||||
checkin,
|
||||
(fields.Date.from_string(checkout) -
|
||||
@@ -1024,7 +1024,7 @@ class HotelReservation(models.Model):
|
||||
room_type_id)[0]
|
||||
# Check room_chosen exist
|
||||
else:
|
||||
room_chosen = self.env['hotel.room.type'].browse(
|
||||
room_chosen = self.env['pms.room.type'].browse(
|
||||
room_type_id).room_ids[0]
|
||||
res.update({
|
||||
'room_id': room_chosen.id
|
||||
@@ -1033,7 +1033,7 @@ class HotelReservation(models.Model):
|
||||
|
||||
@api.model
|
||||
def autocheckout(self):
|
||||
reservations = self.env['hotel.reservation'].search([
|
||||
reservations = self.env['pms.reservation'].search([
|
||||
('state', 'not in', ('done', 'cancelled')),
|
||||
('checkout', '<', fields.Date.today())
|
||||
])
|
||||
@@ -1097,11 +1097,11 @@ class HotelReservation(models.Model):
|
||||
@param self: object pointer
|
||||
'''
|
||||
_logger.info('confirm')
|
||||
hotel_reserv_obj = self.env['hotel.reservation']
|
||||
pms_reserv_obj = self.env['pms.reservation']
|
||||
user = self.env['res.users'].browse(self.env.uid)
|
||||
for record in self:
|
||||
vals = {}
|
||||
if user.has_group('hotel.group_hotel_call'):
|
||||
if user.has_group('pms.group_pms_call'):
|
||||
vals.update({'channel_type': 'call'})
|
||||
if record.checkin_partner_ids:
|
||||
vals.update({'state': 'booking'})
|
||||
@@ -1116,7 +1116,7 @@ class HotelReservation(models.Model):
|
||||
|
||||
if record.splitted:
|
||||
master_reservation = record.parent_reservation or record
|
||||
splitted_reservs = hotel_reserv_obj.search([
|
||||
splitted_reservs = pms_reserv_obj.search([
|
||||
('splitted', '=', True),
|
||||
'|',
|
||||
('parent_reservation', '=', master_reservation.id),
|
||||
@@ -1154,7 +1154,7 @@ class HotelReservation(models.Model):
|
||||
record._compute_cancelled_discount()
|
||||
if record.splitted:
|
||||
master_reservation = record.parent_reservation or record
|
||||
splitted_reservs = self.env['hotel.reservation'].search([
|
||||
splitted_reservs = self.env['pms.reservation'].search([
|
||||
('splitted', '=', True),
|
||||
'|',
|
||||
('parent_reservation', '=', master_reservation.id),
|
||||
@@ -1171,9 +1171,9 @@ class HotelReservation(models.Model):
|
||||
self.ensure_one()
|
||||
pricelist = self.pricelist_id
|
||||
if pricelist and pricelist.cancelation_rule_id:
|
||||
tz_hotel = self.env.user.hotel_id.tz
|
||||
tz_property = self.env.user.pms_property_id.tz
|
||||
today = fields.Date.context_today(self.with_context(
|
||||
tz=tz_hotel))
|
||||
tz=tz_property))
|
||||
days_diff = (fields.Date.from_string(self.real_checkin) -
|
||||
fields.Date.from_string(today)).days
|
||||
if days_diff < 0:
|
||||
@@ -1193,7 +1193,7 @@ class HotelReservation(models.Model):
|
||||
})
|
||||
if record.splitted:
|
||||
master_reservation = record.parent_reservation or record
|
||||
splitted_reservs = self.env['hotel.reservation'].search([
|
||||
splitted_reservs = self.env['pms.reservation'].search([
|
||||
('splitted', '=', True),
|
||||
'|',
|
||||
('parent_reservation', '=', master_reservation.id),
|
||||
@@ -1285,7 +1285,7 @@ class HotelReservation(models.Model):
|
||||
if not vals:
|
||||
vals = {}
|
||||
room_type_id = vals.get('room_type_id') or self.room_type_id.id
|
||||
product = self.env['hotel.room.type'].browse(room_type_id).product_id
|
||||
product = self.env['pms.room.type'].browse(room_type_id).product_id
|
||||
partner = self.env['res.partner'].browse(
|
||||
vals.get('partner_id') or self.partner_id.id)
|
||||
if 'discount' in vals and vals.get('discount') > 0:
|
||||
@@ -1336,13 +1336,10 @@ class HotelReservation(models.Model):
|
||||
"""
|
||||
domain = self._get_domain_reservations_occupation(dfrom, dto)
|
||||
# _logger.info(domain)
|
||||
return self.env['hotel.reservation'].search(domain)
|
||||
return self.env['pms.reservation'].search(domain)
|
||||
|
||||
@api.model
|
||||
def _get_domain_reservations_occupation(self, dfrom, dto):
|
||||
# WARNING If add or remove domain items,
|
||||
# update _hcalendar_get_count_reservations_json_data
|
||||
# in calendar module hotel_calendar
|
||||
domain = [('reservation_line_ids.date', '>=', dfrom),
|
||||
('reservation_line_ids.date', '<=', dto),
|
||||
('state', '!=', 'cancelled'),
|
||||
@@ -1360,15 +1357,15 @@ class HotelReservation(models.Model):
|
||||
@return: dictionary of lists with reservations (a hash of arrays!)
|
||||
with the reservations dates between dfrom and dto
|
||||
reservations_dates
|
||||
{'2018-07-30': [hotel.reservation(29,), hotel.reservation(30,),
|
||||
hotel.reservation(31,)],
|
||||
'2018-07-31': [hotel.reservation(22,), hotel.reservation(35,),
|
||||
hotel.reservation(36,)],
|
||||
{'2018-07-30': [pms.reservation(29,), pms.reservation(30,),
|
||||
pms.reservation(31,)],
|
||||
'2018-07-31': [pms.reservation(22,), pms.reservation(35,),
|
||||
pms.reservation(36,)],
|
||||
}
|
||||
"""
|
||||
domain = [('date', '>=', dfrom),
|
||||
('date', '<', dto)]
|
||||
lines = self.env['hotel.reservation.line'].search(domain)
|
||||
lines = self.env['pms.reservation.line'].search(domain)
|
||||
reservations_dates = {}
|
||||
for record in lines:
|
||||
# kumari.net/index.php/programming/programmingcat/22-python-making-a-dictionary-of-lists-a-hash-of-arrays
|
||||
@@ -1411,7 +1408,7 @@ class HotelReservation(models.Model):
|
||||
lambda check: check.state == 'booking').action_done()
|
||||
if record.splitted:
|
||||
master_reservation = record.parent_reservation or record
|
||||
splitted_reservs = self.env['hotel.reservation'].search([
|
||||
splitted_reservs = self.env['pms.reservation'].search([
|
||||
('splitted', '=', True),
|
||||
'|',
|
||||
('parent_reservation', '=', master_reservation.id),
|
||||
@@ -1428,9 +1425,9 @@ class HotelReservation(models.Model):
|
||||
def action_checks(self):
|
||||
self.ensure_one()
|
||||
action = self.env.ref(
|
||||
'hotel.open_hotel_reservation_form_tree_all').read()[0]
|
||||
'pms.open_pms_reservation_form_tree_all').read()[0]
|
||||
action['views'] = [
|
||||
(self.env.ref('hotel.hotel_reservation_checkin_view_form').id,
|
||||
(self.env.ref('pms.pms_reservation_checkin_view_form').id,
|
||||
'form')]
|
||||
action['res_id'] = self.id
|
||||
action['target'] = 'new'
|
||||
@@ -1480,7 +1477,7 @@ class HotelReservation(models.Model):
|
||||
'reservation_line_ids': reservation_lines[1],
|
||||
'preconfirm': False,
|
||||
})
|
||||
reservation_copy = self.env['hotel.reservation'].with_context({
|
||||
reservation_copy = self.env['pms.reservation'].with_context({
|
||||
'ignore_avail_restrictions': True}).create(vals)
|
||||
if not reservation_copy:
|
||||
raise ValidationError(_("Unexpected error copying record. \
|
||||
@@ -1501,7 +1498,7 @@ class HotelReservation(models.Model):
|
||||
|
||||
master_reservation = self.parent_reservation or self
|
||||
|
||||
splitted_reservs = self.env['hotel.reservation'].search([
|
||||
splitted_reservs = self.env['pms.reservation'].search([
|
||||
('splitted', '=', True),
|
||||
('folio_id', '=', self.folio_id.id),
|
||||
'|',
|
||||
@@ -1579,9 +1576,9 @@ class HotelReservation(models.Model):
|
||||
if not self.parent_reservation:
|
||||
raise ValidationError(_("This is the parent reservation"))
|
||||
action = self.env.ref(
|
||||
'hotel.open_hotel_reservation_form_tree_all').read()[0]
|
||||
'pms.open_pms_reservation_form_tree_all').read()[0]
|
||||
action['views'] = [
|
||||
(self.env.ref('hotel.hotel_reservation_view_form').id, 'form')]
|
||||
(self.env.ref('pms.pms_reservation_view_form').id, 'form')]
|
||||
action['res_id'] = self.parent_reservation.id
|
||||
return action
|
||||
|
||||
@@ -1619,4 +1616,4 @@ class HotelReservation(models.Model):
|
||||
@api.multi
|
||||
def set_call_center_user(self):
|
||||
user = self.env['res.users'].browse(self.env.uid)
|
||||
return user.has_group('hotel.group_hotel_call')
|
||||
return user.has_group('pms.group_pms_call')
|
||||
@@ -6,8 +6,8 @@ from odoo.addons import decimal_precision as dp
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class HotelReservationLine(models.Model):
|
||||
_name = "hotel.reservation.line"
|
||||
class PmsReservationLine(models.Model):
|
||||
_name = "pms.reservation.line"
|
||||
_order = "date"
|
||||
|
||||
# Default Methods ang Gets
|
||||
@@ -22,7 +22,7 @@ class HotelReservationLine(models.Model):
|
||||
|
||||
# Fields declaration
|
||||
reservation_id = fields.Many2one(
|
||||
'hotel.reservation',
|
||||
'pms.reservation',
|
||||
string='Reservation',
|
||||
ondelete='cascade',
|
||||
required=True,
|
||||
@@ -35,11 +35,11 @@ class HotelReservationLine(models.Model):
|
||||
string='Invoice Lines',
|
||||
readonly=True,
|
||||
copy=False)
|
||||
hotel_id = fields.Many2one(
|
||||
'hotel.property',
|
||||
pms_property_id = fields.Many2one(
|
||||
'pms.property',
|
||||
store=True,
|
||||
readonly=True,
|
||||
related='reservation_id.hotel_id')
|
||||
related='reservation_id.pms_property_id')
|
||||
date = fields.Date('Date')
|
||||
state = fields.Selection(related='reservation_id.state')
|
||||
price = fields.Float(
|
||||
@@ -6,33 +6,33 @@ from odoo import models, fields, api, _
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class HotelRoom(models.Model):
|
||||
class PmsRoom(models.Model):
|
||||
""" The rooms for lodging can be for sleeping, usually called rooms,
|
||||
and also for speeches (conference rooms), parking,
|
||||
relax with cafe con leche, spa...
|
||||
"""
|
||||
_name = 'hotel.room'
|
||||
_description = 'Hotel Room'
|
||||
_name = 'pms.room'
|
||||
_description = 'Property Room'
|
||||
_order = "sequence, room_type_id, name"
|
||||
|
||||
# Fields declaration
|
||||
name = fields.Char('Room Name', required=True)
|
||||
hotel_id = fields.Many2one(
|
||||
'hotel.property',
|
||||
pms_property_id = fields.Many2one(
|
||||
'pms.property',
|
||||
store=True,
|
||||
readonly=True,
|
||||
related='room_type_id.hotel_id')
|
||||
related='room_type_id.pms_property_id')
|
||||
room_type_id = fields.Many2one(
|
||||
'hotel.room.type',
|
||||
'Hotel Room Type',
|
||||
'pms.room.type',
|
||||
'Property Room Type',
|
||||
required=True,
|
||||
ondelete='restrict')
|
||||
shared_room_id = fields.Many2one(
|
||||
'hotel.shared.room',
|
||||
'pms.shared.room',
|
||||
'Shared Room',
|
||||
default=False)
|
||||
floor_id = fields.Many2one(
|
||||
'hotel.floor',
|
||||
'pms.floor',
|
||||
'Ubication',
|
||||
help='At which floor the room is located.')
|
||||
capacity = fields.Integer('Capacity')
|
||||
@@ -59,30 +59,30 @@ class HotelRoom(models.Model):
|
||||
# CRUD methods
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
if vals.get('hotel_id', self.env.user.hotel_id.id) != \
|
||||
self.env['hotel.room.type'].browse(
|
||||
vals['room_type_id']).hotel_id.id:
|
||||
if vals.get('pms_property_id', self.env.user.pms_property_id.id) != \
|
||||
self.env['pms.room.type'].browse(
|
||||
vals['room_type_id']).pms_property_id.id:
|
||||
raise ValidationError(
|
||||
_("A room cannot be created in a room type \
|
||||
of another hotel."))
|
||||
of another property."))
|
||||
return super().create(vals)
|
||||
|
||||
@api.multi
|
||||
def write(self, vals):
|
||||
for record in self:
|
||||
if vals.get('hotel_id', record.hotel_id.id) != record.hotel_id.id:
|
||||
if vals.get('pms_property_id', record.pms_property_id.id) != record.pms_property_id.id:
|
||||
raise ValidationError(
|
||||
_("A room cannot be changed to another hotel.") + " " +
|
||||
_("A room cannot be changed to another property.") + " " +
|
||||
_("%s does not belong to %s.")
|
||||
% (record, record.hotel_id))
|
||||
room_type_ids = self.env['hotel.room.type'].search([
|
||||
('hotel_id', '=', record.hotel_id.id)
|
||||
% (record, record.pms_property_id))
|
||||
room_type_ids = self.env['pms.room.type'].search([
|
||||
('pms_property_id', '=', record.pms_property_id.id)
|
||||
]).ids
|
||||
if vals.get('room_type_id', record.room_type_id.id) \
|
||||
not in room_type_ids:
|
||||
raise ValidationError(
|
||||
_("A room cannot be changed to a room type of \
|
||||
another hotel or unlinked from a room type."))
|
||||
another property or unlinked from a room type."))
|
||||
return super().write(vals)
|
||||
|
||||
# Business methods
|
||||
@@ -9,9 +9,9 @@ class RoomClosureReason(models.Model):
|
||||
|
||||
# Fields declaration
|
||||
name = fields.Char('Name', translate=True, required=True)
|
||||
hotel_ids = fields.Many2many(
|
||||
'hotel.property',
|
||||
string='Hotels',
|
||||
pms_property_ids = fields.Many2many(
|
||||
'pms.property',
|
||||
string='Properties',
|
||||
required=False,
|
||||
ondelete='restrict')
|
||||
description = fields.Text('Description', translate=True)
|
||||
@@ -5,20 +5,20 @@ from odoo import models, fields, api, _
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class HotelRoomType(models.Model):
|
||||
class PmsRoomType(models.Model):
|
||||
""" Before creating a 'room type', you need to consider the following:
|
||||
With the term 'room type' is meant a sales type of residential accommodation: for
|
||||
example, a Double Room, a Economic Room, an Apartment, a Tent, a Caravan...
|
||||
"""
|
||||
_name = "hotel.room.type"
|
||||
_name = "pms.room.type"
|
||||
_description = "Room Type"
|
||||
_inherits = {'product.product': 'product_id'}
|
||||
_order = "sequence, code_type, name"
|
||||
|
||||
# Default methods
|
||||
@api.model
|
||||
def _get_default_hotel(self):
|
||||
return self.env.user.hotel_id
|
||||
def _get_default_pms_property(self):
|
||||
return self.env.user.pms_property_id
|
||||
|
||||
# Fields declaration
|
||||
product_id = fields.Many2one(
|
||||
@@ -27,26 +27,26 @@ class HotelRoomType(models.Model):
|
||||
required=True,
|
||||
delegate=True,
|
||||
ondelete='cascade')
|
||||
hotel_id = fields.Many2one(
|
||||
'hotel.property',
|
||||
'Hotel',
|
||||
pms_property_id = fields.Many2one(
|
||||
'pms.property',
|
||||
'Property',
|
||||
required=True,
|
||||
ondelete='restrict',
|
||||
default=_get_default_hotel,)
|
||||
default=_get_default_pms_property,)
|
||||
room_ids = fields.One2many(
|
||||
'hotel.room',
|
||||
'pms.room',
|
||||
'room_type_id',
|
||||
'Rooms')
|
||||
class_id = fields.Many2one(
|
||||
'hotel.room.type.class',
|
||||
'Hotel Type Class')
|
||||
'pms.room.type.class',
|
||||
'Property Type Class')
|
||||
board_service_room_type_ids = fields.One2many(
|
||||
'hotel.board.service.room.type',
|
||||
'hotel_room_type_id',
|
||||
'pms.board.service.room.type',
|
||||
'pms_room_type_id',
|
||||
string='Board Services')
|
||||
room_amenity_ids = fields.Many2many(
|
||||
'hotel.amenity',
|
||||
'hotel_room_type_aminity_rel',
|
||||
'pms.amenity',
|
||||
'pms_room_type_aminity_rel',
|
||||
'room_type_ids',
|
||||
'amenity_ids',
|
||||
string='Room Type Amenities',
|
||||
@@ -60,8 +60,8 @@ class HotelRoomType(models.Model):
|
||||
sequence = fields.Integer('Sequence', default=0)
|
||||
|
||||
_sql_constraints = [
|
||||
('code_type_hotel_unique', 'unique(code_type, hotel_id)',
|
||||
'Room Type Code must be unique by Hotel!'),
|
||||
('code_type_pms_unique', 'unique(code_type, pms_property_id)',
|
||||
'Room Type Code must be unique by Property!'),
|
||||
]
|
||||
|
||||
# Constraints and onchanges
|
||||
@@ -100,15 +100,15 @@ class HotelRoomType(models.Model):
|
||||
Check the max availability for an specific
|
||||
type of room in a range of dates
|
||||
"""
|
||||
reservations = self.env['hotel.reservation'].get_reservations(dfrom,
|
||||
reservations = self.env['pms.reservation'].get_reservations(dfrom,
|
||||
dto)
|
||||
reservations_rooms = reservations.mapped('room_id.id')
|
||||
free_rooms = self.env['hotel.room'].search([
|
||||
free_rooms = self.env['pms.room'].search([
|
||||
('id', 'not in', reservations_rooms),
|
||||
('id', 'not in', notthis)
|
||||
])
|
||||
if room_type_id:
|
||||
rooms_linked = self.env['hotel.room.type'].search([
|
||||
rooms_linked = self.env['pms.room.type'].search([
|
||||
('id', '=', room_type_id)
|
||||
]).room_ids
|
||||
free_rooms = free_rooms & rooms_linked
|
||||
@@ -127,8 +127,8 @@ class HotelRoomType(models.Model):
|
||||
"""
|
||||
vals = {}
|
||||
room_type_ids = kwargs.get('room_type_ids', False)
|
||||
room_types = self.env['hotel.room.type'].browse(room_type_ids) if \
|
||||
room_type_ids else self.env['hotel.room.type'].search([])
|
||||
room_types = self.env['pms.room.type'].browse(room_type_ids) if \
|
||||
room_type_ids else self.env['pms.room.type'].search([])
|
||||
date_from = kwargs.get('date_from', False)
|
||||
days = kwargs.get('days', False)
|
||||
discount = kwargs.get('discount', False)
|
||||
@@ -140,7 +140,7 @@ class HotelRoomType(models.Model):
|
||||
'pricelist_id',
|
||||
partner.property_product_pricelist.id and
|
||||
partner.property_product_pricelist.id or
|
||||
self.env.user.hotel_id.default_pricelist_id.id)
|
||||
self.env.user.pms_property_id.default_pricelist_id.id)
|
||||
vals.update({
|
||||
'partner_id': partner_id if partner_id else False,
|
||||
'discount': discount,
|
||||
@@ -148,7 +148,7 @@ class HotelRoomType(models.Model):
|
||||
rate_vals = {}
|
||||
for room_type in room_types:
|
||||
vals.update({'room_type_id': room_type.id})
|
||||
room_vals = self.env['hotel.reservation'].\
|
||||
room_vals = self.env['pms.reservation'].\
|
||||
prepare_reservation_lines(
|
||||
date_from,
|
||||
days,
|
||||
@@ -4,26 +4,26 @@
|
||||
from odoo import models, fields
|
||||
|
||||
|
||||
class HotelRoomTypeClass(models.Model):
|
||||
class PmsRoomTypeClass(models.Model):
|
||||
""" Before creating a 'room type_class', you need to consider the following:
|
||||
With the term 'room type class' is meant a physical class of
|
||||
residential accommodation: for example, a Room, a Bed, an Apartment,
|
||||
a Tent, a Caravan...
|
||||
"""
|
||||
_name = "hotel.room.type.class"
|
||||
_name = "pms.room.type.class"
|
||||
_description = "Room Type Class"
|
||||
_order = "sequence, name, code_class"
|
||||
|
||||
# Fields declaration
|
||||
name = fields.Char('Class Name', required=True, translate=True)
|
||||
# Relationship between models
|
||||
hotel_ids = fields.Many2many(
|
||||
'hotel.property',
|
||||
string='Hotels',
|
||||
pms_property_ids = fields.Many2many(
|
||||
'pms.property',
|
||||
string='Properties',
|
||||
required=False,
|
||||
ondelete='restrict')
|
||||
room_type_ids = fields.One2many(
|
||||
'hotel.room.type',
|
||||
'pms.room.type',
|
||||
'class_id',
|
||||
'Types')
|
||||
code_class = fields.Char('Code')
|
||||
@@ -3,25 +3,25 @@
|
||||
from odoo import models, fields, api
|
||||
|
||||
|
||||
class HotelRoomTypeRestriction(models.Model):
|
||||
""" The hotel room type restriction is used as a daily restriction plan for room types
|
||||
and therefore is related only with one hotel. """
|
||||
_name = 'hotel.room.type.restriction'
|
||||
class PmsRoomTypeRestriction(models.Model):
|
||||
""" The room type restriction is used as a daily restriction plan for room types
|
||||
and therefore is related only with one property. """
|
||||
_name = 'pms.room.type.restriction'
|
||||
|
||||
# Default methods
|
||||
@api.model
|
||||
def _get_default_hotel(self):
|
||||
return self.env.user.hotel_id or None
|
||||
def _get_default_pms_property(self):
|
||||
return self.env.user.pms_property_id or None
|
||||
|
||||
# Fields declaration
|
||||
name = fields.Char('Restriction Plan Name', required=True)
|
||||
hotel_id = fields.Many2one(
|
||||
'hotel.property',
|
||||
'Hotel',
|
||||
pms_property_id = fields.Many2one(
|
||||
'pms.property',
|
||||
'Property',
|
||||
ondelete='restrict',
|
||||
default=_get_default_hotel)
|
||||
default=_get_default_pms_property)
|
||||
item_ids = fields.One2many(
|
||||
'hotel.room.type.restriction.item',
|
||||
'pms.room.type.restriction.item',
|
||||
'restriction_id',
|
||||
string='Restriction Items',
|
||||
copy=True)
|
||||
@@ -4,14 +4,14 @@ from odoo import models, fields, api, _
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class HotelRoomTypeRestrictionItem(models.Model):
|
||||
_name = 'hotel.room.type.restriction.item'
|
||||
class PmsRoomTypeRestrictionItem(models.Model):
|
||||
_name = 'pms.room.type.restriction.item'
|
||||
|
||||
# Field Declarations
|
||||
restriction_id = fields.Many2one('hotel.room.type.restriction',
|
||||
restriction_id = fields.Many2one('pms.room.type.restriction',
|
||||
'Restriction Plan', ondelete='cascade',
|
||||
index=True)
|
||||
room_type_id = fields.Many2one('hotel.room.type', 'Room Type',
|
||||
room_type_id = fields.Many2one('pms.room.type', 'Room Type',
|
||||
required=True, ondelete='cascade')
|
||||
date = fields.Date('Date')
|
||||
|
||||
@@ -12,9 +12,9 @@ import logging
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class HotelService(models.Model):
|
||||
_name = 'hotel.service'
|
||||
_description = 'Hotel Services and its charges'
|
||||
class PmsService(models.Model):
|
||||
_name = 'pms.service'
|
||||
_description = 'Services and its charges'
|
||||
|
||||
# Default methods
|
||||
@api.multi
|
||||
@@ -32,7 +32,7 @@ class HotelService(models.Model):
|
||||
def _default_reservation_id(self):
|
||||
if self.env.context.get('reservation_ids'):
|
||||
ids = [item[1] for item in self.env.context['reservation_ids']]
|
||||
return self.env['hotel.reservation'].browse([
|
||||
return self.env['pms.reservation'].browse([
|
||||
(ids)], limit=1)
|
||||
elif self.env.context.get('default_reservation_id'):
|
||||
return self.env.context.get('default_reservation_id')
|
||||
@@ -52,27 +52,27 @@ class HotelService(models.Model):
|
||||
ondelete='restrict',
|
||||
required=True)
|
||||
folio_id = fields.Many2one(
|
||||
'hotel.folio',
|
||||
'pms.folio',
|
||||
'Folio',
|
||||
ondelete='cascade',
|
||||
default=_default_folio_id)
|
||||
reservation_id = fields.Many2one(
|
||||
'hotel.reservation',
|
||||
'pms.reservation',
|
||||
'Room',
|
||||
default=_default_reservation_id)
|
||||
service_line_ids = fields.One2many(
|
||||
'hotel.service.line',
|
||||
'pms.service.line',
|
||||
'service_id')
|
||||
company_id = fields.Many2one(
|
||||
related='folio_id.company_id',
|
||||
string='Company',
|
||||
store=True,
|
||||
readonly=True)
|
||||
hotel_id = fields.Many2one(
|
||||
'hotel.property',
|
||||
pms_property_id = fields.Many2one(
|
||||
'pms.property',
|
||||
store=True,
|
||||
readonly=True,
|
||||
related='folio_id.hotel_id')
|
||||
related='folio_id.pms_property_id')
|
||||
tax_ids = fields.Many2many(
|
||||
'account.tax',
|
||||
string='Taxes',
|
||||
@@ -233,7 +233,7 @@ class HotelService(models.Model):
|
||||
Compute the amounts of the service line.
|
||||
"""
|
||||
for record in self:
|
||||
folio = record.folio_id or self.env['hotel.folio'].browse(
|
||||
folio = record.folio_id or self.env['pms.folio'].browse(
|
||||
self.env.context.get('default_folio_id'))
|
||||
reservation = record.reservation_id or self.env.context.get(
|
||||
'reservation_id')
|
||||
@@ -280,7 +280,7 @@ class HotelService(models.Model):
|
||||
if record.per_day and record.reservation_id:
|
||||
product = record.product_id
|
||||
if self.env.context.get('default_reservation_id'):
|
||||
reservation = self.env['hotel.reservation'].browse(
|
||||
reservation = self.env['pms.reservation'].browse(
|
||||
self.env.context.get('default_reservation_id')
|
||||
)
|
||||
else:
|
||||
@@ -339,9 +339,9 @@ class HotelService(models.Model):
|
||||
# Action methods
|
||||
@api.multi
|
||||
def open_service_ids(self):
|
||||
action = self.env.ref('hotel.action_hotel_services_form').read()[0]
|
||||
action = self.env.ref('pms.action_pms_services_form').read()[0]
|
||||
action['views'] = [
|
||||
(self.env.ref('hotel.hotel_service_view_form').id, 'form')]
|
||||
(self.env.ref('pms.pms_service_view_form').id, 'form')]
|
||||
action['res_id'] = self.id
|
||||
action['target'] = 'new'
|
||||
return action
|
||||
@@ -357,14 +357,14 @@ class HotelService(models.Model):
|
||||
('reservation_id.name', operator, name),
|
||||
('name', operator, name)
|
||||
]
|
||||
return super(HotelService, self).name_search(
|
||||
return super(PmsService, self).name_search(
|
||||
name='', args=args, operator='ilike', limit=limit)
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
vals.update(self._prepare_add_missing_fields(vals))
|
||||
if self.compute_lines_out_vals(vals):
|
||||
reservation = self.env['hotel.reservation'].browse(
|
||||
reservation = self.env['pms.reservation'].browse(
|
||||
vals['reservation_id'])
|
||||
product = self.env['product.product'].browse(vals['product_id'])
|
||||
if reservation.splitted:
|
||||
@@ -384,7 +384,7 @@ class HotelService(models.Model):
|
||||
old_day_lines=False,
|
||||
consumed_on=product.consumed_on,
|
||||
))
|
||||
record = super(HotelService, self).create(vals)
|
||||
record = super(PmsService, self).create(vals)
|
||||
return record
|
||||
|
||||
@api.multi
|
||||
@@ -400,7 +400,7 @@ class HotelService(models.Model):
|
||||
})
|
||||
else:
|
||||
for record in self:
|
||||
reservations = self.env['hotel.reservation']
|
||||
reservations = self.env['pms.reservation']
|
||||
reservation = reservations.browse(vals['reservation_id']) \
|
||||
if 'reservation_id' in vals else record.reservation_id
|
||||
if reservation.splitted:
|
||||
@@ -420,7 +420,7 @@ class HotelService(models.Model):
|
||||
old_line_days=self.service_line_ids,
|
||||
consumed_on=product.consumed_on,
|
||||
))
|
||||
res = super(HotelService, self).write(vals)
|
||||
res = super(PmsService, self).write(vals)
|
||||
return res
|
||||
|
||||
# Business methods
|
||||
@@ -457,7 +457,7 @@ class HotelService(models.Model):
|
||||
def _compute_tax_ids(self):
|
||||
for record in self:
|
||||
# If company_id is set, always filter taxes by the company
|
||||
folio = record.folio_id or self.env['hotel.folio'].browse(
|
||||
folio = record.folio_id or self.env['pms.folio'].browse(
|
||||
self.env.context.get('default_folio_id'))
|
||||
reservation = record.reservation_id or self.env.context.get(
|
||||
'reservation_id')
|
||||
@@ -512,16 +512,16 @@ class HotelService(models.Model):
|
||||
if reservation and self.is_board_service:
|
||||
board_room_type = reservation.board_service_room_id
|
||||
if board_room_type.price_type == 'fixed':
|
||||
return self.env['hotel.board.service.room.type.line'].\
|
||||
return self.env['pms.board.service.room.type.line'].\
|
||||
search([
|
||||
('hotel_board_service_room_type_id',
|
||||
('pms_board_service_room_type_id',
|
||||
'=', board_room_type.id),
|
||||
('product_id', '=', self.product_id.id)]).amount
|
||||
else:
|
||||
return (reservation.price_total *
|
||||
self.env['hotel.board.service.room.type.line'].
|
||||
self.env['pms.board.service.room.type.line'].
|
||||
search([
|
||||
('hotel_board_service_room_type_id',
|
||||
('pms_board_service_room_type_id',
|
||||
'=', board_room_type.id),
|
||||
('product_id', '=', self.product_id.id)])
|
||||
.amount) / 100
|
||||
@@ -5,13 +5,13 @@ from odoo import models, fields, api, _
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class HotelServiceLine(models.Model):
|
||||
_name = "hotel.service.line"
|
||||
class PmsServiceLine(models.Model):
|
||||
_name = "pms.service.line"
|
||||
_order = "date"
|
||||
|
||||
# Fields declaration
|
||||
service_id = fields.Many2one(
|
||||
'hotel.service',
|
||||
'pms.service',
|
||||
string='Service Room',
|
||||
ondelete='cascade',
|
||||
required=True,
|
||||
@@ -24,11 +24,11 @@ class HotelServiceLine(models.Model):
|
||||
string='Taxes',
|
||||
related="service_id.tax_ids",
|
||||
readonly="True")
|
||||
hotel_id = fields.Many2one(
|
||||
'hotel.property',
|
||||
pms_property_id = fields.Many2one(
|
||||
'pms.property',
|
||||
store=True,
|
||||
readonly=True,
|
||||
related='service_id.hotel_id')
|
||||
related='service_id.pms_property_id')
|
||||
date = fields.Date('Date')
|
||||
day_qty = fields.Integer('Units')
|
||||
price_total = fields.Float(
|
||||
@@ -73,7 +73,7 @@ class HotelServiceLine(models.Model):
|
||||
for record in self:
|
||||
limit = record.product_id.daily_limit
|
||||
if limit > 0:
|
||||
out_qty = sum(self.env['hotel.service.line'].search([
|
||||
out_qty = sum(self.env['pms.service.line'].search([
|
||||
('product_id', '=', record.product_id.id),
|
||||
('date', '=', record.date),
|
||||
('service_id', '!=', record.service_id.id)
|
||||
@@ -6,32 +6,32 @@ from odoo import models, fields, api, _
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class HotelSharedRoom(models.Model):
|
||||
_name = 'hotel.shared.room'
|
||||
_description = 'Hotel Shared Room'
|
||||
class PmsSharedRoom(models.Model):
|
||||
_name = 'pms.shared.room'
|
||||
_description = 'Shared Room'
|
||||
_order = "room_type_id, name"
|
||||
|
||||
# Fields declaration
|
||||
name = fields.Char('Room Name', required=True)
|
||||
room_type_id = fields.Many2one(
|
||||
'hotel.room.type',
|
||||
'Hotel Room Type',
|
||||
'pms.room.type',
|
||||
'Room Type',
|
||||
required=True,
|
||||
ondelete='restrict',
|
||||
domain=[('shared_room', '=', True)]
|
||||
)
|
||||
hotel_id = fields.Many2one(
|
||||
'hotel.property',
|
||||
pms_property_id = fields.Many2one(
|
||||
'pms.property',
|
||||
store=True,
|
||||
readonly=True,
|
||||
related='room_type_id.hotel_id')
|
||||
related='room_type_id.pms_property_id')
|
||||
floor_id = fields.Many2one(
|
||||
'hotel.floor',
|
||||
'pms.floor',
|
||||
'Ubication',
|
||||
ondelete='restrict',
|
||||
help='At which floor the room is located.')
|
||||
bed_ids = fields.One2many(
|
||||
'hotel.room',
|
||||
'pms.room',
|
||||
'shared_room_id',
|
||||
readonly=True,
|
||||
ondelete='restrict',)
|
||||
@@ -56,7 +56,7 @@ class HotelSharedRoom(models.Model):
|
||||
"If you want to eliminate beds in the \
|
||||
room you must deactivate the beds from your form"))
|
||||
beds = []
|
||||
inactive_beds = self.env['hotel.room'].search([
|
||||
inactive_beds = self.env['pms.room'].search([
|
||||
('active', '=', False),
|
||||
('shared_room_id', '=', self.id)
|
||||
])
|
||||
@@ -4,10 +4,10 @@
|
||||
<report
|
||||
id="action_report_folio"
|
||||
string="Folio"
|
||||
model="hotel.folio"
|
||||
model="pms.folio"
|
||||
report_type="qweb-pdf"
|
||||
file="hotel.report_folio"
|
||||
name="hotel.report_folio"
|
||||
file="pms.report_folio"
|
||||
name="pms.report_folio"
|
||||
print_report_name="(object.state in ('draft', 'sent') and 'Quotation - %s' % (object.name)) or 'Order - %s' % (object.name)"
|
||||
/>
|
||||
</data>
|
||||
@@ -224,7 +224,7 @@
|
||||
<template id="report_folio">
|
||||
<t t-call="web.html_container">
|
||||
<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>
|
||||
</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';
|
||||
/*
|
||||
* Hotel
|
||||
* Pms
|
||||
* GNU Public License
|
||||
* Alexandre Díaz <dev@redneboa.es>
|
||||
*/
|
||||
@@ -16,10 +16,10 @@ ListController.include({
|
||||
renderButtons: function () {
|
||||
this._super.apply(this, arguments); // Sets this.$buttons
|
||||
var self = this;
|
||||
if (this.modelName === 'hotel.reservation') {
|
||||
if (this.modelName === 'pms.reservation') {
|
||||
this.$buttons.append("<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(){
|
||||
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";
|
||||
|
||||
var config = require('web.config');
|
||||
@@ -9,11 +9,11 @@ var Widget = require('web.Widget');
|
||||
|
||||
var _t = core._t;
|
||||
|
||||
var SwitchHotelMenu = Widget.extend({
|
||||
template: 'hotel.SwitchHotelMenu',
|
||||
var SwitchPmsMenu = Widget.extend({
|
||||
template: 'pms.SwitchPmsMenu',
|
||||
willStart: function() {
|
||||
this.isMobile = config.device.isMobile;
|
||||
if (!session.user_hotels) {
|
||||
if (!session.user_pmss) {
|
||||
return $.Deferred().reject();
|
||||
}
|
||||
return this._super();
|
||||
@@ -22,40 +22,40 @@ var SwitchHotelMenu = Widget.extend({
|
||||
var self = this;
|
||||
this.$el.on('click', '.dropdown-menu li a[data-menu]', _.debounce(function(ev) {
|
||||
ev.preventDefault();
|
||||
var hotel_id = $(ev.currentTarget).data('hotel-id');
|
||||
var pms_property_id = $(ev.currentTarget).data('property-id');
|
||||
self._rpc({
|
||||
model: 'res.users',
|
||||
method: 'write',
|
||||
args: [[session.uid], {'hotel_id': hotel_id}],
|
||||
args: [[session.uid], {'pms_property_id': pms_property_id}],
|
||||
})
|
||||
.then(function() {
|
||||
location.reload();
|
||||
});
|
||||
}, 1500, true));
|
||||
|
||||
var hotels_list = '';
|
||||
var properties_list = '';
|
||||
if (this.isMobile) {
|
||||
hotels_list = '<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 {
|
||||
self.$('.oe_topbar_name').text(session.user_hotels.current_hotel[1]);
|
||||
self.$('.oe_topbar_name').text(session.user_properties.current_property[1]);
|
||||
}
|
||||
_.each(session.user_hotels.allowed_hotels, function(hotel) {
|
||||
_.each(session.user_properties.allowed_propierties, function(property) {
|
||||
var a = '';
|
||||
if (hotel[0] === session.user_hotels.current_hotel[0]) {
|
||||
if (property[0] === session.user_properties.current_property[0]) {
|
||||
a = '<i class="fa fa-check mr8"></i>';
|
||||
} else {
|
||||
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();
|
||||
},
|
||||
});
|
||||
|
||||
SystrayMenu.Items.push(SwitchHotelMenu);
|
||||
SystrayMenu.Items.push(SwitchPmsMenu);
|
||||
|
||||
return SwitchHotelMenu;
|
||||
return SwitchPmsMenu;
|
||||
|
||||
});
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
|
||||
<t t-name="hotel.SwitchHotelMenu">
|
||||
<t t-name="pms.SwitchPmsMenu">
|
||||
<li class="o_switch_company_menu">
|
||||
<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"/>
|
||||
@@ -3,21 +3,21 @@
|
||||
<data noupdate="0">
|
||||
|
||||
<template id="template_header">
|
||||
<h1 t-field="object.hotel_id.name" />
|
||||
<h1 t-field="object.pms_property_id.name" />
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
<t t-esc="object.hotel_id.street" />
|
||||
<t t-if="object.hotel_id.street2" >- <t t-esc="object.hotel_id.street2" /></t> <br />
|
||||
<t t-esc="object.hotel_id.zip" />
|
||||
<t t-esc="object.hotel_id.city" />,
|
||||
<t t-esc="object.hotel_id.state_id.name" /> <br />
|
||||
<t t-esc="object.hotel_id.country_id.name" />
|
||||
<t t-esc="object.pms_property_id.street" />
|
||||
<t t-if="object.pms_property_id.street2" >- <t t-esc="object.pms_property_id.street2" /></t> <br />
|
||||
<t t-esc="object.pms_property_id.zip" />
|
||||
<t t-esc="object.pms_property_id.city" />,
|
||||
<t t-esc="object.pms_property_id.state_id.name" /> <br />
|
||||
<t t-esc="object.pms_property_id.country_id.name" />
|
||||
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<i class="glyphicon glyphicon-phone-alt" /> <t t-esc="object.hotel_id.phone" /> <br />
|
||||
<i class="glyphicon glyphicon-envelope" /> <t t-esc="object.hotel_id.email" /> <br />
|
||||
<i class="glyphicon glyphicon-home" /> <t t-esc="object.hotel_id.website" /> <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.pms_property_id.email" /> <br />
|
||||
<i class="glyphicon glyphicon-home" /> <t t-esc="object.pms_property_id.website" /> <br />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -62,12 +62,12 @@
|
||||
</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="col-sm-12">
|
||||
If you have any questions, please do not hesitate to contact with the hotel's staff. <br/>
|
||||
Looking forward to seeing you at our hotel, <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 property, <br />
|
||||
Best regards.
|
||||
</div>
|
||||
</div>
|
||||
@@ -76,13 +76,13 @@
|
||||
<template id="template_footer">
|
||||
<div class="row" style="padding-top: 20px;">
|
||||
<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.
|
||||
</div>
|
||||
</div>
|
||||
</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-set="head">
|
||||
<!-- TODO: ensure bootstrap in shipped within the email -->
|
||||
@@ -92,25 +92,25 @@
|
||||
</t>
|
||||
<t t-set="body_classname" t-value="'container'"/>
|
||||
<div class="container">
|
||||
<t t-call="hotel.template_header"/>
|
||||
<t t-call="hotel.template_reservation"/>
|
||||
<t t-call="hotel.template_footer"/>
|
||||
<t t-call="pms.template_header"/>
|
||||
<t t-call="pms.template_reservation"/>
|
||||
<t t-call="pms.template_footer"/>
|
||||
</div>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<!-- notify customer that reservation has been confirmed -->
|
||||
<record id="email_template_reservation" model="mail.template">
|
||||
<field name="name">Hotel: Reservation Confirmed</field>
|
||||
<field name="model_id" ref="hotel.model_hotel_folio"/>
|
||||
<field name="email_from">${('%s <%s>' % (object.hotel_id.partner_id.name, object.hotel_id.partner_id.email) or '')|safe}</field>
|
||||
<field name="name">Property: Reservation Confirmed</field>
|
||||
<field name="model_id" ref="pms.model_pms_folio"/>
|
||||
<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="partner_to">${(object.partner_id.id or '')}</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="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>
|
||||
|
||||
</data>
|
||||
@@ -4,7 +4,7 @@
|
||||
<!-- Backend stuff -->
|
||||
<template id="assets_backend" inherit_id="web.assets_backend">
|
||||
<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>
|
||||
</template>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<xpath expr="//field[@name='date_invoice']" position="after">
|
||||
<field name="folio_ids" widget="many2many_tags"/>
|
||||
<field name="from_folio" invisible="1" />
|
||||
<field name="hotel_id" invisible="1"/>
|
||||
<field name="pms_property_id" invisible="1"/>
|
||||
</xpath>
|
||||
<xpath expr="//button[@name='%(account.action_account_invoice_payment)d']" position="attributes">
|
||||
<attribute name="attrs">{'invisible': ['|',('from_folio','=',True)]}</attribute>
|
||||
@@ -7,7 +7,7 @@
|
||||
<field name="arch" type="xml">
|
||||
|
||||
<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}"/>
|
||||
<field name="pricelist_type" />
|
||||
<field name="cancelation_rule_id" />
|
||||
@@ -18,6 +18,6 @@
|
||||
|
||||
<menuitem name="Pricelist" id="pricelist_menu"
|
||||
action="product.product_pricelist_action2" sequence="22"
|
||||
parent="hotel.configuration_others" />
|
||||
parent="pms.configuration_others" />
|
||||
|
||||
</odoo>
|
||||
@@ -7,10 +7,10 @@
|
||||
<field name="inherit_id" ref="product.product_template_form_view" />
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//page[@name='sales']" position="before">
|
||||
<page string="Hotel Service">
|
||||
<page string="Service">
|
||||
<group colspan="4">
|
||||
<group>
|
||||
<field name="hotel_ids" widget="many2many_tags"
|
||||
<field name="pms_property_ids" widget="many2many_tags"
|
||||
options="{'no_create': True,'no_open': True}"/>
|
||||
<field name="is_extra_bed" />
|
||||
<field name="daily_limit" />
|
||||
@@ -1,15 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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="res_model">hotel.reservation</field>
|
||||
<field name="res_model">pms.reservation</field>
|
||||
<field name="domain">[('partner_id', '=',active_id)]</field>
|
||||
</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="res_model">hotel.folio</field>
|
||||
<field name="res_model">pms.folio</field>
|
||||
<field name="domain">[('partner_id', '=',active_id)]</field>
|
||||
</record>
|
||||
|
||||
@@ -21,12 +21,12 @@
|
||||
|
||||
<xpath expr='//div[@name="button_box"]' position='inside'>
|
||||
<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">
|
||||
<field string="Reservations" name="reservations_count" widget="statinfo"/>
|
||||
</button>
|
||||
<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">
|
||||
<field string="Folios" name="folios_count" widget="statinfo"/>
|
||||
</button>
|
||||
@@ -39,7 +39,7 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem name="Customers" id="menu_hotel_customer"
|
||||
<menuitem name="Customers" id="menu_pms_customer"
|
||||
action="base.action_partner_form" sequence="500"
|
||||
parent="menu_all_folio"/>
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
<field name="inherit_id" ref="base.view_users_form" />
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//page[@name='access_rights']/group" position="after">
|
||||
<group string="Multi Hotels">
|
||||
<field string="Allowed Hotels" name="hotel_ids" widget="many2many_tags"/>
|
||||
<field string="Current Hotel" name="hotel_id" context="{'user_preference': 0}"/>
|
||||
<group string="Multi Properties">
|
||||
<field string="Allowed Properties" name="pms_property_ids" widget="many2many_tags"/>
|
||||
<field string="Current Property" name="pms_property_id" context="{'user_preference': 0}"/>
|
||||
</group>
|
||||
</xpath>
|
||||
</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>
|
||||
|
||||
<!--===== Room Amenities ===== -->
|
||||
<!-- Form view of hotel room amenities -->
|
||||
<record id="hotel_amenity_view_form" model="ir.ui.view">
|
||||
<field name="name">hotel.amenity.form</field>
|
||||
<field name="model">hotel.amenity</field>
|
||||
<!-- Form view of pms room amenities -->
|
||||
<record id="pms_amenity_view_form" model="ir.ui.view">
|
||||
<field name="name">pms.amenity.form</field>
|
||||
<field name="model">pms.amenity</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Hotel Room Amenities">
|
||||
<form string="Room Amenities">
|
||||
<sheet>
|
||||
<h1>
|
||||
<label string="Amenity" />
|
||||
@@ -19,7 +19,7 @@
|
||||
<notebook>
|
||||
<page string="Information">
|
||||
<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}"/>
|
||||
<field name="room_amenity_type_id" select="2" string="Amenity Type" />
|
||||
<!-- <field name="categ_id" select="1"
|
||||
@@ -64,12 +64,12 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Search view of hotel room amenities -->
|
||||
<record model="ir.ui.view" id="hotel_amenity_search">
|
||||
<field name="name">hotel.room_amenity_search</field>
|
||||
<field name="model">hotel.amenity</field>
|
||||
<!-- Search view of pms room amenities -->
|
||||
<record model="ir.ui.view" id="pms_amenity_search">
|
||||
<field name="name">pms.room_amenity_search</field>
|
||||
<field name="model">pms.amenity</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Hotel Room Amenities">
|
||||
<search string="Room Amenities">
|
||||
<field name="name" />
|
||||
<field name="room_amenity_type_id" select="1" />
|
||||
<!-- <field name="list_price" string="ty rate" /> -->
|
||||
@@ -83,12 +83,12 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Tree view of hotel room amenities -->
|
||||
<record model="ir.ui.view" id="hotel_amenity_view_list">
|
||||
<field name="name">hotel.room_amenity_list</field>
|
||||
<field name="model">hotel.amenity</field>
|
||||
<!-- Tree view of pms room amenities -->
|
||||
<record model="ir.ui.view" id="pms_amenity_view_list">
|
||||
<field name="name">pms.room_amenity_list</field>
|
||||
<field name="model">pms.amenity</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Hotel Room Amenities">
|
||||
<tree string="Room Amenities">
|
||||
<field name="name" />
|
||||
<field name="room_amenity_type_id" select="1" />
|
||||
<!-- <field name="list_price" string="Ty rate" invisible="1" /> -->
|
||||
@@ -96,25 +96,25 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Action for hotel room amenities -->
|
||||
<record model="ir.actions.act_window" id="action_hotel_room_amenity_view_form">
|
||||
<field name="name">Hotel Room Amenities</field>
|
||||
<field name="res_model">hotel.amenity</field>
|
||||
<!-- Action for pms room amenities -->
|
||||
<record model="ir.actions.act_window" id="action_pms_room_amenity_view_form">
|
||||
<field name="name">Room Amenities</field>
|
||||
<field name="res_model">pms.amenity</field>
|
||||
<field name="view_type">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>
|
||||
|
||||
<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"
|
||||
action="action_hotel_room_amenity_view_form" sequence="2"
|
||||
parent="hotel.menu_amenity" />
|
||||
<menuitem name="Amenities" id="menu_action_pms_room_amenity_view_form"
|
||||
action="action_pms_room_amenity_view_form" sequence="2"
|
||||
parent="pms.menu_amenity" />
|
||||
|
||||
<!-- 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="type">ir.actions.act_window</field>
|
||||
<field name="res_model">product.category</field>
|
||||
@@ -130,7 +130,7 @@
|
||||
<field eval="'ir.actions.act_window,%d'%action_room_cate" name="value"/>
|
||||
</record-->
|
||||
|
||||
<!-- <menuitem name="Amenities by Type" id="menu_hotel_ty_category_action"
|
||||
action="hotel_ty_category_action" sequence="4" parent="hotel.menu_amenity" /> -->
|
||||
<!-- <menuitem name="Amenities by Type" id="menu_pms_ty_category_action"
|
||||
action="pms_ty_category_action" sequence="4" parent="pms.menu_amenity" /> -->
|
||||
|
||||
</odoo>
|
||||
@@ -1,16 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record model="ir.ui.view" id="hotel_board_service_room_type_form">
|
||||
<field name="name">hotel.board.service.room.type.form</field>
|
||||
<field name="model">hotel.board.service.room.type</field>
|
||||
<record model="ir.ui.view" id="pms_board_service_room_type_form">
|
||||
<field name="name">pms.board.service.room.type.form</field>
|
||||
<field name="model">pms.board.service.room.type</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Board Service Line">
|
||||
<group>
|
||||
<field name="amount"/>
|
||||
<field name="board_service_line_ids">
|
||||
<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="amount" />
|
||||
</tree>
|
||||
@@ -20,9 +20,9 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_hotel_board_service_room_type_view">
|
||||
<field name="name">Hotel Board Service</field>
|
||||
<field name="res_model">hotel.board.service.room.type</field>
|
||||
<record model="ir.actions.act_window" id="action_pms_board_service_room_type_view">
|
||||
<field name="name">Board Service</field>
|
||||
<field name="res_model">board.service.room.type</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
</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 ==================================================== -->
|
||||
<!-- Form view of cancelation rules -->
|
||||
<record model="ir.ui.view" id="hotel_cancelation_rule_form">
|
||||
<field name="name">hotel.cancelation.rule.form</field>
|
||||
<field name="model">hotel.cancelation.rule</field>
|
||||
<record model="ir.ui.view" id="pms_cancelation_rule_form">
|
||||
<field name="name">pms.cancelation.rule.form</field>
|
||||
<field name="model">pms.cancelation.rule</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Cancelation Rules">
|
||||
<sheet>
|
||||
<h3>
|
||||
<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}"/>
|
||||
<separator />
|
||||
<label for="name" string="Max. days InTime before Checkin" />
|
||||
@@ -35,9 +35,9 @@
|
||||
</record>
|
||||
|
||||
<!-- Tree view of cancelation rules -->
|
||||
<record model="ir.ui.view" id="hotel_cancelation_rule_view_tree">
|
||||
<field name="name">hotel.cancelation.rule.tree</field>
|
||||
<field name="model">hotel.cancelation.rule</field>
|
||||
<record model="ir.ui.view" id="pms_cancelation_rule_view_tree">
|
||||
<field name="name">pms.cancelation.rule.tree</field>
|
||||
<field name="model">pms.cancelation.rule</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Cancelation Rules">
|
||||
<field name="name" />
|
||||
@@ -50,16 +50,16 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Action of hotel cancelation rules -->
|
||||
<record model="ir.actions.act_window" id="action_hotel_cancelation_rule">
|
||||
<!-- Action of pms cancelation rules -->
|
||||
<record model="ir.actions.act_window" id="action_pms_cancelation_rule">
|
||||
<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_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
<menuitem name="Cancelation Rules" id="menu_hotel_cancelation_rule"
|
||||
action="action_hotel_cancelation_rule" sequence="25"
|
||||
parent="hotel.configuration_others" />
|
||||
<menuitem name="Cancelation Rules" id="menu_pms_cancelation_rule"
|
||||
action="action_pms_cancelation_rule" sequence="25"
|
||||
parent="pms.configuration_others" />
|
||||
|
||||
</odoo>
|
||||
@@ -4,19 +4,19 @@
|
||||
<act_window
|
||||
id="action_checkin_partner"
|
||||
name="Action checkin"
|
||||
res_model="hotel.checkin.partner"
|
||||
res_model="pms.checkin.partner"
|
||||
view_mode="tree,form" />
|
||||
|
||||
<menuitem
|
||||
id="menu_hotel_checkin_partner"
|
||||
id="menu_pms_checkin_partner"
|
||||
name="Checkins"
|
||||
parent="hotel.hotel_reports_menu"
|
||||
parent="pms.pms_reports_menu"
|
||||
sequence="25"
|
||||
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="model">hotel.checkin.partner</field>
|
||||
<field name="model">pms.checkin.partner</field>
|
||||
<field name="arch" type="xml">
|
||||
<form create="false">
|
||||
<sheet>
|
||||
@@ -24,7 +24,7 @@
|
||||
<group name="group_left">
|
||||
<field name="partner_id" required="True"
|
||||
domain="[('is_company','=', False)]"/>
|
||||
<field name="hotel_id" invisible="1"/>
|
||||
<field name="pms_property_id" invisible="1"/>
|
||||
<field name="enter_date"/>
|
||||
<field name="exit_date"/>
|
||||
<field name="arrival_hour"/>
|
||||
@@ -39,9 +39,9 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hotel_checkin_partner_reservation_view_tree" model="ir.ui.view">
|
||||
<field name="name">hotel.checkin.partner.reservation.view.tree</field>
|
||||
<field name="model">hotel.checkin.partner</field>
|
||||
<record id="pms_checkin_partner_reservation_view_tree" model="ir.ui.view">
|
||||
<field name="name">pms.checkin.partner.reservation.view.tree</field>
|
||||
<field name="model">pms.checkin.partner</field>
|
||||
<field name="priority">20</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree editable="bottom" create="1"
|
||||
@@ -68,9 +68,9 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hotel_checkin_partner_view_tree" model="ir.ui.view">
|
||||
<field name="name">hotel.checkin.partner.view.tree</field>
|
||||
<field name="model">hotel.checkin.partner</field>
|
||||
<record id="pms_checkin_partner_view_tree" model="ir.ui.view">
|
||||
<field name="name">pms.checkin.partner.view.tree</field>
|
||||
<field name="model">pms.checkin.partner</field>
|
||||
<field name="priority">10</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree create="false"
|
||||
@@ -96,9 +96,9 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="hotel_checkin_partner_view_search">
|
||||
<field name="name">hotel.checkin.partner.search</field>
|
||||
<field name="model">hotel.checkin.partner</field>
|
||||
<record model="ir.ui.view" id="pms_checkin_partner_view_search">
|
||||
<field name="name">pms.checkin.partner.search</field>
|
||||
<field name="model">pms.checkin.partner</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Checkin Detail">
|
||||
<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"?>
|
||||
<odoo>
|
||||
|
||||
<!--=== Hotel Folio ==== -->
|
||||
<act_window id="action_view_folio_advance_payment_inv"
|
||||
name="Invoice Folio"
|
||||
src_model="hotel.folio"
|
||||
src_model="pms.folio"
|
||||
res_model="folio.advance.payment.inv"
|
||||
key2="client_action_multi" target="new"
|
||||
view_mode="form" multi="True"/>
|
||||
|
||||
<!-- Form view of hotel folio -->
|
||||
<record model="ir.ui.view" id="hotel_folio_view_form">
|
||||
<field name="name">hotel.folio.form</field>
|
||||
<field name="model">hotel.folio</field>
|
||||
<record model="ir.ui.view" id="pms_folio_view_form">
|
||||
<field name="name">pms.folio.form</field>
|
||||
<field name="model">pms.folio</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Folio">
|
||||
<header>
|
||||
@@ -27,7 +25,7 @@
|
||||
attrs="{'invisible': [('has_cancelled_reservations_to_send', '=', False)]}" class="oe_highlight"/> -->
|
||||
<!-- <button name="send_exit_mail" type="object" string="Send Exit Email"
|
||||
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"
|
||||
attrs="{'invisible': [('state', '!=', 'confirm')]}"/>
|
||||
<!-- <button name="action_cancel_draft" states="cancel,sale" string="Set to Draft"
|
||||
@@ -36,7 +34,7 @@
|
||||
attrs="{'invisible': [('state', 'not in', ('confirm','draft'))]}"
|
||||
type="object" />
|
||||
<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"/> -->
|
||||
<field name="state" select="2" widget="statusbar"
|
||||
statusbar_visible="draft,sent,sale,done" />
|
||||
@@ -86,7 +84,7 @@
|
||||
<field name="cancelled_reason" attrs="{'invisible':[('state','not in',('cancel'))]}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="hotel_id" invisible="0"/>
|
||||
<field name="pms_property_id" invisible="0"/>
|
||||
<field name="pricelist_id" />
|
||||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
|
||||
<field name="reservation_type" attrs="{'readonly':[('state','not in',('draft'))]}"/>
|
||||
@@ -125,12 +123,12 @@
|
||||
<notebook colspan="4" col="1">
|
||||
<page string="Reservation Rooms">
|
||||
<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 string="Services">
|
||||
<separator string="Service Lines" colspan="4"/>
|
||||
<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" />
|
||||
</page>
|
||||
<!--TODO: Add precheckin with indeterminate select room?? -->
|
||||
@@ -139,7 +137,7 @@
|
||||
context="{
|
||||
'default_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>
|
||||
@@ -190,7 +188,7 @@
|
||||
</page>
|
||||
<page name="payments" string="Payments" attrs="{'invisible': [('invoices_paid','<=',0)]}">
|
||||
<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}" />
|
||||
</page>
|
||||
<page name="returns" string="Retun Payments" attrs="{'invisible': [('refund_amount','<=',0)]}">
|
||||
@@ -228,12 +226,11 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Tree view of hotel folio -->
|
||||
<record model="ir.ui.view" id="hotel_folio_view_tree">
|
||||
<field name="name">hotel.folio.tree</field>
|
||||
<field name="model">hotel.folio</field>
|
||||
<record model="ir.ui.view" id="pms_folio_view_tree">
|
||||
<field name="name">pms.folio.tree</field>
|
||||
<field name="model">pms.folio</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Hotel Folio" decoration-info="state == 'draft'"
|
||||
<tree string="Folio" decoration-info="state == 'draft'"
|
||||
decoration-muted="state == 'cancel'"
|
||||
default_order="create_date desc">
|
||||
<field name="state"/>
|
||||
@@ -244,15 +241,15 @@
|
||||
<field name="amount_total" sum="Total amount"/>
|
||||
<field name="pending_amount" sum="Total debt"/>
|
||||
<field name="invoice_status" />
|
||||
<field name="hotel_id" invisible="0"/>
|
||||
<field name="pms_property_id" invisible="0"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Folio Kanban View -->
|
||||
<record model="ir.ui.view" id="hotel_folio_view_kanban">
|
||||
<field name="name">hotel.folio.kanban</field>
|
||||
<field name="model">hotel.folio</field>
|
||||
<record model="ir.ui.view" id="pms_folio_view_kanban">
|
||||
<field name="name">pms.folio.kanban</field>
|
||||
<field name="model">pms.folio</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_res_partner_kanban" limit="80">
|
||||
<field name="name"/>
|
||||
@@ -289,10 +286,9 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Search view of hotel folio -->
|
||||
<record model="ir.ui.view" id="hotel_folio_view_search">
|
||||
<field name="name">hotel.folio.search</field>
|
||||
<field name="model">hotel.folio</field>
|
||||
<record model="ir.ui.view" id="pms_folio_view_search">
|
||||
<field name="name">pms.folio.search</field>
|
||||
<field name="model">pms.folio</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Tables Detail">
|
||||
<field name="partner_id" />
|
||||
@@ -314,10 +310,9 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!--graph view of hotel folio -->
|
||||
<record id="hotel_folio_view_graph" model="ir.ui.view">
|
||||
<field name="name">view.hotel.folio.graph</field>
|
||||
<field name="model">hotel.folio</field>
|
||||
<record id="pms_folio_view_graph" model="ir.ui.view">
|
||||
<field name="name">view.pms.folio.graph</field>
|
||||
<field name="model">pms.folio</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph type="bar">
|
||||
</graph>
|
||||
@@ -328,7 +323,7 @@
|
||||
|
||||
<act_window name="Send Confirm Mail"
|
||||
res_model="mail.compose.message"
|
||||
src_model="hotel.folio"
|
||||
src_model="pms.folio"
|
||||
view_mode="form"
|
||||
multi="False"
|
||||
view_type="form"
|
||||
@@ -336,26 +331,25 @@
|
||||
key2="client_action_multi"
|
||||
id="action_view_folio_send_confirm_mail"
|
||||
context="{
|
||||
'default_model': 'hotel.folio',
|
||||
'default_model': 'pms.folio',
|
||||
'default_res_id': active_id,
|
||||
'default_use_template': True,
|
||||
'default_template_id': ref('hotel.email_template_reservation'),
|
||||
'default_template_id': ref('pms.email_template_reservation'),
|
||||
'default_composition_mode': 'comment',
|
||||
'force_send': True,
|
||||
'mark_so_as_sent': True,
|
||||
}" />
|
||||
|
||||
<!-- Action for hotel folio -->
|
||||
<record model="ir.actions.act_window" id="open_hotel_folio1_form_tree_all">
|
||||
<field name="name">Hotel Folio</field>
|
||||
<field name="res_model">hotel.folio</field>
|
||||
<record model="ir.actions.act_window" id="open_pms_folio1_form_tree_all">
|
||||
<field name="name">Folio</field>
|
||||
<field name="res_model">pms.folio</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form,graph</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_all_folio" name="Reservations"
|
||||
parent="hotel.hotel_management_menu" sequence="4"/>
|
||||
<menuitem name="Folios" id="menu_open_hotel_folio1_form_tree_all"
|
||||
action="open_hotel_folio1_form_tree_all" sequence="15" parent="menu_all_folio" />
|
||||
parent="pms.pms_management_menu" sequence="4"/>
|
||||
<menuitem name="Folios" id="menu_open_pms_folio1_form_tree_all"
|
||||
action="open_pms_folio1_form_tree_all" sequence="15" parent="menu_all_folio" />
|
||||
|
||||
</odoo>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user