mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[IMP] Precommit
This commit is contained in:
@@ -2,72 +2,72 @@
|
||||
# Copyright 2018 Alexandre Diaz
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
import datetime
|
||||
from odoo import models, fields, api, _
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo.tools import (
|
||||
DEFAULT_SERVER_DATETIME_FORMAT,
|
||||
DEFAULT_SERVER_DATE_FORMAT)
|
||||
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT
|
||||
|
||||
|
||||
class PmsCheckinPartner(models.Model):
|
||||
_name = 'pms.checkin.partner'
|
||||
_description = 'Partner Checkins'
|
||||
_name = "pms.checkin.partner"
|
||||
_description = "Partner Checkins"
|
||||
|
||||
# Default Methods ang Gets
|
||||
def _default_reservation_id(self):
|
||||
if 'reservation_id' in self.env.context:
|
||||
reservation = self.env['pms.reservation'].browse([
|
||||
self.env.context['reservation_id']
|
||||
])
|
||||
if "reservation_id" in self.env.context:
|
||||
reservation = self.env["pms.reservation"].browse(
|
||||
[self.env.context["reservation_id"]]
|
||||
)
|
||||
return reservation
|
||||
return False
|
||||
|
||||
def _default_partner_id(self):
|
||||
if 'reservation_id' in self.env.context:
|
||||
reservation = self.env['pms.reservation'].browse([
|
||||
self.env.context['reservation_id']
|
||||
])
|
||||
if "reservation_id" in self.env.context:
|
||||
reservation = self.env["pms.reservation"].browse(
|
||||
[self.env.context["reservation_id"]]
|
||||
)
|
||||
partner_ids = []
|
||||
if reservation.folio_id:
|
||||
for room in reservation.folio_id.reservation_ids:
|
||||
partner_ids.append(room.mapped(
|
||||
'checkin_partner_ids.partner_id.id'))
|
||||
if 'checkin_partner_ids' in self.env.context:
|
||||
for checkin in self.env.context['checkin_partner_ids']:
|
||||
partner_ids.append(room.mapped("checkin_partner_ids.partner_id.id"))
|
||||
if "checkin_partner_ids" in self.env.context:
|
||||
for checkin in self.env.context["checkin_partner_ids"]:
|
||||
if checkin[0] == 0:
|
||||
partner_ids.append(checkin[2].get('partner_id'))
|
||||
if self._context.get('include_customer') and \
|
||||
reservation.partner_id.id not in partner_ids and \
|
||||
not reservation.partner_id.is_company:
|
||||
partner_ids.append(checkin[2].get("partner_id"))
|
||||
if (
|
||||
self._context.get("include_customer")
|
||||
and reservation.partner_id.id not in partner_ids
|
||||
and not reservation.partner_id.is_company
|
||||
):
|
||||
return reservation.partner_id
|
||||
return False
|
||||
|
||||
def _default_folio_id(self):
|
||||
if 'folio_id' in self.env.context:
|
||||
folio = self.env['pms.folio'].browse([
|
||||
self.env.context['folio_id']
|
||||
])
|
||||
if "folio_id" in self.env.context:
|
||||
folio = self.env["pms.folio"].browse([self.env.context["folio_id"]])
|
||||
return folio
|
||||
if 'reservation_id' in self.env.context:
|
||||
folio = self.env['pms.reservation'].browse([
|
||||
self.env.context['reservation_id']
|
||||
]).folio_id
|
||||
if "reservation_id" in self.env.context:
|
||||
folio = (
|
||||
self.env["pms.reservation"]
|
||||
.browse([self.env.context["reservation_id"]])
|
||||
.folio_id
|
||||
)
|
||||
return folio
|
||||
return False
|
||||
|
||||
def _default_enter_date(self):
|
||||
if 'reservation_id' in self.env.context:
|
||||
reservation = self.env['pms.reservation'].browse([
|
||||
self.env.context['reservation_id']
|
||||
])
|
||||
if "reservation_id" in self.env.context:
|
||||
reservation = self.env["pms.reservation"].browse(
|
||||
[self.env.context["reservation_id"]]
|
||||
)
|
||||
return reservation.checkin
|
||||
return False
|
||||
|
||||
def _default_exit_date(self):
|
||||
if 'reservation_id' in self.env.context:
|
||||
reservation = self.env['pms.reservation'].browse([
|
||||
self.env.context['reservation_id']
|
||||
])
|
||||
if "reservation_id" in self.env.context:
|
||||
reservation = self.env["pms.reservation"].browse(
|
||||
[self.env.context["reservation_id"]]
|
||||
)
|
||||
return reservation.checkout
|
||||
return False
|
||||
|
||||
@@ -77,123 +77,124 @@ class PmsCheckinPartner(models.Model):
|
||||
|
||||
# Fields declaration
|
||||
partner_id = fields.Many2one(
|
||||
'res.partner',
|
||||
default=_default_partner_id,
|
||||
required=True)
|
||||
reservation_id = fields.Many2one(
|
||||
'pms.reservation',
|
||||
default=_default_reservation_id)
|
||||
"res.partner", default=_default_partner_id, required=True
|
||||
)
|
||||
reservation_id = fields.Many2one("pms.reservation", default=_default_reservation_id)
|
||||
folio_id = fields.Many2one(
|
||||
'pms.folio',
|
||||
default=_default_folio_id,
|
||||
readonly=True,
|
||||
required=True)
|
||||
"pms.folio", default=_default_folio_id, readonly=True, required=True
|
||||
)
|
||||
pms_property_id = fields.Many2one(
|
||||
'pms.property',
|
||||
default=_get_default_pms_property,
|
||||
required=True)
|
||||
email = fields.Char('E-mail', related='partner_id.email')
|
||||
mobile = fields.Char('Mobile', related='partner_id.mobile')
|
||||
"pms.property", default=_get_default_pms_property, required=True
|
||||
)
|
||||
email = fields.Char("E-mail", related="partner_id.email")
|
||||
mobile = fields.Char("Mobile", related="partner_id.mobile")
|
||||
enter_date = fields.Date(default=_default_enter_date, required=True)
|
||||
exit_date = fields.Date(default=_default_exit_date, required=True)
|
||||
arrival_hour = fields.Char('Arrival Hour',
|
||||
help="Default Arrival Hour (HH:MM)")
|
||||
departure_hour = fields.Char('Departure Hour',
|
||||
help="Default Departure Hour (HH:MM)")
|
||||
auto_booking = fields.Boolean('Get in Now', default=False)
|
||||
state = fields.Selection([
|
||||
('draft', 'Pending Entry'),
|
||||
('booking', 'On Board'),
|
||||
('done', 'Out'),
|
||||
('cancelled', 'Cancelled')],
|
||||
string='State',
|
||||
arrival_hour = fields.Char("Arrival Hour", help="Default Arrival Hour (HH:MM)")
|
||||
departure_hour = fields.Char(
|
||||
"Departure Hour", help="Default Departure Hour (HH:MM)"
|
||||
)
|
||||
auto_booking = fields.Boolean("Get in Now", default=False)
|
||||
state = fields.Selection(
|
||||
[
|
||||
("draft", "Pending Entry"),
|
||||
("booking", "On Board"),
|
||||
("done", "Out"),
|
||||
("cancelled", "Cancelled"),
|
||||
],
|
||||
string="State",
|
||||
readonly=True,
|
||||
default=lambda *a: 'draft',
|
||||
track_visibility='onchange')
|
||||
default=lambda *a: "draft",
|
||||
track_visibility="onchange",
|
||||
)
|
||||
|
||||
# Constraints and onchanges
|
||||
|
||||
@api.constrains('exit_date', 'enter_date')
|
||||
@api.constrains("exit_date", "enter_date")
|
||||
def _check_exit_date(self):
|
||||
for record in self:
|
||||
date_in = fields.Date.from_string(record.enter_date)
|
||||
date_out = fields.Date.from_string(record.exit_date)
|
||||
if date_out < date_in:
|
||||
raise models.ValidationError(
|
||||
_('Departure date (%s) is prior to arrival on %s') %
|
||||
(date_out, date_in))
|
||||
_("Departure date (%s) is prior to arrival on %s")
|
||||
% (date_out, date_in)
|
||||
)
|
||||
|
||||
@api.onchange('enter_date', 'exit_date')
|
||||
@api.onchange("enter_date", "exit_date")
|
||||
def _onchange_enter_date(self):
|
||||
date_in = fields.Date.from_string(self.enter_date)
|
||||
date_out = fields.Date.from_string(self.exit_date)
|
||||
if date_out <= date_in:
|
||||
date_out = date_in + datetime.timedelta(days=1)
|
||||
self.update({'exit_date': date_out})
|
||||
self.update({"exit_date": date_out})
|
||||
raise ValidationError(
|
||||
_('Departure date, is prior to arrival. Check it now. %s') %
|
||||
date_out)
|
||||
_("Departure date, is prior to arrival. Check it now. %s") % date_out
|
||||
)
|
||||
|
||||
|
||||
@api.onchange('partner_id')
|
||||
@api.onchange("partner_id")
|
||||
def _check_partner_id(self):
|
||||
for record in self:
|
||||
if record.partner_id:
|
||||
if record.partner_id.is_company:
|
||||
raise models.ValidationError(
|
||||
_('A Checkin Guest is configured like a company, \
|
||||
modify it in contact form if its a mistake'))
|
||||
indoor_partner_ids = record.reservation_id.\
|
||||
checkin_partner_ids.filtered(
|
||||
lambda r: r.id != record.id
|
||||
).mapped('partner_id.id')
|
||||
_(
|
||||
"A Checkin Guest is configured like a company, \
|
||||
modify it in contact form if its a mistake"
|
||||
)
|
||||
)
|
||||
indoor_partner_ids = record.reservation_id.checkin_partner_ids.filtered(
|
||||
lambda r: r.id != record.id
|
||||
).mapped("partner_id.id")
|
||||
if indoor_partner_ids.count(record.partner_id.id) > 1:
|
||||
record.partner_id = None
|
||||
raise models.ValidationError(
|
||||
_('This guest is already registered in the room'))
|
||||
_("This guest is already registered in the room")
|
||||
)
|
||||
|
||||
# Action methods
|
||||
|
||||
def action_on_board(self):
|
||||
for record in self:
|
||||
if record.reservation_id.checkin > fields.Date.today():
|
||||
raise models.ValidationError(
|
||||
_('It is not yet checkin day!'))
|
||||
raise models.ValidationError(_("It is not yet checkin day!"))
|
||||
hour = record._get_arrival_hour()
|
||||
vals = {
|
||||
'state': 'booking',
|
||||
'arrival_hour': hour,
|
||||
"state": "booking",
|
||||
"arrival_hour": hour,
|
||||
}
|
||||
record.update(vals)
|
||||
if record.reservation_id.state == 'confirm':
|
||||
record.reservation_id.state = 'booking'
|
||||
if record.reservation_id.state == "confirm":
|
||||
record.reservation_id.state = "booking"
|
||||
if record.reservation_id.splitted:
|
||||
master_reservation = \
|
||||
record.reservation_id.parent_reservation or \
|
||||
record.reservation_id
|
||||
splitted_reservs = self.env['pms.reservation'].search([
|
||||
('splitted', '=', True),
|
||||
'|',
|
||||
('parent_reservation', '=', master_reservation.id),
|
||||
('id', '=', master_reservation.id),
|
||||
('folio_id', '=', record.folio_id.id),
|
||||
('id', '!=', record.id),
|
||||
('state', '=', 'confirm')
|
||||
])
|
||||
master_reservation = (
|
||||
record.reservation_id.parent_reservation
|
||||
or record.reservation_id
|
||||
)
|
||||
splitted_reservs = self.env["pms.reservation"].search(
|
||||
[
|
||||
("splitted", "=", True),
|
||||
"|",
|
||||
("parent_reservation", "=", master_reservation.id),
|
||||
("id", "=", master_reservation.id),
|
||||
("folio_id", "=", record.folio_id.id),
|
||||
("id", "!=", record.id),
|
||||
("state", "=", "confirm"),
|
||||
]
|
||||
)
|
||||
if splitted_reservs:
|
||||
splitted_reservs.update({'state': 'booking'})
|
||||
splitted_reservs.update({"state": "booking"})
|
||||
return {
|
||||
"type": "ir.actions.do_nothing",
|
||||
}
|
||||
|
||||
|
||||
def action_done(self):
|
||||
for record in self:
|
||||
if record.state == 'booking':
|
||||
if record.state == "booking":
|
||||
hour = record._get_departure_hour()
|
||||
vals = {
|
||||
'state': 'done',
|
||||
'departure_hour': hour,
|
||||
"state": "done",
|
||||
"departure_hour": hour,
|
||||
}
|
||||
record.update(vals)
|
||||
return True
|
||||
@@ -202,7 +203,7 @@ class PmsCheckinPartner(models.Model):
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
record = super(PmsCheckinPartner, self).create(vals)
|
||||
if vals.get('auto_booking', False):
|
||||
if vals.get("auto_booking", False):
|
||||
record.action_on_board()
|
||||
return record
|
||||
|
||||
@@ -212,16 +213,17 @@ class PmsCheckinPartner(models.Model):
|
||||
tz_property = self.env.user.pms_property_id.tz
|
||||
today = fields.Datetime.context_timestamp(
|
||||
self.with_context(tz=tz_property),
|
||||
datetime.datetime.strptime(fields.Date.today(),
|
||||
DEFAULT_SERVER_DATE_FORMAT))
|
||||
datetime.datetime.strptime(fields.Date.today(), DEFAULT_SERVER_DATE_FORMAT),
|
||||
)
|
||||
default_arrival_hour = self.env.user.pms_property_id.default_arrival_hour
|
||||
if self.reservation_id.checkin < today.strftime(
|
||||
DEFAULT_SERVER_DATE_FORMAT):
|
||||
if self.reservation_id.checkin < today.strftime(DEFAULT_SERVER_DATE_FORMAT):
|
||||
return default_arrival_hour
|
||||
now = fields.Datetime.context_timestamp(
|
||||
self.with_context(tz=tz_property),
|
||||
datetime.datetime.strptime(fields.Datetime.now(),
|
||||
DEFAULT_SERVER_DATETIME_FORMAT))
|
||||
datetime.datetime.strptime(
|
||||
fields.Datetime.now(), DEFAULT_SERVER_DATETIME_FORMAT
|
||||
),
|
||||
)
|
||||
arrival_hour = now.strftime("%H:%M")
|
||||
return arrival_hour
|
||||
|
||||
@@ -230,15 +232,16 @@ class PmsCheckinPartner(models.Model):
|
||||
tz_property = self.env.user.pms_property_id.tz
|
||||
today = fields.Datetime.context_timestamp(
|
||||
self.with_context(tz=tz_property),
|
||||
datetime.datetime.strptime(fields.Date.today(),
|
||||
DEFAULT_SERVER_DATE_FORMAT))
|
||||
datetime.datetime.strptime(fields.Date.today(), DEFAULT_SERVER_DATE_FORMAT),
|
||||
)
|
||||
default_departure_hour = self.env.user.pms_property_id.default_departure_hour
|
||||
if self.reservation_id.checkout < today.strftime(
|
||||
DEFAULT_SERVER_DATE_FORMAT):
|
||||
if self.reservation_id.checkout < today.strftime(DEFAULT_SERVER_DATE_FORMAT):
|
||||
return default_departure_hour
|
||||
now = fields.Datetime.context_timestamp(
|
||||
self.with_context(tz=tz_property),
|
||||
datetime.datetime.strptime(fields.Datetime.now(),
|
||||
DEFAULT_SERVER_DATETIME_FORMAT))
|
||||
datetime.datetime.strptime(
|
||||
fields.Datetime.now(), DEFAULT_SERVER_DATETIME_FORMAT
|
||||
),
|
||||
)
|
||||
departure_hour = now.strftime("%H:%M")
|
||||
return departure_hour
|
||||
|
||||
Reference in New Issue
Block a user