Initial commit
This commit is contained in:
82
fusion_claims/wizard/assessment_completed_wizard.py
Normal file
82
fusion_claims/wizard/assessment_completed_wizard.py
Normal file
@@ -0,0 +1,82 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright 2024-2025 Nexa Systems Inc.
|
||||
# License OPL-1 (Odoo Proprietary License v1.0)
|
||||
|
||||
from odoo import models, fields, api, _
|
||||
from odoo.exceptions import UserError
|
||||
from markupsafe import Markup
|
||||
import logging
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class AssessmentCompletedWizard(models.TransientModel):
|
||||
"""Wizard to record assessment completion date."""
|
||||
_name = 'fusion_claims.assessment.completed.wizard'
|
||||
_description = 'Assessment Completed Wizard'
|
||||
|
||||
sale_order_id = fields.Many2one(
|
||||
'sale.order',
|
||||
string='Sale Order',
|
||||
required=True,
|
||||
readonly=True,
|
||||
)
|
||||
|
||||
completion_date = fields.Date(
|
||||
string='Assessment Completion Date',
|
||||
required=True,
|
||||
default=fields.Date.context_today,
|
||||
)
|
||||
|
||||
notes = fields.Text(
|
||||
string='Assessment Notes',
|
||||
help='Any notes from the assessment',
|
||||
)
|
||||
|
||||
@api.model
|
||||
def default_get(self, fields_list):
|
||||
res = super().default_get(fields_list)
|
||||
active_id = self._context.get('active_id')
|
||||
if active_id:
|
||||
order = self.env['sale.order'].browse(active_id)
|
||||
res['sale_order_id'] = order.id
|
||||
return res
|
||||
|
||||
def action_complete(self):
|
||||
"""Mark assessment as completed."""
|
||||
self.ensure_one()
|
||||
|
||||
order = self.sale_order_id
|
||||
|
||||
if order.x_fc_adp_application_status != 'assessment_scheduled':
|
||||
raise UserError("Can only complete assessment from 'Assessment Scheduled' status.")
|
||||
|
||||
# Validate completion date is not before start date
|
||||
if order.x_fc_assessment_start_date and self.completion_date < order.x_fc_assessment_start_date:
|
||||
raise UserError(
|
||||
f"Completion date ({self.completion_date}) cannot be before "
|
||||
f"assessment start date ({order.x_fc_assessment_start_date})."
|
||||
)
|
||||
|
||||
# Update sale order
|
||||
order.with_context(skip_status_validation=True).write({
|
||||
'x_fc_adp_application_status': 'assessment_completed',
|
||||
'x_fc_assessment_end_date': self.completion_date,
|
||||
})
|
||||
|
||||
# Post to chatter
|
||||
notes_html = f'<p style="margin: 4px 0 0 0;"><strong>Notes:</strong> {self.notes}</p>' if self.notes else ''
|
||||
|
||||
order.message_post(
|
||||
body=Markup(
|
||||
'<div style="background: #d4edda; border-left: 4px solid #28a745; padding: 12px; margin: 8px 0; border-radius: 4px;">'
|
||||
'<h4 style="color: #28a745; margin: 0 0 8px 0;"><i class="fa fa-check-square-o"/> Assessment Completed</h4>'
|
||||
f'<p style="margin: 0;"><strong>Completion Date:</strong> {self.completion_date.strftime("%B %d, %Y")}</p>'
|
||||
f'{notes_html}'
|
||||
'</div>'
|
||||
),
|
||||
message_type='notification',
|
||||
subtype_xmlid='mail.mt_note',
|
||||
)
|
||||
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
Reference in New Issue
Block a user