diff --git a/hotel/models/hotel_checkin_partner.py b/hotel/models/hotel_checkin_partner.py
index 5fe511faa..cc27b8dbe 100644
--- a/hotel/models/hotel_checkin_partner.py
+++ b/hotel/models/hotel_checkin_partner.py
@@ -23,6 +23,11 @@ class HotelCheckinPartner(models.Model):
self.env.context['folio_id']
])
return folio
+ if 'reservation_id' in self.env.context:
+ folio = self.env['hotel.reservation'].browse([
+ self.env.context['reservation_id']
+ ]).folio_id
+ return folio
return False
def _default_enter_date(self):
@@ -46,16 +51,21 @@ class HotelCheckinPartner(models.Model):
reservation = self.env['hotel.reservation'].browse([
self.env.context['reservation_id']
])
- return reservation.partner_id
+ if reservation.partner_id.id not in reservation.mapped(
+ 'checkin_partner_ids.partner_id.id'):
+ return reservation.partner_id
return False
partner_id = fields.Many2one('res.partner', default=_default_partner_id,
required=True)
+ email = fields.Char('E-mail', related='partner_id.email')
+ mobile = fields.Char('Mobile', related='partner_id.mobile')
+ gender = fields.Selection('Gender', related='partner_id.gender')
reservation_id = fields.Many2one(
'hotel.reservation', default=_default_reservation_id)
- folio_id = fields.Many2one('hotel.reservation',
- default=_default_folio_id, readonly=True)
+ folio_id = fields.Many2one('hotel.folio',
+ default=_default_folio_id, readonly=True, required=True)
enter_date = fields.Date(default=_default_enter_date, required=True)
exit_date = fields.Date(default=_default_exit_date, required=True)
state = fields.Selection([('draft', 'Pending Entry'),
@@ -65,6 +75,7 @@ class HotelCheckinPartner(models.Model):
'State', readonly=True,
default=lambda *a: 'draft',
track_visibility='onchange')
+
# Validation for Departure date is after arrival date.
@api.multi
@@ -89,6 +100,30 @@ class HotelCheckinPartner(models.Model):
_('Departure date, is prior to arrival. Check it now. %s') %
date_out)
+ @api.multi
+ @api.onchange('partner_id')
+ def _check_partner_id(self):
+ for record in self:
+ checkins = self.env['hotel.checkin.partner'].search([
+ ('id','!=', record.id),
+ ('reservation_id','=', record.reservation_id.id)
+ ])
+ if record.partner_id.id in checkins.mapped('partner_id.id'):
+ raise models.ValidationError(
+ _('This guest is already registered in the room'))
+
+ @api.multi
+ @api.constrains('partner_id')
+ def _check_partner_id(self):
+ for record in self:
+ checkins = self.env['hotel.checkin.partner'].search([
+ ('id','!=', record.id),
+ ('reservation_id','=', record.reservation_id.id)
+ ])
+ if record.partner_id.id in checkins.mapped('partner_id.id'):
+ raise models.ValidationError(
+ _('This guest is already registered in the room'))
+
@api.multi
def action_on_board(self):
for record in self:
diff --git a/hotel/models/hotel_reservation.py b/hotel/models/hotel_reservation.py
index 8eedba68f..220f30056 100644
--- a/hotel/models/hotel_reservation.py
+++ b/hotel/models/hotel_reservation.py
@@ -991,12 +991,20 @@ class HotelReservation(models.Model):
@api.multi
def action_checks(self):
self.ensure_one()
- return {
+ partner = self.partner_id.id
+ reservation_id = self.id
+ view_id = self.env.ref('hotel.hotel_checkin_partner_reservation_view_tree').id
+ return{
'name': _('Checkins'),
'view_type': 'form',
- 'view_mode': 'tree,form',
+ 'view_mode': 'tree',
'res_model': 'hotel.checkin.partner',
'type': 'ir.actions.act_window',
+ 'view_id': view_id,
+ 'context': {
+ 'reservation_id': reservation_id,
+ },
+ 'flags': {'initial_mode': 'edit'},
'domain': [('reservation_id', '=', self.id)],
'target': 'new',
}
diff --git a/hotel/views/hotel_checkin_partner_views.xml b/hotel/views/hotel_checkin_partner_views.xml
index b19c5ce48..004788d37 100644
--- a/hotel/views/hotel_checkin_partner_views.xml
+++ b/hotel/views/hotel_checkin_partner_views.xml
@@ -40,7 +40,7 @@
hotel.checkin.partner
20
-
@@ -51,10 +51,14 @@
help="Get in"
/>
+
+
+
-
-
+
+
+
@@ -75,10 +79,14 @@
help="Get in"
/>
+
+
+
-
+
+
diff --git a/hotel/views/hotel_reservation_views.xml b/hotel/views/hotel_reservation_views.xml
index 43acee8c1..9721c8c98 100644
--- a/hotel/views/hotel_reservation_views.xml
+++ b/hotel/views/hotel_reservation_views.xml
@@ -304,6 +304,10 @@
+
+
+
-
diff --git a/hotel/wizard/checkinwizard.py b/hotel/wizard/checkinwizard.py
index 2ce8cce0b..8bb5b669e 100644
--- a/hotel/wizard/checkinwizard.py
+++ b/hotel/wizard/checkinwizard.py
@@ -115,8 +115,8 @@ class Wizard(models.TransientModel):
mobile_checkin_partner = fields.Char('Mobile')
- segmentation_id = fields.Many2many(
- related='reservation_id.folio_id.segmentation_ids')
+ segmentation_ids = fields.Many2many(
+ related='reservation_id.segmentation_ids')
''' TODO: clean-up - list of checkins on smart button clean is not used anymore
diff --git a/hotel_l10n_es/views/inherit_hotel_checkin_partner_views.xml b/hotel_l10n_es/views/inherit_hotel_checkin_partner_views.xml
index 1293a2c32..0130d1a14 100644
--- a/hotel_l10n_es/views/inherit_hotel_checkin_partner_views.xml
+++ b/hotel_l10n_es/views/inherit_hotel_checkin_partner_views.xml
@@ -32,8 +32,8 @@
-
-
+
+
@@ -54,8 +54,8 @@
-
-
+
+