Merge PR #300 into 14.0

Signed-off-by DarioLodeiros
This commit is contained in:
OCA-git-bot
2024-12-05 18:57:58 +00:00
5 changed files with 58 additions and 19 deletions

View File

@@ -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,

View File

@@ -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"})

View File

@@ -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 @@ class PmsSesCommunication(models.Model):
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,
)

View File

@@ -8,6 +8,7 @@
<sheet>
<group>
<field name="reservation_id" />
<field name="batch_id" />
<field name="communication_id" />
<field name="operation" />
<field name="entity" />
@@ -52,6 +53,7 @@
>
<field name="pms_property_id" />
<field name="reservation_id" />
<field name="batch_id" />
<field name="communication_id" />
<field name="operation" />
<field name="entity" />
@@ -73,6 +75,7 @@
<field name="arch" type="xml">
<search string="Log SES Communications">
<field name="pms_property_id" widget="selection" />
<field name="batch_id" />
<field name="communication_id" />
<field name="reservation_id" />
<!-- filters -->

View File

@@ -335,7 +335,9 @@ def _generate_payload(lessor_id, operation, entity, data):
<codigoArrendador>{lessor_id}</codigoArrendador>
<aplicacion>Roomdoo</aplicacion>
<tipoOperacion>{operation}</tipoOperacion>
<tipoComunicacion>{entity}</tipoComunicacion>
{
'<tipoComunicacion>'+entity+'</tipoComunicacion>' if entity else ''
}
</cabecera>
<solicitud>{data}</solicitud>
</peticion>
@@ -1072,13 +1074,13 @@ class TravellerReport(models.TransientModel):
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 @@ class TravellerReport(models.TransientModel):
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 @@ class TravellerReport(models.TransientModel):
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 @@ class TravellerReport(models.TransientModel):
for communication in self.env["pms.ses.communication"].search(
[
("state", "=", "to_process"),
("operation", "!=", DELETE_OPERATION_CODE),
]
):
try:
var_xml_get_batch = f"""
<con:lotes
xmlns:con="http://www.neg.hospedajes.mir.es/consultarComunicacion">
<con:lote>{communication.communication_id}</con:lote>
<con:lote>{communication.batch_id}</con:lote>
</con:lotes>
"""
communication.query_status_xml = var_xml_get_batch
@@ -1234,7 +1235,7 @@ class TravellerReport(models.TransientModel):
payload = _generate_payload(
communication.reservation_id.pms_property_id.institution_lessor_id,
"C",
"",
False,
data,
)
communication.query_status_soap = payload
@@ -1249,13 +1250,15 @@ class TravellerReport(models.TransientModel):
)
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 @@ class TravellerReport(models.TransientModel):
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)