[REF+ADD+FIX] pms_l10n_es: fix adr, revpar & cif, refactor model pms.ine.tourism.type.category.csv & add data for that model (csv)

This commit is contained in:
miguelpadin
2021-07-23 21:25:09 +02:00
parent 0e6cbe2374
commit a68677f703
8 changed files with 93 additions and 26 deletions

View File

@@ -27,6 +27,7 @@
},
"data": [
"data/res.country.state.csv",
"data/pms.ine.tourism.type.category.csv",
"data/cron_jobs.xml",
"data/pms_data.xml",
"data/queue_data.xml",
@@ -35,7 +36,7 @@
"views/pms_property_views.xml",
"views/pms_room_views.xml",
"views/pms_log_institution_traveller_report_views.xml",
"views/pms_ine_tourism_category.xml",
"views/pms_ine_tourism_type_category.xml",
"wizards/traveller_report.xml",
"wizards/wizard_ine.xml",
],

View File

@@ -0,0 +1,53 @@
"type","category"
Hoteles,H1
Hoteles,H2
Hoteles,H3
Hoteles,H4
Hoteles,H5
Hoteles-apartamentos,AP
Hoteles-apartamentos,HA
Hoteles-apartamentos,HA1
Hoteles-apartamentos,HA2
Hoteles-apartamentos,HA3
Hoteles-apartamentos,HA4
Hoteles-apartamentos,HA5
Hoteles-residencias,HR
Hoteles-residencias,HR1
Hoteles-residencias,HR2
Hoteles-residencias,HR3
Hoteles-residencias,HR4
Hoteles-residencias,HR5
Moteles,M1
Moteles,M2
Moteles,M3
Paradores Nacionales,PN3
Paradores Nacionales,PN4
Paradores Nacionales,PN5
Ciudades de vacaciones,CV1
Ciudades de vacaciones,CV2
Ciudades de vacaciones,CV3
Residencias-apartamentos,RA1
Residencias-apartamentos,RA2
Residencias-apartamentos,RA3
Residencias-apartamentos,RA4
Hostales,HS
Hostales,HS1
Hostales,HS2
Hostales,HS3
Hostales,HSR
Hostales,HSR1
Hostales,HSR2
Hostales,HSR3
Hostales generales, HSE
Casas de Huéspedes,CH
Casas de Huéspedes,CH1
Fondas,F1
Fondas,F2
Fondas,F3
Pensiones,P
Pensiones,P1
Pensiones,P2
Pensiones,P3
Pensiones,PA
Pensiones,PT
Otros,Otras
1 type category
2 Hoteles H1
3 Hoteles H2
4 Hoteles H3
5 Hoteles H4
6 Hoteles H5
7 Hoteles-apartamentos AP
8 Hoteles-apartamentos HA
9 Hoteles-apartamentos HA1
10 Hoteles-apartamentos HA2
11 Hoteles-apartamentos HA3
12 Hoteles-apartamentos HA4
13 Hoteles-apartamentos HA5
14 Hoteles-residencias HR
15 Hoteles-residencias HR1
16 Hoteles-residencias HR2
17 Hoteles-residencias HR3
18 Hoteles-residencias HR4
19 Hoteles-residencias HR5
20 Moteles M1
21 Moteles M2
22 Moteles M3
23 Paradores Nacionales PN3
24 Paradores Nacionales PN4
25 Paradores Nacionales PN5
26 Ciudades de vacaciones CV1
27 Ciudades de vacaciones CV2
28 Ciudades de vacaciones CV3
29 Residencias-apartamentos RA1
30 Residencias-apartamentos RA2
31 Residencias-apartamentos RA3
32 Residencias-apartamentos RA4
33 Hostales HS
34 Hostales HS1
35 Hostales HS2
36 Hostales HS3
37 Hostales HSR
38 Hostales HSR1
39 Hostales HSR2
40 Hostales HSR3
41 Hostales generales HSE
42 Casas de Huéspedes CH
43 Casas de Huéspedes CH1
44 Fondas F1
45 Fondas F2
46 Fondas F3
47 Pensiones P
48 Pensiones P1
49 Pensiones P2
50 Pensiones P3
51 Pensiones PA
52 Pensiones PT
53 Otros Otras

View File

@@ -3,5 +3,5 @@
from . import pms_property
from . import pms_log_institution_traveller_report
from . import res_country_state
from . import pms_ine_tourism_category
from . import pms_ine_tourism_type_category
from . import pms_room

View File

@@ -2,15 +2,15 @@ from odoo import fields, models
class PmsIneTourismCategory(models.Model):
_name = "pms.ine.tourism.category"
_name = "pms.ine.tourism.type.category"
_description = "Hotel category in the Ministry of Tourism. Used for INE statistics."
name = fields.Char("Category", required=True)
category_type = fields.Char("Category type", required=True)
type = fields.Char("Type", required=True)
category = fields.Char("Category", required=True)
def name_get(self):
data = []
for record in self:
display_value = record.category_type + " (" + record.name + ") "
display_value = record.category + " (" + record.type + ") "
data.append((record.id, display_value))
return data

View File

@@ -47,7 +47,7 @@ class PmsProperty(models.Model):
"Eventual Staff", default=0, help="Used for INE statistics."
)
ine_category_id = fields.Many2one(
"pms.ine.tourism.category",
"pms.ine.tourism.type.category",
help="Hotel category in the Ministry of Tourism. Used for INE statistics.",
)

View File

