[ADD]pms: multiproperty checks and domains in reservation and folio (#58)

* [IMP] Pms: Add multiproperty checks and domains in reservation and folio

* [IMP] Pms: fix consider mandatory property in reservation create

* [IMP] Pms_l10n_es: Add reservation property tests

* [IMP] Pms: fix travis problem

* [FIX] Rebase and merge

Co-authored-by: Darío Lodeiros <dario@commitsun.com>
This commit is contained in:
Sara
2021-03-07 16:05:20 +01:00
committed by GitHub
parent 7619288892
commit caec88df40
9 changed files with 333 additions and 14 deletions

View File

@@ -10,6 +10,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(8)" />
<field name="checkout" eval="DateTime.today() + timedelta(9)" />
<field name="board_service_room_id" ref="pms_board_service_room_2" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_1" model="pms.reservation">
<field name="partner_id" ref="main_pms_property" />
@@ -18,6 +19,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(-3)" />
<field name="checkout" eval="DateTime.today() + timedelta(-1)" />
<field name="closure_reason_id" ref="pms_room_closure_reason_1" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_2" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_28" />
@@ -41,6 +43,7 @@
<field name="checkin" eval="DateTime.today()" />
<field name="checkout" eval="DateTime.today() + timedelta(1)" />
<field name="board_service_room_id" ref="pms_board_service_room_1" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_3" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_13" />
@@ -49,6 +52,7 @@
<field name="adults">1</field>
<field name="checkin" eval="DateTime.today() + timedelta(1)" />
<field name="checkout" eval="DateTime.today() + timedelta(4)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_4" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_16" />
@@ -57,6 +61,7 @@
<field name="adults">2</field>
<field name="checkin" eval="DateTime.today() + timedelta(4)" />
<field name="checkout" eval="DateTime.today() + timedelta(5)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_5" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_33" />
@@ -65,6 +70,7 @@
<field name="adults">1</field>
<field name="checkin" eval="DateTime.today() + timedelta(5)" />
<field name="checkout" eval="DateTime.today() + timedelta(7)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<!-- Single -->
<record id="pms_reservation_6" model="pms.reservation">
@@ -84,6 +90,7 @@
<field name="checkin" eval="DateTime.today()" />
<field name="checkout" eval="DateTime.today() + timedelta(3)" />
<field name="board_service_room_id" ref="pms_board_service_room_2" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_7" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_10" />
@@ -101,6 +108,7 @@
<field name="checkin" eval="DateTime.today()" />
<field name="checkout" eval="DateTime.today() + timedelta(3)" />
<field name="board_service_room_id" ref="pms_board_service_room_0" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_8" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_13" />
@@ -110,6 +118,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(7)" />
<field name="checkout" eval="DateTime.today() + timedelta(8)" />
<field name="board_service_room_id" ref="pms_board_service_room_1" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_9" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_15" />
@@ -118,6 +127,7 @@
<field name="adults">1</field>
<field name="checkin" eval="DateTime.today() + timedelta(9)" />
<field name="checkout" eval="DateTime.today() + timedelta(13)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_10" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_10" />
@@ -127,6 +137,7 @@
<field name="children">1</field>
<field name="checkin" eval="DateTime.today() + timedelta(13)" />
<field name="checkout" eval="DateTime.today() + timedelta(14)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_11" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_10" />
@@ -136,6 +147,7 @@
<field name="checkin" eval="DateTime.today()" />
<field name="checkout" eval="DateTime.today() + timedelta(4)" />
<field name="board_service_room_id" ref="pms_board_service_room_2" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_12" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_10" />
@@ -144,6 +156,7 @@
<field name="adults">1</field>
<field name="checkin" eval="DateTime.today() + timedelta(6)" />
<field name="checkout" eval="DateTime.today() + timedelta(10)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<!-- Double-->
<record id="pms_reservation_13" model="pms.reservation">
@@ -154,6 +167,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(11)" />
<field name="checkout" eval="DateTime.today() + timedelta(13)" />
<field name="board_service_room_id" ref="pms_board_service_room_0" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_14" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_33" />
@@ -169,6 +183,7 @@
/>
<field name="checkin" eval="DateTime.today() + timedelta(6)" />
<field name="checkout" eval="DateTime.today() + timedelta(8)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_15" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_10" />
@@ -179,6 +194,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(10)" />
<field name="checkout" eval="DateTime.today() + timedelta(11)" />
<field name="board_service_room_id" ref="pms_board_service_room_3" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_16" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_13" />
@@ -187,6 +203,7 @@
<field name="adults">2</field>
<field name="checkin" eval="DateTime.today() + timedelta(4)" />
<field name="checkout" eval="DateTime.today() + timedelta(6)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_17" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_15" />
@@ -196,6 +213,7 @@
<field name="checkin" eval="DateTime.today()" />
<field name="checkout" eval="DateTime.today() + timedelta(4)" />
<field name="board_service_room_id" ref="pms_board_service_room_2" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_18" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_12" />
@@ -211,6 +229,7 @@
/>
<field name="checkin" eval="DateTime.today() + timedelta(11)" />
<field name="checkout" eval="DateTime.today() + timedelta(13)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_19" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_32" />
@@ -220,6 +239,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(6)" />
<field name="checkout" eval="DateTime.today() + timedelta(8)" />
<field name="board_service_room_id" ref="pms_board_service_room_1" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_20" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_15" />
@@ -229,6 +249,7 @@
<field name="children">1</field>
<field name="checkin" eval="DateTime.today() + timedelta(10)" />
<field name="checkout" eval="DateTime.today() + timedelta(11)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_21" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_3" />
@@ -238,6 +259,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(4)" />
<field name="checkout" eval="DateTime.today() + timedelta(6)" />
<field name="board_service_room_id" ref="pms_board_service_room_0" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_22" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_12" />
@@ -246,6 +268,7 @@
<field name="adults">2</field>
<field name="checkin" eval="DateTime.today()" />
<field name="checkout" eval="DateTime.today() + timedelta(4)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<!-- Triple -->
<record id="pms_reservation_23" model="pms.reservation">
@@ -256,6 +279,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(11)" />
<field name="checkout" eval="DateTime.today() + timedelta(13)" />
<field name="board_service_room_id" ref="pms_board_service_room_2" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_24" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_12" />
@@ -272,6 +296,7 @@
/>
<field name="checkin" eval="DateTime.today() + timedelta(6)" />
<field name="checkout" eval="DateTime.today() + timedelta(8)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_25" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_28" />
@@ -288,6 +313,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(10)" />
<field name="checkout" eval="DateTime.today() + timedelta(11)" />
<field name="board_service_room_id" ref="pms_board_service_room_3" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_26" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_16" />
@@ -304,6 +330,7 @@
/>
<field name="checkin" eval="DateTime.today() + timedelta(4)" />
<field name="checkout" eval="DateTime.today() + timedelta(6)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_27" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_12" />
@@ -328,6 +355,7 @@
<field name="checkin" eval="DateTime.today()" />
<field name="checkout" eval="DateTime.today() + timedelta(4)" />
<field name="board_service_room_id" ref="pms_board_service_room_2" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<!-- Open talk away -->
<record id="pms_reservation_28" model="pms.reservation">
@@ -336,6 +364,7 @@
<field name="room_type_id" ref="pms_room_type_4" />
<field name="checkin" eval="DateTime.today() + timedelta(10)" />
<field name="checkout" eval="DateTime.today() + timedelta(12)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_29" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_32" />
@@ -343,6 +372,7 @@
<field name="room_type_id" ref="pms_room_type_4" />
<field name="checkin" eval="DateTime.today() + timedelta(1)" />
<field name="checkout" eval="DateTime.today() + timedelta(4)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record id="pms_reservation_30" model="pms.reservation">
<field name="partner_id" ref="base.res_partner_address_33" />
@@ -350,6 +380,7 @@
<field name="room_type_id" ref="pms_room_type_4" />
<field name="checkin" eval="DateTime.today() + timedelta(6)" />
<field name="checkout" eval="DateTime.today() + timedelta(8)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
</data>
</odoo>

View File

@@ -17,6 +17,7 @@ class PmsFolio(models.Model):
_description = "PMS Folio"
_inherit = ["mail.thread", "mail.activity.mixin", "portal.mixin"]
_order = "date_order"
_check_company_auto = True
# Default Methods ang Gets
def name_get(self):
@@ -60,6 +61,7 @@ class PmsFolio(models.Model):
readonly=False,
states={"done": [("readonly", True)]},
help="Room reservation detail.",
check_company=True,
)
number_of_rooms = fields.Integer(
"Number of Rooms",
@@ -73,6 +75,10 @@ class PmsFolio(models.Model):
states={"done": [("readonly", True)]},
help="Services detail provide to customer and it will "
"include in main Invoice.",
check_company=True,
domain="['|',"
"('pms_property_id','=',pms_property_id),"
"('pms_property_id','=',False)]",
)
sale_line_ids = fields.One2many(
"folio.sale.line",
@@ -121,6 +127,9 @@ class PmsFolio(models.Model):
store=True,
readonly=False,
help="Pricelist for current folio.",
domain="['|',"
"(pms_property_id, 'in', 'pms_property_ids'),"
"('pms_property_ids','=',False)]",
)
commission = fields.Float(
string="Commission",
@@ -231,7 +240,12 @@ class PmsFolio(models.Model):
fiscal_position_id = fields.Many2one(
"account.fiscal.position", string="Fiscal Position"
)
closure_reason_id = fields.Many2one("room.closure.reason")
closure_reason_id = fields.Many2one(
"room.closure.reason",
domain="['|',"
"(pms_property_id, 'in', 'pms_property_ids'),"
"('pms_property_ids', '=', False)]",
)
segmentation_ids = fields.Many2many(
"res.partner.category", string="Segmentation", ondelete="restrict"
)
@@ -482,11 +496,13 @@ class PmsFolio(models.Model):
@api.depends("partner_id")
def _compute_partner_invoice_ids(self):
for folio in self:
for folio in self.filtered("partner_id"):
folio.partner_invoice_ids = False
addr = folio.partner_id.address_get(["invoice"])
if not addr["invoice"] in folio.partner_invoice_ids.ids:
folio.partner_invoice_ids = [(4, addr["invoice"])]
# Avoid CacheMissing
self.filtered(lambda f: not f.partner_invoice_ids).partner_invoice_ids = False
@api.depends("partner_id")
def _compute_payment_term_id(self):
@@ -1249,6 +1265,18 @@ class PmsFolio(models.Model):
_("The Sale Channel does not correspond to the agency's")
)
@api.constrains(
"closure_reason_id",
)
def _check_property_integrity(self):
for rec in self:
if rec.pms_property_id:
if (
rec.pms_property_id.id
not in rec.closure_reason_id.pms_property_ids.ids
):
raise ValidationError(_("Property not allowed"))
@api.model
def _prepare_down_payment_section_line(self, **optional_values):
"""

View File

@@ -82,6 +82,7 @@ class PmsReservation(models.Model):
tracking=True,
ondelete="restrict",
copy=False,
check_company=True,
)
board_service_room_id = fields.Many2one(
"pms.board.service.room.type",
@@ -90,6 +91,10 @@ class PmsReservation(models.Model):
store=True,
readonly=False,
tracking=True,
domain="["
"'|',"
"('pms_property_ids', 'in', pms_property_id),"
"('pms_property_ids', '=', False)]",
)
room_type_id = fields.Many2one(
"pms.room.type",
@@ -100,6 +105,9 @@ class PmsReservation(models.Model):
store=True,
readonly=False,
copy=False,
domain="['|',"
"('pms_property_ids', 'in', pms_property_id),"
"('pms_property_ids', '=', False)]",
)
partner_id = fields.Many2one(
"res.partner",
@@ -128,12 +136,20 @@ class PmsReservation(models.Model):
store=True,
readonly=False,
)
closure_reason_id = fields.Many2one(related="folio_id.closure_reason_id")
closure_reason_id = fields.Many2one(
related="folio_id.closure_reason_id",
domain="['|',"
"(pms_property_id, 'in', 'pms_property_ids'),"
"('pms_property_ids', '=', False)]",
)
company_id = fields.Many2one(
related="folio_id.company_id", string="Company", store=True, readonly=True
)
pms_property_id = fields.Many2one(
"pms.property",
related="folio_id.pms_property_id",
store=True,
readonly=False,
default=lambda self: self.env.user.get_active_property_ids()[0],
)
reservation_line_ids = fields.One2many(
@@ -150,6 +166,10 @@ class PmsReservation(models.Model):
compute="_compute_service_ids",
store=True,
readonly=False,
check_company=True,
domain="['|',"
"('pms_property_id', '=', pms_property_id),"
"('pms_property_id', '=', False)]",
)
pricelist_id = fields.Many2one(
"product.pricelist",
@@ -159,6 +179,9 @@ class PmsReservation(models.Model):
store=True,
readonly=False,
tracking=True,
domain="['|',"
"('pms_property_ids', 'in', pms_property_id),"
"('pms_property_ids', '=', False)]",
)
show_update_pricelist = fields.Boolean(
string="Has Pricelist Changed",
@@ -1325,6 +1348,45 @@ class PmsReservation(models.Model):
if record.agency_id and not record.agency_id.is_agency:
raise ValidationError(_("booking agency with wrong configuration: "))
@api.constrains("pms_property_id", "preferred_room_id")
def _check_room_property_integrity(self):
for record in self:
if record.pms_property_id and record.preferred_room_id.pms_property_id:
if record.pms_property_id != record.preferred_room_id.pms_property_id:
raise ValidationError(
_("Property doesn't match with room property")
)
@api.constrains("pms_property_id", "room_type_id")
def _check_room_type_property_integrity(self):
for record in self:
if record.pms_property_id and record.room_type_id.pms_property_ids:
if (
record.pms_property_id.id
not in record.room_type_id.pms_property_ids.ids
):
raise ValidationError(_("Property isn't allowed in Room Type"))
@api.constrains("pms_property_id", "pricelist_id")
def _check_pricelist_property_integrity(self):
for record in self:
if record.pms_property_id and record.pricelist_id.pms_property_ids:
if (
record.pms_property_id.id
not in record.pricelist_id.pms_property_ids.ids
):
raise ValidationError(_("Property isn't allowed in Pricelist"))
@api.constrains("pms_property_id", "board_service_room_id")
def _check_board_service_property_integrity(self):
for record in self:
if record.pms_property_id and record.board_service_room_id.pms_property_ids:
if (
record.pms_property_id.id
not in record.board_service_room_id.pms_property_ids.ids
):
raise ValidationError(_("Property isn't allowed in Board Service"))
# Action methods
def open_folio(self):
@@ -1409,15 +1471,16 @@ class PmsReservation(models.Model):
def create(self, vals):
if "folio_id" in vals:
folio = self.env["pms.folio"].browse(vals["folio_id"])
elif "partner_id" in vals or "agency_id" in vals:
elif "pms_property_id" in vals and (
"partner_id" in vals or "agency_id" in vals
):
folio_vals = {
"partner_id": int(vals.get("partner_id"))
if vals.get("partner_id")
else False,
"agency_id": int(vals.get("agency_id"))
if vals.get("agency_id")
else False,
"pms_property_id": vals["pms_property_id"],
}
if vals.get("partner_id"):
folio_vals["partner_id"] = vals.get("partner_id")
elif vals.get("agency_id"):
folio_vals["agency_id"] = vals.get("agency_id")
# Create the folio in case of need
# (To allow to create reservations direct)
folio = self.env["pms.folio"].create(folio_vals)
@@ -1427,6 +1490,10 @@ class PmsReservation(models.Model):
"reservation_type": vals.get("reservation_type"),
}
)
else:
raise ValidationError(
_("The client and Property are mandatory in the reservation")
)
if vals.get("name", _("New")) == _("New") or "name" not in vals:
vals["name"] = self.env["ir.sequence"]._next_sequence_property(
pms_property_id=folio.pms_property_id.id,

View File

@@ -137,7 +137,7 @@ class PmsRoomType(models.Model):
)
return self.browse(list(res.values()))
@api.constrains("pms_property_ids")
@api.constrains("pms_property_ids", "class_id")
def _check_integrity_property_class(self):
for record in self:
if record.pms_property_ids and record.class_id.pms_property_ids:

View File

@@ -3,6 +3,7 @@ import datetime
from freezegun import freeze_time
from odoo import fields
from odoo.exceptions import ValidationError
from .common import TestHotel
@@ -60,8 +61,34 @@ class TestPmsFolio(TestHotel):
}
)
def create_multiproperty_scenario(self):
self.property1 = self.env["pms.property"].create(
{
"name": "Property_1",
"company_id": self.env.ref("base.main_company").id,
"default_pricelist_id": self.env.ref("product.list0").id,
}
)
self.property2 = self.env["pms.property"].create(
{
"name": "Property_2",
"company_id": self.env.ref("base.main_company").id,
"default_pricelist_id": self.env.ref("product.list0").id,
}
)
self.property3 = self.env["pms.property"].create(
{
"name": "Property_3",
"company_id": self.env.ref("base.main_company").id,
"default_pricelist_id": self.env.ref("product.list0").id,
}
)
def test_commission_and_partner_correct(self):
# ARRANGE
self.create_common_scenario()
PmsFolio = self.env["pms.folio"]
PmsReservation = self.env["pms.reservation"]
PmsPartner = self.env["res.partner"]
@@ -83,6 +110,7 @@ class TestPmsFolio(TestHotel):
folio = PmsFolio.create(
{
"agency_id": agency.id,
"pms_property_id": self.property.id,
}
)
@@ -202,3 +230,23 @@ class TestPmsFolio(TestHotel):
date=fields.date.today(),
)
self.assertEqual(r_test.folio_id.pending_amount, left_to_pay)
def test_closure_reason_property(self):
self.create_multiproperty_scenario()
cl_reason = self.env["room.closure.reason"].create(
{
"name": "closure_reason_test",
"pms_property_ids": [
(4, self.property1.id),
(4, self.property2.id),
],
}
)
with self.assertRaises(ValidationError):
self.env["pms.folio"].create(
{
"pms_property_id": self.property3.id,
"closure_reason_id": cl_reason.id,
}
)

View File

@@ -69,6 +69,40 @@ class TestPmsReservations(TestHotel):
)
self.demo_user = self.env.ref("base.user_admin")
def create_multiproperty_scenario(self):
self.property1 = self.env["pms.property"].create(
{
"name": "Property_1",
"company_id": self.env.ref("base.main_company").id,
"default_pricelist_id": self.env.ref("product.list0").id,
}
)
self.property2 = self.env["pms.property"].create(
{
"name": "Property_2",
"company_id": self.env.ref("base.main_company").id,
"default_pricelist_id": self.env.ref("product.list0").id,
}
)
self.property3 = self.env["pms.property"].create(
{
"name": "Property_3",
"company_id": self.env.ref("base.main_company").id,
"default_pricelist_id": self.env.ref("product.list0").id,
}
)
self.room_type_class = self.env["pms.room.type.class"].create(
{"name": "Room Class", "code_class": "RCTEST"}
)
self.board_service = self.env["pms.board.service"].create(
{
"name": "Board Service Test",
}
)
@freeze_time("1980-11-01")
def test_create_reservation_start_date(self):
# TEST CASE
@@ -788,3 +822,84 @@ class TestPmsReservations(TestHotel):
self.assertEqual(
r1.state, "done", "The reservation status should be done after checkout."
)
def test_multiproperty_checks(self):
"""
# TEST CASE
Multiproperty checks in reservation
+---------------+------+------+------+----+----+
| reservation | property1 |
+---------------+------+------+------+----+----+
| room | property2 |
| room_type | property2, property3 |
| board_service | property2, property3 |
| pricelist | property2, property3 |
+---------------+------+------+------+----+----+
"""
# ARRANGE
self.create_multiproperty_scenario()
host = self.env["res.partner"].create(
{
"name": "Miguel",
"phone": "654667733",
"email": "miguel@example.com",
}
)
self.reservation_test = self.env["pms.reservation"].create(
{
"checkin": fields.date.today(),
"checkout": fields.date.today() + datetime.timedelta(days=1),
"pms_property_id": self.property1.id,
"partner_id": host.id,
}
)
room_type_test = self.env["pms.room.type"].create(
{
"pms_property_ids": [
(4, self.property3.id),
(4, self.property2.id),
],
"name": "Single",
"code_type": "SIN",
"class_id": self.room_type_class.id,
"list_price": 30,
}
)
room = self.env["pms.room"].create(
{
"name": "Room 101",
"pms_property_id": self.property2.id,
"room_type_id": room_type_test.id,
}
)
pricelist = self.env["product.pricelist"].create(
{
"name": "pricelist_test",
"pms_property_ids": [
(4, self.property2.id),
(4, self.property3.id),
],
}
)
board_service_room_type = self.env["pms.board.service.room.type"].create(
{
"pms_board_service_id": self.board_service.id,
"pms_room_type_id": room_type_test.id,
"pms_property_ids": [self.property2.id, self.property3.id],
}
)
test_cases = [
{"preferred_room_id": room.id},
{"room_type_id": room_type_test.id},
{"pricelist_id": pricelist.id},
{"board_service_room_id": board_service_room_type.id},
]
for test_case in test_cases:
with self.subTest(k=test_case):
with self.assertRaises(ValidationError):
self.reservation_test.write(test_case)

View File

@@ -9,8 +9,19 @@ from .common import TestHotel
@freeze_time("2010-01-01")
class TestPmsSaleChannel(TestHotel):
def create_common_scenario(self):
# create a property
self.property = self.env["pms.property"].create(
{
"name": "MY PROPERTY TEST",
"company_id": self.env.ref("base.main_company").id,
"default_pricelist_id": self.env.ref("product.list0").id,
}
)
def test_not_agency_as_agency(self):
# ARRANGE
self.create_common_scenario()
PmsReservation = self.env["pms.reservation"]
not_agency = self.env["res.partner"].create(
{"name": "partner1", "is_agency": False}
@@ -23,11 +34,13 @@ class TestPmsSaleChannel(TestHotel):
"checkin": datetime.datetime.now(),
"checkout": datetime.datetime.now() + datetime.timedelta(days=3),
"agency_id": not_agency.id,
"pms_property_id": self.property.id,
}
)
def test_channel_type_id_only_directs(self):
# ARRANGE
self.create_common_scenario()
PmsReservation = self.env["pms.reservation"]
PmsSaleChannel = self.env["pms.sale.channel"]
# ACT
@@ -39,6 +52,7 @@ class TestPmsSaleChannel(TestHotel):
"checkout": datetime.datetime.now() + datetime.timedelta(days=3),
"channel_type_id": salechannel.id,
"partner_id": partner1.id,
"pms_property_id": self.property.id,
}
)
# ASSERT
@@ -50,6 +64,7 @@ class TestPmsSaleChannel(TestHotel):
def test_agency_id_is_agency(self):
# ARRANGE
self.create_common_scenario()
PmsReservation = self.env["pms.reservation"]
PmsSaleChannel = self.env["pms.sale.channel"]
salechannel = PmsSaleChannel.create(
@@ -68,6 +83,7 @@ class TestPmsSaleChannel(TestHotel):
"checkin": datetime.datetime.now(),
"checkout": datetime.datetime.now() + datetime.timedelta(days=3),
"agency_id": agency.id,
"pms_property_id": self.property.id,
}
)
# ASSERT

View File

@@ -145,7 +145,7 @@ class FolioWizard(models.TransientModel):
"room_type_id": line.room_type_id.id,
"partner_id": folio.partner_id.id,
"pricelist_id": folio.pricelist_id.id,
"pms_property_id": record.pms_property_id.id,
"pms_property_id": folio.pms_property_id.id,
}
)
res.reservation_line_ids.discount = record.discount * 100

View File

@@ -9,8 +9,18 @@ from odoo.tests import common
@freeze_time("2011-03-16")
class TestResPartner(common.SavepointCase):
def create_common_scenario(self):
self.property_test = self.property = self.env["pms.property"].create(
{
"name": "My property test",
"company_id": self.env.ref("base.main_company").id,
"default_pricelist_id": self.env.ref("product.list0").id,
}
)
def test_check_precheckin_state(self):
# arrange
self.create_common_scenario()
today = fields.date.today()
partner = self.env["res.partner"].create(
{
@@ -29,6 +39,7 @@ class TestResPartner(common.SavepointCase):
"checkout": today + datetime.timedelta(days=3),
"partner_id": partner.id,
"adults": 1,
"pms_property_id": self.property_test.id,
}
# action
reservation = self.env["pms.reservation"].create(reservation_vals)
@@ -46,8 +57,9 @@ class TestResPartner(common.SavepointCase):
)
def test_error_action_on_board(self):
today = fields.date.today()
# arrange
self.create_common_scenario()
today = fields.date.today()
partner = self.env["res.partner"].create(
{
"name": "partner1",
@@ -58,6 +70,7 @@ class TestResPartner(common.SavepointCase):
"checkout": today + datetime.timedelta(days=3),
"partner_id": partner.id,
"adults": 1,
"pms_property_id": self.property_test.id,
}
# action
reservation = self.env["pms.reservation"].create(reservation_vals)
@@ -74,7 +87,7 @@ class TestResPartner(common.SavepointCase):
def test_right_action_on_board(self):
# arrange
# arrange
self.create_common_scenario()
today = fields.date.today()
partner = self.env["res.partner"].create(
{
@@ -93,6 +106,7 @@ class TestResPartner(common.SavepointCase):
"checkout": today + datetime.timedelta(days=3),
"partner_id": partner.id,
"adults": 1,
"pms_property_id": self.property_test.id,
}
# action
reservation = self.env["pms.reservation"].create(reservation_vals)