diff --git a/pms_l10n_es/__init__.py b/pms_l10n_es/__init__.py
index 0650744f6..aee8895e7 100644
--- a/pms_l10n_es/__init__.py
+++ b/pms_l10n_es/__init__.py
@@ -1 +1,2 @@
from . import models
+from . import wizards
diff --git a/pms_l10n_es/__manifest__.py b/pms_l10n_es/__manifest__.py
index 912abc329..61a59521a 100644
--- a/pms_l10n_es/__manifest__.py
+++ b/pms_l10n_es/__manifest__.py
@@ -15,10 +15,16 @@
"partner_second_lastname",
"partner_contact_gender",
"partner_contact_birthdate",
+ "partner_contact_nationality",
],
"data": [
+ "data/cron_jobs.xml",
+ "data/pms_sequence.xml",
+ "security/ir.model.access.csv",
"views/pms_checkin_partner_views.xml",
+ "views/pms_property_views.xml",
"views/res_partner_views.xml",
+ "wizards/traveller_report.xml",
],
"installable": True,
}
diff --git a/pms_l10n_es/data/cron_jobs.xml b/pms_l10n_es/data/cron_jobs.xml
new file mode 100644
index 000000000..76f00dc0a
--- /dev/null
+++ b/pms_l10n_es/data/cron_jobs.xml
@@ -0,0 +1,21 @@
+
+
+
+
+ Automatic Send Traveller Report
+
+ 1
+
+ days
+ -1
+
+ code
+
+
+ model.generate_file()
+
+
+
diff --git a/pms_l10n_es/data/pms_sequence.xml b/pms_l10n_es/data/pms_sequence.xml
new file mode 100644
index 000000000..f88b48920
--- /dev/null
+++ b/pms_l10n_es/data/pms_sequence.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ PMS L10N Traveller Report
+ traveller.report.wizard
+ 3
+ 1
+ 1
+
+
+
diff --git a/pms_l10n_es/models/__init__.py b/pms_l10n_es/models/__init__.py
index 4354d9499..ebd8614e3 100644
--- a/pms_l10n_es/models/__init__.py
+++ b/pms_l10n_es/models/__init__.py
@@ -1,2 +1,3 @@
from . import res_partner
from . import pms_checkin_partner
+from . import pms_property
diff --git a/pms_l10n_es/models/pms_checkin_partner.py b/pms_l10n_es/models/pms_checkin_partner.py
index 81fd7be26..1cc4c9a31 100644
--- a/pms_l10n_es/models/pms_checkin_partner.py
+++ b/pms_l10n_es/models/pms_checkin_partner.py
@@ -62,12 +62,13 @@ class PmsCheckinPartner(models.Model):
store=True,
readonly=False,
)
-
- @api.depends("partner_id", "partner_id.lastname")
- def _compute_lastname(self):
- for record in self:
- if not record.lastname:
- record.lastname = record.partner_id.lastname
+ nationality_id = fields.Many2one(
+ string="Nationality ID",
+ compute="_compute_nationality",
+ comodel_name="res.country",
+ store=True,
+ readonly=False,
+ )
@api.depends("partner_id", "partner_id.firstname")
def _compute_firstname(self):
@@ -75,6 +76,12 @@ class PmsCheckinPartner(models.Model):
if not record.firstname:
record.firstname = record.partner_id.firstname
+ @api.depends("partner_id", "partner_id.lastname")
+ def _compute_lastname(self):
+ for record in self:
+ if not record.lastname:
+ record.lastname = record.partner_id.lastname
+
@api.depends("partner_id", "partner_id.lastname2")
def _compute_lastname2(self):
for record in self:
@@ -113,6 +120,12 @@ class PmsCheckinPartner(models.Model):
if not record.gender:
record.gender = record.partner_id.gender
+ @api.depends("partner_id", "partner_id.lastname")
+ def _compute_nationality(self):
+ for record in self:
+ if not record.nationality_id:
+ record.nationality_id = record.partner_id.nationality_id
+
@api.model
def _checkin_mandatory_fields(self, depends=False):
mandatory_fields = super(PmsCheckinPartner, self)._checkin_mandatory_fields(
diff --git a/pms_l10n_es/models/pms_property.py b/pms_l10n_es/models/pms_property.py
new file mode 100644
index 000000000..4901deaaa
--- /dev/null
+++ b/pms_l10n_es/models/pms_property.py
@@ -0,0 +1,18 @@
+from odoo import _, fields, models
+
+
+class PmsProperty(models.Model):
+ _inherit = "pms.property"
+
+ police_type = fields.Selection(
+ [
+ ("guardia_civil", "Guardia Civil"),
+ ("policia_nacional","PolicĂa Nacional"),
+ ("ertxaintxa", "Ertxaintxa"),
+ ("mossos", "Mossos_d'esquadra")
+ ],
+ string="Police Type",
+ default="guardia_civil")
+ police_number = fields.Char("Police Number", size=10)
+ police_user = fields.Char("Police User")
+ police_pass = fields.Char("Police Password")
diff --git a/pms_l10n_es/security/ir.model.access.csv b/pms_l10n_es/security/ir.model.access.csv
new file mode 100644
index 000000000..d8d1060d6
--- /dev/null
+++ b/pms_l10n_es/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+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
diff --git a/pms_l10n_es/views/pms_checkin_partner_views.xml b/pms_l10n_es/views/pms_checkin_partner_views.xml
index 8eefdeef2..96a1f4de6 100644
--- a/pms_l10n_es/views/pms_checkin_partner_views.xml
+++ b/pms_l10n_es/views/pms_checkin_partner_views.xml
@@ -7,12 +7,14 @@
+
+
@@ -32,6 +34,7 @@
+
@@ -51,6 +54,7 @@
+
@@ -70,11 +74,11 @@
+
-
Checkin partner view tree Spain
pms.checkin.partner
@@ -93,6 +97,4 @@
-
-
diff --git a/pms_l10n_es/views/pms_property_views.xml b/pms_l10n_es/views/pms_property_views.xml
new file mode 100644
index 000000000..52aeaf8c7
--- /dev/null
+++ b/pms_l10n_es/views/pms_property_views.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+ Property Form l10n_es
+ pms.property
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pms_l10n_es/wizards/__init__.py b/pms_l10n_es/wizards/__init__.py
new file mode 100644
index 000000000..1a18223f3
--- /dev/null
+++ b/pms_l10n_es/wizards/__init__.py
@@ -0,0 +1 @@
+from . import traveller_report
diff --git a/pms_l10n_es/wizards/traveller_report.py b/pms_l10n_es/wizards/traveller_report.py
new file mode 100644
index 000000000..4a79a9cce
--- /dev/null
+++ b/pms_l10n_es/wizards/traveller_report.py
@@ -0,0 +1,86 @@
+import base64
+import datetime
+from datetime import date
+from odoo import _, api, fields, models
+import requests
+
+
+class TravellerReport(models.TransientModel):
+ _name = "traveller.report.wizard"
+ _description = "Traveller Report"
+
+ txt_filename = fields.Char()
+ txt_binary = fields.Binary()
+ txt_message = fields.Char()
+
+ def generate_file(self):
+ date_start = str(date.today()) + " 0:00:00"
+ date_end = str(date.today()) + " 23:59:59"
+ lines = self.env["pms.checkin.partner"].search(
+ [
+ ("state", "=", "onboard"),
+ ("arrival", ">=", date_start),
+ ("arrival", "<=", date_end),
+ ]
+ )
+ if not lines:
+ return
+ pms_property = self.env["pms.property"].search(
+ [("id", "=", self.env.user.get_active_property_ids()[0])]
+ )
+ if pms_property.police_number and pms_property.name:
+ content = "1|" + pms_property.police_number.upper() + "|" + pms_property.name.upper()
+ content += "|"
+ content += datetime.datetime.now().strftime("%Y%m%d|%H%M")
+ content += "|" + str(len(lines))
+ for line in lines:
+ if line.document_type == "D":
+ content += "\n2|" + line.document_number.upper() + "||"
+ else:
+ content += "\n2||" + line.document_number.upper() + "|"
+ content += line.document_type + "|"
+ content += line.document_expedition_date.strftime("%Y%m%d") + "|"
+ content += line.lastname.upper() + "|"
+ if line.lastname2:
+ content += line.lastname2.upper()
+ content += "|" + line.firstname.upper() + "|"
+ if line.gender == "female":
+ content += "F|"
+ else:
+ content += "M|"
+ content += line.birthdate_date.strftime("%Y%m%d") + "|"
+ # REVIEW: nationality_id must be nationality
+ content += line.nationality_id.name.upper() + "|"
+ content += line.arrival.strftime("%Y%m%d") + "|"
+ sequence_num = self.env['ir.sequence'].next_by_code("traveller.report.wizard")
+ txt_binary = self.env["traveller.report.wizard"].create(
+ {
+ "txt_filename": pms_property.police_number + "." + sequence_num,
+ "txt_binary": base64.b64encode(str.encode(content)),
+ "txt_message": content,
+ }
+ )
+ return {
+ "name": _("Download File"),
+ "res_id": txt_binary.id,
+ "res_model": "traveller.report.wizard",
+ "target": "new",
+ "type": "ir.actions.act_window",
+ "view_id": self.env.ref("pms_l10n_es.traveller_report_wizard").id,
+ "view_mode": "form",
+ "view_type": "form",
+ }
+
+ def send_guardia_civil_report(self):
+ pms_property = self.env["pms.property"].search(
+ [("id", "=", self.env.user.get_active_property_ids()[0])]
+ )
+ user = pms_property.police_user
+ password = pms_property.police_pass
+ if user and password:
+ data = [self.txt_binary]
+ requests.post(
+ 'https://usuario:password@hospederias.guardiacivil.es/hospederias/servlet/ControlRecepcionFichero',
+ auth=(user, password),
+ data=data
+ )
diff --git a/pms_l10n_es/wizards/traveller_report.xml b/pms_l10n_es/wizards/traveller_report.xml
new file mode 100644
index 000000000..5bf2313fd
--- /dev/null
+++ b/pms_l10n_es/wizards/traveller_report.xml
@@ -0,0 +1,48 @@
+
+
+
+ Traveller Report
+ traveller.report.wizard
+
+
+
+
+
+ Traveller Report
+ ir.actions.act_window
+ traveller.report.wizard
+
+ form
+ new
+
+
+