@@ -1,5 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
user_access_traveller_report_wizard,user_access_traveller_report_wizard,model_traveller_report_wizard,pms.group_pms_user,1,1,1,1
user_access_traveller_report_logs,user_access_traveller_report_logs,model_pms_log_institution_traveller_report,pms.group_pms_user,1,1,1,1
user_access_pms_ine_tourism_category,user_access_pms_ine_tourism_category,model_pms_ine_tourism_category,pms.group_pms_user,1,1,1,1
user_access_pms_ine_tourism_type_category,user_access_pms_ine_tourism_type_category,model_pms_ine_tourism_type_category,pms.group_pms_user,1,1,1,1
user_access_pms_ine_wizard,user_access_pms_ine_wizard,model_pms_ine_wizard,pms.group_pms_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 user_access_traveller_report_wizard user_access_traveller_report_wizard model_traveller_report_wizard pms.group_pms_user 1 1 1 1
3 user_access_traveller_report_logs user_access_traveller_report_logs model_pms_log_institution_traveller_report pms.group_pms_user 1 1 1 1
4 user_access_pms_ine_tourism_category user_access_pms_ine_tourism_type_category user_access_pms_ine_tourism_category user_access_pms_ine_tourism_type_category model_pms_ine_tourism_category model_pms_ine_tourism_type_category pms.group_pms_user 1 1 1 1
5 user_access_pms_ine_wizard user_access_pms_ine_wizard model_pms_ine_wizard pms.group_pms_user 1 1 1 1

View File

@@ -2,13 +2,13 @@
<odoo>
<record model="ir.ui.view" id="pms_ine_tourism_category_view_form">
<field name="name">pms.ine.tourism.category.form</field>
<field name="model">pms.ine.tourism.category</field>
<field name="model">pms.ine.tourism.type.category</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="name" />
<field name="category_type" />
<field name="type" />
<field name="category" />
</group>
</sheet>
</form>
@@ -16,17 +16,17 @@
</record>
<record model="ir.ui.view" id="pms_ine_tourism_category_view_tree">
<field name="name">pms.ine.tourism.category.tree</field>
<field name="model">pms.ine.tourism.category</field>
<field name="model">pms.ine.tourism.type.category</field>
<field name="arch" type="xml">
<tree>
<field name="name" />
<field name="category_type" />
<field name="type" />
<field name="category" />
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="open_pms_ine_tourism_category">
<field name="name">INE Categories</field>
<field name="res_model">pms.ine.tourism.category</field>
<field name="res_model">pms.ine.tourism.type.category</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem

View File

@@ -335,6 +335,8 @@ class WizardIne(models.TransientModel):
["price:avg"],
["date:day"],
)
if not len(group_adr):
return 0
adr = 0
for day_adr in group_adr:
adr += day_adr["price"]
@@ -381,6 +383,8 @@ class WizardIne(models.TransientModel):
("id", "not in", rooms_not_allowed),
]
)
if not sum_group_price[0]["price"]:
return 0
revpar = round(
sum_group_price[0]["price"] / (available_rooms * last_day.day), 2
)
@@ -400,6 +404,13 @@ class WizardIne(models.TransientModel):
.mapped("capacity")
)
@api.model
def ine_get_nif_cif(self, cif_nif):
country_codes = self.env["res.country"].search([]).mapped("code")
if cif_nif[:2] in country_codes:
return cif_nif[2:].strip()
return cif_nif.strip()
def ine_generate_xml(self):
if self.start_date.month != self.end_date.month:
raise ValidationError(_("The date range must belong to the same month."))
@@ -423,9 +434,10 @@ class WizardIne(models.TransientModel):
ET.SubElement(
header_tag, "NOMBRE_ESTABLECIMIENTO"
).text = self.pms_property_id.name
ET.SubElement(header_tag, "CIF_NIF").text = self.pms_property_id.company_id.vat[
2:
].strip()
ET.SubElement(header_tag, "CIF_NIF").text = self.ine_get_nif_cif(
self.pms_property_id.company_id.vat
)
ET.SubElement(
header_tag, "NUMERO_REGISTRO"
).text = self.pms_property_id.ine_tourism
@@ -441,10 +453,10 @@ class WizardIne(models.TransientModel):
).text = self.pms_property_id.phone.replace(" ", "")[0:12]
ET.SubElement(
header_tag, "TIPO"
).text = self.pms_property_id.ine_category_id.category_type
).text = self.pms_property_id.ine_category_id.type
ET.SubElement(
header_tag, "CATEGORIA"
).text = self.pms_property_id.ine_category_id.name
).text = self.pms_property_id.ine_category_id.category
ET.SubElement(header_tag, "HABITACIONES").text = str(
self.env["pms.room"].search_count([("in_ine", "=", True)])
)
@@ -539,6 +551,13 @@ class WizardIne(models.TransientModel):
)
prices_tag = ET.SubElement(survey_tag, "PRECIOS")
ET.SubElement(prices_tag, "REVPAR_MENSUAL").text = str(
self.ine_calculate_monthly_revpar(
self.start_date,
self.pms_property_id.id,
)
)
ET.SubElement(prices_tag, "ADR_MENSUAL").text = str(
self.ine_calculate_monthly_adr(
self.start_date,
@@ -546,12 +565,6 @@ class WizardIne(models.TransientModel):
)
)
ET.SubElement(prices_tag, "REVPAR_MENSUAL").text = str(
self.ine_calculate_monthly_revpar(
self.start_date,
self.pms_property_id.id,
)
)
# TODO:
# Evaluate how to get occupation & ADR for:
# -traditional/online tour-operator