48 lines
2.1 KiB
Python
48 lines
2.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from odoo import api, fields, models, _
|
|
|
|
|
|
class ConfigFlowStep(models.Model):
|
|
_name = 'fusion.wc.config.flow.step'
|
|
_description = 'Configuration Flow Form Step'
|
|
_order = 'sequence, id'
|
|
|
|
flow_id = fields.Many2one('fusion.wc.config.flow', string='Flow',
|
|
required=True, ondelete='cascade', index=True)
|
|
sequence = fields.Integer(string='Sequence', default=10)
|
|
name = fields.Char(string='Step Name', required=True,
|
|
help='Display name shown in the step indicator, e.g. "Client Info", "Measurements"')
|
|
|
|
step_type = fields.Selection([
|
|
('client_info', 'Client Information'),
|
|
('measurements', 'Measurements'),
|
|
('product_select', 'Product Selection'),
|
|
('options', 'Options & Accessories'),
|
|
('review', 'Review & Submit'),
|
|
('custom', 'Custom Fields'),
|
|
], string='Step Type', required=True, default='custom')
|
|
|
|
icon = fields.Char(string='Icon', default='fa-circle',
|
|
help='FontAwesome icon class for the step indicator')
|
|
|
|
# For product_select / options steps — which section to filter by
|
|
section_id = fields.Many2one('fusion.wc.section', string='Section',
|
|
help='Link to a wheelchair/equipment section for product filtering')
|
|
section_code = fields.Char(string='Section Code',
|
|
help='Alternative to section_id — match section by code. '
|
|
'Supports comma-separated codes for options steps.')
|
|
|
|
# For measurements / custom steps — JSON field definitions
|
|
fields_json = fields.Text(string='Field Definitions (JSON)',
|
|
help='JSON array of field definitions for dynamic rendering. '
|
|
'Each entry: {"name": "field_name", "label": "Display Label", '
|
|
'"type": "float|integer|selection|char|text|boolean", '
|
|
'"unit": "inches", "required": true, '
|
|
'"options": [["value", "Label"], ...]}')
|
|
|
|
help_text = fields.Text(string='Help Text',
|
|
help='Instructions displayed at the top of this step')
|
|
is_required = fields.Boolean(string='Required', default=True,
|
|
help='If true, this step must be completed before proceeding')
|