Files
pms/pms_api_rest/models/pms_api_log.py
2024-04-22 17:25:01 +02:00

135 lines
3.7 KiB
Python

from odoo import _, api, fields, models
class PmsApiLog(models.Model):
_name = "pms.api.log"
pms_property_id = fields.Many2one(
string="PMS Property",
help="PMS Property",
comodel_name="pms.property",
default=lambda self: self.env.user.get_active_property_ids()[0],
)
client_id = fields.Many2one(
string="Client",
help="API Client",
comodel_name="res.users",
)
request = fields.Text(
string="Request",
help="Request",
)
response = fields.Text(
string="Response",
help="Response",
)
status = fields.Selection(
string="Status",
help="Status",
selection=[("success", "Success"), ("error", "Error")],
)
request_date = fields.Datetime(
string="Request Date",
help="Request Date",
)
response_date = fields.Datetime(
string="Response Date",
help="Response Date",
)
request_duration = fields.Float(
string="Request Duration",
help="Request Duration",
)
method = fields.Char(
string="Method",
help="Method",
)
endpoint = fields.Char(
string="Endpoint",
help="Endpoint",
)
request_size = fields.Integer(
string="Request Size",
help="Request Size",
)
response_size = fields.Integer(
string="Response Size",
help="Response Size",
)
request_headers = fields.Text(
string="Request Headers",
help="Request Headers",
)
response_headers = fields.Text(
string="Response Headers",
help="Response Headers",
)
request_url = fields.Char(
string="Request URL",
help="Request URL",
)
response_url = fields.Char(
string="Response URL",
help="Response URL",
)
model_id = fields.Many2one(
string="Model",
help="Model",
comodel_name="ir.model",
)
def related_action_open_record(self):
"""Open a form view with the record(s) of the record log.
For instance, for a job on a ``pms.folio``, it will open a
``pms.product`` form view with the product record(s) concerned by
the job. If the job concerns more than one record, it opens them in a
list.
This is the default related action.
"""
self.ensure_one()
if "pms_api_log_id" in self.env[self.model_id.model]._fields:
records = self.env[self.model_id.model].search(
[("pms_api_log_id", "=", self.id)]
)
if not records:
return None
action = {
"name": _("Related Record"),
"type": "ir.actions.act_window",
"view_mode": "form",
"res_model": records._name,
}
if len(records) == 1:
action["res_id"] = records.id
else:
action.update(
{
"name": _("Related Records"),
"view_mode": "tree,form",
"domain": [("id", "in", records.ids)],
}
)
return action
@api.model
def create(self, vals):
"""
set pms_api_log_id and origin_json in related records
if record_ids id present in context
"""
log_record = super().create(vals)
if self.env.context.get("record_ids"):
records = self.env[self.env.context.get("model")].browse(
self.env.context.get("record_ids")
)
records.write(
{
"pms_api_log_id": log_record.id,
"origin_json": log_record.request,
}
)
return log_record