diff --git a/pms_l10n_es/__manifest__.py b/pms_l10n_es/__manifest__.py index b09a69e2b9..770208b8d9 100644 --- a/pms_l10n_es/__manifest__.py +++ b/pms_l10n_es/__manifest__.py @@ -3,7 +3,7 @@ { "name": "PMS Spanish Adaptation", - "version": "14.0.2.15.0", + "version": "14.0.3.0.0", "author": "Commit [Sun], Odoo Community Association (OCA)", "license": "AGPL-3", "application": True, diff --git a/pms_l10n_es/migrations/14.0.3.0.0/post-migration.py b/pms_l10n_es/migrations/14.0.3.0.0/post-migration.py new file mode 100644 index 0000000000..2f75872078 --- /dev/null +++ b/pms_l10n_es/migrations/14.0.3.0.0/post-migration.py @@ -0,0 +1,29 @@ +import logging +import xml.etree.cElementTree as ET + +from openupgradelib import openupgrade + +_logger = logging.getLogger(__name__) + + +@openupgrade.migrate() +def migrate(env, version): + for ses_communication in env["pms.ses.communication"].search( + [ + ("state", "=", "processed"), + ("entity", "=", "RH"), + ("operation", "=", "A"), + ] + ): + root = ET.fromstring(ses_communication.response_query_status_soap) + ses_communication.communication_id = root.find(".//codigoComunicacion").text + ses_communication.batch_id = root.find(".//lote").text + + # Retry all communications type delete, set status to to_send + env["pms.ses.communication"].search( + [ + ("state", "in", ["processed", "error_processing"]), + ("entity", "=", "RH"), + ("operation", "=", "D"), + ] + ).write({"state": "to_send"}) diff --git a/pms_l10n_es/models/pms_ses_communication.py b/pms_l10n_es/models/pms_ses_communication.py index a96ad54376..41056c62b6 100644 --- a/pms_l10n_es/models/pms_ses_communication.py +++ b/pms_l10n_es/models/pms_ses_communication.py @@ -22,6 +22,10 @@ class PmsSesCommunication(models.Model): index=True, store=True, ) + batch_id = fields.Char( + string="Batch ID", + default=False, + ) communication_id = fields.Char( string="Communication ID", help="ID of the communication", @@ -99,5 +103,5 @@ def force_send_communication(self): for record in self: self.env["traveller.report.wizard"].ses_send_communication( entity=record.entity, - communication_id=record.communication_id, + pms_ses_communication_id=record.id, ) diff --git a/pms_l10n_es/views/pms_ses_communication_views.xml b/pms_l10n_es/views/pms_ses_communication_views.xml index 440961e459..bf363a0a60 100644 --- a/pms_l10n_es/views/pms_ses_communication_views.xml +++ b/pms_l10n_es/views/pms_ses_communication_views.xml @@ -8,6 +8,7 @@ + @@ -52,6 +53,7 @@ > + @@ -73,6 +75,7 @@ + diff --git a/pms_l10n_es/wizards/traveller_report.py b/pms_l10n_es/wizards/traveller_report.py index 2fec5fa5a5..b90bf10295 100644 --- a/pms_l10n_es/wizards/traveller_report.py +++ b/pms_l10n_es/wizards/traveller_report.py @@ -335,7 +335,9 @@ def _generate_payload(lessor_id, operation, entity, data): {lessor_id} Roomdoo {operation} - {entity} + { + ''+entity+'' if entity else '' + } {data} @@ -1072,13 +1074,13 @@ def generate_xml_reservations_travellers_report( return xml_str @api.model - def ses_send_communications(self, entity, communication_id=False): + def ses_send_communications(self, entity, pms_ses_communication_id=False): domain = [ ("state", "=", "to_send"), ("entity", "=", entity), ] - if communication_id: - domain.append(("id", "=", communication_id)) + if pms_ses_communication_id: + domain.append(("id", "=", pms_ses_communication_id)) for communication in self.env["pms.ses.communication"].search(domain): data = False try: @@ -1135,15 +1137,16 @@ def ses_send_communications(self, entity, communication_id=False): communication.response_communication_soap = soap_response.text result_code = root.find(".//codigo").text if result_code == REQUEST_CODE_OK: - communication.communication_id = root.find(".//lote").text + communication.batch_id = root.find(".//lote").text + communication.state = "to_process" else: communication.state = "error_sending" - except requests.exceptions.RequestException as e: - _handle_request_exception(communication, e) except requests.exceptions.HTTPError as http_err: _handle_request_exception(communication, http_err) + except requests.exceptions.RequestException as e: + _handle_request_exception(communication, e) except Exception as e: _handle_request_exception(communication, e) @@ -1199,18 +1202,17 @@ def ses_send_incomplete_traveller_reports( communication.response_communication_soap = soap_response.text result_code = root.find(".//codigo").text if result_code == REQUEST_CODE_OK: - communication.communication_id = root.find(".//lote").text + communication.batch_id = root.find(".//lote").text if communication.operation == CREATE_OPERATION_CODE: communication.state = "to_process" else: communication.state = "processed" else: communication.state = "error_sending" - - except requests.exceptions.RequestException as e: - _handle_request_exception(communication, e) except requests.exceptions.HTTPError as http_err: _handle_request_exception(communication, http_err) + except requests.exceptions.RequestException as e: + _handle_request_exception(communication, e) except Exception as e: _handle_request_exception(communication, e) @@ -1219,14 +1221,13 @@ def ses_process_communications(self): for communication in self.env["pms.ses.communication"].search( [ ("state", "=", "to_process"), - ("operation", "!=", DELETE_OPERATION_CODE), ] ): try: var_xml_get_batch = f""" - {communication.communication_id} + {communication.batch_id} """ communication.query_status_xml = var_xml_get_batch @@ -1234,7 +1235,7 @@ def ses_process_communications(self): payload = _generate_payload( communication.reservation_id.pms_property_id.institution_lessor_id, "C", - "", + False, data, ) communication.query_status_soap = payload @@ -1249,13 +1250,15 @@ def ses_process_communications(self): ) soap_response.raise_for_status() root = ET.fromstring(soap_response.text) - communication.response_communication_soap = soap_response.text result_code = root.find(".//codigo").text communication.response_query_status_soap = soap_response.text if result_code == REQUEST_CODE_OK: result_status = root.find(".//codigoEstado").text if result_status == XML_OK: communication.state = "processed" + communication.communication_id = root.find( + ".//codigoComunicacion" + ).text communication.processing_result = root.find( ".//descripcion" ).text @@ -1269,9 +1272,9 @@ def ses_process_communications(self): else: communication.state = "error_processing" communication.processing_result = root.find(".//descripcion").text - except requests.exceptions.RequestException as e: - _handle_request_exception(communication, e) except requests.exceptions.HTTPError as http_err: _handle_request_exception(communication, http_err) + except requests.exceptions.RequestException as e: + _handle_request_exception(communication, e) except Exception as e: _handle_request_exception(communication, e)