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": [
|
||||||
"data/res.country.state.csv",
|
"data/res.country.state.csv",
|
||||||
|
"data/pms.ine.tourism.type.category.csv",
|
||||||
"data/cron_jobs.xml",
|
"data/cron_jobs.xml",
|
||||||
"data/pms_data.xml",
|
"data/pms_data.xml",
|
||||||
"data/queue_data.xml",
|
"data/queue_data.xml",
|
||||||
@@ -35,7 +36,7 @@
|
|||||||
"views/pms_property_views.xml",
|
"views/pms_property_views.xml",
|
||||||
"views/pms_room_views.xml",
|
"views/pms_room_views.xml",
|
||||||
"views/pms_log_institution_traveller_report_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/traveller_report.xml",
|
||||||
"wizards/wizard_ine.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_property
|
||||||
from . import pms_log_institution_traveller_report
|
from . import pms_log_institution_traveller_report
|
||||||
from . import res_country_state
|
from . import res_country_state
|
||||||
from . import pms_ine_tourism_category
|
from . import pms_ine_tourism_type_category
|
||||||
from . import pms_room
|
from . import pms_room
|
||||||
|
|||||||
@@ -2,15 +2,15 @@ from odoo import fields, models
|
|||||||
|
|
||||||
|
|
||||||
class PmsIneTourismCategory(models.Model):
|
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."
|
_description = "Hotel category in the Ministry of Tourism. Used for INE statistics."
|
||||||
|
|
||||||
name = fields.Char("Category", required=True)
|
type = fields.Char("Type", required=True)
|
||||||
category_type = fields.Char("Category type", required=True)
|
category = fields.Char("Category", required=True)
|
||||||
|
|
||||||
def name_get(self):
|
def name_get(self):
|
||||||
data = []
|
data = []
|
||||||
for record in self:
|
for record in self:
|
||||||
display_value = record.category_type + " (" + record.name + ") "
|
display_value = record.category + " (" + record.type + ") "
|
||||||
data.append((record.id, display_value))
|
data.append((record.id, display_value))
|
||||||
return data
|
return data
|
||||||
@@ -47,7 +47,7 @@ class PmsProperty(models.Model):
|
|||||||
"Eventual Staff", default=0, help="Used for INE statistics."
|
"Eventual Staff", default=0, help="Used for INE statistics."
|
||||||
)
|
)
|
||||||
ine_category_id = fields.Many2one(
|
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.",
|
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
|
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_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_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
|
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>
|
<odoo>
|
||||||
<record model="ir.ui.view" id="pms_ine_tourism_category_view_form">
|
<record model="ir.ui.view" id="pms_ine_tourism_category_view_form">
|
||||||
<field name="name">pms.ine.tourism.category.form</field>
|
<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">
|
<field name="arch" type="xml">
|
||||||
<form>
|
<form>
|
||||||
<sheet>
|
<sheet>
|
||||||
<group>
|
<group>
|
||||||
<field name="name" />
|
<field name="type" />
|
||||||
<field name="category_type" />
|
<field name="category" />
|
||||||
</group>
|
</group>
|
||||||
</sheet>
|
</sheet>
|
||||||
</form>
|
</form>
|
||||||
@@ -16,17 +16,17 @@
|
|||||||
</record>
|
</record>
|
||||||
<record model="ir.ui.view" id="pms_ine_tourism_category_view_tree">
|
<record model="ir.ui.view" id="pms_ine_tourism_category_view_tree">
|
||||||
<field name="name">pms.ine.tourism.category.tree</field>
|
<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">
|
<field name="arch" type="xml">
|
||||||
<tree>
|
<tree>
|
||||||
<field name="name" />
|
<field name="type" />
|
||||||
<field name="category_type" />
|
<field name="category" />
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
<record model="ir.actions.act_window" id="open_pms_ine_tourism_category">
|
<record model="ir.actions.act_window" id="open_pms_ine_tourism_category">
|
||||||
<field name="name">INE Categories</field>
|
<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>
|
<field name="view_mode">tree,form</field>
|
||||||
</record>
|
</record>
|
||||||
<menuitem
|
<menuitem
|
||||||
@@ -335,6 +335,8 @@ class WizardIne(models.TransientModel):
|
|||||||
["price:avg"],
|
["price:avg"],
|
||||||
["date:day"],
|
["date:day"],
|
||||||
)
|
)
|
||||||
|
if not len(group_adr):
|
||||||
|
return 0
|
||||||
adr = 0
|
adr = 0
|
||||||
for day_adr in group_adr:
|
for day_adr in group_adr:
|
||||||
adr += day_adr["price"]
|
adr += day_adr["price"]
|
||||||
@@ -381,6 +383,8 @@ class WizardIne(models.TransientModel):
|
|||||||
("id", "not in", rooms_not_allowed),
|
("id", "not in", rooms_not_allowed),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
if not sum_group_price[0]["price"]:
|
||||||
|
return 0
|
||||||
revpar = round(
|
revpar = round(
|
||||||
sum_group_price[0]["price"] / (available_rooms * last_day.day), 2
|
sum_group_price[0]["price"] / (available_rooms * last_day.day), 2
|
||||||
)
|
)
|
||||||
@@ -400,6 +404,13 @@ class WizardIne(models.TransientModel):
|
|||||||
.mapped("capacity")
|
.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):
|
def ine_generate_xml(self):
|
||||||
if self.start_date.month != self.end_date.month:
|
if self.start_date.month != self.end_date.month:
|
||||||
raise ValidationError(_("The date range must belong to the same month."))
|
raise ValidationError(_("The date range must belong to the same month."))
|
||||||
@@ -423,9 +434,10 @@ class WizardIne(models.TransientModel):
|
|||||||
ET.SubElement(
|
ET.SubElement(
|
||||||
header_tag, "NOMBRE_ESTABLECIMIENTO"
|
header_tag, "NOMBRE_ESTABLECIMIENTO"
|
||||||
).text = self.pms_property_id.name
|
).text = self.pms_property_id.name
|
||||||
ET.SubElement(header_tag, "CIF_NIF").text = self.pms_property_id.company_id.vat[
|
|
||||||
2:
|
ET.SubElement(header_tag, "CIF_NIF").text = self.ine_get_nif_cif(
|
||||||
].strip()
|
self.pms_property_id.company_id.vat
|
||||||
|
)
|
||||||
ET.SubElement(
|
ET.SubElement(
|
||||||
header_tag, "NUMERO_REGISTRO"
|
header_tag, "NUMERO_REGISTRO"
|
||||||
).text = self.pms_property_id.ine_tourism
|
).text = self.pms_property_id.ine_tourism
|
||||||
@@ -441,10 +453,10 @@ class WizardIne(models.TransientModel):
|
|||||||
).text = self.pms_property_id.phone.replace(" ", "")[0:12]
|
).text = self.pms_property_id.phone.replace(" ", "")[0:12]
|
||||||
ET.SubElement(
|
ET.SubElement(
|
||||||
header_tag, "TIPO"
|
header_tag, "TIPO"
|
||||||
).text = self.pms_property_id.ine_category_id.category_type
|
).text = self.pms_property_id.ine_category_id.type
|
||||||
ET.SubElement(
|
ET.SubElement(
|
||||||
header_tag, "CATEGORIA"
|
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(
|
ET.SubElement(header_tag, "HABITACIONES").text = str(
|
||||||
self.env["pms.room"].search_count([("in_ine", "=", True)])
|
self.env["pms.room"].search_count([("in_ine", "=", True)])
|
||||||
)
|
)
|
||||||
@@ -539,6 +551,13 @@ class WizardIne(models.TransientModel):
|
|||||||
)
|
)
|
||||||
prices_tag = ET.SubElement(survey_tag, "PRECIOS")
|
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(
|
ET.SubElement(prices_tag, "ADR_MENSUAL").text = str(
|
||||||
self.ine_calculate_monthly_adr(
|
self.ine_calculate_monthly_adr(
|
||||||
self.start_date,
|
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:
|
# TODO:
|
||||||
# Evaluate how to get occupation & ADR for:
|
# Evaluate how to get occupation & ADR for:
|
||||||
# -traditional/online tour-operator
|
# -traditional/online tour-operator
|
||||||
|
|||||||
Reference in New Issue
Block a user