From 224efeddb245644a1444101ec161e28a7add7c82 Mon Sep 17 00:00:00 2001 From: miguelpadin Date: Thu, 29 Apr 2021 17:46:37 +0200 Subject: [PATCH 01/18] [IMP] pms-l10n-es: generate traveller report Co-authored-by: braisab --- pms_l10n_es/__init__.py | 1 + pms_l10n_es/__manifest__.py | 6 ++ pms_l10n_es/data/cron_jobs.xml | 21 +++++ pms_l10n_es/data/pms_sequence.xml | 12 +++ pms_l10n_es/models/__init__.py | 1 + pms_l10n_es/models/pms_checkin_partner.py | 25 ++++-- pms_l10n_es/models/pms_property.py | 18 ++++ pms_l10n_es/security/ir.model.access.csv | 2 + .../views/pms_checkin_partner_views.xml | 8 +- pms_l10n_es/views/pms_property_views.xml | 20 +++++ pms_l10n_es/wizards/__init__.py | 1 + pms_l10n_es/wizards/traveller_report.py | 86 +++++++++++++++++++ pms_l10n_es/wizards/traveller_report.xml | 48 +++++++++++ 13 files changed, 240 insertions(+), 9 deletions(-) create mode 100644 pms_l10n_es/data/cron_jobs.xml create mode 100644 pms_l10n_es/data/pms_sequence.xml create mode 100644 pms_l10n_es/models/pms_property.py create mode 100644 pms_l10n_es/security/ir.model.access.csv create mode 100644 pms_l10n_es/views/pms_property_views.xml create mode 100644 pms_l10n_es/wizards/__init__.py create mode 100644 pms_l10n_es/wizards/traveller_report.py create mode 100644 pms_l10n_es/wizards/traveller_report.xml 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 + + +
From f3d760b064e8aa6b77034f489930def46c6c6634 Mon Sep 17 00:00:00 2001 From: miguelpadin Date: Thu, 29 Apr 2021 17:56:35 +0200 Subject: [PATCH 02/18] [FIX] fix pre-commit --- pms_l10n_es/models/pms_property.py | 19 ++++++++++--------- pms_l10n_es/views/pms_property_views.xml | 8 ++++---- pms_l10n_es/wizards/traveller_report.py | 21 ++++++++++++++++----- 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/pms_l10n_es/models/pms_property.py b/pms_l10n_es/models/pms_property.py index 4901deaaa..6274af05b 100644 --- a/pms_l10n_es/models/pms_property.py +++ b/pms_l10n_es/models/pms_property.py @@ -1,18 +1,19 @@ -from odoo import _, fields, models +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") + [ + ("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/views/pms_property_views.xml b/pms_l10n_es/views/pms_property_views.xml index 52aeaf8c7..58bbda1dc 100644 --- a/pms_l10n_es/views/pms_property_views.xml +++ b/pms_l10n_es/views/pms_property_views.xml @@ -9,10 +9,10 @@ - - - - + + + + diff --git a/pms_l10n_es/wizards/traveller_report.py b/pms_l10n_es/wizards/traveller_report.py index 4a79a9cce..918a3660e 100644 --- a/pms_l10n_es/wizards/traveller_report.py +++ b/pms_l10n_es/wizards/traveller_report.py @@ -1,9 +1,11 @@ import base64 import datetime from datetime import date -from odoo import _, api, fields, models + import requests +from odoo import _, fields, models + class TravellerReport(models.TransientModel): _name = "traveller.report.wizard" @@ -29,7 +31,12 @@ class TravellerReport(models.TransientModel): [("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 = ( + "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)) @@ -52,7 +59,9 @@ class TravellerReport(models.TransientModel): # 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") + 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, @@ -72,6 +81,7 @@ class TravellerReport(models.TransientModel): } def send_guardia_civil_report(self): + # TODO: Review this pms_property = self.env["pms.property"].search( [("id", "=", self.env.user.get_active_property_ids()[0])] ) @@ -80,7 +90,8 @@ class TravellerReport(models.TransientModel): if user and password: data = [self.txt_binary] requests.post( - 'https://usuario:password@hospederias.guardiacivil.es/hospederias/servlet/ControlRecepcionFichero', + "https://usuario:password@hospederias.guardiacivil.es/" + "hospederias/servlet/ControlRecepcionFichero", auth=(user, password), - data=data + data=data, ) From ff3f2861dc521c2c92b7228324dcd758d90dead7 Mon Sep 17 00:00:00 2001 From: miguelpadin Date: Tue, 4 May 2021 09:19:33 +0200 Subject: [PATCH 03/18] [WIP] send file via GC api --- pms/controllers/pms_rest_controller.py | 98 +++++++++++++++++++++ pms_l10n_es/static/cert.pem | 105 +++++++++++++++++++++++ pms_l10n_es/wizards/traveller_report.py | 85 ++++++++++++++++-- pms_l10n_es/wizards/traveller_report.xml | 30 ++++--- 4 files changed, 299 insertions(+), 19 deletions(-) create mode 100644 pms/controllers/pms_rest_controller.py create mode 100644 pms_l10n_es/static/cert.pem diff --git a/pms/controllers/pms_rest_controller.py b/pms/controllers/pms_rest_controller.py new file mode 100644 index 000000000..ff76a294c --- /dev/null +++ b/pms/controllers/pms_rest_controller.py @@ -0,0 +1,98 @@ +import datetime + +from odoo import _, http +from odoo.http import request + +from odoo.tools.misc import formatLang, format_date, get_lang + + +class PmsReservationRestController(http.Controller): + @http.route( + "/reservations", + type="json", + website=True, + auth="public", + ) + def room_type_list(self): + payload = http.request.jsonrequest.get("params") + + return self._get_available_room_types(payload) + + def _get_available_room_types(self, payload): + room_types = [] + checkin = payload["checkin"] + checkin = datetime.datetime.strptime(checkin, get_lang(request.env).date_format).date() + + checkout = payload["checkout"] + checkout = datetime.datetime.strptime(checkout, get_lang(request.env).date_format).date() + + pms_property_id = int(payload["pms_property_id"]) + pricelist_id = int(payload["pricelist_id"]) + + reservation = False + if isinstance(payload["reservation_id"], int): + reservation_id = int(payload["reservation_id"]) + + reservation = ( + request.env["pms.reservation"] + .sudo() + .search([("id", "=", int(reservation_id))]) + ) + if not reservation: + reservation_line_ids = False + else: + reservation_line_ids = reservation.reservation_line_ids.ids + + rooms_avail = ( + request.env["pms.availability.plan"] + .sudo() + .rooms_available( + checkin=checkin, + checkout=checkout, + current_lines=reservation_line_ids, + pricelist_id=pricelist_id, + pms_property_id=pms_property_id, + ) + ) + + pms_room_types = request.env["pms.room.type"].sudo().search([]) + + for room_type in pms_room_types.filtered(lambda r: r.total_rooms_count > 0): + count = len( + rooms_avail.filtered(lambda r: r.room_type_id.id == room_type.id) + ) + room_types.append( + { + "id": room_type.id, + "name": room_type.name + " (" + str(count) + ")", + } + ) + + return room_types + + # + # @http.route( + # "/reservation/", + # type="http", + # auth="user", + # methods=["GET", "POST"], + # website=True, + # ) + # def reservation_detail(self, reservation_id, **post): + # reservation = request.env["pms.reservation"].browse([reservation_id]) + # if not reservation: + # raise MissingError(_("This document does not exist.")) + # values = { + # "page_name": "Reservation", + # "reservation": reservation, + # } + # if post and "message" in post: + # try: + # reservation.message_post( + # subject=_("PWA Message"), + # body=post["message"], + # message_type="comment", + # ) + # except Exception as e: + # _logger.critical(e) + # return http.request.render("pms_pwa.roomdoo_reservation_detail", values) diff --git a/pms_l10n_es/static/cert.pem b/pms_l10n_es/static/cert.pem new file mode 100644 index 000000000..e498d6da4 --- /dev/null +++ b/pms_l10n_es/static/cert.pem @@ -0,0 +1,105 @@ +-----BEGIN CERTIFICATE----- +MIIIwDCCB6igAwIBAgIQGBMhPyx6Rolez7EMhDFA1jANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQG +EwJFUzERMA8GA1UECgwIRk5NVC1SQ00xJTAjBgNVBAsMHEFDIENvbXBvbmVudGVzIEluZm9ybcOh +dGljb3MwHhcNMjAwNTI4MTIzOTQwWhcNMjIwNTI4MTIzOTM5WjCBmDELMAkGA1UEBhMCRVMxDzAN +BgNVBAcMBk1BRFJJRDEuMCwGA1UECgwlRElSRUNDSU9OIEdFTkVSQUwgREUgTEEgR1VBUkRJQSBD +SVZJTDESMBAGA1UEBRMJUzI4MTYwMDNEMRgwFgYDVQRhDA9WQVRFUy1TMjgxNjAwM0QxGjAYBgNV +BAMMESouZ3VhcmRpYWNpdmlsLmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApA++ +/lNaimrEGvflr1eNHDDLmEZF/FKIA9Bd9YJnieciGg+3ZJ9/Kd99eV1V9zIgfdSLLDucMeflp6s6 +8v563u4+zX7AgREB539rKAaCUwtqVcutZROL+NIjkoHHtMHgMlCbbQaKC32n8awaB0YRNGI+eLMJ +4u7X2iBR1OohEjGFa1xfDS2UHOeWsxW5eDPGhK3iaDSHmcy1jtIGVmas4YtcNFRf/8y2v2I2QqHY +2l7IbiDMAdSW2nPme/5HZXvIlkDdD4SG17xhIAe1uPEBKd0g6lt89OLCFetNwcRaqjFtA5DrpmiQ +0hqHQTk8AST6ibpRvAZCKvln+uXNWcDDywIDAQABo4IFVDCCBVAwDAYDVR0TAQH/BAIwADCBgQYI +KwYBBQUHAQEEdTBzMDsGCCsGAQUFBzABhi9odHRwOi8vb2NzcGNvbXAuY2VydC5mbm10LmVzL29j +c3AvT2NzcFJlc3BvbmRlcjA0BggrBgEFBQcwAoYoaHR0cDovL3d3dy5jZXJ0LmZubXQuZXMvY2Vy +dHMvQUNDT01QLmNydDCCASgGA1UdIASCAR8wggEbMIIBDQYKKwYBBAGsZgMJETCB/jApBggrBgEF +BQcCARYdaHR0cDovL3d3dy5jZXJ0LmZubXQuZXMvZHBjcy8wgdAGCCsGAQUFBwICMIHDDIHAQ2Vy +dGlmaWNhZG8gd2lsZGNhcmQgZGUgYXV0ZW50aWNhY2nDs24gZGUgc2l0aW8gd2ViIHNlZ8O6biBy +ZWdsYW1lbnRvIGV1cm9wZW8gZUlEQVMuIFN1amV0byBhIGNvbmRpY2lvbmVzIGRlIHVzbyBzZWfD +um4gRFBDIGRlIEZOTVQtUkNNLCBOSUY6IFEyODI2MDA0LUogKEMvSm9yZ2UgSnVhbiAxMDYtMjgw +MDktTWFkcmlkLUVzcGHDsWEpMAgGBgQAj3oBBzAcBgNVHREEFTATghEqLmd1YXJkaWFjaXZpbC5l +czATBgNVHSUEDDAKBggrBgEFBQcDATAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFEMrHDu3J/7S +OVend+G0LsfbflPRMIGmBggrBgEFBQcBAwSBmTCBljALBgYEAI5GAQMCAQ8wEwYGBACORgEGMAkG +BwQAjkYBBgMwcgYGBACORgEFMGgwMhYsaHR0cHM6Ly93d3cuY2VydC5mbm10LmVzL3Bkcy9QRFNf +Q09NUF9lcy5wZGYTAmVzMDIWLGh0dHBzOi8vd3d3LmNlcnQuZm5tdC5lcy9wZHMvUERTX0NPTVBf +ZW4ucGRmEwJlbjAfBgNVHSMEGDAWgBQZ+FgvFNamzJsEmAgNTNerAKeDZTCB4AYDVR0fBIHYMIHV +MIHSoIHPoIHMhoGebGRhcDovL2xkYXBjb21wLmNlcnQuZm5tdC5lcy9DTj1DUkwxLE9VPUFDJTIw +Q29tcG9uZW50ZXMlMjBJbmZvcm1hdGljb3MsTz1GTk1ULVJDTSxDPUVTP2NlcnRpZmljYXRlUmV2 +b2NhdGlvbkxpc3Q7YmluYXJ5P2Jhc2U/b2JqZWN0Y2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnSG +KWh0dHA6Ly93d3cuY2VydC5mbm10LmVzL2NybHNjb21wL0NSTDEuY3JsMIIBfwYKKwYBBAHWeQIE +AgSCAW8EggFrAWkAdwApeb7wnjk5IfBWc59jpXflvld9nGAK+PlNXSZcJV3HhAAAAXJbS5kkAAAE +AwBIMEYCIQDxUFJkb+yYGmvDckxbKLZvcycZmEvAX6g8GH3jqr7RjAIhAOshzUdC84VntNxq56Dx +160eCj65UVL9A64z7hnXnUKBAHYARqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+bUcAAAFy +W0ua9gAABAMARzBFAiEAj3S5/JDapowZIsHUOFXQuxxb26oIhOy/YfNLZI01pQMCIEN8b4AxHp9Z +mj8StFvP4/YLqvYgQbhgewCvFExlsRtVAHYAQcjKsd8iRkoQxqE6CUKHXk4xixsD6+tLx2jwkGKW +BvYAAAFyW0ucLAAABAMARzBFAiEAt+XKebp1KrEamXlKU2VkKt6lsRiylbNFTCTpGm5GAP8CIEUT +WXZee7o83zyXQ9nBy0t8TcRtI70vuheLQ909va6dMA0GCSqGSIb3DQEBCwUAA4IBAQBJAplPXRRv +b4nLZFqQvQjHlr0TSKTiC21vAzXe/1iiuPOPZF3AE1ZcOMEqiPWTN6GOR3UYksZE2Cfm0xqNOytr +bj/INmu5tX5U7yvGQxiB8EdHaTdQQknAi/IBEx0KJE+EAT+upOPYbne5km1lffN19WwQ2f3ybAbj +l5ZpWR6lSuV3JStUllHAS/0HjwBbqHhxJZ2BTG4Ca5SkHnbK/K1mfwLe2VGVYp7WWUzKkSQQ8Hs0 +RuY9EZ0sovRH7lL/EIf7uV/5d1V4kW1h7F38jEPDH4UVTHDMMaR9NV/4pES0zQnI6y5NJCiRP39k +GFyKTE/4x7pFeIFnXXIwswUWFA9h +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIG1jCCBL6gAwIBAgIQNMarBE42mRJRyCULbJTWwDANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQG +EwJFUzERMA8GA1UECgwIRk5NVC1SQ00xGTAXBgNVBAsMEEFDIFJBSVogRk5NVC1SQ00wHhcNMTMw +NjI0MTA1MjU5WhcNMjgwNjI0MTA1MjU5WjBHMQswCQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1S +Q00xJTAjBgNVBAsMHEFDIENvbXBvbmVudGVzIEluZm9ybcOhdGljb3MwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQCXVx8rdbF7/xY44CaSqzzGo5BhvzA8knxC/3KJYVzTf+CkOvMxMUDu +b8b0h38MDujm/RKZhBNOWbKhxF3U61ZVhcR9xOCciuS/soT80m3BByxAKcZsNka0jCA4XRkglDaA +FxCHEZ06MOnvXsSOZDfPYahbQ3VFCVycJuhlHdAwSpmceQwcRYkR6YgXwTiyzCNGivMKAmRS3dIt +qDOmDW/nxiDFq/Jd8VWY7GFkwbbAeqYId8FjN8zfvafunsB9SLFkUjPPMeqfmC7Bdh7HMxLpaOXR +OwH201cmlebiPkn0xSFxXFqwhhr6yN8UQYZ3O/+xdHLrS6DS9+CJUF6d09ijAgMBAAGjggLIMIIC +xDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUGfhYLxTWpsyb +BJgIDUzXqwCng2UwgZgGCCsGAQUFBwEBBIGLMIGIMEkGCCsGAQUFBzABhj1odHRwOi8vb2NzcGZu +bXRyY21jYS5jZXJ0LmZubXQuZXMvb2NzcGZubXRyY21jYS9PY3NwUmVzcG9uZGVyMDsGCCsGAQUF +BzAChi9odHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9jZXJ0cy9BQ1JBSVpGTk1UUkNNLmNydDAfBgNV +HSMEGDAWgBT3fcX9xOiaG3dkp/UdoMy/h2CabTCB6wYDVR0gBIHjMIHgMIHdBgRVHSAAMIHUMCkG +CCsGAQUFBwIBFh1odHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzCBpgYIKwYBBQUHAgIwgZkM +gZZTdWpldG8gYSBsYXMgY29uZGljaW9uZXMgZGUgdXNvIGV4cHVlc3RhcyBlbiBsYSBEZWNsYXJh +Y2nDs24gZGUgUHLDoWN0aWNhcyBkZSBDZXJ0aWZpY2FjacOzbiBkZSBsYSBGTk1ULVJDTSAoIEMv +IEpvcmdlIEp1YW4sIDEwNi0yODAwOS1NYWRyaWQtRXNwYcOxYSkwgdQGA1UdHwSBzDCByTCBxqCB +w6CBwIaBkGxkYXA6Ly9sZGFwZm5tdC5jZXJ0LmZubXQuZXMvQ049Q1JMLE9VPUFDJTIwUkFJWiUy +MEZOTVQtUkNNLE89Rk5NVC1SQ00sQz1FUz9hdXRob3JpdHlSZXZvY2F0aW9uTGlzdDtiaW5hcnk/ +YmFzZT9vYmplY3RjbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludIYraHR0cDovL3d3dy5jZXJ0LmZu +bXQuZXMvY3Jscy9BUkxGTk1UUkNNLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAo2bsQ2xLDcyodieq +jd+uy/lfxDw/MbrAq/ZaNFkIlcypUYamOM4vrm5rz8oLjPCoLkJ48P+nP08Gkcl5Q6q6VFcZLia+ +U3gfHXrkyqToQlrtViGCGH3xA4u56XtMHGXSdk9vQ0yDnW5f7bUEkp+uvcKewrOvNcpbIAgD4eU7 +gdOS0w7BagcFRBgTKBw2s3z73fRZtouJg/atmWYtXbBsfNjph+pCh+h5sbSyZUVzO5AemyjpYYYN +MWDQrTXq+7O8zIPuPaNESjEexuzn+VjHG90RlUK1LygARi+Ir0opD2w6erb/hK8Eea7MFdKQ2ASq +NBGJggNo5vfPVvjHiL+Antmh7mQSKL+4YwFU64d4KK9k0C1mbJethDQFKcjTK1vMvnXFiupsIuyT +qwKauo7u2zMKzY4r3VYOW9TpMyLPFIY8pII5GyNzXlL0F4nscOvduTEPEYqxeNJfpDDPY/DO8Wfx +gdRTy2W3D/UoAulb+Y+nuzGGCtFQrsSMQX487R+aY0nWot/hajef6BcPuxhDfQrg5IafrISVmcJA +plb3tXhh0sz7RbYz6jf1bke4eU5fnrTMtGlVteUL2vjrfUPHW07kBJuaQ7sxORNV3bpHisOnHj+A +riQzCn5vINpSHW6hTm7IfRkbltu/aQrsMuUhP7HE/v+uXe5CuboV5ubZhHU= +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT +AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw +MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD +TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf +qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr +btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL +j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou +08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw +WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT +tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ +47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC +ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa +i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o +dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s +D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ +j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT +Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW ++YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 +Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d +8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm +5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG +rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + diff --git a/pms_l10n_es/wizards/traveller_report.py b/pms_l10n_es/wizards/traveller_report.py index 918a3660e..0ab88579a 100644 --- a/pms_l10n_es/wizards/traveller_report.py +++ b/pms_l10n_es/wizards/traveller_report.py @@ -1,6 +1,7 @@ import base64 import datetime from datetime import date +from odoo.modules.module import get_module_resource import requests @@ -87,11 +88,79 @@ class TravellerReport(models.TransientModel): ) 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, - ) + headers = {'Content-Type': 'multipart/form-data;'} + + 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), + ] + ) + 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") + "|" + 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, + } + ) + # print(txt_binary.content) + + import io + f = io.StringIO( + content + ) + + # file_object = get_module_resource('pms_l10n_es', 'static', 'cert.pem') + session = requests.Session() + # a = requests.Request( + # 'POST', + # url="https://28000JAM22:ESB01642958@hospederias.guardiacivil.es/hospederias/servlet/ControlRecepcionFichero", + # # data=f, + # files={'file': ('28000JAM22.169', f, 'application/octet-stream')}, + # # verify=get_module_resource('pms_l10n_es', 'static', 'cert.pem'), + # # headers={'Content-Type': "multipart/form-data"} + # ) + # # pre = a.prepare() + # fff = 0 + # + a = session.post( + url="https://28000JAM22:ESB01642958@hospederias.guardiacivil.es/hospederias/servlet/ControlRecepcionFichero", + files={'file': ('28000JAM22.169', f, 'application/octet-stream')}, + verify=get_module_resource('pms_l10n_es', 'static', 'cert.pem'), + # headers={'Content-Type': "multipart/form-data"} + ) + print(a) diff --git a/pms_l10n_es/wizards/traveller_report.xml b/pms_l10n_es/wizards/traveller_report.xml index 5bf2313fd..ab47cd40c 100644 --- a/pms_l10n_es/wizards/traveller_report.xml +++ b/pms_l10n_es/wizards/traveller_report.xml @@ -8,22 +8,30 @@
-

