from odoo import api, fields, models from dateutil.relativedelta import relativedelta class FlDiscovery(models.Model): """ Phase 3 — Full implementation. Phase 1: Stub with core fields. Covers all FL discovery methods: - Interrogatories (FL 1.340) — 30 days to respond - Request for Production (FL 1.350) — 30 days to respond - Request for Admissions (FL 1.370) — 30 days to respond - Subpoena — third party documents (FL 1.351) - Depositions — tracked in fl.deposition """ _name = 'fl.discovery' _description = 'Discovery Item' _inherit = ['mail.thread'] _order = 'served_date asc' case_id = fields.Many2one( 'fl.case', required=True, ondelete='cascade', index=True ) discovery_type = fields.Selection([ ('interrogatories', 'Interrogatories (FL 1.340)'), ('production', 'Request for Production (FL 1.350)'), ('admissions', 'Request for Admissions (FL 1.370)'), ('subpoena', 'Subpoena — Third Party (FL 1.351)'), ('deposition', 'Deposition (FL 1.310)'), ], string='Discovery Type', required=True) directed_to = fields.Selection([ ('petitioner', 'Petitioner'), ('respondent', 'Respondent'), ('third_party', 'Third Party'), ], string='Directed To', required=True) third_party_id = fields.Many2one( 'res.partner', string='Third Party' ) description = fields.Char(string='Description / Subject') served_date = fields.Date(string='Served Date') response_due_date = fields.Date( string='Response Due Date', compute='_compute_response_due', store=True, help='FL 1.340/1.350/1.370: 30 days to respond' ) response_received_date = fields.Date(string='Response Received Date') response_complete = fields.Boolean(string='Response Complete') objections_raised = fields.Boolean(string='Objections Raised') objection_detail = fields.Text(string='Objection Details') deficiency_notice_sent = fields.Boolean(string='Deficiency Notice Sent') state = fields.Selection([ ('draft', 'Drafting'), ('served', 'Served'), ('responded', 'Response Received'), ('deficient', 'Response Deficient'), ('compelled', 'Motion to Compel Filed'), ('complete', 'Complete'), ], string='Status', default='draft', tracking=True) notes = fields.Text(string='Notes') @api.depends('served_date', 'discovery_type') def _compute_response_due(self): for rec in self: if rec.served_date and rec.discovery_type != 'deposition': rec.response_due_date = ( rec.served_date + relativedelta(days=30) ) else: rec.response_due_date = False