[FIX] pms: control ine seats configured in the property and remove from menu the pms_ine_tourism_category model

This commit is contained in:
miguelpadin
2021-07-28 14:39:15 +02:00
parent 9d942c101d
commit fd01aa07e6
4 changed files with 37 additions and 28 deletions

View File

@@ -38,7 +38,9 @@ class PmsProperty(models.Model):
help="Registration number in the Ministry of Tourism. Used for INE statistics.", help="Registration number in the Ministry of Tourism. Used for INE statistics.",
) )
ine_seats = fields.Integer( ine_seats = fields.Integer(
"Beds available", default=0, help="Used for INE statistics." "Beds available excluding extra beds",
default=0,
help="Used for INE statistics.",
) )
ine_permanent_staff = fields.Integer( ine_permanent_staff = fields.Integer(
"Permanent Staff", default=0, help="Used for INE statistics." "Permanent Staff", default=0, help="Used for INE statistics."

View File

@@ -9,6 +9,9 @@ from .common import TestPms
class TestWizardINE(TestPms): class TestWizardINE(TestPms):
def setUp(self): def setUp(self):
super().setUp() super().setUp()
# number of seats established in the property
self.pms_property1.ine_seats = 50
# create room types # create room types
self.room_type = self.env["pms.room.type"].create( self.room_type = self.env["pms.room.type"].create(
{ {
@@ -362,7 +365,7 @@ class TestWizardINE(TestPms):
# ACT # ACT
rooms = self.env["pms.ine.wizard"].ine_rooms( rooms = self.env["pms.ine.wizard"].ine_rooms(
start_date, end_date, self.pms_property1.id start_date, end_date, self.pms_property1
) )
# ASSERT # ASSERT
self.assertDictEqual(rooms, expected_result) self.assertDictEqual(rooms, expected_result)

View File

@@ -29,11 +29,11 @@
<field name="res_model">pms.ine.tourism.type.category</field> <field name="res_model">pms.ine.tourism.type.category</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
</record> </record>
<menuitem <!-- <menuitem-->
name="INE Tourism Categories" <!-- name="INE Tourism Categories"-->
id="menu_open_pms_ine_tourism_category_form_tree" <!-- id="menu_open_pms_ine_tourism_category_form_tree"-->
action="open_pms_ine_tourism_category" <!-- action="open_pms_ine_tourism_category"-->
parent="pms.menu_reservations" <!-- parent="pms.menu_reservations"-->
sequence="30" <!-- sequence="30"-->
/> <!-- />-->
</odoo> </odoo>

View File

@@ -68,7 +68,7 @@ class WizardIne(models.TransientModel):
self.env["pms.reservation.line"] self.env["pms.reservation.line"]
.search( .search(
[ [
("pms_property_id", "=", pms_property_id), ("pms_property_id", "=", pms_property_id.id),
("occupies_availability", "=", True), ("occupies_availability", "=", True),
("reservation_id.reservation_type", "=", "normal"), ("reservation_id.reservation_type", "=", "normal"),
("room_id.in_ine", "=", True), ("room_id.in_ine", "=", True),
@@ -85,7 +85,7 @@ class WizardIne(models.TransientModel):
self.env["pms.reservation.line"] self.env["pms.reservation.line"]
.search( .search(
[ [
("pms_property_id", "=", pms_property_id), ("pms_property_id", "=", pms_property_id.id),
("occupies_availability", "=", True), ("occupies_availability", "=", True),
("reservation_id.reservation_type", "=", "normal"), ("reservation_id.reservation_type", "=", "normal"),
("room_id.in_ine", "=", True), ("room_id.in_ine", "=", True),
@@ -100,7 +100,7 @@ class WizardIne(models.TransientModel):
# service lines with extra beds # service lines with extra beds
extra_bed_service_lines = self.env["pms.service.line"].search( extra_bed_service_lines = self.env["pms.service.line"].search(
[ [
("pms_property_id", "=", pms_property_id), ("pms_property_id", "=", pms_property_id.id),
("product_id.is_extra_bed", "=", True), ("product_id.is_extra_bed", "=", True),
("reservation_id.reservation_type", "=", "normal"), ("reservation_id.reservation_type", "=", "normal"),
("date", "=", p_date), ("date", "=", p_date),
@@ -132,7 +132,7 @@ class WizardIne(models.TransientModel):
("occupies_availability", "=", True), ("occupies_availability", "=", True),
("reservation_id.reservation_type", "=", "normal"), ("reservation_id.reservation_type", "=", "normal"),
("room_id.in_ine", "=", True), ("room_id.in_ine", "=", True),
("pms_property_id", "=", pms_property_id), ("pms_property_id", "=", pms_property_id.id),
] ]
) )
.mapped("room_id") .mapped("room_id")
@@ -143,6 +143,21 @@ class WizardIne(models.TransientModel):
all_rooms - double_rooms_double_use all_rooms - double_rooms_double_use
) - double_rooms_single_use ) - double_rooms_single_use
seats_excluding_extra_beds = (
sum(other_rooms.mapped("capacity"))
+ sum(double_rooms_double_use.mapped("capacity"))
+ sum(double_rooms_single_use.mapped("capacity"))
)
if seats_excluding_extra_beds > pms_property_id.ine_seats:
raise ValidationError(
_(
"The number of seats, excluding extra beds (%s)"
% str(seats_excluding_extra_beds)
+ " exceeds the number of seats established in the property (%s)"
% str(pms_property_id.ine_seats)
)
)
# no room movements -> no dict entrys # no room movements -> no dict entrys
if not ( if not (
extra_beds == 0 extra_beds == 0
@@ -391,19 +406,6 @@ class WizardIne(models.TransientModel):
self.revpar = revpar self.revpar = revpar
return revpar return revpar
@api.model
def ine_calculate_capacity(self):
# TODO: Review if calculate like below or get the info from property.ine_seats
return sum(
self.env["pms.room"]
.search(
[
("in_ine", "=", True),
]
)
.mapped("capacity")
)
@api.model @api.model
def ine_get_nif_cif(self, cif_nif): def ine_get_nif_cif(self, cif_nif):
country_codes = self.env["res.country"].search([]).mapped("code") country_codes = self.env["res.country"].search([]).mapped("code")
@@ -416,6 +418,8 @@ class WizardIne(models.TransientModel):
raise ValidationError(_("The date range must belong to the same month.")) raise ValidationError(_("The date range must belong to the same month."))
if not self.pms_property_id.company_id.vat: if not self.pms_property_id.company_id.vat:
raise ValidationError(_("The VAT is not established.")) raise ValidationError(_("The VAT is not established."))
if not self.pms_property_id.phone:
raise ValidationError(_("The phone is not established."))
# INE XML # INE XML
survey_tag = ET.Element("ENCUESTA") survey_tag = ET.Element("ENCUESTA")
@@ -462,7 +466,7 @@ class WizardIne(models.TransientModel):
) )
ET.SubElement(header_tag, "PLAZAS_DISPONIBLES_SIN_SUPLETORIAS").text = str( ET.SubElement(header_tag, "PLAZAS_DISPONIBLES_SIN_SUPLETORIAS").text = str(
self.ine_calculate_capacity() self.pms_property_id.ine_seats
) )
ET.SubElement(header_tag, "URL").text = self.pms_property_id.website ET.SubElement(header_tag, "URL").text = self.pms_property_id.website
@@ -531,7 +535,7 @@ class WizardIne(models.TransientModel):
) )
rooms_tag = ET.SubElement(survey_tag, "HABITACIONES") rooms_tag = ET.SubElement(survey_tag, "HABITACIONES")
rooms = self.ine_rooms(self.start_date, self.end_date, self.pms_property_id.id) rooms = self.ine_rooms(self.start_date, self.end_date, self.pms_property_id)
# INE XML -> ROOMS # INE XML -> ROOMS
for key_date, value_rooms in rooms.items(): for key_date, value_rooms in rooms.items():