From 01d09c9c471a2d9b3ebb3d967e59f3edba8e5b80 Mon Sep 17 00:00:00 2001 From: miguelpadin Date: Fri, 11 Jun 2021 19:19:42 +0200 Subject: [PATCH 1/2] [IMP] pms_l10n_es: spanish police travellers report sending --- pms_l10n_es/__manifest__.py | 7 +- pms_l10n_es/models/__init__.py | 1 + .../pms_log_institution_traveller_report.py | 18 ++ pms_l10n_es/models/pms_property.py | 93 ++++-- pms_l10n_es/security/ir.model.access.csv | 1 + ...log_institution_traveller_report_views.xml | 55 ++++ pms_l10n_es/views/pms_property_views.xml | 2 +- pms_l10n_es/wizards/traveller_report.py | 264 ++++++++++++++++-- pms_l10n_es/wizards/traveller_report.xml | 6 +- 9 files changed, 394 insertions(+), 53 deletions(-) create mode 100644 pms_l10n_es/models/pms_log_institution_traveller_report.py create mode 100644 pms_l10n_es/views/pms_log_institution_traveller_report_views.xml diff --git a/pms_l10n_es/__manifest__.py b/pms_l10n_es/__manifest__.py index 1ff4d1fc9..089287797 100644 --- a/pms_l10n_es/__manifest__.py +++ b/pms_l10n_es/__manifest__.py @@ -24,13 +24,14 @@ ], }, "data": [ - "data/cron_jobs.xml", - "data/queue_data.xml", - "data/queue_job_function_data.xml", + # "data/cron_jobs.xml", + # "data/queue_data.xml", + # "data/queue_job_function_data.xml", "security/ir.model.access.csv", "views/pms_checkin_partner_views.xml", "views/pms_property_views.xml", "views/res_partner_views.xml", + "views/pms_log_institution_traveller_report_views.xml", "wizards/traveller_report.xml", ], "installable": True, diff --git a/pms_l10n_es/models/__init__.py b/pms_l10n_es/models/__init__.py index ebd8614e3..c23c7b1fd 100644 --- a/pms_l10n_es/models/__init__.py +++ b/pms_l10n_es/models/__init__.py @@ -1,3 +1,4 @@ from . import res_partner from . import pms_checkin_partner from . import pms_property +from . import pms_log_institution_traveller_report diff --git a/pms_l10n_es/models/pms_log_institution_traveller_report.py b/pms_l10n_es/models/pms_log_institution_traveller_report.py new file mode 100644 index 000000000..857edded6 --- /dev/null +++ b/pms_l10n_es/models/pms_log_institution_traveller_report.py @@ -0,0 +1,18 @@ +from odoo import fields, models + + +class PmsLogInstitutionTravellerReport(models.Model): + _name = "pms.log.institution.traveller.report" + _description = "Report of daily sending files of travellers to institutions." + + date = fields.Datetime( + string="Date and time", + default=fields.Datetime.now, + ) + txtIncidenciesFromInstitution = fields.Text( + string="Detailed message", + ) + fileIncidenciesFromInstitution = fields.Binary( + string="Detailed file", + ) + txt_filename = fields.Text() diff --git a/pms_l10n_es/models/pms_property.py b/pms_l10n_es/models/pms_property.py index 9a0fba218..e34f02843 100644 --- a/pms_l10n_es/models/pms_property.py +++ b/pms_l10n_es/models/pms_property.py @@ -14,7 +14,7 @@ class PmsProperty(models.Model): institution = fields.Selection( [ ("guardia_civil", "Guardia Civil"), - ("policia_nacional", "Policía Nacional (soon)"), + ("policia_nacional", "Policía Nacional"), ("ertxaintxa", "Ertxaintxa (soon)"), ("mossos", "Mossos_d'esquadra (soon)"), ], @@ -24,7 +24,6 @@ class PmsProperty(models.Model): ) institution_property_id = fields.Char( string="Institution property id", - size=10, help="Id provided by institution to send data from property.", ) institution_user = fields.Char( @@ -35,30 +34,27 @@ class PmsProperty(models.Model): help="Password provided by institution to send the data.", ) - def test_gc_connection(self): - for pms_property in self: + def test_connection(self): + headers = { + "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 " + "Build/MRA58N) AppleWebKit/537.36 (KHTML, like " + "Gecko) Chrome/90.0.4430.93 Mobile Safari/537.36", + } + for record in self: if ( - pms_property.institution == "guardia_civil" - and pms_property.institution_property_id - and pms_property.institution_user - and pms_property.institution_password + record.institution == "guardia_civil" + and record.institution_property_id + and record.institution_user + and record.institution_password ): - url = "https://hospederias.guardiacivil.es/" login_route = "/hospederias/login.do" logout_route = "/hospederias/logout.do" - - headers = { - "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 " - "Build/MRA58N) AppleWebKit/537.36 (KHTML, like " - "Gecko) Chrome/90.0.4430.93 Mobile Safari/537.36", - } session = requests.session() login_payload = { - "usuario": pms_property.institution_user, - "pswd": pms_property.institution_password, + "usuario": record.institution_user, + "pswd": record.institution_password, } - # login response_login = session.post( url + login_route, @@ -66,7 +62,7 @@ class PmsProperty(models.Model): data=login_payload, verify=get_module_resource("pms_l10n_es", "static", "cert.pem"), ) - time.sleep(1) + time.sleep(0.1) # logout session.get( url + logout_route, @@ -96,3 +92,62 @@ class PmsProperty(models.Model): return message else: raise ValidationError(_("Connection could not be established")) + elif ( + record.institution == "policia_nacional" + and record.institution_property_id + and record.institution_user + and record.institution_password + ): + url = "https://webpol.policia.es/e-hotel" + pre_login_route = "/login" + login_route = "/execute_login" + home_route = "/inicio" + logout_route = "/execute_logout" + session = requests.session() + response_pre_login = session.post( + url + pre_login_route, + headers=headers, + verify=False, + ) + soup = bs(response_pre_login.text, "html.parser") + token = soup.select("input[name='_csrf']")[0]["value"] + time.sleep(0.1) + login_payload = { + "username": record.institution_user, + "password": record.institution_password, + "_csrf": token, + } + session.post( + url + login_route, + headers=headers, + data=login_payload, + verify=False, + ) + time.sleep(0.1) + response_home = session.get( + url + home_route, + headers=headers, + verify=False, + ) + soup = bs(response_home.text, "html.parser") + login_correct = soup.select("#datosUsuarioBanner") + if login_correct: + session.post( + url + logout_route, + headers=headers, + verify=False, + data={"_csrf": token}, + ) + + message = { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Connection Established!"), + "message": _("Connection established succesfully"), + "sticky": False, + }, + } + return message + else: + raise ValidationError(_("Connection could not be established")) diff --git a/pms_l10n_es/security/ir.model.access.csv b/pms_l10n_es/security/ir.model.access.csv index d8d1060d6..36ef563cc 100644 --- a/pms_l10n_es/security/ir.model.access.csv +++ b/pms_l10n_es/security/ir.model.access.csv @@ -1,2 +1,3 @@ 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 diff --git a/pms_l10n_es/views/pms_log_institution_traveller_report_views.xml b/pms_l10n_es/views/pms_log_institution_traveller_report_views.xml new file mode 100644 index 000000000..152d1701a --- /dev/null +++ b/pms_l10n_es/views/pms_log_institution_traveller_report_views.xml @@ -0,0 +1,55 @@ + + + + pms.log.institution.traveller.report.form + pms.log.institution.traveller.report + +
+ + + + + + + + +
+
+
+ + pms.log.institution.traveller.report.tree + pms.log.institution.traveller.report + + + + + + + + + + + Log of sending files to institutions + pms.log.institution.traveller.report + tree,form + + +
diff --git a/pms_l10n_es/views/pms_property_views.xml b/pms_l10n_es/views/pms_property_views.xml index 53a3f0e34..117bc16e5 100644 --- a/pms_l10n_es/views/pms_property_views.xml +++ b/pms_l10n_es/views/pms_property_views.xml @@ -27,7 +27,7 @@