Merge PR #304 into 14.0

Signed-off-by DarioLodeiros
This commit is contained in:
OCA-git-bot
2024-12-17 19:07:07 +00:00
5 changed files with 121 additions and 68 deletions

View File

@@ -452,6 +452,7 @@ class PmsCheckinPartner(models.Model):
for field in record._checkin_mandatory_fields(
residence_country=record.residence_country_id,
document_type=record.document_type,
birthdate_date=record.birthdate_date,
)
):
record.state = "draft"
@@ -782,7 +783,9 @@ class PmsCheckinPartner(models.Model):
dummy_checkins = reservation.checkin_partner_ids.filtered(
lambda c: c.state == "dummy"
)
if len(reservation.checkin_partner_ids) < reservation.adults:
if len(reservation.checkin_partner_ids) < (
reservation.adults + reservation.children
):
return super(PmsCheckinPartner, self).create(vals)
if len(dummy_checkins) > 0:
dummy_checkins[0].write(vals)
@@ -825,6 +828,8 @@ class PmsCheckinPartner(models.Model):
"residence_city",
"residence_country_id",
"residence_state_id",
"document_country_id",
"document_type",
]
return manual_fields
@@ -835,10 +840,10 @@ class PmsCheckinPartner(models.Model):
return manual_fields
@api.model
def _checkin_mandatory_fields(self, residence_country=False, document_type=False):
mandatory_fields = [
"name",
]
def _checkin_mandatory_fields(
self, residence_country=False, document_type=False, birthdate_date=False
):
mandatory_fields = []
return mandatory_fields
@api.model

View File