+

+ +

From 908af528e657560b3aa0c7406dd2925529b6428d Mon Sep 17 00:00:00 2001 From: miguelpadin Date: Tue, 18 May 2021 13:47:25 +0200 Subject: [PATCH 04/18] [REF] refactor content chckin list --- pms/controllers/pms_rest_controller.py | 98 --------- pms_l10n_es/models/pms_property.py | 26 ++- pms_l10n_es/static/cert.pem | 209 ++++++++++--------- pms_l10n_es/views/pms_property_views.xml | 10 +- pms_l10n_es/wizards/traveller_report.py | 249 ++++++++++++----------- pms_l10n_es/wizards/traveller_report.xml | 30 +-- 6 files changed, 268 insertions(+), 354 deletions(-) delete mode 100644 pms/controllers/pms_rest_controller.py diff --git a/pms/controllers/pms_rest_controller.py b/pms/controllers/pms_rest_controller.py deleted file mode 100644 index ff76a294c..000000000 --- a/pms/controllers/pms_rest_controller.py +++ /dev/null @@ -1,98 +0,0 @@ -import datetime - -from odoo import _, http -from odoo.http import request - -from odoo.tools.misc import formatLang, format_date, get_lang - - -class PmsReservationRestController(http.Controller): - @http.route( - "/reservations", - type="json", - website=True, - auth="public", - ) - def room_type_list(self): - payload = http.request.jsonrequest.get("params") - - return self._get_available_room_types(payload) - - def _get_available_room_types(self, payload): - room_types = [] - checkin = payload["checkin"] - checkin = datetime.datetime.strptime(checkin, get_lang(request.env).date_format).date() - - checkout = payload["checkout"] - checkout = datetime.datetime.strptime(checkout, get_lang(request.env).date_format).date() - - pms_property_id = int(payload["pms_property_id"]) - pricelist_id = int(payload["pricelist_id"]) - - reservation = False - if isinstance(payload["reservation_id"], int): - reservation_id = int(payload["reservation_id"]) - - reservation = ( - request.env["pms.reservation"] - .sudo() - .search([("id", "=", int(reservation_id))]) - ) - if not reservation: - reservation_line_ids = False - else: - reservation_line_ids = reservation.reservation_line_ids.ids - - rooms_avail = ( - request.env["pms.availability.plan"] - .sudo() - .rooms_available( - checkin=checkin, - checkout=checkout, - current_lines=reservation_line_ids, - pricelist_id=pricelist_id, - pms_property_id=pms_property_id, - ) - ) - - pms_room_types = request.env["pms.room.type"].sudo().search([]) - - for room_type in pms_room_types.filtered(lambda r: r.total_rooms_count > 0): - count = len( - rooms_avail.filtered(lambda r: r.room_type_id.id == room_type.id) - ) - room_types.append( - { - "id": room_type.id, - "name": room_type.name + " (" + str(count) + ")", - } - ) - - return room_types - - # - # @http.route( - # "/reservation/", - # type="http", - # auth="user", - # methods=["GET", "POST"], - # website=True, - # ) - # def reservation_detail(self, reservation_id, **post): - # reservation = request.env["pms.reservation"].browse([reservation_id]) - # if not reservation: - # raise MissingError(_("This document does not exist.")) - # values = { - # "page_name": "Reservation", - # "reservation": reservation, - # } - # if post and "message" in post: - # try: - # reservation.message_post( - # subject=_("PWA Message"), - # body=post["message"], - # message_type="comment", - # ) - # except Exception as e: - # _logger.critical(e) - # return http.request.render("pms_pwa.roomdoo_reservation_detail", values) diff --git a/pms_l10n_es/models/pms_property.py b/pms_l10n_es/models/pms_property.py index 6274af05b..7e9753e76 100644 --- a/pms_l10n_es/models/pms_property.py +++ b/pms_l10n_es/models/pms_property.py @@ -4,16 +4,26 @@ from odoo import fields, models class PmsProperty(models.Model): _inherit = "pms.property" - police_type = fields.Selection( + institution = fields.Selection( [ ("guardia_civil", "Guardia Civil"), - ("policia_nacional", "Policía Nacional"), - ("ertxaintxa", "Ertxaintxa"), - ("mossos", "Mossos_d'esquadra"), + ("policia_nacional", "Policía Nacional (soon)"), + ("ertxaintxa", "Ertxaintxa (soon)"), + ("mossos", "Mossos_d'esquadra (soon)"), ], - string="Police Type", + string="Institution", default="guardia_civil", + help="Institution to send daily guest data.", + ) + 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( + string="Institution user", help="User provided by institution to send the data." + ) + institution_password = fields.Char( + string="Institution password", + help="Password provided by institution to send the data.", ) - 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/static/cert.pem b/pms_l10n_es/static/cert.pem index e498d6da4..7011ea9ea 100644 --- a/pms_l10n_es/static/cert.pem +++ b/pms_l10n_es/static/cert.pem @@ -1,105 +1,104 @@ ------BEGIN CERTIFICATE----- -MIIIwDCCB6igAwIBAgIQGBMhPyx6Rolez7EMhDFA1jANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQG -EwJFUzERMA8GA1UECgwIRk5NVC1SQ00xJTAjBgNVBAsMHEFDIENvbXBvbmVudGVzIEluZm9ybcOh -dGljb3MwHhcNMjAwNTI4MTIzOTQwWhcNMjIwNTI4MTIzOTM5WjCBmDELMAkGA1UEBhMCRVMxDzAN -BgNVBAcMBk1BRFJJRDEuMCwGA1UECgwlRElSRUNDSU9OIEdFTkVSQUwgREUgTEEgR1VBUkRJQSBD -SVZJTDESMBAGA1UEBRMJUzI4MTYwMDNEMRgwFgYDVQRhDA9WQVRFUy1TMjgxNjAwM0QxGjAYBgNV -BAMMESouZ3VhcmRpYWNpdmlsLmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApA++ -/lNaimrEGvflr1eNHDDLmEZF/FKIA9Bd9YJnieciGg+3ZJ9/Kd99eV1V9zIgfdSLLDucMeflp6s6 -8v563u4+zX7AgREB539rKAaCUwtqVcutZROL+NIjkoHHtMHgMlCbbQaKC32n8awaB0YRNGI+eLMJ -4u7X2iBR1OohEjGFa1xfDS2UHOeWsxW5eDPGhK3iaDSHmcy1jtIGVmas4YtcNFRf/8y2v2I2QqHY -2l7IbiDMAdSW2nPme/5HZXvIlkDdD4SG17xhIAe1uPEBKd0g6lt89OLCFetNwcRaqjFtA5DrpmiQ -0hqHQTk8AST6ibpRvAZCKvln+uXNWcDDywIDAQABo4IFVDCCBVAwDAYDVR0TAQH/BAIwADCBgQYI -KwYBBQUHAQEEdTBzMDsGCCsGAQUFBzABhi9odHRwOi8vb2NzcGNvbXAuY2VydC5mbm10LmVzL29j -c3AvT2NzcFJlc3BvbmRlcjA0BggrBgEFBQcwAoYoaHR0cDovL3d3dy5jZXJ0LmZubXQuZXMvY2Vy -dHMvQUNDT01QLmNydDCCASgGA1UdIASCAR8wggEbMIIBDQYKKwYBBAGsZgMJETCB/jApBggrBgEF -BQcCARYdaHR0cDovL3d3dy5jZXJ0LmZubXQuZXMvZHBjcy8wgdAGCCsGAQUFBwICMIHDDIHAQ2Vy -dGlmaWNhZG8gd2lsZGNhcmQgZGUgYXV0ZW50aWNhY2nDs24gZGUgc2l0aW8gd2ViIHNlZ8O6biBy -ZWdsYW1lbnRvIGV1cm9wZW8gZUlEQVMuIFN1amV0byBhIGNvbmRpY2lvbmVzIGRlIHVzbyBzZWfD -um4gRFBDIGRlIEZOTVQtUkNNLCBOSUY6IFEyODI2MDA0LUogKEMvSm9yZ2UgSnVhbiAxMDYtMjgw -MDktTWFkcmlkLUVzcGHDsWEpMAgGBgQAj3oBBzAcBgNVHREEFTATghEqLmd1YXJkaWFjaXZpbC5l -czATBgNVHSUEDDAKBggrBgEFBQcDATAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFEMrHDu3J/7S -OVend+G0LsfbflPRMIGmBggrBgEFBQcBAwSBmTCBljALBgYEAI5GAQMCAQ8wEwYGBACORgEGMAkG -BwQAjkYBBgMwcgYGBACORgEFMGgwMhYsaHR0cHM6Ly93d3cuY2VydC5mbm10LmVzL3Bkcy9QRFNf -Q09NUF9lcy5wZGYTAmVzMDIWLGh0dHBzOi8vd3d3LmNlcnQuZm5tdC5lcy9wZHMvUERTX0NPTVBf -ZW4ucGRmEwJlbjAfBgNVHSMEGDAWgBQZ+FgvFNamzJsEmAgNTNerAKeDZTCB4AYDVR0fBIHYMIHV -MIHSoIHPoIHMhoGebGRhcDovL2xkYXBjb21wLmNlcnQuZm5tdC5lcy9DTj1DUkwxLE9VPUFDJTIw -Q29tcG9uZW50ZXMlMjBJbmZvcm1hdGljb3MsTz1GTk1ULVJDTSxDPUVTP2NlcnRpZmljYXRlUmV2 -b2NhdGlvbkxpc3Q7YmluYXJ5P2Jhc2U/b2JqZWN0Y2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnSG -KWh0dHA6Ly93d3cuY2VydC5mbm10LmVzL2NybHNjb21wL0NSTDEuY3JsMIIBfwYKKwYBBAHWeQIE -AgSCAW8EggFrAWkAdwApeb7wnjk5IfBWc59jpXflvld9nGAK+PlNXSZcJV3HhAAAAXJbS5kkAAAE -AwBIMEYCIQDxUFJkb+yYGmvDckxbKLZvcycZmEvAX6g8GH3jqr7RjAIhAOshzUdC84VntNxq56Dx -160eCj65UVL9A64z7hnXnUKBAHYARqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+bUcAAAFy -W0ua9gAABAMARzBFAiEAj3S5/JDapowZIsHUOFXQuxxb26oIhOy/YfNLZI01pQMCIEN8b4AxHp9Z -mj8StFvP4/YLqvYgQbhgewCvFExlsRtVAHYAQcjKsd8iRkoQxqE6CUKHXk4xixsD6+tLx2jwkGKW -BvYAAAFyW0ucLAAABAMARzBFAiEAt+XKebp1KrEamXlKU2VkKt6lsRiylbNFTCTpGm5GAP8CIEUT -WXZee7o83zyXQ9nBy0t8TcRtI70vuheLQ909va6dMA0GCSqGSIb3DQEBCwUAA4IBAQBJAplPXRRv -b4nLZFqQvQjHlr0TSKTiC21vAzXe/1iiuPOPZF3AE1ZcOMEqiPWTN6GOR3UYksZE2Cfm0xqNOytr -bj/INmu5tX5U7yvGQxiB8EdHaTdQQknAi/IBEx0KJE+EAT+upOPYbne5km1lffN19WwQ2f3ybAbj -l5ZpWR6lSuV3JStUllHAS/0HjwBbqHhxJZ2BTG4Ca5SkHnbK/K1mfwLe2VGVYp7WWUzKkSQQ8Hs0 -RuY9EZ0sovRH7lL/EIf7uV/5d1V4kW1h7F38jEPDH4UVTHDMMaR9NV/4pES0zQnI6y5NJCiRP39k -GFyKTE/4x7pFeIFnXXIwswUWFA9h ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIG1jCCBL6gAwIBAgIQNMarBE42mRJRyCULbJTWwDANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQG -EwJFUzERMA8GA1UECgwIRk5NVC1SQ00xGTAXBgNVBAsMEEFDIFJBSVogRk5NVC1SQ00wHhcNMTMw -NjI0MTA1MjU5WhcNMjgwNjI0MTA1MjU5WjBHMQswCQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1S -Q00xJTAjBgNVBAsMHEFDIENvbXBvbmVudGVzIEluZm9ybcOhdGljb3MwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQCXVx8rdbF7/xY44CaSqzzGo5BhvzA8knxC/3KJYVzTf+CkOvMxMUDu -b8b0h38MDujm/RKZhBNOWbKhxF3U61ZVhcR9xOCciuS/soT80m3BByxAKcZsNka0jCA4XRkglDaA -FxCHEZ06MOnvXsSOZDfPYahbQ3VFCVycJuhlHdAwSpmceQwcRYkR6YgXwTiyzCNGivMKAmRS3dIt -qDOmDW/nxiDFq/Jd8VWY7GFkwbbAeqYId8FjN8zfvafunsB9SLFkUjPPMeqfmC7Bdh7HMxLpaOXR -OwH201cmlebiPkn0xSFxXFqwhhr6yN8UQYZ3O/+xdHLrS6DS9+CJUF6d09ijAgMBAAGjggLIMIIC -xDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUGfhYLxTWpsyb -BJgIDUzXqwCng2UwgZgGCCsGAQUFBwEBBIGLMIGIMEkGCCsGAQUFBzABhj1odHRwOi8vb2NzcGZu -bXRyY21jYS5jZXJ0LmZubXQuZXMvb2NzcGZubXRyY21jYS9PY3NwUmVzcG9uZGVyMDsGCCsGAQUF -BzAChi9odHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9jZXJ0cy9BQ1JBSVpGTk1UUkNNLmNydDAfBgNV -HSMEGDAWgBT3fcX9xOiaG3dkp/UdoMy/h2CabTCB6wYDVR0gBIHjMIHgMIHdBgRVHSAAMIHUMCkG -CCsGAQUFBwIBFh1odHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzCBpgYIKwYBBQUHAgIwgZkM -gZZTdWpldG8gYSBsYXMgY29uZGljaW9uZXMgZGUgdXNvIGV4cHVlc3RhcyBlbiBsYSBEZWNsYXJh -Y2nDs24gZGUgUHLDoWN0aWNhcyBkZSBDZXJ0aWZpY2FjacOzbiBkZSBsYSBGTk1ULVJDTSAoIEMv -IEpvcmdlIEp1YW4sIDEwNi0yODAwOS1NYWRyaWQtRXNwYcOxYSkwgdQGA1UdHwSBzDCByTCBxqCB -w6CBwIaBkGxkYXA6Ly9sZGFwZm5tdC5jZXJ0LmZubXQuZXMvQ049Q1JMLE9VPUFDJTIwUkFJWiUy -MEZOTVQtUkNNLE89Rk5NVC1SQ00sQz1FUz9hdXRob3JpdHlSZXZvY2F0aW9uTGlzdDtiaW5hcnk/ -YmFzZT9vYmplY3RjbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludIYraHR0cDovL3d3dy5jZXJ0LmZu -bXQuZXMvY3Jscy9BUkxGTk1UUkNNLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAo2bsQ2xLDcyodieq -jd+uy/lfxDw/MbrAq/ZaNFkIlcypUYamOM4vrm5rz8oLjPCoLkJ48P+nP08Gkcl5Q6q6VFcZLia+ -U3gfHXrkyqToQlrtViGCGH3xA4u56XtMHGXSdk9vQ0yDnW5f7bUEkp+uvcKewrOvNcpbIAgD4eU7 -gdOS0w7BagcFRBgTKBw2s3z73fRZtouJg/atmWYtXbBsfNjph+pCh+h5sbSyZUVzO5AemyjpYYYN -MWDQrTXq+7O8zIPuPaNESjEexuzn+VjHG90RlUK1LygARi+Ir0opD2w6erb/hK8Eea7MFdKQ2ASq -NBGJggNo5vfPVvjHiL+Antmh7mQSKL+4YwFU64d4KK9k0C1mbJethDQFKcjTK1vMvnXFiupsIuyT -qwKauo7u2zMKzY4r3VYOW9TpMyLPFIY8pII5GyNzXlL0F4nscOvduTEPEYqxeNJfpDDPY/DO8Wfx -gdRTy2W3D/UoAulb+Y+nuzGGCtFQrsSMQX487R+aY0nWot/hajef6BcPuxhDfQrg5IafrISVmcJA -plb3tXhh0sz7RbYz6jf1bke4eU5fnrTMtGlVteUL2vjrfUPHW07kBJuaQ7sxORNV3bpHisOnHj+A -riQzCn5vINpSHW6hTm7IfRkbltu/aQrsMuUhP7HE/v+uXe5CuboV5ubZhHU= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT -AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw -MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD -TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC -ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf -qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr -btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL -j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou -08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw -WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT -tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ -47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC -ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa -i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o -dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD -nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s -D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ -j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT -Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW -+YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 -Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d -8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm -5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG -rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= ------END CERTIFICATE----- - +-----BEGIN CERTIFICATE----- +MIIIwDCCB6igAwIBAgIQGBMhPyx6Rolez7EMhDFA1jANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQG +EwJFUzERMA8GA1UECgwIRk5NVC1SQ00xJTAjBgNVBAsMHEFDIENvbXBvbmVudGVzIEluZm9ybcOh +dGljb3MwHhcNMjAwNTI4MTIzOTQwWhcNMjIwNTI4MTIzOTM5WjCBmDELMAkGA1UEBhMCRVMxDzAN +BgNVBAcMBk1BRFJJRDEuMCwGA1UECgwlRElSRUNDSU9OIEdFTkVSQUwgREUgTEEgR1VBUkRJQSBD +SVZJTDESMBAGA1UEBRMJUzI4MTYwMDNEMRgwFgYDVQRhDA9WQVRFUy1TMjgxNjAwM0QxGjAYBgNV +BAMMESouZ3VhcmRpYWNpdmlsLmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApA++ +/lNaimrEGvflr1eNHDDLmEZF/FKIA9Bd9YJnieciGg+3ZJ9/Kd99eV1V9zIgfdSLLDucMeflp6s6 +8v563u4+zX7AgREB539rKAaCUwtqVcutZROL+NIjkoHHtMHgMlCbbQaKC32n8awaB0YRNGI+eLMJ +4u7X2iBR1OohEjGFa1xfDS2UHOeWsxW5eDPGhK3iaDSHmcy1jtIGVmas4YtcNFRf/8y2v2I2QqHY +2l7IbiDMAdSW2nPme/5HZXvIlkDdD4SG17xhIAe1uPEBKd0g6lt89OLCFetNwcRaqjFtA5DrpmiQ +0hqHQTk8AST6ibpRvAZCKvln+uXNWcDDywIDAQABo4IFVDCCBVAwDAYDVR0TAQH/BAIwADCBgQYI +KwYBBQUHAQEEdTBzMDsGCCsGAQUFBzABhi9odHRwOi8vb2NzcGNvbXAuY2VydC5mbm10LmVzL29j +c3AvT2NzcFJlc3BvbmRlcjA0BggrBgEFBQcwAoYoaHR0cDovL3d3dy5jZXJ0LmZubXQuZXMvY2Vy +dHMvQUNDT01QLmNydDCCASgGA1UdIASCAR8wggEbMIIBDQYKKwYBBAGsZgMJETCB/jApBggrBgEF +BQcCARYdaHR0cDovL3d3dy5jZXJ0LmZubXQuZXMvZHBjcy8wgdAGCCsGAQUFBwICMIHDDIHAQ2Vy +dGlmaWNhZG8gd2lsZGNhcmQgZGUgYXV0ZW50aWNhY2nDs24gZGUgc2l0aW8gd2ViIHNlZ8O6biBy +ZWdsYW1lbnRvIGV1cm9wZW8gZUlEQVMuIFN1amV0byBhIGNvbmRpY2lvbmVzIGRlIHVzbyBzZWfD +um4gRFBDIGRlIEZOTVQtUkNNLCBOSUY6IFEyODI2MDA0LUogKEMvSm9yZ2UgSnVhbiAxMDYtMjgw +MDktTWFkcmlkLUVzcGHDsWEpMAgGBgQAj3oBBzAcBgNVHREEFTATghEqLmd1YXJkaWFjaXZpbC5l +czATBgNVHSUEDDAKBggrBgEFBQcDATAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFEMrHDu3J/7S +OVend+G0LsfbflPRMIGmBggrBgEFBQcBAwSBmTCBljALBgYEAI5GAQMCAQ8wEwYGBACORgEGMAkG +BwQAjkYBBgMwcgYGBACORgEFMGgwMhYsaHR0cHM6Ly93d3cuY2VydC5mbm10LmVzL3Bkcy9QRFNf +Q09NUF9lcy5wZGYTAmVzMDIWLGh0dHBzOi8vd3d3LmNlcnQuZm5tdC5lcy9wZHMvUERTX0NPTVBf +ZW4ucGRmEwJlbjAfBgNVHSMEGDAWgBQZ+FgvFNamzJsEmAgNTNerAKeDZTCB4AYDVR0fBIHYMIHV +MIHSoIHPoIHMhoGebGRhcDovL2xkYXBjb21wLmNlcnQuZm5tdC5lcy9DTj1DUkwxLE9VPUFDJTIw +Q29tcG9uZW50ZXMlMjBJbmZvcm1hdGljb3MsTz1GTk1ULVJDTSxDPUVTP2NlcnRpZmljYXRlUmV2 +b2NhdGlvbkxpc3Q7YmluYXJ5P2Jhc2U/b2JqZWN0Y2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnSG +KWh0dHA6Ly93d3cuY2VydC5mbm10LmVzL2NybHNjb21wL0NSTDEuY3JsMIIBfwYKKwYBBAHWeQIE +AgSCAW8EggFrAWkAdwApeb7wnjk5IfBWc59jpXflvld9nGAK+PlNXSZcJV3HhAAAAXJbS5kkAAAE +AwBIMEYCIQDxUFJkb+yYGmvDckxbKLZvcycZmEvAX6g8GH3jqr7RjAIhAOshzUdC84VntNxq56Dx +160eCj65UVL9A64z7hnXnUKBAHYARqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+bUcAAAFy +W0ua9gAABAMARzBFAiEAj3S5/JDapowZIsHUOFXQuxxb26oIhOy/YfNLZI01pQMCIEN8b4AxHp9Z +mj8StFvP4/YLqvYgQbhgewCvFExlsRtVAHYAQcjKsd8iRkoQxqE6CUKHXk4xixsD6+tLx2jwkGKW +BvYAAAFyW0ucLAAABAMARzBFAiEAt+XKebp1KrEamXlKU2VkKt6lsRiylbNFTCTpGm5GAP8CIEUT +WXZee7o83zyXQ9nBy0t8TcRtI70vuheLQ909va6dMA0GCSqGSIb3DQEBCwUAA4IBAQBJAplPXRRv +b4nLZFqQvQjHlr0TSKTiC21vAzXe/1iiuPOPZF3AE1ZcOMEqiPWTN6GOR3UYksZE2Cfm0xqNOytr +bj/INmu5tX5U7yvGQxiB8EdHaTdQQknAi/IBEx0KJE+EAT+upOPYbne5km1lffN19WwQ2f3ybAbj +l5ZpWR6lSuV3JStUllHAS/0HjwBbqHhxJZ2BTG4Ca5SkHnbK/K1mfwLe2VGVYp7WWUzKkSQQ8Hs0 +RuY9EZ0sovRH7lL/EIf7uV/5d1V4kW1h7F38jEPDH4UVTHDMMaR9NV/4pES0zQnI6y5NJCiRP39k +GFyKTE/4x7pFeIFnXXIwswUWFA9h +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIG1jCCBL6gAwIBAgIQNMarBE42mRJRyCULbJTWwDANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQG +EwJFUzERMA8GA1UECgwIRk5NVC1SQ00xGTAXBgNVBAsMEEFDIFJBSVogRk5NVC1SQ00wHhcNMTMw +NjI0MTA1MjU5WhcNMjgwNjI0MTA1MjU5WjBHMQswCQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1S +Q00xJTAjBgNVBAsMHEFDIENvbXBvbmVudGVzIEluZm9ybcOhdGljb3MwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQCXVx8rdbF7/xY44CaSqzzGo5BhvzA8knxC/3KJYVzTf+CkOvMxMUDu +b8b0h38MDujm/RKZhBNOWbKhxF3U61ZVhcR9xOCciuS/soT80m3BByxAKcZsNka0jCA4XRkglDaA +FxCHEZ06MOnvXsSOZDfPYahbQ3VFCVycJuhlHdAwSpmceQwcRYkR6YgXwTiyzCNGivMKAmRS3dIt +qDOmDW/nxiDFq/Jd8VWY7GFkwbbAeqYId8FjN8zfvafunsB9SLFkUjPPMeqfmC7Bdh7HMxLpaOXR +OwH201cmlebiPkn0xSFxXFqwhhr6yN8UQYZ3O/+xdHLrS6DS9+CJUF6d09ijAgMBAAGjggLIMIIC +xDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUGfhYLxTWpsyb +BJgIDUzXqwCng2UwgZgGCCsGAQUFBwEBBIGLMIGIMEkGCCsGAQUFBzABhj1odHRwOi8vb2NzcGZu +bXRyY21jYS5jZXJ0LmZubXQuZXMvb2NzcGZubXRyY21jYS9PY3NwUmVzcG9uZGVyMDsGCCsGAQUF +BzAChi9odHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9jZXJ0cy9BQ1JBSVpGTk1UUkNNLmNydDAfBgNV +HSMEGDAWgBT3fcX9xOiaG3dkp/UdoMy/h2CabTCB6wYDVR0gBIHjMIHgMIHdBgRVHSAAMIHUMCkG +CCsGAQUFBwIBFh1odHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzCBpgYIKwYBBQUHAgIwgZkM +gZZTdWpldG8gYSBsYXMgY29uZGljaW9uZXMgZGUgdXNvIGV4cHVlc3RhcyBlbiBsYSBEZWNsYXJh +Y2nDs24gZGUgUHLDoWN0aWNhcyBkZSBDZXJ0aWZpY2FjacOzbiBkZSBsYSBGTk1ULVJDTSAoIEMv +IEpvcmdlIEp1YW4sIDEwNi0yODAwOS1NYWRyaWQtRXNwYcOxYSkwgdQGA1UdHwSBzDCByTCBxqCB +w6CBwIaBkGxkYXA6Ly9sZGFwZm5tdC5jZXJ0LmZubXQuZXMvQ049Q1JMLE9VPUFDJTIwUkFJWiUy +MEZOTVQtUkNNLE89Rk5NVC1SQ00sQz1FUz9hdXRob3JpdHlSZXZvY2F0aW9uTGlzdDtiaW5hcnk/ +YmFzZT9vYmplY3RjbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludIYraHR0cDovL3d3dy5jZXJ0LmZu +bXQuZXMvY3Jscy9BUkxGTk1UUkNNLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAo2bsQ2xLDcyodieq +jd+uy/lfxDw/MbrAq/ZaNFkIlcypUYamOM4vrm5rz8oLjPCoLkJ48P+nP08Gkcl5Q6q6VFcZLia+ +U3gfHXrkyqToQlrtViGCGH3xA4u56XtMHGXSdk9vQ0yDnW5f7bUEkp+uvcKewrOvNcpbIAgD4eU7 +gdOS0w7BagcFRBgTKBw2s3z73fRZtouJg/atmWYtXbBsfNjph+pCh+h5sbSyZUVzO5AemyjpYYYN +MWDQrTXq+7O8zIPuPaNESjEexuzn+VjHG90RlUK1LygARi+Ir0opD2w6erb/hK8Eea7MFdKQ2ASq +NBGJggNo5vfPVvjHiL+Antmh7mQSKL+4YwFU64d4KK9k0C1mbJethDQFKcjTK1vMvnXFiupsIuyT +qwKauo7u2zMKzY4r3VYOW9TpMyLPFIY8pII5GyNzXlL0F4nscOvduTEPEYqxeNJfpDDPY/DO8Wfx +gdRTy2W3D/UoAulb+Y+nuzGGCtFQrsSMQX487R+aY0nWot/hajef6BcPuxhDfQrg5IafrISVmcJA +plb3tXhh0sz7RbYz6jf1bke4eU5fnrTMtGlVteUL2vjrfUPHW07kBJuaQ7sxORNV3bpHisOnHj+A +riQzCn5vINpSHW6hTm7IfRkbltu/aQrsMuUhP7HE/v+uXe5CuboV5ubZhHU= +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT +AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw +MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD +TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf +qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr +btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL +j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou +08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw +WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT +tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ +47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC +ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa +i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o +dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s +D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ +j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT +Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW ++YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 +Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d +8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm +5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG +rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- diff --git a/pms_l10n_es/views/pms_property_views.xml b/pms_l10n_es/views/pms_property_views.xml index 58bbda1dc..ab0646f9f 100644 --- a/pms_l10n_es/views/pms_property_views.xml +++ b/pms_l10n_es/views/pms_property_views.xml @@ -8,11 +8,11 @@ - - - - - + + + + + diff --git a/pms_l10n_es/wizards/traveller_report.py b/pms_l10n_es/wizards/traveller_report.py index 0ab88579a..5ca84197e 100644 --- a/pms_l10n_es/wizards/traveller_report.py +++ b/pms_l10n_es/wizards/traveller_report.py @@ -1,11 +1,13 @@ import base64 import datetime +import io from datetime import date -from odoo.modules.module import get_module_resource import requests from odoo import _, fields, models +from odoo.exceptions import ValidationError +from odoo.modules.module import get_module_resource class TravellerReport(models.TransientModel): @@ -17,150 +19,151 @@ class TravellerReport(models.TransientModel): 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 + + # get the active property 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() + + # build content + content = self.generate_checkin_list(pms_property.id) + + # get next sequence + sequence_num = self.env["ir.sequence"].next_by_code("traveller.report.wizard") + + # file creation + txt_binary = self.env["traveller.report.wizard"].create( + { + "txt_filename": pms_property.institution_property_id + + "." + + 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 generate_checkin_list(self, property_id): + + # check if there's guests info pending to send + if ( + self.env["pms.checkin.partner"].search_count( + [ + ("state", "=", "onboard"), + ("arrival", ">=", str(date.today()) + " 0:00:00"), + ("arrival", "<=", str(date.today()) + " 23:59:59"), + ] ) - content += "|" - content += datetime.datetime.now().strftime("%Y%m%d|%H%M") - content += "|" + str(len(lines)) + == 0 + ): + raise ValidationError(_("There's no guests info to send")) + else: + + # get the active property + pms_property = self.env["pms.property"].search([("id", "=", property_id)]) + + # check if the GC configuration info is properly set + if not ( + pms_property.name + and pms_property.institution_property_id + and pms_property.institution_user + and pms_property.institution_password + ): + raise ValidationError( + _("Check the GC configuration to send the guests info") + ) + else: + # get checkin partners info to send + lines = self.env["pms.checkin.partner"].search( + [ + ("state", "=", "onboard"), + ("arrival", ">=", str(date.today()) + " 0:00:00"), + ("arrival", "<=", str(date.today()) + " 23:59:59"), + ] + ) + + # build the property info record + # 1 | property id | property name | date | nº of checkin partners + + content = ( + "1|" + + pms_property.institution_property_id.upper() + + "|" + + pms_property.name.upper() + + "|" + + datetime.datetime.now().strftime("%Y%m%d|%H%M") + + "|" + + str(len(lines)) + + "\n" + ) + + # build each checkin partner line's record + # 2|DNI nº|Doc.number|doc.type|exp.date|lastname|lastname2|name|... + # ...gender|birthdate|nation.|checkin + for line in lines: - if line.document_type == "D": - content += "\n2|" + line.document_number.upper() + "||" + content += "2" + # [P|N|..] + if line.document_type != "D": + content += "||" + line.document_number.upper() + "|" else: - content += "\n2||" + line.document_number.upper() + "|" + content += "|" + 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() + "|" + 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", - } + content += line.arrival.strftime("%Y%m%d") + "\n" - def send_guardia_civil_report(self): - # TODO: Review this + return content + + def send_file_gc(self): + # get the active property 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 - headers = {'Content-Type': 'multipart/form-data;'} - 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), - ] - ) - 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") + "|" - content += line.nationality_id.name.upper() + "|" - content += line.arrival.strftime("%Y%m%d") + "|" + # get next sequence to send + sequence_num = self.env["ir.sequence"].next_by_code("traveller.report.wizard") - 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, - } - ) - # print(txt_binary.content) + # generate content to send + f = io.StringIO(self.generate_checkin_list(pms_property.id)) - import io - f = io.StringIO( - content - ) - - # file_object = get_module_resource('pms_l10n_es', 'static', 'cert.pem') session = requests.Session() - # a = requests.Request( - # 'POST', - # url="https://28000JAM22:ESB01642958@hospederias.guardiacivil.es/hospederias/servlet/ControlRecepcionFichero", - # # data=f, - # files={'file': ('28000JAM22.169', f, 'application/octet-stream')}, - # # verify=get_module_resource('pms_l10n_es', 'static', 'cert.pem'), - # # headers={'Content-Type': "multipart/form-data"} - # ) - # # pre = a.prepare() - # fff = 0 - # - a = session.post( - url="https://28000JAM22:ESB01642958@hospederias.guardiacivil.es/hospederias/servlet/ControlRecepcionFichero", - files={'file': ('28000JAM22.169', f, 'application/octet-stream')}, - verify=get_module_resource('pms_l10n_es', 'static', 'cert.pem'), - # headers={'Content-Type': "multipart/form-data"} + + # send info to GC + response = session.post( + url="https://" + + pms_property.institution_user + + ":" + + pms_property.institution_password + + "@hospederias.guardiacivil.es/hospederias/servlet/" + "ControlRecepcionFichero", + files={ + "file": ( + pms_property.institution_user + "." + sequence_num, + f, + "application/octet-stream", + ) + }, + verify=get_module_resource("pms_l10n_es", "static", "cert.pem"), ) - print(a) + # if the response is not ok raise validation error + if response.content != b"CORRECTO\r\n": + raise ValidationError(response.content.decode()) diff --git a/pms_l10n_es/wizards/traveller_report.xml b/pms_l10n_es/wizards/traveller_report.xml index ab47cd40c..4f1def141 100644 --- a/pms_l10n_es/wizards/traveller_report.xml +++ b/pms_l10n_es/wizards/traveller_report.xml @@ -8,24 +8,24 @@
From ea0b66b15048a9dde0a5aa7916abc07e0d67ec95 Mon Sep 17 00:00:00 2001 From: Miguel Padin Date: Tue, 18 May 2021 15:34:10 +0200 Subject: [PATCH 05/18] Delete cert.pem --- pms_l10n_es/static/cert.pem | 104 ------------------------------------ 1 file changed, 104 deletions(-) delete mode 100644 pms_l10n_es/static/cert.pem diff --git a/pms_l10n_es/static/cert.pem b/pms_l10n_es/static/cert.pem deleted file mode 100644 index 7011ea9ea..000000000 --- a/pms_l10n_es/static/cert.pem +++ /dev/null @@ -1,104 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIIwDCCB6igAwIBAgIQGBMhPyx6Rolez7EMhDFA1jANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQG -EwJFUzERMA8GA1UECgwIRk5NVC1SQ00xJTAjBgNVBAsMHEFDIENvbXBvbmVudGVzIEluZm9ybcOh -dGljb3MwHhcNMjAwNTI4MTIzOTQwWhcNMjIwNTI4MTIzOTM5WjCBmDELMAkGA1UEBhMCRVMxDzAN -BgNVBAcMBk1BRFJJRDEuMCwGA1UECgwlRElSRUNDSU9OIEdFTkVSQUwgREUgTEEgR1VBUkRJQSBD -SVZJTDESMBAGA1UEBRMJUzI4MTYwMDNEMRgwFgYDVQRhDA9WQVRFUy1TMjgxNjAwM0QxGjAYBgNV -BAMMESouZ3VhcmRpYWNpdmlsLmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApA++ -/lNaimrEGvflr1eNHDDLmEZF/FKIA9Bd9YJnieciGg+3ZJ9/Kd99eV1V9zIgfdSLLDucMeflp6s6 -8v563u4+zX7AgREB539rKAaCUwtqVcutZROL+NIjkoHHtMHgMlCbbQaKC32n8awaB0YRNGI+eLMJ -4u7X2iBR1OohEjGFa1xfDS2UHOeWsxW5eDPGhK3iaDSHmcy1jtIGVmas4YtcNFRf/8y2v2I2QqHY -2l7IbiDMAdSW2nPme/5HZXvIlkDdD4SG17xhIAe1uPEBKd0g6lt89OLCFetNwcRaqjFtA5DrpmiQ -0hqHQTk8AST6ibpRvAZCKvln+uXNWcDDywIDAQABo4IFVDCCBVAwDAYDVR0TAQH/BAIwADCBgQYI -KwYBBQUHAQEEdTBzMDsGCCsGAQUFBzABhi9odHRwOi8vb2NzcGNvbXAuY2VydC5mbm10LmVzL29j -c3AvT2NzcFJlc3BvbmRlcjA0BggrBgEFBQcwAoYoaHR0cDovL3d3dy5jZXJ0LmZubXQuZXMvY2Vy -dHMvQUNDT01QLmNydDCCASgGA1UdIASCAR8wggEbMIIBDQYKKwYBBAGsZgMJETCB/jApBggrBgEF -BQcCARYdaHR0cDovL3d3dy5jZXJ0LmZubXQuZXMvZHBjcy8wgdAGCCsGAQUFBwICMIHDDIHAQ2Vy -dGlmaWNhZG8gd2lsZGNhcmQgZGUgYXV0ZW50aWNhY2nDs24gZGUgc2l0aW8gd2ViIHNlZ8O6biBy -ZWdsYW1lbnRvIGV1cm9wZW8gZUlEQVMuIFN1amV0byBhIGNvbmRpY2lvbmVzIGRlIHVzbyBzZWfD -um4gRFBDIGRlIEZOTVQtUkNNLCBOSUY6IFEyODI2MDA0LUogKEMvSm9yZ2UgSnVhbiAxMDYtMjgw -MDktTWFkcmlkLUVzcGHDsWEpMAgGBgQAj3oBBzAcBgNVHREEFTATghEqLmd1YXJkaWFjaXZpbC5l -czATBgNVHSUEDDAKBggrBgEFBQcDATAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFEMrHDu3J/7S -OVend+G0LsfbflPRMIGmBggrBgEFBQcBAwSBmTCBljALBgYEAI5GAQMCAQ8wEwYGBACORgEGMAkG -BwQAjkYBBgMwcgYGBACORgEFMGgwMhYsaHR0cHM6Ly93d3cuY2VydC5mbm10LmVzL3Bkcy9QRFNf -Q09NUF9lcy5wZGYTAmVzMDIWLGh0dHBzOi8vd3d3LmNlcnQuZm5tdC5lcy9wZHMvUERTX0NPTVBf -ZW4ucGRmEwJlbjAfBgNVHSMEGDAWgBQZ+FgvFNamzJsEmAgNTNerAKeDZTCB4AYDVR0fBIHYMIHV -MIHSoIHPoIHMhoGebGRhcDovL2xkYXBjb21wLmNlcnQuZm5tdC5lcy9DTj1DUkwxLE9VPUFDJTIw -Q29tcG9uZW50ZXMlMjBJbmZvcm1hdGljb3MsTz1GTk1ULVJDTSxDPUVTP2NlcnRpZmljYXRlUmV2 -b2NhdGlvbkxpc3Q7YmluYXJ5P2Jhc2U/b2JqZWN0Y2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnSG -KWh0dHA6Ly93d3cuY2VydC5mbm10LmVzL2NybHNjb21wL0NSTDEuY3JsMIIBfwYKKwYBBAHWeQIE -AgSCAW8EggFrAWkAdwApeb7wnjk5IfBWc59jpXflvld9nGAK+PlNXSZcJV3HhAAAAXJbS5kkAAAE -AwBIMEYCIQDxUFJkb+yYGmvDckxbKLZvcycZmEvAX6g8GH3jqr7RjAIhAOshzUdC84VntNxq56Dx -160eCj65UVL9A64z7hnXnUKBAHYARqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+bUcAAAFy -W0ua9gAABAMARzBFAiEAj3S5/JDapowZIsHUOFXQuxxb26oIhOy/YfNLZI01pQMCIEN8b4AxHp9Z -mj8StFvP4/YLqvYgQbhgewCvFExlsRtVAHYAQcjKsd8iRkoQxqE6CUKHXk4xixsD6+tLx2jwkGKW -BvYAAAFyW0ucLAAABAMARzBFAiEAt+XKebp1KrEamXlKU2VkKt6lsRiylbNFTCTpGm5GAP8CIEUT -WXZee7o83zyXQ9nBy0t8TcRtI70vuheLQ909va6dMA0GCSqGSIb3DQEBCwUAA4IBAQBJAplPXRRv -b4nLZFqQvQjHlr0TSKTiC21vAzXe/1iiuPOPZF3AE1ZcOMEqiPWTN6GOR3UYksZE2Cfm0xqNOytr -bj/INmu5tX5U7yvGQxiB8EdHaTdQQknAi/IBEx0KJE+EAT+upOPYbne5km1lffN19WwQ2f3ybAbj -l5ZpWR6lSuV3JStUllHAS/0HjwBbqHhxJZ2BTG4Ca5SkHnbK/K1mfwLe2VGVYp7WWUzKkSQQ8Hs0 -RuY9EZ0sovRH7lL/EIf7uV/5d1V4kW1h7F38jEPDH4UVTHDMMaR9NV/4pES0zQnI6y5NJCiRP39k -GFyKTE/4x7pFeIFnXXIwswUWFA9h ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIG1jCCBL6gAwIBAgIQNMarBE42mRJRyCULbJTWwDANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQG -EwJFUzERMA8GA1UECgwIRk5NVC1SQ00xGTAXBgNVBAsMEEFDIFJBSVogRk5NVC1SQ00wHhcNMTMw -NjI0MTA1MjU5WhcNMjgwNjI0MTA1MjU5WjBHMQswCQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1S -Q00xJTAjBgNVBAsMHEFDIENvbXBvbmVudGVzIEluZm9ybcOhdGljb3MwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQCXVx8rdbF7/xY44CaSqzzGo5BhvzA8knxC/3KJYVzTf+CkOvMxMUDu -b8b0h38MDujm/RKZhBNOWbKhxF3U61ZVhcR9xOCciuS/soT80m3BByxAKcZsNka0jCA4XRkglDaA -FxCHEZ06MOnvXsSOZDfPYahbQ3VFCVycJuhlHdAwSpmceQwcRYkR6YgXwTiyzCNGivMKAmRS3dIt -qDOmDW/nxiDFq/Jd8VWY7GFkwbbAeqYId8FjN8zfvafunsB9SLFkUjPPMeqfmC7Bdh7HMxLpaOXR -OwH201cmlebiPkn0xSFxXFqwhhr6yN8UQYZ3O/+xdHLrS6DS9+CJUF6d09ijAgMBAAGjggLIMIIC -xDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUGfhYLxTWpsyb -BJgIDUzXqwCng2UwgZgGCCsGAQUFBwEBBIGLMIGIMEkGCCsGAQUFBzABhj1odHRwOi8vb2NzcGZu -bXRyY21jYS5jZXJ0LmZubXQuZXMvb2NzcGZubXRyY21jYS9PY3NwUmVzcG9uZGVyMDsGCCsGAQUF -BzAChi9odHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9jZXJ0cy9BQ1JBSVpGTk1UUkNNLmNydDAfBgNV -HSMEGDAWgBT3fcX9xOiaG3dkp/UdoMy/h2CabTCB6wYDVR0gBIHjMIHgMIHdBgRVHSAAMIHUMCkG -CCsGAQUFBwIBFh1odHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzCBpgYIKwYBBQUHAgIwgZkM -gZZTdWpldG8gYSBsYXMgY29uZGljaW9uZXMgZGUgdXNvIGV4cHVlc3RhcyBlbiBsYSBEZWNsYXJh -Y2nDs24gZGUgUHLDoWN0aWNhcyBkZSBDZXJ0aWZpY2FjacOzbiBkZSBsYSBGTk1ULVJDTSAoIEMv -IEpvcmdlIEp1YW4sIDEwNi0yODAwOS1NYWRyaWQtRXNwYcOxYSkwgdQGA1UdHwSBzDCByTCBxqCB -w6CBwIaBkGxkYXA6Ly9sZGFwZm5tdC5jZXJ0LmZubXQuZXMvQ049Q1JMLE9VPUFDJTIwUkFJWiUy -MEZOTVQtUkNNLE89Rk5NVC1SQ00sQz1FUz9hdXRob3JpdHlSZXZvY2F0aW9uTGlzdDtiaW5hcnk/ -YmFzZT9vYmplY3RjbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludIYraHR0cDovL3d3dy5jZXJ0LmZu -bXQuZXMvY3Jscy9BUkxGTk1UUkNNLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAo2bsQ2xLDcyodieq -jd+uy/lfxDw/MbrAq/ZaNFkIlcypUYamOM4vrm5rz8oLjPCoLkJ48P+nP08Gkcl5Q6q6VFcZLia+ -U3gfHXrkyqToQlrtViGCGH3xA4u56XtMHGXSdk9vQ0yDnW5f7bUEkp+uvcKewrOvNcpbIAgD4eU7 -gdOS0w7BagcFRBgTKBw2s3z73fRZtouJg/atmWYtXbBsfNjph+pCh+h5sbSyZUVzO5AemyjpYYYN -MWDQrTXq+7O8zIPuPaNESjEexuzn+VjHG90RlUK1LygARi+Ir0opD2w6erb/hK8Eea7MFdKQ2ASq -NBGJggNo5vfPVvjHiL+Antmh7mQSKL+4YwFU64d4KK9k0C1mbJethDQFKcjTK1vMvnXFiupsIuyT -qwKauo7u2zMKzY4r3VYOW9TpMyLPFIY8pII5GyNzXlL0F4nscOvduTEPEYqxeNJfpDDPY/DO8Wfx -gdRTy2W3D/UoAulb+Y+nuzGGCtFQrsSMQX487R+aY0nWot/hajef6BcPuxhDfQrg5IafrISVmcJA -plb3tXhh0sz7RbYz6jf1bke4eU5fnrTMtGlVteUL2vjrfUPHW07kBJuaQ7sxORNV3bpHisOnHj+A -riQzCn5vINpSHW6hTm7IfRkbltu/aQrsMuUhP7HE/v+uXe5CuboV5ubZhHU= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT -AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw -MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD -TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC -ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf -qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr -btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL -j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou -08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw -WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT -tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ -47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC -ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa -i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o -dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD -nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s -D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ -j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT -Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW -+YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 -Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d -8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm -5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG -rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= ------END CERTIFICATE----- From f5c2320f25f2d07fefa77300a2c7f5f1bd618613 Mon Sep 17 00:00:00 2001 From: miguelpadin Date: Tue, 18 May 2021 16:42:55 +0200 Subject: [PATCH 06/18] [FIX] pms: 2nd last name not mandatory & fix doc != dni --- pms_l10n_es/data/cron_jobs.xml | 2 +- pms_l10n_es/models/pms_checkin_partner.py | 1 - pms_l10n_es/wizards/traveller_report.py | 16 ++++++++++------ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/pms_l10n_es/data/cron_jobs.xml b/pms_l10n_es/data/cron_jobs.xml index 76f00dc0a..de0a06134 100644 --- a/pms_l10n_es/data/cron_jobs.xml +++ b/pms_l10n_es/data/cron_jobs.xml @@ -15,7 +15,7 @@ name="nextcall" eval="datetime.now(pytz.timezone('UTC')).strftime('%Y-%m-%d 03:00:00')" /> - model.generate_file() + model.send_file_gc() diff --git a/pms_l10n_es/models/pms_checkin_partner.py b/pms_l10n_es/models/pms_checkin_partner.py index 1cc4c9a31..1daf65134 100644 --- a/pms_l10n_es/models/pms_checkin_partner.py +++ b/pms_l10n_es/models/pms_checkin_partner.py @@ -133,7 +133,6 @@ class PmsCheckinPartner(models.Model): ) mandatory_fields.extend( [ - "lastname2", "birthdate_date", "document_number", "document_type", diff --git a/pms_l10n_es/wizards/traveller_report.py b/pms_l10n_es/wizards/traveller_report.py index 5ca84197e..49c767082 100644 --- a/pms_l10n_es/wizards/traveller_report.py +++ b/pms_l10n_es/wizards/traveller_report.py @@ -121,8 +121,8 @@ class TravellerReport(models.TransientModel): content += line.document_expedition_date.strftime("%Y%m%d") + "|" content += line.lastname.upper() + "|" if line.lastname2: - content += line.lastname2.upper() + "|" - content += line.firstname.upper() + "|" + content += line.lastname2.upper() + content += "|" + line.firstname.upper() + "|" if line.gender == "female": content += "F|" else: @@ -148,7 +148,8 @@ class TravellerReport(models.TransientModel): session = requests.Session() # send info to GC - response = session.post( + # response = \ + session.post( url="https://" + pms_property.institution_user + ":" @@ -162,8 +163,11 @@ class TravellerReport(models.TransientModel): "application/octet-stream", ) }, + # TODO: review verify=False if cert.pen is not present verify=get_module_resource("pms_l10n_es", "static", "cert.pem"), ) - # if the response is not ok raise validation error - if response.content != b"CORRECTO\r\n": - raise ValidationError(response.content.decode()) + + # TODO: review if the response is not ok raise validation error + # print(response.content) + # if response.content != b'CORRECTO\r\n': + # raise ValidationError(response.content.decode()) From 57600c4c872a2a5377d495064854972143c3ed59 Mon Sep 17 00:00:00 2001 From: miguelpadin Date: Wed, 19 May 2021 13:24:46 +0200 Subject: [PATCH 07/18] [ADD] pms: add cert.pem --- pms_l10n_es/static/cert.pem | 105 ++++++++++++++++++++++++ pms_l10n_es/wizards/traveller_report.py | 4 +- 2 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 pms_l10n_es/static/cert.pem diff --git a/pms_l10n_es/static/cert.pem b/pms_l10n_es/static/cert.pem new file mode 100644 index 000000000..e498d6da4 --- /dev/null +++ b/pms_l10n_es/static/cert.pem @@ -0,0 +1,105 @@ +-----BEGIN CERTIFICATE----- +MIIIwDCCB6igAwIBAgIQGBMhPyx6Rolez7EMhDFA1jANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQG +EwJFUzERMA8GA1UECgwIRk5NVC1SQ00xJTAjBgNVBAsMHEFDIENvbXBvbmVudGVzIEluZm9ybcOh +dGljb3MwHhcNMjAwNTI4MTIzOTQwWhcNMjIwNTI4MTIzOTM5WjCBmDELMAkGA1UEBhMCRVMxDzAN +BgNVBAcMBk1BRFJJRDEuMCwGA1UECgwlRElSRUNDSU9OIEdFTkVSQUwgREUgTEEgR1VBUkRJQSBD +SVZJTDESMBAGA1UEBRMJUzI4MTYwMDNEMRgwFgYDVQRhDA9WQVRFUy1TMjgxNjAwM0QxGjAYBgNV +BAMMESouZ3VhcmRpYWNpdmlsLmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApA++ +/lNaimrEGvflr1eNHDDLmEZF/FKIA9Bd9YJnieciGg+3ZJ9/Kd99eV1V9zIgfdSLLDucMeflp6s6 +8v563u4+zX7AgREB539rKAaCUwtqVcutZROL+NIjkoHHtMHgMlCbbQaKC32n8awaB0YRNGI+eLMJ +4u7X2iBR1OohEjGFa1xfDS2UHOeWsxW5eDPGhK3iaDSHmcy1jtIGVmas4YtcNFRf/8y2v2I2QqHY +2l7IbiDMAdSW2nPme/5HZXvIlkDdD4SG17xhIAe1uPEBKd0g6lt89OLCFetNwcRaqjFtA5DrpmiQ +0hqHQTk8AST6ibpRvAZCKvln+uXNWcDDywIDAQABo4IFVDCCBVAwDAYDVR0TAQH/BAIwADCBgQYI +KwYBBQUHAQEEdTBzMDsGCCsGAQUFBzABhi9odHRwOi8vb2NzcGNvbXAuY2VydC5mbm10LmVzL29j +c3AvT2NzcFJlc3BvbmRlcjA0BggrBgEFBQcwAoYoaHR0cDovL3d3dy5jZXJ0LmZubXQuZXMvY2Vy +dHMvQUNDT01QLmNydDCCASgGA1UdIASCAR8wggEbMIIBDQYKKwYBBAGsZgMJETCB/jApBggrBgEF +BQcCARYdaHR0cDovL3d3dy5jZXJ0LmZubXQuZXMvZHBjcy8wgdAGCCsGAQUFBwICMIHDDIHAQ2Vy +dGlmaWNhZG8gd2lsZGNhcmQgZGUgYXV0ZW50aWNhY2nDs24gZGUgc2l0aW8gd2ViIHNlZ8O6biBy +ZWdsYW1lbnRvIGV1cm9wZW8gZUlEQVMuIFN1amV0byBhIGNvbmRpY2lvbmVzIGRlIHVzbyBzZWfD +um4gRFBDIGRlIEZOTVQtUkNNLCBOSUY6IFEyODI2MDA0LUogKEMvSm9yZ2UgSnVhbiAxMDYtMjgw +MDktTWFkcmlkLUVzcGHDsWEpMAgGBgQAj3oBBzAcBgNVHREEFTATghEqLmd1YXJkaWFjaXZpbC5l +czATBgNVHSUEDDAKBggrBgEFBQcDATAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFEMrHDu3J/7S +OVend+G0LsfbflPRMIGmBggrBgEFBQcBAwSBmTCBljALBgYEAI5GAQMCAQ8wEwYGBACORgEGMAkG +BwQAjkYBBgMwcgYGBACORgEFMGgwMhYsaHR0cHM6Ly93d3cuY2VydC5mbm10LmVzL3Bkcy9QRFNf +Q09NUF9lcy5wZGYTAmVzMDIWLGh0dHBzOi8vd3d3LmNlcnQuZm5tdC5lcy9wZHMvUERTX0NPTVBf +ZW4ucGRmEwJlbjAfBgNVHSMEGDAWgBQZ+FgvFNamzJsEmAgNTNerAKeDZTCB4AYDVR0fBIHYMIHV +MIHSoIHPoIHMhoGebGRhcDovL2xkYXBjb21wLmNlcnQuZm5tdC5lcy9DTj1DUkwxLE9VPUFDJTIw +Q29tcG9uZW50ZXMlMjBJbmZvcm1hdGljb3MsTz1GTk1ULVJDTSxDPUVTP2NlcnRpZmljYXRlUmV2 +b2NhdGlvbkxpc3Q7YmluYXJ5P2Jhc2U/b2JqZWN0Y2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnSG +KWh0dHA6Ly93d3cuY2VydC5mbm10LmVzL2NybHNjb21wL0NSTDEuY3JsMIIBfwYKKwYBBAHWeQIE +AgSCAW8EggFrAWkAdwApeb7wnjk5IfBWc59jpXflvld9nGAK+PlNXSZcJV3HhAAAAXJbS5kkAAAE +AwBIMEYCIQDxUFJkb+yYGmvDckxbKLZvcycZmEvAX6g8GH3jqr7RjAIhAOshzUdC84VntNxq56Dx +160eCj65UVL9A64z7hnXnUKBAHYARqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+bUcAAAFy +W0ua9gAABAMARzBFAiEAj3S5/JDapowZIsHUOFXQuxxb26oIhOy/YfNLZI01pQMCIEN8b4AxHp9Z +mj8StFvP4/YLqvYgQbhgewCvFExlsRtVAHYAQcjKsd8iRkoQxqE6CUKHXk4xixsD6+tLx2jwkGKW +BvYAAAFyW0ucLAAABAMARzBFAiEAt+XKebp1KrEamXlKU2VkKt6lsRiylbNFTCTpGm5GAP8CIEUT +WXZee7o83zyXQ9nBy0t8TcRtI70vuheLQ909va6dMA0GCSqGSIb3DQEBCwUAA4IBAQBJAplPXRRv +b4nLZFqQvQjHlr0TSKTiC21vAzXe/1iiuPOPZF3AE1ZcOMEqiPWTN6GOR3UYksZE2Cfm0xqNOytr +bj/INmu5tX5U7yvGQxiB8EdHaTdQQknAi/IBEx0KJE+EAT+upOPYbne5km1lffN19WwQ2f3ybAbj +l5ZpWR6lSuV3JStUllHAS/0HjwBbqHhxJZ2BTG4Ca5SkHnbK/K1mfwLe2VGVYp7WWUzKkSQQ8Hs0 +RuY9EZ0sovRH7lL/EIf7uV/5d1V4kW1h7F38jEPDH4UVTHDMMaR9NV/4pES0zQnI6y5NJCiRP39k +GFyKTE/4x7pFeIFnXXIwswUWFA9h +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIG1jCCBL6gAwIBAgIQNMarBE42mRJRyCULbJTWwDANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQG +EwJFUzERMA8GA1UECgwIRk5NVC1SQ00xGTAXBgNVBAsMEEFDIFJBSVogRk5NVC1SQ00wHhcNMTMw +NjI0MTA1MjU5WhcNMjgwNjI0MTA1MjU5WjBHMQswCQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1S +Q00xJTAjBgNVBAsMHEFDIENvbXBvbmVudGVzIEluZm9ybcOhdGljb3MwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQCXVx8rdbF7/xY44CaSqzzGo5BhvzA8knxC/3KJYVzTf+CkOvMxMUDu +b8b0h38MDujm/RKZhBNOWbKhxF3U61ZVhcR9xOCciuS/soT80m3BByxAKcZsNka0jCA4XRkglDaA +FxCHEZ06MOnvXsSOZDfPYahbQ3VFCVycJuhlHdAwSpmceQwcRYkR6YgXwTiyzCNGivMKAmRS3dIt +qDOmDW/nxiDFq/Jd8VWY7GFkwbbAeqYId8FjN8zfvafunsB9SLFkUjPPMeqfmC7Bdh7HMxLpaOXR +OwH201cmlebiPkn0xSFxXFqwhhr6yN8UQYZ3O/+xdHLrS6DS9+CJUF6d09ijAgMBAAGjggLIMIIC +xDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUGfhYLxTWpsyb +BJgIDUzXqwCng2UwgZgGCCsGAQUFBwEBBIGLMIGIMEkGCCsGAQUFBzABhj1odHRwOi8vb2NzcGZu +bXRyY21jYS5jZXJ0LmZubXQuZXMvb2NzcGZubXRyY21jYS9PY3NwUmVzcG9uZGVyMDsGCCsGAQUF +BzAChi9odHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9jZXJ0cy9BQ1JBSVpGTk1UUkNNLmNydDAfBgNV +HSMEGDAWgBT3fcX9xOiaG3dkp/UdoMy/h2CabTCB6wYDVR0gBIHjMIHgMIHdBgRVHSAAMIHUMCkG +CCsGAQUFBwIBFh1odHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzCBpgYIKwYBBQUHAgIwgZkM +gZZTdWpldG8gYSBsYXMgY29uZGljaW9uZXMgZGUgdXNvIGV4cHVlc3RhcyBlbiBsYSBEZWNsYXJh +Y2nDs24gZGUgUHLDoWN0aWNhcyBkZSBDZXJ0aWZpY2FjacOzbiBkZSBsYSBGTk1ULVJDTSAoIEMv +IEpvcmdlIEp1YW4sIDEwNi0yODAwOS1NYWRyaWQtRXNwYcOxYSkwgdQGA1UdHwSBzDCByTCBxqCB +w6CBwIaBkGxkYXA6Ly9sZGFwZm5tdC5jZXJ0LmZubXQuZXMvQ049Q1JMLE9VPUFDJTIwUkFJWiUy +MEZOTVQtUkNNLE89Rk5NVC1SQ00sQz1FUz9hdXRob3JpdHlSZXZvY2F0aW9uTGlzdDtiaW5hcnk/ +YmFzZT9vYmplY3RjbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludIYraHR0cDovL3d3dy5jZXJ0LmZu +bXQuZXMvY3Jscy9BUkxGTk1UUkNNLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAo2bsQ2xLDcyodieq +jd+uy/lfxDw/MbrAq/ZaNFkIlcypUYamOM4vrm5rz8oLjPCoLkJ48P+nP08Gkcl5Q6q6VFcZLia+ +U3gfHXrkyqToQlrtViGCGH3xA4u56XtMHGXSdk9vQ0yDnW5f7bUEkp+uvcKewrOvNcpbIAgD4eU7 +gdOS0w7BagcFRBgTKBw2s3z73fRZtouJg/atmWYtXbBsfNjph+pCh+h5sbSyZUVzO5AemyjpYYYN +MWDQrTXq+7O8zIPuPaNESjEexuzn+VjHG90RlUK1LygARi+Ir0opD2w6erb/hK8Eea7MFdKQ2ASq +NBGJggNo5vfPVvjHiL+Antmh7mQSKL+4YwFU64d4KK9k0C1mbJethDQFKcjTK1vMvnXFiupsIuyT +qwKauo7u2zMKzY4r3VYOW9TpMyLPFIY8pII5GyNzXlL0F4nscOvduTEPEYqxeNJfpDDPY/DO8Wfx +gdRTy2W3D/UoAulb+Y+nuzGGCtFQrsSMQX487R+aY0nWot/hajef6BcPuxhDfQrg5IafrISVmcJA +plb3tXhh0sz7RbYz6jf1bke4eU5fnrTMtGlVteUL2vjrfUPHW07kBJuaQ7sxORNV3bpHisOnHj+A +riQzCn5vINpSHW6hTm7IfRkbltu/aQrsMuUhP7HE/v+uXe5CuboV5ubZhHU= +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT +AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw +MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD +TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf +qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr +btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL +j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou +08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw +WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT +tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ +47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC +ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa +i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o +dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s +D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ +j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT +Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW ++YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 +Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d +8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm +5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG +rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + diff --git a/pms_l10n_es/wizards/traveller_report.py b/pms_l10n_es/wizards/traveller_report.py index 49c767082..dd468c8b7 100644 --- a/pms_l10n_es/wizards/traveller_report.py +++ b/pms_l10n_es/wizards/traveller_report.py @@ -163,11 +163,11 @@ class TravellerReport(models.TransientModel): "application/octet-stream", ) }, - # TODO: review verify=False if cert.pen is not present + # TODO: review download file cert.pem verify=get_module_resource("pms_l10n_es", "static", "cert.pem"), ) - # TODO: review if the response is not ok raise validation error + # TODO: review save log queue (oca/queue) # print(response.content) # if response.content != b'CORRECTO\r\n': # raise ValidationError(response.content.decode()) From aca9ea60a9b51e7a233d9ed738d63e3ef6c1a599 Mon Sep 17 00:00:00 2001 From: miguelpadin Date: Thu, 20 May 2021 09:35:07 +0200 Subject: [PATCH 08/18] [ADD] pms: add hook & sequences --- pms_l10n_es/__init__.py | 1 + pms_l10n_es/__manifest__.py | 1 + pms_l10n_es/hooks.py | 16 ++ pms_l10n_es/models/__init__.py | 1 + pms_l10n_es/models/ir_sequence.py | 16 ++ pms_l10n_es/models/pms_property.py | 29 +++- pms_l10n_es/static/cert.pem | 210 +++++++++++++------------- pms_l10n_es/tests/__init__.py | 1 + pms_l10n_es/tests/test_ir_sequence.py | 8 + 9 files changed, 177 insertions(+), 106 deletions(-) create mode 100644 pms_l10n_es/hooks.py create mode 100644 pms_l10n_es/models/ir_sequence.py create mode 100644 pms_l10n_es/tests/test_ir_sequence.py diff --git a/pms_l10n_es/__init__.py b/pms_l10n_es/__init__.py index aee8895e7..a0f653930 100644 --- a/pms_l10n_es/__init__.py +++ b/pms_l10n_es/__init__.py @@ -1,2 +1,3 @@ from . import models from . import wizards +from .hooks import post_init_hook diff --git a/pms_l10n_es/__manifest__.py b/pms_l10n_es/__manifest__.py index 61a59521a..796f16bb7 100644 --- a/pms_l10n_es/__manifest__.py +++ b/pms_l10n_es/__manifest__.py @@ -27,4 +27,5 @@ "wizards/traveller_report.xml", ], "installable": True, + "post_init_hook": "post_init_hook", } diff --git a/pms_l10n_es/hooks.py b/pms_l10n_es/hooks.py new file mode 100644 index 000000000..c3b9cc571 --- /dev/null +++ b/pms_l10n_es/hooks.py @@ -0,0 +1,16 @@ +from odoo import SUPERUSER_ID, api + + +def post_init_hook(cr, registry): + with api.Environment.manage(): + env = api.Environment(cr, SUPERUSER_ID, {}) + pms_properties = env["pms.property"].search([]) + for pms_property in pms_properties: + if not pms_property.sequence_id: + pms_property.sequence_id = env["ir.sequence"].create( + { + "name": "sequence for property: " + pms_property.name, + "code": "property." + str(pms_property.id), + "padding": 3, + } + ) diff --git a/pms_l10n_es/models/__init__.py b/pms_l10n_es/models/__init__.py index ebd8614e3..94e0ac77c 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 ir_sequence diff --git a/pms_l10n_es/models/ir_sequence.py b/pms_l10n_es/models/ir_sequence.py new file mode 100644 index 000000000..678984649 --- /dev/null +++ b/pms_l10n_es/models/ir_sequence.py @@ -0,0 +1,16 @@ +from odoo import models + + +class IrSequence(models.Model): + _inherit = "ir.sequence" + + def next_by_id(self, sequence_date=None): + seq = self.env['ir.sequence'].browse(self.id) + + if seq.number_next == 1000: + seq.number_next = 1 + # seq._set_number_next_actual() + + result = super(IrSequence, self).next_by_id() + + return result diff --git a/pms_l10n_es/models/pms_property.py b/pms_l10n_es/models/pms_property.py index 7e9753e76..e921f1420 100644 --- a/pms_l10n_es/models/pms_property.py +++ b/pms_l10n_es/models/pms_property.py @@ -1,4 +1,4 @@ -from odoo import fields, models +from odoo import api, fields, models class PmsProperty(models.Model): @@ -27,3 +27,30 @@ class PmsProperty(models.Model): string="Institution password", help="Password provided by institution to send the data.", ) + sequence_id = fields.Many2one("ir.sequence") + + # ORM Overrides + @api.model + def create(self, vals): + result = super(PmsProperty, self).create(vals) + result["sequence_id"] = self.env["ir.sequence"].create( + { + "name": "sequence for property: " + result["name"], + "code": "property." + str(result.id), + "padding": 3, + } + ) + return result + + def write(self, vals): + result = super(PmsProperty, self).write(vals) + for record in self: + if not record.sequence_id: + record.sequence_id = self.env["ir.sequence"].create( + { + "name": "sequence for property: " + result["name"], + "code": "property." + str(result.id), + "padding": 3, + } + ) + return result diff --git a/pms_l10n_es/static/cert.pem b/pms_l10n_es/static/cert.pem index e498d6da4..efd3e6e7f 100644 --- a/pms_l10n_es/static/cert.pem +++ b/pms_l10n_es/static/cert.pem @@ -1,105 +1,105 @@ ------BEGIN CERTIFICATE----- -MIIIwDCCB6igAwIBAgIQGBMhPyx6Rolez7EMhDFA1jANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQG -EwJFUzERMA8GA1UECgwIRk5NVC1SQ00xJTAjBgNVBAsMHEFDIENvbXBvbmVudGVzIEluZm9ybcOh -dGljb3MwHhcNMjAwNTI4MTIzOTQwWhcNMjIwNTI4MTIzOTM5WjCBmDELMAkGA1UEBhMCRVMxDzAN -BgNVBAcMBk1BRFJJRDEuMCwGA1UECgwlRElSRUNDSU9OIEdFTkVSQUwgREUgTEEgR1VBUkRJQSBD -SVZJTDESMBAGA1UEBRMJUzI4MTYwMDNEMRgwFgYDVQRhDA9WQVRFUy1TMjgxNjAwM0QxGjAYBgNV -BAMMESouZ3VhcmRpYWNpdmlsLmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApA++ -/lNaimrEGvflr1eNHDDLmEZF/FKIA9Bd9YJnieciGg+3ZJ9/Kd99eV1V9zIgfdSLLDucMeflp6s6 -8v563u4+zX7AgREB539rKAaCUwtqVcutZROL+NIjkoHHtMHgMlCbbQaKC32n8awaB0YRNGI+eLMJ -4u7X2iBR1OohEjGFa1xfDS2UHOeWsxW5eDPGhK3iaDSHmcy1jtIGVmas4YtcNFRf/8y2v2I2QqHY -2l7IbiDMAdSW2nPme/5HZXvIlkDdD4SG17xhIAe1uPEBKd0g6lt89OLCFetNwcRaqjFtA5DrpmiQ -0hqHQTk8AST6ibpRvAZCKvln+uXNWcDDywIDAQABo4IFVDCCBVAwDAYDVR0TAQH/BAIwADCBgQYI -KwYBBQUHAQEEdTBzMDsGCCsGAQUFBzABhi9odHRwOi8vb2NzcGNvbXAuY2VydC5mbm10LmVzL29j -c3AvT2NzcFJlc3BvbmRlcjA0BggrBgEFBQcwAoYoaHR0cDovL3d3dy5jZXJ0LmZubXQuZXMvY2Vy -dHMvQUNDT01QLmNydDCCASgGA1UdIASCAR8wggEbMIIBDQYKKwYBBAGsZgMJETCB/jApBggrBgEF -BQcCARYdaHR0cDovL3d3dy5jZXJ0LmZubXQuZXMvZHBjcy8wgdAGCCsGAQUFBwICMIHDDIHAQ2Vy -dGlmaWNhZG8gd2lsZGNhcmQgZGUgYXV0ZW50aWNhY2nDs24gZGUgc2l0aW8gd2ViIHNlZ8O6biBy -ZWdsYW1lbnRvIGV1cm9wZW8gZUlEQVMuIFN1amV0byBhIGNvbmRpY2lvbmVzIGRlIHVzbyBzZWfD -um4gRFBDIGRlIEZOTVQtUkNNLCBOSUY6IFEyODI2MDA0LUogKEMvSm9yZ2UgSnVhbiAxMDYtMjgw -MDktTWFkcmlkLUVzcGHDsWEpMAgGBgQAj3oBBzAcBgNVHREEFTATghEqLmd1YXJkaWFjaXZpbC5l -czATBgNVHSUEDDAKBggrBgEFBQcDATAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFEMrHDu3J/7S -OVend+G0LsfbflPRMIGmBggrBgEFBQcBAwSBmTCBljALBgYEAI5GAQMCAQ8wEwYGBACORgEGMAkG -BwQAjkYBBgMwcgYGBACORgEFMGgwMhYsaHR0cHM6Ly93d3cuY2VydC5mbm10LmVzL3Bkcy9QRFNf -Q09NUF9lcy5wZGYTAmVzMDIWLGh0dHBzOi8vd3d3LmNlcnQuZm5tdC5lcy9wZHMvUERTX0NPTVBf -ZW4ucGRmEwJlbjAfBgNVHSMEGDAWgBQZ+FgvFNamzJsEmAgNTNerAKeDZTCB4AYDVR0fBIHYMIHV -MIHSoIHPoIHMhoGebGRhcDovL2xkYXBjb21wLmNlcnQuZm5tdC5lcy9DTj1DUkwxLE9VPUFDJTIw -Q29tcG9uZW50ZXMlMjBJbmZvcm1hdGljb3MsTz1GTk1ULVJDTSxDPUVTP2NlcnRpZmljYXRlUmV2 -b2NhdGlvbkxpc3Q7YmluYXJ5P2Jhc2U/b2JqZWN0Y2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnSG -KWh0dHA6Ly93d3cuY2VydC5mbm10LmVzL2NybHNjb21wL0NSTDEuY3JsMIIBfwYKKwYBBAHWeQIE -AgSCAW8EggFrAWkAdwApeb7wnjk5IfBWc59jpXflvld9nGAK+PlNXSZcJV3HhAAAAXJbS5kkAAAE -AwBIMEYCIQDxUFJkb+yYGmvDckxbKLZvcycZmEvAX6g8GH3jqr7RjAIhAOshzUdC84VntNxq56Dx -160eCj65UVL9A64z7hnXnUKBAHYARqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+bUcAAAFy -W0ua9gAABAMARzBFAiEAj3S5/JDapowZIsHUOFXQuxxb26oIhOy/YfNLZI01pQMCIEN8b4AxHp9Z -mj8StFvP4/YLqvYgQbhgewCvFExlsRtVAHYAQcjKsd8iRkoQxqE6CUKHXk4xixsD6+tLx2jwkGKW -BvYAAAFyW0ucLAAABAMARzBFAiEAt+XKebp1KrEamXlKU2VkKt6lsRiylbNFTCTpGm5GAP8CIEUT -WXZee7o83zyXQ9nBy0t8TcRtI70vuheLQ909va6dMA0GCSqGSIb3DQEBCwUAA4IBAQBJAplPXRRv -b4nLZFqQvQjHlr0TSKTiC21vAzXe/1iiuPOPZF3AE1ZcOMEqiPWTN6GOR3UYksZE2Cfm0xqNOytr -bj/INmu5tX5U7yvGQxiB8EdHaTdQQknAi/IBEx0KJE+EAT+upOPYbne5km1lffN19WwQ2f3ybAbj -l5ZpWR6lSuV3JStUllHAS/0HjwBbqHhxJZ2BTG4Ca5SkHnbK/K1mfwLe2VGVYp7WWUzKkSQQ8Hs0 -RuY9EZ0sovRH7lL/EIf7uV/5d1V4kW1h7F38jEPDH4UVTHDMMaR9NV/4pES0zQnI6y5NJCiRP39k -GFyKTE/4x7pFeIFnXXIwswUWFA9h ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIG1jCCBL6gAwIBAgIQNMarBE42mRJRyCULbJTWwDANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQG -EwJFUzERMA8GA1UECgwIRk5NVC1SQ00xGTAXBgNVBAsMEEFDIFJBSVogRk5NVC1SQ00wHhcNMTMw -NjI0MTA1MjU5WhcNMjgwNjI0MTA1MjU5WjBHMQswCQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1S -Q00xJTAjBgNVBAsMHEFDIENvbXBvbmVudGVzIEluZm9ybcOhdGljb3MwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQCXVx8rdbF7/xY44CaSqzzGo5BhvzA8knxC/3KJYVzTf+CkOvMxMUDu -b8b0h38MDujm/RKZhBNOWbKhxF3U61ZVhcR9xOCciuS/soT80m3BByxAKcZsNka0jCA4XRkglDaA -FxCHEZ06MOnvXsSOZDfPYahbQ3VFCVycJuhlHdAwSpmceQwcRYkR6YgXwTiyzCNGivMKAmRS3dIt -qDOmDW/nxiDFq/Jd8VWY7GFkwbbAeqYId8FjN8zfvafunsB9SLFkUjPPMeqfmC7Bdh7HMxLpaOXR -OwH201cmlebiPkn0xSFxXFqwhhr6yN8UQYZ3O/+xdHLrS6DS9+CJUF6d09ijAgMBAAGjggLIMIIC -xDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUGfhYLxTWpsyb -BJgIDUzXqwCng2UwgZgGCCsGAQUFBwEBBIGLMIGIMEkGCCsGAQUFBzABhj1odHRwOi8vb2NzcGZu -bXRyY21jYS5jZXJ0LmZubXQuZXMvb2NzcGZubXRyY21jYS9PY3NwUmVzcG9uZGVyMDsGCCsGAQUF -BzAChi9odHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9jZXJ0cy9BQ1JBSVpGTk1UUkNNLmNydDAfBgNV -HSMEGDAWgBT3fcX9xOiaG3dkp/UdoMy/h2CabTCB6wYDVR0gBIHjMIHgMIHdBgRVHSAAMIHUMCkG -CCsGAQUFBwIBFh1odHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzCBpgYIKwYBBQUHAgIwgZkM -gZZTdWpldG8gYSBsYXMgY29uZGljaW9uZXMgZGUgdXNvIGV4cHVlc3RhcyBlbiBsYSBEZWNsYXJh -Y2nDs24gZGUgUHLDoWN0aWNhcyBkZSBDZXJ0aWZpY2FjacOzbiBkZSBsYSBGTk1ULVJDTSAoIEMv -IEpvcmdlIEp1YW4sIDEwNi0yODAwOS1NYWRyaWQtRXNwYcOxYSkwgdQGA1UdHwSBzDCByTCBxqCB -w6CBwIaBkGxkYXA6Ly9sZGFwZm5tdC5jZXJ0LmZubXQuZXMvQ049Q1JMLE9VPUFDJTIwUkFJWiUy -MEZOTVQtUkNNLE89Rk5NVC1SQ00sQz1FUz9hdXRob3JpdHlSZXZvY2F0aW9uTGlzdDtiaW5hcnk/ -YmFzZT9vYmplY3RjbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludIYraHR0cDovL3d3dy5jZXJ0LmZu -bXQuZXMvY3Jscy9BUkxGTk1UUkNNLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAo2bsQ2xLDcyodieq -jd+uy/lfxDw/MbrAq/ZaNFkIlcypUYamOM4vrm5rz8oLjPCoLkJ48P+nP08Gkcl5Q6q6VFcZLia+ -U3gfHXrkyqToQlrtViGCGH3xA4u56XtMHGXSdk9vQ0yDnW5f7bUEkp+uvcKewrOvNcpbIAgD4eU7 -gdOS0w7BagcFRBgTKBw2s3z73fRZtouJg/atmWYtXbBsfNjph+pCh+h5sbSyZUVzO5AemyjpYYYN -MWDQrTXq+7O8zIPuPaNESjEexuzn+VjHG90RlUK1LygARi+Ir0opD2w6erb/hK8Eea7MFdKQ2ASq -NBGJggNo5vfPVvjHiL+Antmh7mQSKL+4YwFU64d4KK9k0C1mbJethDQFKcjTK1vMvnXFiupsIuyT -qwKauo7u2zMKzY4r3VYOW9TpMyLPFIY8pII5GyNzXlL0F4nscOvduTEPEYqxeNJfpDDPY/DO8Wfx -gdRTy2W3D/UoAulb+Y+nuzGGCtFQrsSMQX487R+aY0nWot/hajef6BcPuxhDfQrg5IafrISVmcJA -plb3tXhh0sz7RbYz6jf1bke4eU5fnrTMtGlVteUL2vjrfUPHW07kBJuaQ7sxORNV3bpHisOnHj+A -riQzCn5vINpSHW6hTm7IfRkbltu/aQrsMuUhP7HE/v+uXe5CuboV5ubZhHU= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT -AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw -MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD -TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC -ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf -qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr -btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL -j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou -08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw -WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT -tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ -47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC -ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa -i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o -dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD -nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s -D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ -j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT -Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW -+YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 -Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d -8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm -5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG -rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= ------END CERTIFICATE----- - +-----BEGIN CERTIFICATE----- +MIIIwDCCB6igAwIBAgIQGBMhPyx6Rolez7EMhDFA1jANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQG +EwJFUzERMA8GA1UECgwIRk5NVC1SQ00xJTAjBgNVBAsMHEFDIENvbXBvbmVudGVzIEluZm9ybcOh +dGljb3MwHhcNMjAwNTI4MTIzOTQwWhcNMjIwNTI4MTIzOTM5WjCBmDELMAkGA1UEBhMCRVMxDzAN +BgNVBAcMBk1BRFJJRDEuMCwGA1UECgwlRElSRUNDSU9OIEdFTkVSQUwgREUgTEEgR1VBUkRJQSBD +SVZJTDESMBAGA1UEBRMJUzI4MTYwMDNEMRgwFgYDVQRhDA9WQVRFUy1TMjgxNjAwM0QxGjAYBgNV +BAMMESouZ3VhcmRpYWNpdmlsLmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApA++ +/lNaimrEGvflr1eNHDDLmEZF/FKIA9Bd9YJnieciGg+3ZJ9/Kd99eV1V9zIgfdSLLDucMeflp6s6 +8v563u4+zX7AgREB539rKAaCUwtqVcutZROL+NIjkoHHtMHgMlCbbQaKC32n8awaB0YRNGI+eLMJ +4u7X2iBR1OohEjGFa1xfDS2UHOeWsxW5eDPGhK3iaDSHmcy1jtIGVmas4YtcNFRf/8y2v2I2QqHY +2l7IbiDMAdSW2nPme/5HZXvIlkDdD4SG17xhIAe1uPEBKd0g6lt89OLCFetNwcRaqjFtA5DrpmiQ +0hqHQTk8AST6ibpRvAZCKvln+uXNWcDDywIDAQABo4IFVDCCBVAwDAYDVR0TAQH/BAIwADCBgQYI +KwYBBQUHAQEEdTBzMDsGCCsGAQUFBzABhi9odHRwOi8vb2NzcGNvbXAuY2VydC5mbm10LmVzL29j +c3AvT2NzcFJlc3BvbmRlcjA0BggrBgEFBQcwAoYoaHR0cDovL3d3dy5jZXJ0LmZubXQuZXMvY2Vy +dHMvQUNDT01QLmNydDCCASgGA1UdIASCAR8wggEbMIIBDQYKKwYBBAGsZgMJETCB/jApBggrBgEF +BQcCARYdaHR0cDovL3d3dy5jZXJ0LmZubXQuZXMvZHBjcy8wgdAGCCsGAQUFBwICMIHDDIHAQ2Vy +dGlmaWNhZG8gd2lsZGNhcmQgZGUgYXV0ZW50aWNhY2nDs24gZGUgc2l0aW8gd2ViIHNlZ8O6biBy +ZWdsYW1lbnRvIGV1cm9wZW8gZUlEQVMuIFN1amV0byBhIGNvbmRpY2lvbmVzIGRlIHVzbyBzZWfD +um4gRFBDIGRlIEZOTVQtUkNNLCBOSUY6IFEyODI2MDA0LUogKEMvSm9yZ2UgSnVhbiAxMDYtMjgw +MDktTWFkcmlkLUVzcGHDsWEpMAgGBgQAj3oBBzAcBgNVHREEFTATghEqLmd1YXJkaWFjaXZpbC5l +czATBgNVHSUEDDAKBggrBgEFBQcDATAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFEMrHDu3J/7S +OVend+G0LsfbflPRMIGmBggrBgEFBQcBAwSBmTCBljALBgYEAI5GAQMCAQ8wEwYGBACORgEGMAkG +BwQAjkYBBgMwcgYGBACORgEFMGgwMhYsaHR0cHM6Ly93d3cuY2VydC5mbm10LmVzL3Bkcy9QRFNf +Q09NUF9lcy5wZGYTAmVzMDIWLGh0dHBzOi8vd3d3LmNlcnQuZm5tdC5lcy9wZHMvUERTX0NPTVBf +ZW4ucGRmEwJlbjAfBgNVHSMEGDAWgBQZ+FgvFNamzJsEmAgNTNerAKeDZTCB4AYDVR0fBIHYMIHV +MIHSoIHPoIHMhoGebGRhcDovL2xkYXBjb21wLmNlcnQuZm5tdC5lcy9DTj1DUkwxLE9VPUFDJTIw +Q29tcG9uZW50ZXMlMjBJbmZvcm1hdGljb3MsTz1GTk1ULVJDTSxDPUVTP2NlcnRpZmljYXRlUmV2 +b2NhdGlvbkxpc3Q7YmluYXJ5P2Jhc2U/b2JqZWN0Y2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnSG +KWh0dHA6Ly93d3cuY2VydC5mbm10LmVzL2NybHNjb21wL0NSTDEuY3JsMIIBfwYKKwYBBAHWeQIE +AgSCAW8EggFrAWkAdwApeb7wnjk5IfBWc59jpXflvld9nGAK+PlNXSZcJV3HhAAAAXJbS5kkAAAE +AwBIMEYCIQDxUFJkb+yYGmvDckxbKLZvcycZmEvAX6g8GH3jqr7RjAIhAOshzUdC84VntNxq56Dx +160eCj65UVL9A64z7hnXnUKBAHYARqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+bUcAAAFy +W0ua9gAABAMARzBFAiEAj3S5/JDapowZIsHUOFXQuxxb26oIhOy/YfNLZI01pQMCIEN8b4AxHp9Z +mj8StFvP4/YLqvYgQbhgewCvFExlsRtVAHYAQcjKsd8iRkoQxqE6CUKHXk4xixsD6+tLx2jwkGKW +BvYAAAFyW0ucLAAABAMARzBFAiEAt+XKebp1KrEamXlKU2VkKt6lsRiylbNFTCTpGm5GAP8CIEUT +WXZee7o83zyXQ9nBy0t8TcRtI70vuheLQ909va6dMA0GCSqGSIb3DQEBCwUAA4IBAQBJAplPXRRv +b4nLZFqQvQjHlr0TSKTiC21vAzXe/1iiuPOPZF3AE1ZcOMEqiPWTN6GOR3UYksZE2Cfm0xqNOytr +bj/INmu5tX5U7yvGQxiB8EdHaTdQQknAi/IBEx0KJE+EAT+upOPYbne5km1lffN19WwQ2f3ybAbj +l5ZpWR6lSuV3JStUllHAS/0HjwBbqHhxJZ2BTG4Ca5SkHnbK/K1mfwLe2VGVYp7WWUzKkSQQ8Hs0 +RuY9EZ0sovRH7lL/EIf7uV/5d1V4kW1h7F38jEPDH4UVTHDMMaR9NV/4pES0zQnI6y5NJCiRP39k +GFyKTE/4x7pFeIFnXXIwswUWFA9h +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIG1jCCBL6gAwIBAgIQNMarBE42mRJRyCULbJTWwDANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQG +EwJFUzERMA8GA1UECgwIRk5NVC1SQ00xGTAXBgNVBAsMEEFDIFJBSVogRk5NVC1SQ00wHhcNMTMw +NjI0MTA1MjU5WhcNMjgwNjI0MTA1MjU5WjBHMQswCQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1S +Q00xJTAjBgNVBAsMHEFDIENvbXBvbmVudGVzIEluZm9ybcOhdGljb3MwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQCXVx8rdbF7/xY44CaSqzzGo5BhvzA8knxC/3KJYVzTf+CkOvMxMUDu +b8b0h38MDujm/RKZhBNOWbKhxF3U61ZVhcR9xOCciuS/soT80m3BByxAKcZsNka0jCA4XRkglDaA +FxCHEZ06MOnvXsSOZDfPYahbQ3VFCVycJuhlHdAwSpmceQwcRYkR6YgXwTiyzCNGivMKAmRS3dIt +qDOmDW/nxiDFq/Jd8VWY7GFkwbbAeqYId8FjN8zfvafunsB9SLFkUjPPMeqfmC7Bdh7HMxLpaOXR +OwH201cmlebiPkn0xSFxXFqwhhr6yN8UQYZ3O/+xdHLrS6DS9+CJUF6d09ijAgMBAAGjggLIMIIC +xDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUGfhYLxTWpsyb +BJgIDUzXqwCng2UwgZgGCCsGAQUFBwEBBIGLMIGIMEkGCCsGAQUFBzABhj1odHRwOi8vb2NzcGZu +bXRyY21jYS5jZXJ0LmZubXQuZXMvb2NzcGZubXRyY21jYS9PY3NwUmVzcG9uZGVyMDsGCCsGAQUF +BzAChi9odHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9jZXJ0cy9BQ1JBSVpGTk1UUkNNLmNydDAfBgNV +HSMEGDAWgBT3fcX9xOiaG3dkp/UdoMy/h2CabTCB6wYDVR0gBIHjMIHgMIHdBgRVHSAAMIHUMCkG +CCsGAQUFBwIBFh1odHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzCBpgYIKwYBBQUHAgIwgZkM +gZZTdWpldG8gYSBsYXMgY29uZGljaW9uZXMgZGUgdXNvIGV4cHVlc3RhcyBlbiBsYSBEZWNsYXJh +Y2nDs24gZGUgUHLDoWN0aWNhcyBkZSBDZXJ0aWZpY2FjacOzbiBkZSBsYSBGTk1ULVJDTSAoIEMv +IEpvcmdlIEp1YW4sIDEwNi0yODAwOS1NYWRyaWQtRXNwYcOxYSkwgdQGA1UdHwSBzDCByTCBxqCB +w6CBwIaBkGxkYXA6Ly9sZGFwZm5tdC5jZXJ0LmZubXQuZXMvQ049Q1JMLE9VPUFDJTIwUkFJWiUy +MEZOTVQtUkNNLE89Rk5NVC1SQ00sQz1FUz9hdXRob3JpdHlSZXZvY2F0aW9uTGlzdDtiaW5hcnk/ +YmFzZT9vYmplY3RjbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludIYraHR0cDovL3d3dy5jZXJ0LmZu +bXQuZXMvY3Jscy9BUkxGTk1UUkNNLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAo2bsQ2xLDcyodieq +jd+uy/lfxDw/MbrAq/ZaNFkIlcypUYamOM4vrm5rz8oLjPCoLkJ48P+nP08Gkcl5Q6q6VFcZLia+ +U3gfHXrkyqToQlrtViGCGH3xA4u56XtMHGXSdk9vQ0yDnW5f7bUEkp+uvcKewrOvNcpbIAgD4eU7 +gdOS0w7BagcFRBgTKBw2s3z73fRZtouJg/atmWYtXbBsfNjph+pCh+h5sbSyZUVzO5AemyjpYYYN +MWDQrTXq+7O8zIPuPaNESjEexuzn+VjHG90RlUK1LygARi+Ir0opD2w6erb/hK8Eea7MFdKQ2ASq +NBGJggNo5vfPVvjHiL+Antmh7mQSKL+4YwFU64d4KK9k0C1mbJethDQFKcjTK1vMvnXFiupsIuyT +qwKauo7u2zMKzY4r3VYOW9TpMyLPFIY8pII5GyNzXlL0F4nscOvduTEPEYqxeNJfpDDPY/DO8Wfx +gdRTy2W3D/UoAulb+Y+nuzGGCtFQrsSMQX487R+aY0nWot/hajef6BcPuxhDfQrg5IafrISVmcJA +plb3tXhh0sz7RbYz6jf1bke4eU5fnrTMtGlVteUL2vjrfUPHW07kBJuaQ7sxORNV3bpHisOnHj+A +riQzCn5vINpSHW6hTm7IfRkbltu/aQrsMuUhP7HE/v+uXe5CuboV5ubZhHU= +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT +AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw +MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD +TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf +qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr +btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL +j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou +08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw +WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT +tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ +47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC +ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa +i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o +dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s +D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ +j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT +Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW ++YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 +Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d +8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm +5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG +rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + diff --git a/pms_l10n_es/tests/__init__.py b/pms_l10n_es/tests/__init__.py index 20117cf82..5e3e62706 100644 --- a/pms_l10n_es/tests/__init__.py +++ b/pms_l10n_es/tests/__init__.py @@ -1 +1,2 @@ from . import test_partner +from . import test_ir_sequence diff --git a/pms_l10n_es/tests/test_ir_sequence.py b/pms_l10n_es/tests/test_ir_sequence.py new file mode 100644 index 000000000..119200346 --- /dev/null +++ b/pms_l10n_es/tests/test_ir_sequence.py @@ -0,0 +1,8 @@ +from odoo.tests import common + + +class TestIrSequence(common.SavepointCase): + def test_sequence_property(self): + pms_property = self.env["pms.property"].search([])[0] + value = pms_property.sequence_id.next_by_id() + print("test", value) From 9d1d2c56384e151eeb62bd03c009f02d3df8c5d6 Mon Sep 17 00:00:00 2001 From: miguelpadin Date: Tue, 25 May 2021 11:05:29 +0200 Subject: [PATCH 09/18] [FIX] pms: remove seq and scrap gc --- pms_l10n_es/__init__.py | 1 - pms_l10n_es/__manifest__.py | 4 +- pms_l10n_es/data/cron_jobs.xml | 2 +- pms_l10n_es/data/queue_data.xml | 9 ++ pms_l10n_es/data/queue_job_function_data.xml | 12 ++ pms_l10n_es/hooks.py | 16 --- pms_l10n_es/models/__init__.py | 1 - pms_l10n_es/models/ir_sequence.py | 16 --- pms_l10n_es/models/pms_property.py | 26 ---- pms_l10n_es/static/cert.pem | 1 - pms_l10n_es/tests/__init__.py | 1 - pms_l10n_es/tests/test_ir_sequence.py | 8 -- pms_l10n_es/wizards/traveller_report.py | 120 ++++++++++++------- pms_l10n_es/wizards/traveller_report.xml | 55 ++++----- 14 files changed, 127 insertions(+), 145 deletions(-) create mode 100644 pms_l10n_es/data/queue_data.xml create mode 100644 pms_l10n_es/data/queue_job_function_data.xml delete mode 100644 pms_l10n_es/hooks.py delete mode 100644 pms_l10n_es/models/ir_sequence.py delete mode 100644 pms_l10n_es/tests/test_ir_sequence.py diff --git a/pms_l10n_es/__init__.py b/pms_l10n_es/__init__.py index a0f653930..aee8895e7 100644 --- a/pms_l10n_es/__init__.py +++ b/pms_l10n_es/__init__.py @@ -1,3 +1,2 @@ from . import models from . import wizards -from .hooks import post_init_hook diff --git a/pms_l10n_es/__manifest__.py b/pms_l10n_es/__manifest__.py index 796f16bb7..310ab9471 100644 --- a/pms_l10n_es/__manifest__.py +++ b/pms_l10n_es/__manifest__.py @@ -16,9 +16,12 @@ "partner_contact_gender", "partner_contact_birthdate", "partner_contact_nationality", + "queue_job", ], "data": [ "data/cron_jobs.xml", + "data/queue_data.xml", + "data/queue_job_function_data.xml", "data/pms_sequence.xml", "security/ir.model.access.csv", "views/pms_checkin_partner_views.xml", @@ -27,5 +30,4 @@ "wizards/traveller_report.xml", ], "installable": True, - "post_init_hook": "post_init_hook", } diff --git a/pms_l10n_es/data/cron_jobs.xml b/pms_l10n_es/data/cron_jobs.xml index de0a06134..f99af664a 100644 --- a/pms_l10n_es/data/cron_jobs.xml +++ b/pms_l10n_es/data/cron_jobs.xml @@ -15,7 +15,7 @@ name="nextcall" eval="datetime.now(pytz.timezone('UTC')).strftime('%Y-%m-%d 03:00:00')" /> - model.send_file_gc() + model.send_file_gc_async() diff --git a/pms_l10n_es/data/queue_data.xml b/pms_l10n_es/data/queue_data.xml new file mode 100644 index 000000000..42bfe7236 --- /dev/null +++ b/pms_l10n_es/data/queue_data.xml @@ -0,0 +1,9 @@ + + + + + gc_file_send + + + + diff --git a/pms_l10n_es/data/queue_job_function_data.xml b/pms_l10n_es/data/queue_job_function_data.xml new file mode 100644 index 000000000..c59467665 --- /dev/null +++ b/pms_l10n_es/data/queue_job_function_data.xml @@ -0,0 +1,12 @@ + + + + + send_file_async + + + + diff --git a/pms_l10n_es/hooks.py b/pms_l10n_es/hooks.py deleted file mode 100644 index c3b9cc571..000000000 --- a/pms_l10n_es/hooks.py +++ /dev/null @@ -1,16 +0,0 @@ -from odoo import SUPERUSER_ID, api - - -def post_init_hook(cr, registry): - with api.Environment.manage(): - env = api.Environment(cr, SUPERUSER_ID, {}) - pms_properties = env["pms.property"].search([]) - for pms_property in pms_properties: - if not pms_property.sequence_id: - pms_property.sequence_id = env["ir.sequence"].create( - { - "name": "sequence for property: " + pms_property.name, - "code": "property." + str(pms_property.id), - "padding": 3, - } - ) diff --git a/pms_l10n_es/models/__init__.py b/pms_l10n_es/models/__init__.py index 94e0ac77c..ebd8614e3 100644 --- a/pms_l10n_es/models/__init__.py +++ b/pms_l10n_es/models/__init__.py @@ -1,4 +1,3 @@ from . import res_partner from . import pms_checkin_partner from . import pms_property -from . import ir_sequence diff --git a/pms_l10n_es/models/ir_sequence.py b/pms_l10n_es/models/ir_sequence.py deleted file mode 100644 index 678984649..000000000 --- a/pms_l10n_es/models/ir_sequence.py +++ /dev/null @@ -1,16 +0,0 @@ -from odoo import models - - -class IrSequence(models.Model): - _inherit = "ir.sequence" - - def next_by_id(self, sequence_date=None): - seq = self.env['ir.sequence'].browse(self.id) - - if seq.number_next == 1000: - seq.number_next = 1 - # seq._set_number_next_actual() - - result = super(IrSequence, self).next_by_id() - - return result diff --git a/pms_l10n_es/models/pms_property.py b/pms_l10n_es/models/pms_property.py index e921f1420..296c42d05 100644 --- a/pms_l10n_es/models/pms_property.py +++ b/pms_l10n_es/models/pms_property.py @@ -28,29 +28,3 @@ class PmsProperty(models.Model): help="Password provided by institution to send the data.", ) sequence_id = fields.Many2one("ir.sequence") - - # ORM Overrides - @api.model - def create(self, vals): - result = super(PmsProperty, self).create(vals) - result["sequence_id"] = self.env["ir.sequence"].create( - { - "name": "sequence for property: " + result["name"], - "code": "property." + str(result.id), - "padding": 3, - } - ) - return result - - def write(self, vals): - result = super(PmsProperty, self).write(vals) - for record in self: - if not record.sequence_id: - record.sequence_id = self.env["ir.sequence"].create( - { - "name": "sequence for property: " + result["name"], - "code": "property." + str(result.id), - "padding": 3, - } - ) - return result diff --git a/pms_l10n_es/static/cert.pem b/pms_l10n_es/static/cert.pem index efd3e6e7f..7011ea9ea 100644 --- a/pms_l10n_es/static/cert.pem +++ b/pms_l10n_es/static/cert.pem @@ -102,4 +102,3 @@ Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d 5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= -----END CERTIFICATE----- - diff --git a/pms_l10n_es/tests/__init__.py b/pms_l10n_es/tests/__init__.py index 5e3e62706..20117cf82 100644 --- a/pms_l10n_es/tests/__init__.py +++ b/pms_l10n_es/tests/__init__.py @@ -1,2 +1 @@ from . import test_partner -from . import test_ir_sequence diff --git a/pms_l10n_es/tests/test_ir_sequence.py b/pms_l10n_es/tests/test_ir_sequence.py deleted file mode 100644 index 119200346..000000000 --- a/pms_l10n_es/tests/test_ir_sequence.py +++ /dev/null @@ -1,8 +0,0 @@ -from odoo.tests import common - - -class TestIrSequence(common.SavepointCase): - def test_sequence_property(self): - pms_property = self.env["pms.property"].search([])[0] - value = pms_property.sequence_id.next_by_id() - print("test", value) diff --git a/pms_l10n_es/wizards/traveller_report.py b/pms_l10n_es/wizards/traveller_report.py index dd468c8b7..80bcb6846 100644 --- a/pms_l10n_es/wizards/traveller_report.py +++ b/pms_l10n_es/wizards/traveller_report.py @@ -1,11 +1,12 @@ import base64 import datetime -import io from datetime import date +import os import requests +from bs4 import BeautifulSoup as bs -from odoo import _, fields, models +from odoo import _, api, fields, models from odoo.exceptions import ValidationError from odoo.modules.module import get_module_resource @@ -14,9 +15,13 @@ class TravellerReport(models.TransientModel): _name = "traveller.report.wizard" _description = "Traveller Report" - txt_filename = fields.Char() - txt_binary = fields.Binary() - txt_message = fields.Char() + txt_filename = fields.Text() + txt_binary = fields.Binary( + string="File Download" + ) + txt_message = fields.Char( + string="File Preview" + ) def generate_file(self): @@ -28,21 +33,17 @@ class TravellerReport(models.TransientModel): # build content content = self.generate_checkin_list(pms_property.id) - # get next sequence - sequence_num = self.env["ir.sequence"].next_by_code("traveller.report.wizard") - # file creation txt_binary = self.env["traveller.report.wizard"].create( { "txt_filename": pms_property.institution_property_id - + "." - + sequence_num, + + ".999", "txt_binary": base64.b64encode(str.encode(content)), "txt_message": content, } ) return { - "name": _("Download File"), + "name": _("Preview & Send File"), "res_id": txt_binary.id, "res_model": "traveller.report.wizard", "target": "new", @@ -133,41 +134,68 @@ class TravellerReport(models.TransientModel): return content - def send_file_gc(self): - # get the active property - pms_property = self.env["pms.property"].search( - [("id", "=", self.env.user.get_active_property_ids()[0])] - ) + def send_file_gc(self, pms_property=False): + url = "https://hospederias.guardiacivil.es/" + login_route = "/hospederias/login.do" + upload_file_route = "/hospederias/cargaFichero.do" + called_from_user = False + if not pms_property: + called_from_user = True + # get the active property + pms_property = self.env["pms.property"].search( + [("id", "=", self.env.user.get_active_property_ids()[0])] + ) - # get next sequence to send - sequence_num = self.env["ir.sequence"].next_by_code("traveller.report.wizard") - - # generate content to send - f = io.StringIO(self.generate_checkin_list(pms_property.id)) - - session = requests.Session() - - # send info to GC - # response = \ - session.post( - url="https://" - + pms_property.institution_user - + ":" - + pms_property.institution_password - + "@hospederias.guardiacivil.es/hospederias/servlet/" - "ControlRecepcionFichero", - files={ - "file": ( - pms_property.institution_user + "." + sequence_num, - f, - "application/octet-stream", - ) - }, - # TODO: review download file cert.pem + 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", + } + s = requests.session() + login_payload = { + "usuario": pms_property.institution_user, + "pswd": pms_property.institution_password, + } + s.post( + url + login_route, + headers=headers, + data=login_payload, verify=get_module_resource("pms_l10n_es", "static", "cert.pem"), - ) + ) - # TODO: review save log queue (oca/queue) - # print(response.content) - # if response.content != b'CORRECTO\r\n': - # raise ValidationError(response.content.decode()) + pwd = get_module_resource("pms_l10n_es", "wizards", "") + checkin_list_file = open(pwd + pms_property.institution_user + ".999", "w+") + checkin_list_file.write(self.generate_checkin_list(pms_property.id)) + checkin_list_file.close() + files = {"fichero": open(pwd + pms_property.institution_user + ".999", "rb")} + + response_file_sent = s.post( + url + upload_file_route, + data={"autoSeq": "on"}, + files=files, + verify=get_module_resource("pms_l10n_es", "static", "cert.pem"), + ) + os.remove(pwd + pms_property.institution_user + ".999") + s.close() + + soup = bs(response_file_sent.text, "html.parser") + errors = soup.select("#errores > tbody > tr > td > a") + if errors: + raise ValidationError(errors[2].text) + else: + if called_from_user: + message = { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'title': _('Sent succesfully!'), + 'message': _('Successful file sending'), + 'sticky': False, + } + } + return message + + @api.model + def send_file_gc_async(self): + for prop in self.env["pms.property"].search([]): + self.with_delay().send_file_gc(prop) diff --git a/pms_l10n_es/wizards/traveller_report.xml b/pms_l10n_es/wizards/traveller_report.xml index 4f1def141..31df2a8f7 100644 --- a/pms_l10n_es/wizards/traveller_report.xml +++ b/pms_l10n_es/wizards/traveller_report.xml @@ -5,36 +5,37 @@ traveller.report.wizard
- -
+ +
+
+ + + + +
+ +
+
+
- -
-

- -

+
+
- - +
+