changes
This commit is contained in:
78
fusion_quotations/models/wc_section_option.py
Normal file
78
fusion_quotations/models/wc_section_option.py
Normal file
@@ -0,0 +1,78 @@
|
||||
# -*- 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 ''
|
||||
Reference in New Issue
Block a user