mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
633 lines
25 KiB
Python
633 lines
25 KiB
Python
import datetime
|
|
|
|
from freezegun import freeze_time
|
|
|
|
from .common import TestPms
|
|
|
|
|
|
@freeze_time("2021-02-01")
|
|
class TestWizardINE(TestPms):
|
|
def setUp(self):
|
|
super().setUp()
|
|
# number of seats established in the property
|
|
self.pms_property1.ine_seats = 50
|
|
|
|
# create room types
|
|
self.room_type = self.env["pms.room.type"].create(
|
|
{
|
|
"name": "Room type test",
|
|
"default_code": "DBL_Test",
|
|
"class_id": self.room_type_class1.id,
|
|
}
|
|
)
|
|
# create rooms
|
|
self.room_double_1 = self.env["pms.room"].create(
|
|
{
|
|
"pms_property_id": self.pms_property1.id,
|
|
"name": "Room test 1",
|
|
"room_type_id": self.room_type.id,
|
|
"capacity": 2,
|
|
}
|
|
)
|
|
self.room_double_2 = self.env["pms.room"].create(
|
|
{
|
|
"pms_property_id": self.pms_property1.id,
|
|
"name": "Room test 2",
|
|
"room_type_id": self.room_type.id,
|
|
"capacity": 2,
|
|
}
|
|
)
|
|
self.room_single_1 = self.env["pms.room"].create(
|
|
{
|
|
"pms_property_id": self.pms_property1.id,
|
|
"name": "Room test 3",
|
|
"room_type_id": self.room_type.id,
|
|
"capacity": 1,
|
|
"extra_beds_allowed": 1,
|
|
}
|
|
)
|
|
self.room_triple1 = self.env["pms.room"].create(
|
|
{
|
|
"pms_property_id": self.pms_property1.id,
|
|
"name": "Room test 4",
|
|
"room_type_id": self.room_type.id,
|
|
"capacity": 3,
|
|
}
|
|
)
|
|
|
|
# create document category
|
|
self.id_category_passport = self.env["res.partner.id_category"].create(
|
|
{
|
|
"name": "Passport",
|
|
"code": "P",
|
|
"active": True,
|
|
}
|
|
)
|
|
# get records of russia, italy and afghanistan
|
|
self.country_russia = self.env["res.country"].search([("code", "=", "RU")])
|
|
self.country_russia.ensure_one()
|
|
self.country_italy = self.env["res.country"].search([("code", "=", "IT")])
|
|
self.country_italy.ensure_one()
|
|
self.country_afghanistan = self.env["res.country"].search([("code", "=", "AF")])
|
|
self.country_afghanistan.ensure_one()
|
|
# Create partner 1 (italy)
|
|
self.partner_1 = self.env["res.partner"].create(
|
|
{
|
|
"name": "partner1",
|
|
"country_id": self.country_italy.id,
|
|
"nationality_id": self.country_italy.id,
|
|
"birthdate_date": "2000-06-25",
|
|
"gender": "male",
|
|
}
|
|
)
|
|
self.env["res.partner.id_number"].create(
|
|
{
|
|
"category_id": self.id_category_passport.id,
|
|
"name": "55103354T",
|
|
"valid_from": datetime.date.today(),
|
|
"partner_id": self.partner_1.id,
|
|
}
|
|
)
|
|
|
|
# Create partner 2 (russia)
|
|
self.partner_2 = self.env["res.partner"].create(
|
|
{
|
|
"name": "partner2",
|
|
"country_id": self.country_russia.id,
|
|
"nationality_id": self.country_russia.id,
|
|
"birthdate_date": "2000-06-25",
|
|
"gender": "male",
|
|
}
|
|
)
|
|
self.env["res.partner.id_number"].create(
|
|
{
|
|
"category_id": self.id_category_passport.id,
|
|
"name": "45437298Q",
|
|
"valid_from": datetime.date.today(),
|
|
"partner_id": self.partner_2.id,
|
|
}
|
|
)
|
|
# Create partner 3 (italy)
|
|
self.partner_3 = self.env["res.partner"].create(
|
|
{
|
|
"name": "partner3",
|
|
"country_id": self.country_italy.id,
|
|
"nationality_id": self.country_italy.id,
|
|
"birthdate_date": "2000-06-25",
|
|
"gender": "male",
|
|
}
|
|
)
|
|
self.env["res.partner.id_number"].create(
|
|
{
|
|
"category_id": self.id_category_passport.id,
|
|
"name": "81534086Y",
|
|
"valid_from": datetime.date.today(),
|
|
"partner_id": self.partner_3.id,
|
|
}
|
|
)
|
|
# Create partner 4 (italy)
|
|
self.partner_4 = self.env["res.partner"].create(
|
|
{
|
|
"name": "partner4",
|
|
"country_id": self.country_italy.id,
|
|
"nationality_id": self.country_italy.id,
|
|
"birthdate_date": "2000-06-25",
|
|
"gender": "male",
|
|
}
|
|
)
|
|
self.env["res.partner.id_number"].create(
|
|
{
|
|
"category_id": self.id_category_passport.id,
|
|
"name": "00807643K",
|
|
"valid_from": datetime.date.today(),
|
|
"partner_id": self.partner_4.id,
|
|
}
|
|
)
|
|
# Create partner 5 (afghanistan)
|
|
self.partner_5 = self.env["res.partner"].create(
|
|
{
|
|
"name": "partner5",
|
|
"country_id": self.country_afghanistan.id,
|
|
"nationality_id": self.country_afghanistan.id,
|
|
"birthdate_date": "2000-06-25",
|
|
"gender": "male",
|
|
}
|
|
)
|
|
self.env["res.partner.id_number"].create(
|
|
{
|
|
"category_id": self.id_category_passport.id,
|
|
"name": "54564399G",
|
|
"valid_from": datetime.date.today(),
|
|
"partner_id": self.partner_5.id,
|
|
}
|
|
)
|
|
# Create partner 6 (afghanistan)
|
|
self.partner_6 = self.env["res.partner"].create(
|
|
{
|
|
"name": "partner6",
|
|
"country_id": self.country_afghanistan.id,
|
|
"nationality_id": self.country_afghanistan.id,
|
|
"birthdate_date": "2000-06-25",
|
|
"gender": "male",
|
|
}
|
|
)
|
|
self.env["res.partner.id_number"].create(
|
|
{
|
|
"category_id": self.id_category_passport.id,
|
|
"name": "39854152M",
|
|
"valid_from": datetime.date.today(),
|
|
"partner_id": self.partner_6.id,
|
|
}
|
|
)
|
|
# Create partner 7 (afghanistan)
|
|
self.partner_7 = self.env["res.partner"].create(
|
|
{
|
|
"name": "partner7",
|
|
"country_id": self.country_afghanistan.id,
|
|
"nationality_id": self.country_afghanistan.id,
|
|
"birthdate_date": "2000-06-25",
|
|
"gender": "male",
|
|
}
|
|
)
|
|
self.env["res.partner.id_number"].create(
|
|
{
|
|
"category_id": self.id_category_passport.id,
|
|
"name": "39854152O",
|
|
"valid_from": datetime.date.today(),
|
|
"partner_id": self.partner_7.id,
|
|
}
|
|
)
|
|
|
|
# Create reservation 1
|
|
self.reservation_1 = self.env["pms.reservation"].create(
|
|
{
|
|
"checkin": datetime.date.today(),
|
|
"checkout": datetime.date.today() + datetime.timedelta(days=1),
|
|
"preferred_room_id": self.room_double_1.id,
|
|
"partner_id": self.partner_1.id,
|
|
"adults": 2,
|
|
"pms_property_id": self.pms_property1.id,
|
|
}
|
|
)
|
|
self.checkin1 = self.env["pms.checkin.partner"].create(
|
|
{
|
|
"partner_id": self.partner_1.id,
|
|
"reservation_id": self.reservation_1.id,
|
|
}
|
|
)
|
|
|
|
self.checkin2 = self.env["pms.checkin.partner"].create(
|
|
{
|
|
"partner_id": self.partner_2.id,
|
|
"reservation_id": self.reservation_1.id,
|
|
}
|
|
)
|
|
# Create reservation 2
|
|
self.reservation_2 = self.env["pms.reservation"].create(
|
|
{
|
|
"checkin": datetime.date.today() + datetime.timedelta(days=1),
|
|
"checkout": datetime.date.today() + datetime.timedelta(days=2),
|
|
"preferred_room_id": self.room_triple1.id,
|
|
"partner_id": self.partner_3.id,
|
|
"adults": 2,
|
|
"pms_property_id": self.pms_property1.id,
|
|
}
|
|
)
|
|
self.checkin3 = self.env["pms.checkin.partner"].create(
|
|
{
|
|
"partner_id": self.partner_3.id,
|
|
"reservation_id": self.reservation_2.id,
|
|
}
|
|
)
|
|
self.checkin4 = self.env["pms.checkin.partner"].create(
|
|
{
|
|
"partner_id": self.partner_4.id,
|
|
"reservation_id": self.reservation_2.id,
|
|
}
|
|
)
|
|
# Create reservation 3
|
|
self.reservation_3 = self.env["pms.reservation"].create(
|
|
{
|
|
"checkin": datetime.date.today() + datetime.timedelta(days=1),
|
|
"checkout": datetime.date.today() + datetime.timedelta(days=3),
|
|
"preferred_room_id": self.room_double_2.id,
|
|
"partner_id": self.partner_5.id,
|
|
"adults": 1,
|
|
"pms_property_id": self.pms_property1.id,
|
|
}
|
|
)
|
|
self.checkin5 = self.env["pms.checkin.partner"].create(
|
|
{
|
|
"partner_id": self.partner_5.id,
|
|
"reservation_id": self.reservation_3.id,
|
|
}
|
|
)
|
|
# Create extra bed service
|
|
product_extra_bed = self.env["product.product"].create(
|
|
{
|
|
"name": "Product test",
|
|
"is_extra_bed": True,
|
|
"consumed_on": "before",
|
|
"per_day": True,
|
|
}
|
|
)
|
|
vals_service_extra_bed = {
|
|
"is_board_service": False,
|
|
"product_id": product_extra_bed.id,
|
|
}
|
|
# Create reservation 4
|
|
self.reservation_4 = self.env["pms.reservation"].create(
|
|
{
|
|
"checkin": datetime.date.today() + datetime.timedelta(days=1),
|
|
"checkout": datetime.date.today() + datetime.timedelta(days=3),
|
|
"preferred_room_id": self.room_single_1.id,
|
|
"partner_id": self.partner_6.id,
|
|
"adults": 2,
|
|
"pms_property_id": self.pms_property1.id,
|
|
"service_ids": [(0, 0, vals_service_extra_bed)],
|
|
}
|
|
)
|
|
self.checkin6 = self.env["pms.checkin.partner"].create(
|
|
{
|
|
"partner_id": self.partner_6.id,
|
|
"reservation_id": self.reservation_4.id,
|
|
}
|
|
)
|
|
|
|
self.checkin7 = self.env["pms.checkin.partner"].create(
|
|
{
|
|
"partner_id": self.partner_7.id,
|
|
"reservation_id": self.reservation_4.id,
|
|
}
|
|
)
|
|
# checkin partners on board
|
|
self.checkin1.action_on_board()
|
|
self.checkin2.action_on_board()
|
|
with freeze_time("2021-02-02"):
|
|
self.checkin3.action_on_board()
|
|
self.checkin4.action_on_board()
|
|
self.checkin5.action_on_board()
|
|
self.checkin6.action_on_board()
|
|
self.checkin7.action_on_board()
|
|
|
|
# set prices for nights
|
|
self.reservation_1.reservation_line_ids[0].price = 25.0
|
|
self.reservation_2.reservation_line_ids[0].price = 21.0
|
|
self.reservation_3.reservation_line_ids[0].price = 25.0
|
|
self.reservation_3.reservation_line_ids[1].price = 25.0
|
|
self.reservation_4.reservation_line_ids[0].price = 21.50
|
|
self.reservation_4.reservation_line_ids[1].price = 21.50
|
|
|
|
def test_room_type_num_by_date(self):
|
|
"""
|
|
+============================+==============+==============+=============+
|
|
| | 01 | 02 | 03 |
|
|
+============================+==============+==============+=============+
|
|
| r1 2 adults | DOUBLE ROOM | | |
|
|
| r2 2 adults | | TRIPLE ROOM | |
|
|
| r3 1 adult | | DOUBLE ROOM | DOUBLE ROOM |
|
|
| r4 2 adults (1 extra bed) | | SINGLE ROOM | SINGLE ROOM |
|
|
+============================+==============+==============+=============+
|
|
| double rooms (use double) | 1 | 0 | 0 |
|
|
+============================+==============+==============+=============+
|
|
| double rooms (use single) | 0 | 1 | 1 |
|
|
+============================+==============+==============+=============+
|
|
| other rooms | 0 | 2 | 1 |
|
|
+============================+==============+==============+=============+
|
|
| extra beds | 0 | 1 | 1 |
|
|
+============================+==============+==============+=============+
|
|
"""
|
|
# ARRANGE
|
|
start_date = datetime.date(2021, 2, 1)
|
|
second_date = datetime.date(2021, 2, 2)
|
|
end_date = datetime.date(2021, 2, 3)
|
|
|
|
expected_result = {
|
|
start_date: {
|
|
"double_rooms_double_use": 1,
|
|
"double_rooms_single_use": 0,
|
|
"other_rooms": 0,
|
|
"extra_beds": 0,
|
|
},
|
|
second_date: {
|
|
"double_rooms_double_use": 0,
|
|
"double_rooms_single_use": 1,
|
|
"other_rooms": 2,
|
|
"extra_beds": 1,
|
|
},
|
|
end_date: {
|
|
"double_rooms_double_use": 0,
|
|
"double_rooms_single_use": 1,
|
|
"other_rooms": 1,
|
|
"extra_beds": 1,
|
|
},
|
|
}
|
|
|
|
# ACT
|
|
rooms = self.env["pms.ine.wizard"].ine_rooms(
|
|
start_date, end_date, self.pms_property1
|
|
)
|
|
# ASSERT
|
|
self.assertDictEqual(rooms, expected_result)
|
|
|
|
def test_arrivals_departures_pernoctations_by_date(self):
|
|
"""
|
|
+===========================+==============+==============+=============+=============+
|
|
| | 01 | 02 | 03 | 04 |
|
|
+===========================+==============+==============+=============+=============+
|
|
| r1 2 adults | italy,russia | italy,russia | | |
|
|
+---------------------------+--------------+--------------+-------------+-------------+
|
|
| r2 2 adults | | italy,italy | italy,italy | |
|
|
+---------------------------+--------------+--------------+-------------+-------------+
|
|
| r3 1 adult | | afghanistan | afghanistan | afghanistan |
|
|
+---------------------------+--------------+--------------+-------------+-------------+
|
|
| r4 2 adults | | afghanistan | afghanistan | afghanistan |
|
|
| | | afghanistan | afghanistan | afghanistan |
|
|
+===========================+==============+==============+=============+=============+
|
|
| arrivals Afghanistan | | 3 | | |
|
|
| arrivals Italy | 1 | 2 | | |
|
|
| arrivals Russia | 1 | | | |
|
|
+===========================+==============+==============+=============+=============+
|
|
| pernoctations Afghanistan | | 3 | 3 | |
|
|
| pernoctations Italy | 1 | 2 | | |
|
|
| pernoctations Russia | 1 | | | |
|
|
+===========================+==============+==============+=============+=============+
|
|
| departures Afghanistan | | | | 3 |
|
|
| departures Italy | | 1 | 2 | |
|
|
| departures Russia | | 1 | | |
|
|
+===========================+==============+==============+=============+=============+
|
|
"""
|
|
# ARRANGE
|
|
start_date = datetime.date(2021, 2, 1)
|
|
second_date = datetime.date(2021, 2, 2)
|
|
third_date = datetime.date(2021, 2, 3)
|
|
end_date = datetime.date(2021, 2, 4)
|
|
|
|
expected_result = {
|
|
self.country_afghanistan.code: {
|
|
second_date: {
|
|
"arrivals": 3,
|
|
"pernoctations": 3,
|
|
},
|
|
third_date: {
|
|
"pernoctations": 3,
|
|
},
|
|
end_date: {
|
|
"departures": 3,
|
|
},
|
|
},
|
|
self.country_italy.code: {
|
|
start_date: {
|
|
"arrivals": 1,
|
|
"pernoctations": 1,
|
|
},
|
|
second_date: {
|
|
"arrivals": 2,
|
|
"pernoctations": 2,
|
|
"departures": 1,
|
|
},
|
|
third_date: {
|
|
"departures": 2,
|
|
},
|
|
},
|
|
self.country_russia.code: {
|
|
start_date: {
|
|
"arrivals": 1,
|
|
"pernoctations": 1,
|
|
},
|
|
second_date: {
|
|
"departures": 1,
|
|
},
|
|
},
|
|
}
|
|
# ACT
|
|
nationalities = self.env["pms.ine.wizard"].ine_nationalities(
|
|
start_date, end_date, self.pms_property1.id
|
|
)
|
|
# ASSERT
|
|
self.assertDictEqual(nationalities, expected_result)
|
|
|
|
def test_spain_arrivals_departures_pernoctations_by_date(self):
|
|
"""
|
|
+==========================+============+============+=========+========+
|
|
| | 01 | 02 | 03 | 04 |
|
|
+==========================+============+============+=========+========+
|
|
| r1 2 adults | Ourense | Ourense | | |
|
|
| | Pontevedra | Pontevedra | | |
|
|
+--------------------------+------------+------------+---------+--------+
|
|
| r2 2 adults | | Ourense | Ourense | |
|
|
| | | Ourense | Ourense | |
|
|
+--------------------------+------------+------------+---------+--------+
|
|
| r3 1 adult | | Madrid | Madrid | Madrid |
|
|
+--------------------------+------------+------------+---------+--------+
|
|
| r4 2 adults | | Madrid | Madrid | Madrid |
|
|
| | | Madrid | Madrid | Madrid |
|
|
+==========================+============+============+=========+========+
|
|
| arrivals Madrid | | 3 | | |
|
|
| arrivals Ourense | 1 | 2 | | |
|
|
| arrivals Pontevedra | 1 | | | |
|
|
+==========================+============+============+=========+========+
|
|
| pernoctations Madrid | | 3 | 3 | |
|
|
| pernoctations Ourense | 1 | 2 | | |
|
|
| pernoctations Pontevedra | 1 | | | |
|
|
0+=========================+============+============+=========+========+
|
|
| departures Madrid | | | | 3 |
|
|
| departures Ourense | | 1 | 2 | |
|
|
| departures Pontevedra | | 1 | | |
|
|
+==========================+============+============+=========+========+
|
|
"""
|
|
# ARRANGE
|
|
start_date = datetime.date(2021, 2, 1)
|
|
second_date = datetime.date(2021, 2, 2)
|
|
third_date = datetime.date(2021, 2, 3)
|
|
end_date = datetime.date(2021, 2, 4)
|
|
|
|
country_spain = self.env["res.country"].search([("code", "=", "ES")])
|
|
state_madrid = self.env["res.country.state"].search([("name", "=", "Madrid")])
|
|
state_ourense = self.env["res.country.state"].search(
|
|
[("name", "=", "Ourense (Orense)")]
|
|
)
|
|
state_pontevedra = self.env["res.country.state"].search(
|
|
[("name", "=", "Pontevedra")]
|
|
)
|
|
|
|
self.checkin1.nationality_id = country_spain
|
|
self.partner_1.nationality_id = country_spain
|
|
self.checkin1.state_id = state_ourense
|
|
self.partner_1.state_id = state_ourense
|
|
|
|
self.checkin2.nationality_id = country_spain
|
|
self.partner_2.nationality_id = country_spain
|
|
self.checkin2.state_id = state_pontevedra
|
|
self.partner_2.state_id = state_pontevedra
|
|
|
|
self.checkin3.nationality_id = country_spain
|
|
self.partner_3.nationality_id = country_spain
|
|
self.checkin3.state_id = state_ourense
|
|
self.partner_3.state_id = state_ourense
|
|
|
|
self.checkin4.nationality_id = country_spain
|
|
self.partner_4.nationality_id = country_spain
|
|
self.checkin4.state_id = state_ourense
|
|
self.partner_4.state_id = state_ourense
|
|
|
|
self.checkin5.nationality_id = country_spain
|
|
self.partner_5.nationality_id = country_spain
|
|
self.checkin5.state_id = state_madrid
|
|
self.partner_5.state_id = state_madrid
|
|
|
|
self.checkin6.nationality_id = country_spain
|
|
self.partner_6.nationality_id = country_spain
|
|
self.checkin6.state_id = state_madrid
|
|
self.partner_6.state_id = state_madrid
|
|
|
|
self.checkin7.nationality_id = country_spain
|
|
self.partner_7.nationality_id = country_spain
|
|
self.checkin7.state_id = state_madrid
|
|
self.partner_7.state_id = state_madrid
|
|
|
|
expected_result = {
|
|
country_spain.code: {
|
|
state_madrid.ine_code: {
|
|
second_date: {
|
|
"arrivals": 3,
|
|
"pernoctations": 3,
|
|
},
|
|
third_date: {
|
|
"pernoctations": 3,
|
|
},
|
|
end_date: {
|
|
"departures": 3,
|
|
},
|
|
},
|
|
state_ourense.ine_code: {
|
|
start_date: {
|
|
"arrivals": 1,
|
|
"pernoctations": 1,
|
|
},
|
|
second_date: {
|
|
"arrivals": 2,
|
|
"pernoctations": 2,
|
|
"departures": 1,
|
|
},
|
|
third_date: {
|
|
"departures": 2,
|
|
},
|
|
},
|
|
state_pontevedra.ine_code: {
|
|
start_date: {
|
|
"arrivals": 1,
|
|
"pernoctations": 1,
|
|
},
|
|
second_date: {
|
|
"departures": 1,
|
|
},
|
|
},
|
|
}
|
|
}
|
|
# ACT
|
|
nationalities = self.env["pms.ine.wizard"].ine_nationalities(
|
|
start_date, end_date, self.pms_property1.id
|
|
)
|
|
# ASSERT
|
|
self.assertDictEqual(nationalities, expected_result)
|
|
|
|
def test_calculate_monthly_adr(self):
|
|
"""
|
|
+-------------+-------+-------+-------+
|
|
| | 01 | 02 | 03 |
|
|
+-------------+-------+-------+-------+
|
|
| r1 | 25.00 | | |
|
|
| r2 | | 21.00 | |
|
|
| r3 | | 25.00 | 25.00 |
|
|
| r4 | | 21.50 | 21.50 |
|
|
+-------------+-------+-------+-------+
|
|
| adr | 25.00 | 22.50 | 23.25 |
|
|
+-------------+-------+-------+-------+
|
|
| monthly adr | 23.58 |
|
|
+-------------+-------+-------+-------+
|
|
"""
|
|
# ARRANGE
|
|
start_date = datetime.date(2021, 2, 1)
|
|
expected_monthly_adr = 23.58
|
|
|
|
# ACT
|
|
monthly_adr = self.env["pms.ine.wizard"].ine_calculate_monthly_adr(
|
|
start_date, self.pms_property1.id
|
|
)
|
|
# ASSERT
|
|
self.assertEqual(
|
|
expected_monthly_adr,
|
|
monthly_adr,
|
|
)
|
|
|
|
def test_calculate_monthly_revpar(self):
|
|
"""
|
|
+----------------+-------+-------+-------+
|
|
| | 01 | 02 | 03 |
|
|
+----------------+-------+-------+-------+
|
|
| r1 | 25.00 | | |
|
|
| r2 | | 21.00 | |
|
|
| r3 | | 25.00 | 25.00 |
|
|
| r4 | | 21.50 | 21.50 |
|
|
+----------------+-------+-------+-------+
|
|
| monthly revpar | 23.58 |
|
|
+----------------+-------+-------+-------+
|
|
num rooms avail. = 4
|
|
income = 25.00 + 21.00 + 25.00 + 25.00 + 21.50 + 21.50 = 139
|
|
monthly revpar = 139 / (4 * 28)
|
|
"""
|
|
# ARRANGE
|
|
start_date = datetime.date(2021, 2, 1)
|
|
expected_monthly_revpar = 1.24
|
|
|
|
# ACT
|
|
monthly_revpar = self.env["pms.ine.wizard"].ine_calculate_monthly_revpar(
|
|
start_date, self.pms_property1.id
|
|
)
|
|
# ASSERT
|
|
self.assertEqual(
|
|
expected_monthly_revpar,
|
|
monthly_revpar,
|
|
)
|