Files
gsinghpal fc3c966484 changes
2026-03-13 12:38:28 -04:00

79 lines
3.1 KiB
Python

# -*- coding: utf-8 -*-
from odoo import api, fields, models, _
class WheelchairSectionOption(models.Model):
_name = 'fusion.wc.section.option'
_description = 'Wheelchair Section Product Option'
_order = 'is_standard desc, sequence, id'
section_id = fields.Many2one('fusion.wc.section', string='Section',
required=True, ondelete='cascade', index=True)
# ── Parent product (template level) ──
product_tmpl_id = fields.Many2one('product.template',
string='Product', required=True, index=True,
help='The parent product. Variants (size, colour) are chosen '
'when the sales rep adds this item to an assessment.')
sequence = fields.Integer(string='Sequence', default=10)
is_standard = fields.Boolean(string='Standard Option', default=False,
help='Standard options are shown prominently; non-standard found via search')
# ── Variant count (computed) ──
variant_count = fields.Integer(string='Variants',
compute='_compute_variant_count')
# ── ADP info (from template) ──
adp_device_code = fields.Char(string='ADP Code',
related='product_tmpl_id.x_fc_adp_device_code', readonly=True)
adp_price = fields.Float(string='ADP Price',
related='product_tmpl_id.x_fc_adp_price', readonly=True)
list_price = fields.Float(string='Sale Price',
related='product_tmpl_id.list_price', readonly=True)
# Build type applicability (for seating sections)
available_build_types = fields.Selection([
('modular', 'Modular Only'),
('custom_fabricated', 'Custom Fabricated Only'),
('both', 'Both'),
], string='Build Types', default='both',
help='Which build types this option is available for')
requires_clinical_rationale = fields.Boolean(string='Requires Clinical Rationale',
help='Sales rep must provide clinical rationale when selecting this option')
# Compatibility rules
incompatible_option_ids = fields.Many2many(
'fusion.wc.section.option',
'wc_option_incompatible_rel',
'option_id', 'incompatible_option_id',
string='Incompatible With',
help='Cannot be selected together with these options')
requires_option_ids = fields.Many2many(
'fusion.wc.section.option',
'wc_option_requires_rel',
'option_id', 'required_option_id',
string='Requires Options',
help='These options must be selected first')
@api.depends('product_tmpl_id')
def _compute_variant_count(self):
for record in self:
if record.product_tmpl_id:
record.variant_count = record.product_tmpl_id.product_variant_count
else:
record.variant_count = 0
@api.depends('product_tmpl_id', 'section_id')
def _compute_display_name(self):
for record in self:
parts = []
if record.section_id:
parts.append(record.section_id.name)
if record.product_tmpl_id:
parts.append(record.product_tmpl_id.display_name)
record.display_name = ' / '.join(parts) if parts else ''