@@ -1096,10 +1096,14 @@ class PmsReservation(models.Model):
else:
reservation.show_update_pricelist = False
@api.depends("adults")
@api.depends("adults", "children")
def _compute_checkin_partner_ids(self):
for reservation in self:
adults = reservation.adults if reservation.reservation_type != "out" else 0
occupancy = (
reservation.adults + reservation.children
if reservation.reservation_type != "out"
else 0
)
assigned_checkins = reservation.checkin_partner_ids.filtered(
lambda c: c.state in ("precheckin", "onboard", "done")
)
@@ -1107,18 +1111,18 @@ class PmsReservation(models.Model):
lambda c: c.state in ("dummy", "draft")
)
leftover_unassigneds_count = (
len(assigned_checkins) + len(unassigned_checkins) - adults
len(assigned_checkins) + len(unassigned_checkins) - occupancy
)
if len(assigned_checkins) > adults:
if len(assigned_checkins) > occupancy:
raise UserError(
_("Remove some of the leftover assigned checkins first")
)
elif leftover_unassigneds_count > 0:
for i in range(0, leftover_unassigneds_count):
reservation.checkin_partner_ids = [(2, unassigned_checkins[i].id)]
elif adults > len(reservation.checkin_partner_ids):
elif occupancy > len(reservation.checkin_partner_ids):
checkins_lst = []
count_new_checkins = adults - len(reservation.checkin_partner_ids)
count_new_checkins = occupancy - len(reservation.checkin_partner_ids)
for _i in range(0, count_new_checkins):
checkins_lst.append(
(
@@ -1130,7 +1134,7 @@ class PmsReservation(models.Model):
)
)
reservation.checkin_partner_ids = checkins_lst
elif adults == 0:
elif occupancy == 0:
reservation.checkin_partner_ids = False
@api.depends("checkin_partner_ids", "checkin_partner_ids.state")
@@ -1145,11 +1149,10 @@ class PmsReservation(models.Model):
@api.depends("count_pending_arrival")
def _compute_checkins_ratio(self):
self.checkins_ratio = 0
for reservation in self.filtered(lambda r: r.adults > 0):
for reservation in self.filtered(lambda r: (r.adults + r.children) > 0):
occupancy = reservation.adults + reservation.children
reservation.checkins_ratio = (
(reservation.adults - reservation.count_pending_arrival)
* 100
/ reservation.adults
(occupancy - reservation.count_pending_arrival) * 100 / occupancy
)
@api.depends("checkin_partner_ids", "checkin_partner_ids.state")
@@ -1165,12 +1168,11 @@ class PmsReservation(models.Model):
def _compute_ratio_checkin_data(self):
self.ratio_checkin_data = 0
for reservation in self.filtered(
lambda r: r.adults > 0 and r.state != "cancel"
lambda r: (r.adults + r.children) > 0 and r.state != "cancel"
):
occupancy = reservation.adults + reservation.children
reservation.ratio_checkin_data = (
(reservation.adults - reservation.pending_checkin_data)
* 100
/ reservation.adults
(occupancy - reservation.pending_checkin_data) * 100 / occupancy
)
def _compute_allowed_checkin(self):
@@ -1550,8 +1552,9 @@ class PmsReservation(models.Model):
def _compute_checkin_partner_count(self):
for record in self:
if record.reservation_type != "out" and record.overnight_room:
occupancy = record.adults + record.children
record.checkin_partner_count = len(record.checkin_partner_ids)
record.checkin_partner_pending_count = record.adults - len(
record.checkin_partner_pending_count = occupancy - len(
record.checkin_partner_ids
)
else:
@@ -1739,7 +1742,9 @@ class PmsReservation(models.Model):
return [
("state", "in", ("draft", "confirm", "arrival_delayed")),
("checkin", "<=", today),
"|",
("adults", ">", 0),
("children", ">", 0),
]
def _search_allowed_checkout(self, operator, value):
@@ -1757,7 +1762,9 @@ class PmsReservation(models.Model):
return [
("state", "in", ("onboard", "departure_delayed")),
("checkout", ">=", today),
"|",
("adults", ">", 0),
("children", ">", 0),
]
def _search_allowed_cancel(self, operator, value):

View File

@@ -99,7 +99,7 @@ class TestPmsReservations(TestPms):
)
cls.agency1 = cls.env["res.partner"].create(
{
"name": "partner1",
"firstname": "partner1",
"is_agency": True,
"invoice_to_agency": "always",
"default_commission": 15,
@@ -1666,7 +1666,7 @@ class TestPmsReservations(TestPms):
# ARRANGE
host = self.env["res.partner"].create(
{
"name": "Miguel",
"firstname": "Miguel",
"mobile": "654667733",
"email": "miguel@example.com",
"birthdate_date": "1995-12-10",
@@ -1679,6 +1679,7 @@ class TestPmsReservations(TestPms):
"name": "30065089H",
"valid_from": datetime.date.today(),
"partner_id": host.id,
"country_id": self.env.ref("base.es").id,
}
)
r1 = self.env["pms.reservation"].create(
@@ -1821,7 +1822,7 @@ class TestPmsReservations(TestPms):
)
agency = self.env["res.partner"].create(
{
"name": "partner1",
"firstname": "partner1",
"is_agency": True,
"sale_channel_id": sale_channel1.id,
"invoice_to_agency": "always",
@@ -1867,7 +1868,7 @@ class TestPmsReservations(TestPms):
)
agency = self.env["res.partner"].create(
{
"name": "partner1",
"firstname": "partner1",
"is_agency": True,
"sale_channel_id": sale_channel1.id,
"apply_pricelist": True,
@@ -1924,7 +1925,7 @@ class TestPmsReservations(TestPms):
"""
self.host1 = self.env["res.partner"].create(
{
"name": "Miguel",
"firstname": "Miguel",
"mobile": "654667733",
"email": "miguel@example.com",
"birthdate_date": "1995-12-10",
@@ -1937,11 +1938,12 @@ class TestPmsReservations(TestPms):
"name": "30065000H",
"valid_from": datetime.date.today(),
"partner_id": self.host1.id,
"country_id": self.env.ref("base.es").id,
}
)
self.host2 = self.env["res.partner"].create(
{
"name": "Brais",
"firstname": "Brais",
"mobile": "654437733",
"email": "brais@example.com",
"birthdate_date": "1995-12-10",
@@ -1954,6 +1956,7 @@ class TestPmsReservations(TestPms):
"name": "30065089H",
"valid_from": datetime.date.today(),
"partner_id": self.host2.id,
"country_id": self.env.ref("base.es").id,
}
)
self.reservation = self.env["pms.reservation"].create(
@@ -1999,7 +2002,7 @@ class TestPmsReservations(TestPms):
"""
self.host1 = self.env["res.partner"].create(
{
"name": "Host1",
"firstname": "Host1",
}
)
with self.assertRaises(UserError):
@@ -2025,7 +2028,7 @@ class TestPmsReservations(TestPms):
"""
self.host1 = self.env["res.partner"].create(
{
"name": "Host1",
"firstname": "Host1",
}
)
with self.assertRaises(ValidationError):
@@ -2051,7 +2054,7 @@ class TestPmsReservations(TestPms):
"""
self.host1 = self.env["res.partner"].create(
{
"name": "Host1",
"firstname": "Host1",
}
)
with self.assertRaises(ValidationError):
@@ -2075,7 +2078,7 @@ class TestPmsReservations(TestPms):
"""
self.host1 = self.env["res.partner"].create(
{
"name": "Host1",
"firstname": "Host1",
}
)
with self.assertRaises(ValidationError):
@@ -2108,7 +2111,7 @@ class TestPmsReservations(TestPms):
)
self.host1 = self.env["res.partner"].create(
{
"name": "Host1",
"firstname": "Host1",
}
)
self.room_type_double.pms_property_ids = [
@@ -2138,7 +2141,7 @@ class TestPmsReservations(TestPms):
"""
self.host1 = self.env["res.partner"].create(
{
"name": "Host1",
"firstname": "Host1",
}
)
self.reservation = self.env["pms.reservation"].create(
@@ -2173,7 +2176,7 @@ class TestPmsReservations(TestPms):
"""
self.host1 = self.env["res.partner"].create(
{
"name": "Host1",
"firstname": "Host1",
}
)
self.reservation = self.env["pms.reservation"].create(
@@ -2203,7 +2206,7 @@ class TestPmsReservations(TestPms):
"""
self.host1 = self.env["res.partner"].create(
{
"name": "Host1",
"firstname": "Host1",
}
)
reservation = self.env["pms.reservation"].create(
@@ -2250,7 +2253,7 @@ class TestPmsReservations(TestPms):
)
self.host1 = self.env["res.partner"].create(
{
"name": "Host1",
"firstname": "Host1",
}
)
@@ -2305,7 +2308,7 @@ class TestPmsReservations(TestPms):
)
self.host1 = self.env["res.partner"].create(
{
"name": "Host1",
"firstname": "Host1",
}
)
@@ -2359,7 +2362,7 @@ class TestPmsReservations(TestPms):
)
self.host1 = self.env["res.partner"].create(
{
"name": "Host1",
"firstname": "Host1",
}
)
@@ -2390,14 +2393,14 @@ class TestPmsReservations(TestPms):
"""
self.host1 = self.env["res.partner"].create(
{
"name": "Miguel",
"firstname": "Miguel",
"mobile": "654667733",
"email": "miguel@example.com",
}
)
self.host2 = self.env["res.partner"].create(
{
"name": "Brais",
"firstname": "Brais",
"mobile": "654437733",
"email": "brais@example.com",
}
@@ -2451,14 +2454,14 @@ class TestPmsReservations(TestPms):
"""
self.host1 = self.env["res.partner"].create(
{
"name": "Miguel",
"firstname": "Miguel",
"mobile": "654667733",
"email": "miguel@example.com",
}
)
self.host2 = self.env["res.partner"].create(
{
"name": "Brais",
"firstname": "Brais",
"mobile": "654437733",
"email": "brais@example.com",
}
@@ -2513,7 +2516,7 @@ class TestPmsReservations(TestPms):
"""
host = self.env["res.partner"].create(
{
"name": "Miguel",
"firstname": "Miguel",
"mobile": "654667733",
"email": "miguel@example.com",
}
@@ -2587,7 +2590,7 @@ class TestPmsReservations(TestPms):
)
agency = self.env["res.partner"].create(
{
"name": "partner1",
"firstname": "partner1",
"is_agency": True,
"sale_channel_id": sale_channel1.id,
}
@@ -3053,7 +3056,7 @@ class TestPmsReservations(TestPms):
# ARRANGE
checkin = fields.date.today()
checkout = fields.date.today() + datetime.timedelta(days=3)
self.partner1 = self.env["res.partner"].create({"name": "Ana"})
self.partner1 = self.env["res.partner"].create({"firstname": "Ana"})
folio1 = self.env["pms.folio"].create(
{
"pms_property_id": self.pms_property1.id,
@@ -3269,7 +3272,7 @@ class TestPmsReservations(TestPms):
'staff'.
"""
# ARRANGE AND ACT
self.partner1 = self.env["res.partner"].create({"name": "Ana"})
self.partner1 = self.env["res.partner"].create({"firstname": "Ana"})
folio1 = self.env["pms.folio"].create(
{
"pms_property_id": self.pms_property1.id,
@@ -3379,7 +3382,7 @@ class TestPmsReservations(TestPms):
# ARRANGE
partner = self.env["res.partner"].create(
{
"name": "Enrique",
"firstname": "Enrique",
"mobile": "654667733",
"email": "enrique@example.com",
}
@@ -3430,7 +3433,7 @@ class TestPmsReservations(TestPms):
# ARRANGE
partner = self.env["res.partner"].create(
{
"name": "Simon",
"firstname": "Simon",
"mobile": "654667733",
"email": "simon@example.com",
}
@@ -3479,7 +3482,7 @@ class TestPmsReservations(TestPms):
# ARRANGE
partner = self.env["res.partner"].create(
{
"name": "Courtney Campbell",
"firstname": "Courtney Campbell",
"email": "courtney@example.com",
}
)
@@ -3517,7 +3520,7 @@ class TestPmsReservations(TestPms):
# ARRANGE
partner = self.env["res.partner"].create(
{
"name": "Ledicia Sandoval",
"firstname": "Ledicia Sandoval",
"mobile": "615369231",
}
)
@@ -3557,7 +3560,7 @@ class TestPmsReservations(TestPms):
# ARRANGE
partner = self.env["res.partner"].create(
{
"name": "Serafín Rivas",
"firstname": "Serafín Rivas",
"email": "serafin@example.com",
"mobile": "60595595",
}
@@ -3607,14 +3610,14 @@ class TestPmsReservations(TestPms):
# ARRANGE
partner1 = self.env["res.partner"].create(
{
"name": "Serafín Rivas",
"firstname": "Serafín Rivas",
"email": "serafin@example.com",
"mobile": "60595595",
}
)
partner2 = self.env["res.partner"].create(
{
"name": "Simon",
"firstname": "Simon",
"mobile": "654667733",
"email": "simon@example.com",
}

View File

@@ -1,5 +1,7 @@
import logging
from dateutil.relativedelta import relativedelta
from odoo import api, fields, models
from ..wizards.traveller_report import CREATE_OPERATION_CODE
@@ -65,7 +67,9 @@ class PmsCheckinPartner(models.Model):
record.support_number = False
@api.model
def _checkin_mandatory_fields(self, residence_country=False, document_type=False):
def _checkin_mandatory_fields(
self, residence_country=False, document_type=False, birthdate_date=False
):
mandatory_fields = super(PmsCheckinPartner, self)._checkin_mandatory_fields(
residence_country, document_type
)
@@ -73,9 +77,6 @@ class PmsCheckinPartner(models.Model):
[
"birthdate_date",
"gender",
"document_number",
"document_type",
"document_expedition_date",
"nationality_id",
"residence_street",
"residence_city",
@@ -84,6 +85,27 @@ class PmsCheckinPartner(models.Model):
]
)
if birthdate_date:
# Checkins with age greater than 14 must have an identity document
if birthdate_date <= fields.Date.today() - relativedelta(years=14):
mandatory_fields.extend(
[
"document_number",
"document_type",
"document_expedition_date",
"document_country_id",
]
)
# Checkins with age lower than 18 must have a relationship with
# another checkin partner
if birthdate_date > fields.Date.today() - relativedelta(years=18):
mandatory_fields.extend(
[
"ses_partners_relationship",
"ses_related_checkin_partner_id",
]
)
if residence_country and residence_country.code == CODE_SPAIN:
mandatory_fields.extend(
[
@@ -107,7 +129,13 @@ class PmsCheckinPartner(models.Model):
@api.model
def _checkin_manual_fields(self, country=False):
manual_fields = super(PmsCheckinPartner, self)._checkin_manual_fields()
manual_fields.extend(["support_number"])
manual_fields.extend(
[
"support_number",
"ses_partners_relationship",
"ses_related_checkin_partner_id",
]
)
return manual_fields
def get_document_vals(self):

View File

@@ -102,7 +102,7 @@ class TestWizardINE(TestPms):
# Create partner 1 (italy)
self.partner_1 = self.env["res.partner"].create(
{
"name": "partner1",
"firstname": "partner1",
"country_id": self.country_italy.id,
"nationality_id": self.country_italy.id,
"residence_country_id": self.country_italy.id,
@@ -116,13 +116,14 @@ class TestWizardINE(TestPms):
"name": "55103354T",
"valid_from": datetime.date.today(),
"partner_id": self.partner_1.id,
"country_id": self.country_italy.id,
}
)
# Create partner 2 (russia)
self.partner_2 = self.env["res.partner"].create(
{
"name": "partner2",
"firstname": "partner2",
"country_id": self.country_russia.id,
"nationality_id": self.country_russia.id,
"residence_country_id": self.country_russia.id,
@@ -136,12 +137,13 @@ class TestWizardINE(TestPms):
"name": "45437298Q",
"valid_from": datetime.date.today(),
"partner_id": self.partner_2.id,
"country_id": self.country_russia.id,
}
)
# Create partner 3 (italy)
self.partner_3 = self.env["res.partner"].create(
{
"name": "partner3",
"firstname": "partner3",
"country_id": self.country_italy.id,
"nationality_id": self.country_italy.id,
"residence_country_id": self.country_italy.id,
@@ -155,12 +157,13 @@ class TestWizardINE(TestPms):
"name": "81534086Y",
"valid_from": datetime.date.today(),
"partner_id": self.partner_3.id,
"country_id": self.country_italy.id,
}
)
# Create partner 4 (italy)
self.partner_4 = self.env["res.partner"].create(
{
"name": "partner4",
"firstname": "partner4",
"country_id": self.country_italy.id,
"nationality_id": self.country_italy.id,
"residence_country_id": self.country_italy.id,
@@ -174,12 +177,13 @@ class TestWizardINE(TestPms):
"name": "00807643K",
"valid_from": datetime.date.today(),
"partner_id": self.partner_4.id,
"country_id": self.country_italy.id,
}
)
# Create partner 5 (afghanistan)
self.partner_5 = self.env["res.partner"].create(
{
"name": "partner5",
"firstname": "partner5",
"country_id": self.country_afghanistan.id,
"nationality_id": self.country_afghanistan.id,
"residence_country_id": self.country_afghanistan.id,
@@ -193,12 +197,13 @@ class TestWizardINE(TestPms):
"name": "54564399G",
"valid_from": datetime.date.today(),
"partner_id": self.partner_5.id,
"country_id": self.country_afghanistan.id,
}
)
# Create partner 6 (afghanistan)
self.partner_6 = self.env["res.partner"].create(
{
"name": "partner6",
"firstname": "partner6",
"country_id": self.country_afghanistan.id,
"nationality_id": self.country_afghanistan.id,
"residence_country_id": self.country_afghanistan.id,
@@ -212,12 +217,13 @@ class TestWizardINE(TestPms):
"name": "39854152M",
"valid_from": datetime.date.today(),
"partner_id": self.partner_6.id,
"country_id": self.country_afghanistan.id,
}
)
# Create partner 7 (afghanistan)
self.partner_7 = self.env["res.partner"].create(
{
"name": "partner7",
"firstname": "partner7",
"country_id": self.country_afghanistan.id,
"nationality_id": self.country_afghanistan.id,
"residence_country_id": self.country_afghanistan.id,
@@ -231,6 +237,7 @@ class TestWizardINE(TestPms):
"name": "39854152O",
"valid_from": datetime.date.today(),
"partner_id": self.partner_7.id,
"country_id": self.country_afghanistan.id,
}
)
@@ -405,7 +412,7 @@ class TestWizardINE(TestPms):
# Create 3 checkin partners from russia
self.partner_russia_1 = self.env["res.partner"].create(
{
"name": "partner1",
"firstname": "partner1",
"country_id": self.country_russia.id,
"nationality_id": self.country_russia.id,
"residence_country_id": self.country_russia.id,
@@ -418,7 +425,7 @@ class TestWizardINE(TestPms):
)
self.partner_russia_2 = self.env["res.partner"].create(
{
"name": "partner2",
"firstname": "partner2",
"country_id": self.country_russia.id,
"nationality_id": self.country_russia.id,
"residence_country_id": self.country_russia.id,
@@ -431,7 +438,7 @@ class TestWizardINE(TestPms):
)
self.partner_russia_3 = self.env["res.partner"].create(
{
"name": "partner3",
"firstname": "partner3",
"country_id": self.country_russia.id,
"nationality_id": self.country_russia.id,
"residence_country_id": self.country_russia.id,
@@ -449,6 +456,7 @@ class TestWizardINE(TestPms):
"name": "15103354T",
"valid_from": datetime.date.today(),
"partner_id": self.partner_russia_1.id,
"country_id": self.country_russia.id,
}
)
self.env["res.partner.id_number"].create(
@@ -457,6 +465,7 @@ class TestWizardINE(TestPms):
"name": "25103354T",
"valid_from": datetime.date.today(),
"partner_id": self.partner_russia_2.id,
"country_id": self.country_russia.id,
}
)
self.env["res.partner.id_number"].create(
@@ -465,6 +474,7 @@ class TestWizardINE(TestPms):
"name": "35103354T",
"valid_from": datetime.date.today(),
"partner_id": self.partner_russia_3.id,
"country_id": self.country_russia.id,
}
)