# -*- coding: utf-8 -*- # Copyright 2024-2026 Nexa Systems Inc. # License OPL-1 (Odoo Proprietary License v1.0) from odoo import api, fields, models class FusionRepairIntakeAnswer(models.Model): """An answer to a single intake question on a specific repair order. Persists raw answer values for audit + reporting + AI / catalogue matching. """ _name = 'fusion.repair.intake.answer' _description = 'Repair Intake Answer' _order = 'repair_id, sequence, id' repair_id = fields.Many2one( 'repair.order', string='Repair Order', required=True, ondelete='cascade', index=True, ) question_id = fields.Many2one( 'fusion.repair.intake.question', string='Question', required=True, ondelete='restrict', ) question_name = fields.Char( related='question_id.name', string='Question', store=True, ) question_type = fields.Selection( related='question_id.question_type', store=True, ) sequence = fields.Integer( related='question_id.sequence', store=True, ) # Typed value fields - one per supported type, plus a display string. value_char = fields.Char(string='Text Answer') value_text = fields.Text(string='Long Text Answer') value_selection = fields.Char(string='Choice Answer') value_boolean = fields.Boolean(string='Yes/No Answer') value_integer = fields.Integer(string='Number Answer') value_date = fields.Date(string='Date Answer') value_display = fields.Char( string='Answer', compute='_compute_value_display', store=True, ) company_id = fields.Many2one( 'res.company', related='repair_id.company_id', store=True, index=True, ) @api.depends( 'question_type', 'value_char', 'value_text', 'value_selection', 'value_boolean', 'value_integer', 'value_date', ) def _compute_value_display(self): for answer in self: if answer.question_type == 'char': answer.value_display = answer.value_char or '' elif answer.question_type == 'text': answer.value_display = (answer.value_text or '')[:200] elif answer.question_type == 'selection': answer.value_display = answer.value_selection or '' elif answer.question_type == 'boolean': answer.value_display = 'Yes' if answer.value_boolean else 'No' elif answer.question_type == 'integer': answer.value_display = str(answer.value_integer or 0) elif answer.question_type == 'date': answer.value_display = ( fields.Date.to_string(answer.value_date) if answer.value_date else '' ) else: answer.value_display = ''