- ticket: add user_id, priority, category fields; fix _serialize_ticket -> _serialize - package: fix is_active -> active (Odoo auto-filter), remove invalid entity_id filter - walkthrough: add sequence field; fix controller to use name/content instead of title/steps - users: fix encoach_user_type -> encoach_type, encoach_entity_id -> entity_rel_ids.entity_id - generation: use EncoachGenerationService class instead of nonexistent ORM model, fix /api/exam/level/ route conflict (separate GET and POST URLs) Made-with: Cursor
66 lines
2.1 KiB
Python
66 lines
2.1 KiB
Python
from odoo import models, fields
|
|
|
|
|
|
class EncoachTicket(models.Model):
|
|
_name = "encoach.ticket"
|
|
_description = "EnCoach Support Ticket"
|
|
|
|
user_id = fields.Many2one(
|
|
"res.users", string="Reporter", ondelete="set null", index=True,
|
|
)
|
|
reporter_name = fields.Char()
|
|
reporter_email = fields.Char()
|
|
subject = fields.Char(required=True)
|
|
description = fields.Text()
|
|
priority = fields.Selection(
|
|
[("low", "Low"), ("medium", "Medium"), ("high", "High")],
|
|
default="medium",
|
|
)
|
|
category = fields.Char()
|
|
ticket_type = fields.Selection(
|
|
[
|
|
("feedback", "Feedback"),
|
|
("bug", "Bug Report"),
|
|
("help", "Help Request"),
|
|
],
|
|
string="Type",
|
|
)
|
|
status = fields.Selection(
|
|
[
|
|
("open", "Open"),
|
|
("in_progress", "In Progress"),
|
|
("resolved", "Resolved"),
|
|
("closed", "Closed"),
|
|
],
|
|
default="open",
|
|
)
|
|
exam_information = fields.Json()
|
|
assigned_to_id = fields.Many2one(
|
|
"res.users", string="Assigned To", ondelete="set null",
|
|
)
|
|
created_at = fields.Datetime(default=fields.Datetime.now)
|
|
legacy_id = fields.Char(index=True)
|
|
|
|
def to_encoach_dict(self):
|
|
self.ensure_one()
|
|
return {
|
|
"id": self.id,
|
|
"_id": str(self.id),
|
|
"userId": str(self.user_id.id) if self.user_id else None,
|
|
"reporterName": self.reporter_name or "",
|
|
"reporterEmail": self.reporter_email or "",
|
|
"subject": self.subject or "",
|
|
"description": self.description or "",
|
|
"type": self.ticket_type or "",
|
|
"priority": self.priority or "medium",
|
|
"category": self.category or "",
|
|
"status": self.status,
|
|
"examInformation": self.exam_information,
|
|
"assignedTo": (
|
|
self.assigned_to_id.name if self.assigned_to_id else None
|
|
),
|
|
"createdAt": (
|
|
self.created_at.isoformat() if self.created_at else None
|
|
),
|
|
}
|