mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[WIP] Checkin WorkFlow
This commit is contained in:
@@ -23,6 +23,11 @@ class HotelCheckinPartner(models.Model):
|
|||||||
self.env.context['folio_id']
|
self.env.context['folio_id']
|
||||||
])
|
])
|
||||||
return folio
|
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
|
return False
|
||||||
|
|
||||||
def _default_enter_date(self):
|
def _default_enter_date(self):
|
||||||
@@ -46,16 +51,21 @@ class HotelCheckinPartner(models.Model):
|
|||||||
reservation = self.env['hotel.reservation'].browse([
|
reservation = self.env['hotel.reservation'].browse([
|
||||||
self.env.context['reservation_id']
|
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
|
return False
|
||||||
|
|
||||||
|
|
||||||
partner_id = fields.Many2one('res.partner', default=_default_partner_id,
|
partner_id = fields.Many2one('res.partner', default=_default_partner_id,
|
||||||
required=True)
|
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(
|
reservation_id = fields.Many2one(
|
||||||
'hotel.reservation', default=_default_reservation_id)
|
'hotel.reservation', default=_default_reservation_id)
|
||||||
folio_id = fields.Many2one('hotel.reservation',
|
folio_id = fields.Many2one('hotel.folio',
|
||||||
default=_default_folio_id, readonly=True)
|
default=_default_folio_id, readonly=True, required=True)
|
||||||
enter_date = fields.Date(default=_default_enter_date, required=True)
|
enter_date = fields.Date(default=_default_enter_date, required=True)
|
||||||
exit_date = fields.Date(default=_default_exit_date, required=True)
|
exit_date = fields.Date(default=_default_exit_date, required=True)
|
||||||
state = fields.Selection([('draft', 'Pending Entry'),
|
state = fields.Selection([('draft', 'Pending Entry'),
|
||||||
@@ -65,6 +75,7 @@ class HotelCheckinPartner(models.Model):
|
|||||||
'State', readonly=True,
|
'State', readonly=True,
|
||||||
default=lambda *a: 'draft',
|
default=lambda *a: 'draft',
|
||||||
track_visibility='onchange')
|
track_visibility='onchange')
|
||||||
|
|
||||||
|
|
||||||
# Validation for Departure date is after arrival date.
|
# Validation for Departure date is after arrival date.
|
||||||
@api.multi
|
@api.multi
|
||||||
@@ -89,6 +100,30 @@ class HotelCheckinPartner(models.Model):
|
|||||||
_('Departure date, is prior to arrival. Check it now. %s') %
|
_('Departure date, is prior to arrival. Check it now. %s') %
|
||||||
date_out)
|
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
|
@api.multi
|
||||||
def action_on_board(self):
|
def action_on_board(self):
|
||||||
for record in self:
|
for record in self:
|
||||||
|
|||||||
@@ -991,12 +991,20 @@ class HotelReservation(models.Model):
|
|||||||
@api.multi
|
@api.multi
|
||||||
def action_checks(self):
|
def action_checks(self):
|
||||||
self.ensure_one()
|
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'),
|
'name': _('Checkins'),
|
||||||
'view_type': 'form',
|
'view_type': 'form',
|
||||||
'view_mode': 'tree,form',
|
'view_mode': 'tree',
|
||||||
'res_model': 'hotel.checkin.partner',
|
'res_model': 'hotel.checkin.partner',
|
||||||
'type': 'ir.actions.act_window',
|
'type': 'ir.actions.act_window',
|
||||||
|
'view_id': view_id,
|
||||||
|
'context': {
|
||||||
|
'reservation_id': reservation_id,
|
||||||
|
},
|
||||||
|
'flags': {'initial_mode': 'edit'},
|
||||||
'domain': [('reservation_id', '=', self.id)],
|
'domain': [('reservation_id', '=', self.id)],
|
||||||
'target': 'new',
|
'target': 'new',
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
<field name="model">hotel.checkin.partner</field>
|
<field name="model">hotel.checkin.partner</field>
|
||||||
<field name="priority">20</field>
|
<field name="priority">20</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree editable="bottom"
|
<tree editable="bottom" create="1"
|
||||||
decoration-danger="state == 'draft'"
|
decoration-danger="state == 'draft'"
|
||||||
decoration-muted="state == 'cancelled' or state =='done'"
|
decoration-muted="state == 'cancelled' or state =='done'"
|
||||||
decoration-success="state == 'booking'">
|
decoration-success="state == 'booking'">
|
||||||
@@ -51,10 +51,14 @@
|
|||||||
help="Get in"
|
help="Get in"
|
||||||
/>
|
/>
|
||||||
<field name="partner_id" required="True"/>
|
<field name="partner_id" required="True"/>
|
||||||
|
<field name="mobile"/>
|
||||||
|
<field name="email"/>
|
||||||
|
<field name="gender"/>
|
||||||
<field name="enter_date"/>
|
<field name="enter_date"/>
|
||||||
<field name="exit_date"/>
|
<field name="exit_date"/>
|
||||||
<field name="reservation_id"/>
|
<field name="reservation_id" invisible="1"/>
|
||||||
<field name="state" />
|
<field name="folio_id" force_save="1" invisible="1"/>
|
||||||
|
<field name="state"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
@@ -75,10 +79,14 @@
|
|||||||
help="Get in"
|
help="Get in"
|
||||||
/>
|
/>
|
||||||
<field name="partner_id" required="True"/>
|
<field name="partner_id" required="True"/>
|
||||||
|
<field name="mobile"/>
|
||||||
|
<field name="email"/>
|
||||||
|
<field name="gender"/>
|
||||||
<field name="enter_date"/>
|
<field name="enter_date"/>
|
||||||
<field name="exit_date"/>
|
<field name="exit_date"/>
|
||||||
<field name="reservation_id"/>
|
<field name="reservation_id"/>
|
||||||
<field name="state" />
|
<field name="folio_id" force_save="1" invisible="1"/>
|
||||||
|
<field name="state"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|||||||
@@ -304,6 +304,10 @@
|
|||||||
</group>
|
</group>
|
||||||
</page>
|
</page>
|
||||||
<page name="persons" string="Persons">
|
<page name="persons" string="Persons">
|
||||||
|
<group>
|
||||||
|
<field name="segmentation_ids" widget="many2many_tags" placeholder="Segmentation..."
|
||||||
|
options="{'no_create': True,'no_open': True}" />
|
||||||
|
</group>
|
||||||
<field name="checkin_partner_ids"
|
<field name="checkin_partner_ids"
|
||||||
context="{
|
context="{
|
||||||
'default_reservation_id': id,
|
'default_reservation_id': id,
|
||||||
@@ -314,8 +318,6 @@
|
|||||||
</page>
|
</page>
|
||||||
<page name="others" string="Others">
|
<page name="others" string="Others">
|
||||||
<group>
|
<group>
|
||||||
<field name="segmentation_ids" widget="many2many_tags" placeholder="Segmentation..."
|
|
||||||
options="{'no_create': True,'no_open': True}" />
|
|
||||||
<field name="overbooking" />
|
<field name="overbooking" />
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
|
|||||||
@@ -115,8 +115,8 @@ class Wizard(models.TransientModel):
|
|||||||
|
|
||||||
mobile_checkin_partner = fields.Char('Mobile')
|
mobile_checkin_partner = fields.Char('Mobile')
|
||||||
|
|
||||||
segmentation_id = fields.Many2many(
|
segmentation_ids = fields.Many2many(
|
||||||
related='reservation_id.folio_id.segmentation_ids')
|
related='reservation_id.segmentation_ids')
|
||||||
|
|
||||||
|
|
||||||
''' TODO: clean-up - list of checkins on smart button clean is not used anymore
|
''' TODO: clean-up - list of checkins on smart button clean is not used anymore
|
||||||
|
|||||||
@@ -32,8 +32,8 @@
|
|||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//field[@name='partner_id']" position="after">
|
<xpath expr="//field[@name='partner_id']" position="after">
|
||||||
<field name="document_type"/>
|
<field name="document_type"/>
|
||||||
<field name="document_number"/>
|
<field name="document_number" string="Doc. Number"/>
|
||||||
<field name="document_expedition_date"/>
|
<field name="document_expedition_date" string="Exp. Date"/>
|
||||||
<field name="code_ine_id" />
|
<field name="code_ine_id" />
|
||||||
</xpath>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
@@ -54,8 +54,8 @@
|
|||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//field[@name='partner_id']" position="after">
|
<xpath expr="//field[@name='partner_id']" position="after">
|
||||||
<field name="document_type"/>
|
<field name="document_type"/>
|
||||||
<field name="document_number"/>
|
<field name="document_number" string="Doc. Number"/>
|
||||||
<field name="document_expedition_date"/>
|
<field name="document_expedition_date" string="Exp. Date"/>
|
||||||
<field name="code_ine_id" />
|
<field name="code_ine_id" />
|
||||||
</xpath>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
|
|||||||
Reference in New Issue
Block a user