121 lines
3.4 KiB
Python
121 lines
3.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright 2026 Nexa Systems Inc.
|
|
# License OPL-1 (Odoo Proprietary License v1.0)
|
|
# Part of the Fusion Plating product family.
|
|
|
|
from odoo import _, api, fields, models
|
|
|
|
|
|
class FpValueRecognition(models.Model):
|
|
"""A peer recognition tied to a specific value.
|
|
|
|
Example: "I saw Sarah living Value #3 yesterday when she stayed late
|
|
to re-mask a customer part after first-article inspection flagged a
|
|
nick."
|
|
|
|
Recognitions start in draft, move to published, and can be archived
|
|
when they roll off a stand-up wall or a newsletter.
|
|
"""
|
|
_name = 'fusion.plating.value.recognition'
|
|
_description = 'Fusion Plating — Value Recognition'
|
|
_inherit = ['mail.thread', 'mail.activity.mixin']
|
|
_order = 'nomination_date desc, id desc'
|
|
|
|
name = fields.Char(
|
|
string='Title',
|
|
required=True,
|
|
tracking=True,
|
|
help='Short headline for the recognition, e.g. '
|
|
'"Sarah stayed late for the customer".',
|
|
default=lambda self: _('New Recognition'),
|
|
)
|
|
reference = fields.Char(
|
|
string='Reference',
|
|
readonly=True,
|
|
copy=False,
|
|
default=lambda self: _('New'),
|
|
)
|
|
value_id = fields.Many2one(
|
|
'fusion.plating.value',
|
|
string='Value',
|
|
required=True,
|
|
tracking=True,
|
|
ondelete='restrict',
|
|
)
|
|
set_id = fields.Many2one(
|
|
'fusion.plating.value.set',
|
|
string='Value Set',
|
|
related='value_id.set_id',
|
|
store=True,
|
|
readonly=True,
|
|
)
|
|
recognized_employee_id = fields.Many2one(
|
|
'hr.employee',
|
|
string='Recognized',
|
|
required=True,
|
|
tracking=True,
|
|
help='The person being recognized.',
|
|
)
|
|
nominated_by_id = fields.Many2one(
|
|
'res.users',
|
|
string='Nominated By',
|
|
default=lambda self: self.env.user,
|
|
tracking=True,
|
|
)
|
|
nomination_date = fields.Datetime(
|
|
string='Nominated On',
|
|
default=fields.Datetime.now,
|
|
tracking=True,
|
|
)
|
|
story = fields.Html(
|
|
string='Story',
|
|
help='What happened? Describe the moment you saw the value being '
|
|
'lived.',
|
|
)
|
|
state = fields.Selection(
|
|
[
|
|
('draft', 'Draft'),
|
|
('published', 'Published'),
|
|
('archived', 'Archived'),
|
|
],
|
|
string='Status',
|
|
default='draft',
|
|
required=True,
|
|
tracking=True,
|
|
)
|
|
company_id = fields.Many2one(
|
|
'res.company',
|
|
string='Company',
|
|
default=lambda self: self.env.company,
|
|
)
|
|
color = fields.Integer(
|
|
string='Color Index',
|
|
default=0,
|
|
)
|
|
|
|
@api.model_create_multi
|
|
def create(self, vals_list):
|
|
for vals in vals_list:
|
|
if not vals.get('reference') or vals['reference'] == _('New'):
|
|
vals['reference'] = self.env['ir.sequence'].next_by_code(
|
|
'fusion.plating.value.recognition'
|
|
) or _('New')
|
|
return super().create(vals_list)
|
|
|
|
def action_publish(self):
|
|
for rec in self:
|
|
rec.state = 'published'
|
|
rec.message_post(body=_('Recognition published.'))
|
|
return True
|
|
|
|
def action_archive_recognition(self):
|
|
for rec in self:
|
|
rec.state = 'archived'
|
|
rec.message_post(body=_('Recognition archived.'))
|
|
return True
|
|
|
|
def action_reset_to_draft(self):
|
|
for rec in self:
|
|
rec.state = 'draft'
|
|
return True
|