diff --git a/hotel/__manifest__.py b/hotel/__manifest__.py
index ba6a25e45..40d54dee0 100644
--- a/hotel/__manifest__.py
+++ b/hotel/__manifest__.py
@@ -15,6 +15,7 @@
'depends': [
'sale_stock',
'account_payment_return',
+ 'partner_firstname',
],
'license': "AGPL-3",
'demo': ['data/hotel_demo.xml'],
diff --git a/hotel/models/hotel_checkin_partner.py b/hotel/models/hotel_checkin_partner.py
index 6b5cbf3ff..3e24f4f53 100644
--- a/hotel/models/hotel_checkin_partner.py
+++ b/hotel/models/hotel_checkin_partner.py
@@ -17,6 +17,14 @@ class HotelCheckinPartner(models.Model):
return reservation
return False
+ def _default_folio_id(self):
+ if 'folio_id' in self.env.context:
+ folio = self.env['hotel.folio'].browse([
+ self.env.context['reservation_id']
+ ])
+ return folio
+ raise ValidationError(_('You only can create checkin from reservations or folios'))
+
def _default_enter_date(self):
if 'reservation_id' in self.env.context:
reservation = self.env['hotel.reservation'].browse([
@@ -45,10 +53,18 @@ class HotelCheckinPartner(models.Model):
partner_id = fields.Many2one('res.partner', default=_default_partner_id,
required=True)
reservation_id = fields.Many2one(
- 'hotel.reservation',
- default=_default_reservation_id, readonly=True)
+ 'hotel.reservation', default=_default_reservation_id)
+ folio_id = fields.Many2one('hotel.reservation',
+ default=_default_folio_id, readonly=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'),
+ ('booking', 'On Board'),
+ ('done', 'Out'),
+ ('cancelled', 'Cancelled')],
+ 'State', readonly=True,
+ default=lambda *a: 'draft',
+ track_visibility='onchange')
# Validation for Departure date is after arrival date.
@api.multi
@@ -72,3 +88,13 @@ class HotelCheckinPartner(models.Model):
raise ValidationError(
_('Departure date, is prior to arrival. Check it now. %s') %
date_out)
+
+ @api.multi
+ def action_on_board(self):
+ for record in self:
+ record.state = 'booking'
+
+ @api.multi
+ def action_done(self):
+ for record in self:
+ record.state = 'done'
diff --git a/hotel/models/hotel_folio.py b/hotel/models/hotel_folio.py
index 5049dd8e4..60fab830d 100644
--- a/hotel/models/hotel_folio.py
+++ b/hotel/models/hotel_folio.py
@@ -188,6 +188,7 @@ class HotelFolio(models.Model):
compute='_amount_all', track_visibility='always')
#Checkin Fields-----------------------------------------------------
+ checkin_partner_ids = fields.One2many('hotel.checkin.partner', 'reservation_id')
booking_pending = fields.Integer('Booking pending',
compute='_compute_checkin_partner_count')
checkin_partner_count = fields.Integer('Checkin counter',
@@ -567,7 +568,6 @@ class HotelFolio(models.Model):
@api.multi
def _compute_checkin_partner_count(self):
- _logger.info('_compute_checkin_partner_amount')
for record in self:
if record.reservation_type == 'normal' and record.room_lines:
write_vals = {}
diff --git a/hotel/models/hotel_reservation.py b/hotel/models/hotel_reservation.py
index 1863c09e7..8eedba68f 100644
--- a/hotel/models/hotel_reservation.py
+++ b/hotel/models/hotel_reservation.py
@@ -572,6 +572,13 @@ class HotelReservation(models.Model):
if self.reservation_type == 'out':
self.update({'partner_id': self.env.user.company_id.partner_id.id})
+ @api.multi
+ @api.onchange('checkin_partner_ids')
+ def onchange_checkin_partner_ids(self):
+ for record in self:
+ if len(record.checkin_partner_ids) > record.adults + record.children:
+ raise models.ValidationError(_('The room already is completed'))
+
# When we need to overwrite the prices even if they were already established
@api.onchange('room_type_id', 'pricelist_id', 'reservation_type')
def onchange_overwrite_price_by_day(self):
@@ -953,6 +960,13 @@ class HotelReservation(models.Model):
CHECKIN/OUT PROCESS ------------------------------------------------
"""
+ @api.multi
+ @api.constrains('checkin_partner_ids')
+ def _max_checkin_partner_ids(self):
+ for record in self:
+ if len(record.checkin_partner_ids) > record.adults + record.children:
+ raise models.ValidationError(_('The room already is completed'))
+
@api.multi
def _compute_checkin_partner_count(self):
_logger.info('_compute_checkin_partner_count')
@@ -972,6 +986,7 @@ class HotelReservation(models.Model):
def action_reservation_checkout(self):
for record in self:
record.state = 'done'
+ record.checkin_partner_ids.action_done()
@api.multi
def action_checks(self):
diff --git a/hotel/views/hotel_checkin_partner_views.xml b/hotel/views/hotel_checkin_partner_views.xml
index 74dc7384a..b19c5ce48 100644
--- a/hotel/views/hotel_checkin_partner_views.xml
+++ b/hotel/views/hotel_checkin_partner_views.xml
@@ -1,18 +1,11 @@
-
-
-
diff --git a/hotel/views/hotel_reservation_views.xml b/hotel/views/hotel_reservation_views.xml
index 3cda84a48..e20d75aca 100644
--- a/hotel/views/hotel_reservation_views.xml
+++ b/hotel/views/hotel_reservation_views.xml
@@ -82,7 +82,6 @@