mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[IMP] Check persons Onboard reservation
This commit is contained in:
@@ -24,6 +24,20 @@
|
||||
<field name="pricelist_id" ref="product.list0" />
|
||||
<field name="room_type_id" ref="pms_room_type_0" />
|
||||
<field name="adults">2</field>
|
||||
<field name="state">onboard</field>
|
||||
<field
|
||||
name="checkin_partner_ids"
|
||||
eval="[(5, 0),
|
||||
(0, 0, {
|
||||
'partner_id': ref('base.res_partner_address_28'),
|
||||
'state': 'onboard'
|
||||
}),
|
||||
(0, 0, {
|
||||
'partner_id': ref('base.res_partner_12'),
|
||||
'state': 'onboard'
|
||||
}),
|
||||
]"
|
||||
/>
|
||||
<field name="checkin" eval="DateTime.today()" />
|
||||
<field name="checkout" eval="DateTime.today() + timedelta(1)" />
|
||||
<field name="board_service_room_id" ref="pms_board_service_room_1" />
|
||||
@@ -58,6 +72,15 @@
|
||||
<field name="pricelist_id" ref="product.list0" />
|
||||
<field name="room_type_id" ref="pms_room_type_1" />
|
||||
<field name="adults">1</field>
|
||||
<field
|
||||
name="checkin_partner_ids"
|
||||
eval="[(5, 0),
|
||||
(0, 0, {
|
||||
'partner_id': ref('base.res_partner_address_27'),
|
||||
'state': 'onboard'
|
||||
}),
|
||||
]"
|
||||
/>
|
||||
<field name="checkin" eval="DateTime.today()" />
|
||||
<field name="checkout" eval="DateTime.today() + timedelta(3)" />
|
||||
<field name="board_service_room_id" ref="pms_board_service_room_2" />
|
||||
@@ -67,6 +90,14 @@
|
||||
<field name="pricelist_id" ref="product.list0" />
|
||||
<field name="room_type_id" ref="pms_room_type_1" />
|
||||
<field name="adults">1</field>
|
||||
<field
|
||||
name="checkin_partner_ids"
|
||||
eval="[(5, 0),
|
||||
(0, 0, {
|
||||
'partner_id': ref('base.res_partner_address_10'),
|
||||
}),
|
||||
]"
|
||||
/>
|
||||
<field name="checkin" eval="DateTime.today()" />
|
||||
<field name="checkout" eval="DateTime.today() + timedelta(3)" />
|
||||
<field name="board_service_room_id" ref="pms_board_service_room_0" />
|
||||
@@ -129,6 +160,13 @@
|
||||
<field name="pricelist_id" ref="product.list0" />
|
||||
<field name="room_type_id" ref="pms_room_type_2" />
|
||||
<field name="adults">2</field>
|
||||
<field
|
||||
name="checkin_partner_ids"
|
||||
eval="[(5, 0),
|
||||
(0, 0, {'partner_id': ref('base.res_partner_12')}),
|
||||
(0, 0, {'partner_id': ref('base.res_partner_18')}),
|
||||
]"
|
||||
/>
|
||||
<field name="checkin" eval="DateTime.today() + timedelta(6)" />
|
||||
<field name="checkout" eval="DateTime.today() + timedelta(8)" />
|
||||
</record>
|
||||
@@ -164,6 +202,13 @@
|
||||
<field name="pricelist_id" ref="product.list0" />
|
||||
<field name="room_type_id" ref="pms_room_type_2" />
|
||||
<field name="adults">2</field>
|
||||
<field
|
||||
name="checkin_partner_ids"
|
||||
eval="[(5, 0),
|
||||
(0, 0, {'partner_id': ref('base.res_partner_18')}),
|
||||
(0, 0, {'partner_id': ref('base.res_partner_12')}),
|
||||
]"
|
||||
/>
|
||||
<field name="checkin" eval="DateTime.today() + timedelta(11)" />
|
||||
<field name="checkout" eval="DateTime.today() + timedelta(13)" />
|
||||
</record>
|
||||
@@ -217,6 +262,14 @@
|
||||
<field name="pricelist_id" ref="product.list0" />
|
||||
<field name="room_type_id" ref="pms_room_type_3" />
|
||||
<field name="adults">3</field>
|
||||
<field
|
||||
name="checkin_partner_ids"
|
||||
eval="[(5, 0),
|
||||
(0, 0, {'partner_id': ref('base.res_partner_10')}),
|
||||
(0, 0, {'partner_id': ref('base.res_partner_address_10')}),
|
||||
(0, 0, {'partner_id': ref('base.res_partner_address_18')}),
|
||||
]"
|
||||
/>
|
||||
<field name="checkin" eval="DateTime.today() + timedelta(6)" />
|
||||
<field name="checkout" eval="DateTime.today() + timedelta(8)" />
|
||||
</record>
|
||||
@@ -225,6 +278,12 @@
|
||||
<field name="pricelist_id" ref="product.list0" />
|
||||
<field name="room_type_id" ref="pms_room_type_3" />
|
||||
<field name="adults">1</field>
|
||||
<field
|
||||
name="checkin_partner_ids"
|
||||
eval="[(5, 0),
|
||||
(0, 0, {'partner_id': ref('base.res_partner_3')}),
|
||||
]"
|
||||
/>
|
||||
<field name="children">2</field>
|
||||
<field name="checkin" eval="DateTime.today() + timedelta(10)" />
|
||||
<field name="checkout" eval="DateTime.today() + timedelta(11)" />
|
||||
@@ -235,6 +294,14 @@
|
||||
<field name="pricelist_id" ref="product.list0" />
|
||||
<field name="room_type_id" ref="pms_room_type_3" />
|
||||
<field name="adults">3</field>
|
||||
<field
|
||||
name="checkin_partner_ids"
|
||||
eval="[(5, 0),
|
||||
(0, 0, {'partner_id': ref('base.res_partner_3')}),
|
||||
(0, 0, {'partner_id': ref('base.res_partner_address_14')}),
|
||||
(0, 0, {'partner_id': ref('base.res_partner_address_33')}),
|
||||
]"
|
||||
/>
|
||||
<field name="checkin" eval="DateTime.today() + timedelta(4)" />
|
||||
<field name="checkout" eval="DateTime.today() + timedelta(6)" />
|
||||
</record>
|
||||
@@ -244,7 +311,20 @@
|
||||
<field name="room_type_id" ref="pms_room_type_3" />
|
||||
<field name="adults">2</field>
|
||||
<field name="children">1</field>
|
||||
<field name="state">confirm</field>
|
||||
<field name="state">onboard</field>
|
||||
<field
|
||||
name="checkin_partner_ids"
|
||||
eval="[(5, 0),
|
||||
(0, 0, {
|
||||
'partner_id': ref('base.res_partner_12'),
|
||||
'state': 'onboard'
|
||||
}),
|
||||
(0, 0, {
|
||||
'partner_id': ref('base.res_partner_2'),
|
||||
'state': 'onboard'
|
||||
}),
|
||||
]"
|
||||
/>
|
||||
<field name="checkin" eval="DateTime.today()" />
|
||||
<field name="checkout" eval="DateTime.today() + timedelta(4)" />
|
||||
<field name="board_service_room_id" ref="pms_board_service_room_2" />
|
||||
|
||||
@@ -38,6 +38,11 @@ class PmsCheckinPartner(models.Model):
|
||||
name = fields.Char("Name", related="partner_id.name")
|
||||
email = fields.Char("E-mail", related="partner_id.email")
|
||||
mobile = fields.Char("Mobile", related="partner_id.mobile")
|
||||
image_128 = fields.Image(related="partner_id.image_128")
|
||||
segmentation_ids = fields.Many2many(
|
||||
related="reservation_id.segmentation_ids",
|
||||
readonly=True,
|
||||
)
|
||||
arrival = fields.Datetime("Enter")
|
||||
departure = fields.Datetime("Exit")
|
||||
state = fields.Selection(
|
||||
@@ -59,6 +64,7 @@ class PmsCheckinPartner(models.Model):
|
||||
def _compute_identifier(self):
|
||||
for record in self:
|
||||
# TODO: Identifier
|
||||
checkins = []
|
||||
if record.reservation_id.filtered("preferred_room_id"):
|
||||
checkins = record.reservation_id.checkin_partner_ids
|
||||
record.identifier = (
|
||||
@@ -93,7 +99,7 @@ class PmsCheckinPartner(models.Model):
|
||||
record.state = "precheckin"
|
||||
|
||||
def _checkin_mandatory_fields(self):
|
||||
return ["name", "email"]
|
||||
return ["name"]
|
||||
|
||||
# Constraints and onchanges
|
||||
|
||||
|
||||
@@ -244,14 +244,11 @@ class PmsFolio(models.Model):
|
||||
tracking=True,
|
||||
)
|
||||
# Checkin Fields-----------------------------------------------------
|
||||
booking_pending = fields.Integer(
|
||||
"Booking pending", compute="_compute_checkin_partner_count"
|
||||
reservation_pending_arrival_ids = fields.One2many(
|
||||
string="Pending Arrival Rooms", compute="_compute_reservations_pending_arrival"
|
||||
)
|
||||
checkin_partner_count = fields.Integer(
|
||||
"Checkin counter", compute="_compute_checkin_partner_count"
|
||||
)
|
||||
checkin_partner_pending_count = fields.Integer(
|
||||
"Checkin Pending", compute="_compute_checkin_partner_count"
|
||||
reservations_pending_count = fields.Integer(
|
||||
compute="_compute_reservations_pending_arrival"
|
||||
)
|
||||
# Invoice Fields-----------------------------------------------------
|
||||
invoice_status = fields.Selection(
|
||||
@@ -444,6 +441,16 @@ class PmsFolio(models.Model):
|
||||
}
|
||||
)
|
||||
|
||||
@api.depends("reservation_ids", "reservation_ids.state")
|
||||
def _compute_reservations_pending_arrival(self):
|
||||
for record in self:
|
||||
record.reservation_pending_arrival_ids = record.reservation_ids.filtered(
|
||||
lambda r: r.state in ("draft", "precheckin")
|
||||
)
|
||||
record.reservations_pending_count = len(
|
||||
record.reservations_pending_arrival_ids
|
||||
)
|
||||
|
||||
# TODO: Add return_ids to depends
|
||||
@api.depends("amount_total", "payment_ids", "reservation_type", "state")
|
||||
def _compute_amount(self):
|
||||
|
||||
BIN
pms/static/description/avatar.png
Normal file
BIN
pms/static/description/avatar.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
@@ -4,7 +4,8 @@
|
||||
id="action_checkin_partner"
|
||||
name="Action checkin"
|
||||
res_model="pms.checkin.partner"
|
||||
view_mode="tree,form"
|
||||
view_mode="kanban,tree,form"
|
||||
domain="[('state', '!=', 'draft')]"
|
||||
/>
|
||||
<menuitem
|
||||
id="menu_pms_checkin_partner"
|
||||
@@ -109,6 +110,165 @@
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="pms_checkin_partner_kanban_view">
|
||||
<field name="name">pms.checkin.partner.kanban</field>
|
||||
<field name="model">pms.checkin.partner</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban default_group_by="state" class="o_res_partner_kanban" sample="1">
|
||||
<field name="id" />
|
||||
<field name="identifier" />
|
||||
<field name="partner_id" />
|
||||
<field name="reservation_id" />
|
||||
<field name="folio_id" />
|
||||
<field name="pms_property_id" />
|
||||
<field name="name" />
|
||||
<field name="email" />
|
||||
<field name="mobile" />
|
||||
<field name="arrival" />
|
||||
<field name="departure" />
|
||||
<field name="state" />
|
||||
<field name="image_128" />
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div
|
||||
class="oe_kanban_global_click o_kanban_record_has_image_fill o_res_partner_kanban"
|
||||
>
|
||||
<div class="o_kanban_image">
|
||||
<img
|
||||
alt="Contact image"
|
||||
t-if="record.image_128.raw_value"
|
||||
t-att-src="kanban_image('pms.checkin.partner', 'image_128', record.id.raw_value)"
|
||||
/>
|
||||
<t t-if="!record.image_128.raw_value">
|
||||
<!--TODO: Use npm avatar generation? https://github.com/Ashwinvalento/cartoon-avatar-->
|
||||
<img
|
||||
alt="Draft"
|
||||
t-if="record.state.raw_value === 'draft'"
|
||||
t-att-src=""pms/static/description/avatar.png""
|
||||
/>
|
||||
<img
|
||||
alt="Cancelled"
|
||||
t-if="record.state.raw_value === 'cancelled'"
|
||||
t-att-src=""pms/static/description/avatar.png""
|
||||
/>
|
||||
</t>
|
||||
</div>
|
||||
<div class="oe_kanban_details">
|
||||
<div class="o_kanban_record_top">
|
||||
<div class="o_kanban_record_headings">
|
||||
<strong class="o_kanban_record_title">
|
||||
<div
|
||||
class="float-right"
|
||||
t-if="record.state.raw_value == 'onboard'"
|
||||
name="state"
|
||||
>
|
||||
<span
|
||||
class="fa fa-circle text-success"
|
||||
role="img"
|
||||
aria-label="Present"
|
||||
title="Present"
|
||||
name="state"
|
||||
>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
<div
|
||||
class="float-right"
|
||||
t-if="record.state.raw_value == 'done'"
|
||||
name="state"
|
||||
>
|
||||
<span
|
||||
class="fa fa-circle text-muted"
|
||||
role="img"
|
||||
aria-label="Done"
|
||||
title="Done"
|
||||
name="state"
|
||||
>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
<div
|
||||
class="float-right"
|
||||
t-if="record.state.raw_value == 'precheckin'"
|
||||
name="state"
|
||||
>
|
||||
<span
|
||||
class="fa fa-circle text-warning"
|
||||
role="img"
|
||||
aria-label="Precheckin"
|
||||
title="Precheckin"
|
||||
name="state"
|
||||
>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
<field
|
||||
name="name"
|
||||
placeholder="Hosted's Name"
|
||||
/>
|
||||
<field
|
||||
name="reservation_id"
|
||||
placeholder="Room Reservation"
|
||||
/>
|
||||
</strong>
|
||||
<span
|
||||
t-if="record.arrival.raw_value"
|
||||
class="o_kanban_record_subtitle"
|
||||
>
|
||||
<field name="arrival" />
|
||||
</span>
|
||||
<span
|
||||
t-if="record.departure.raw_value"
|
||||
class="o_kanban_record_subtitle"
|
||||
>
|
||||
<field name="departure" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<field
|
||||
name="segmentation_ids"
|
||||
widget="many2many_tags"
|
||||
options="{'color_field': 'color'}"
|
||||
/>
|
||||
<ul>
|
||||
<li
|
||||
t-if="record.email.raw_value"
|
||||
class="o_kanban_record_subtitle"
|
||||
>
|
||||
<field name="email" />
|
||||
</li>
|
||||
<li
|
||||
t-if="record.mobile.raw_value"
|
||||
class="o_kanban_record_subtitle"
|
||||
>
|
||||
<field name="mobile" />
|
||||
</li>
|
||||
</ul>
|
||||
<div class="oe_kanban_bottom_right">
|
||||
<a
|
||||
name="action_on_board"
|
||||
tabindex="-1"
|
||||
type="object"
|
||||
attrs="{'invisible': [('state', '!=', 'precheckin')]}"
|
||||
class="o_project_kanban_box"
|
||||
>
|
||||
<div>
|
||||
<span class="o_label">
|
||||
<i
|
||||
class="fa fa-lg fa-play-circle text-success"
|
||||
/>
|
||||
Check-in
|
||||
</span>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
<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>
|
||||
|
||||
@@ -278,9 +278,6 @@
|
||||
<field name="pending_amount" />
|
||||
<!-- <field name="refund_amount" /> -->
|
||||
<field name="invoices_paid" />
|
||||
<field name="booking_pending" />
|
||||
<field name="checkin_partner_count" />
|
||||
<field name="checkin_partner_pending_count" />
|
||||
<field name="partner_internal_comment" />
|
||||
<field name="cancelled_reason" />
|
||||
<field name="prepaid_warning_days" />
|
||||
@@ -295,27 +292,6 @@
|
||||
<strong class="oe_partner_heading">
|
||||
<field name="partner_id" />
|
||||
</strong>
|
||||
<ul>
|
||||
<li t-if="record.name.raw_value">
|
||||
<field name="name" />
|
||||
</li>
|
||||
<span
|
||||
t-if="record.checkin_partner_count.value>0"
|
||||
class="badge"
|
||||
>
|
||||
<i class="fa fa-fw fa-bed" />
|
||||
<t t-esc="record.checkin_partner_count.value" />
|
||||
</span>
|
||||
<span
|
||||
t-if="record.checkin_partner_pending_count.value>0"
|
||||
class="badge"
|
||||
>
|
||||
<i class="fa fa-fw fa-user-plus" />
|
||||
<t
|
||||
t-esc="record.checkin_partner_pending_count.value"
|
||||
/>
|
||||
</span>
|
||||
</ul>
|
||||
<div class="oe_kanban_partner_links" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -495,12 +495,10 @@
|
||||
</group>
|
||||
<field
|
||||
name="checkin_partner_ids"
|
||||
mode="kanban"
|
||||
options="{'no_create': True, 'no_delete': True}"
|
||||
context="{
|
||||
'checkin_partner_ids': checkin_partner_ids,
|
||||
'default_reservation_id': id,
|
||||
'reservation_id': id,
|
||||
'tree_view_ref':'pms.pms_checkin_partner_reservation_view_tree',
|
||||
'kanban_view_ref':'pms.pms_checkin_partner_kanban_view',
|
||||
}"
|
||||
/>
|
||||
</page>
|
||||
|
||||
Reference in New Issue
Block a user