[IMP] Check persons Onboard reservation

This commit is contained in:
Darío Lodeiros
2020-11-20 10:10:02 +01:00
parent 10c97945a9
commit 95d2f9fc8f
7 changed files with 265 additions and 38 deletions

View File

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

View File

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -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="&quot;pms/static/description/avatar.png&quot;"
/>
<img
alt="Cancelled"
t-if="record.state.raw_value === 'cancelled'"
t-att-src="&quot;pms/static/description/avatar.png&quot;"
/>
</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>

View File

@@ -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&gt;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&gt;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>

View File

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