mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[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:
@@ -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",
|
||||
],
|
||||
|
||||
53
pms_l10n_es/data/pms.ine.tourism.type.category.csv
Normal file
53
pms_l10n_es/data/pms.ine.tourism.type.category.csv
Normal 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
|
||||
|
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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.",
|
||||
)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user