Split FSM into separate modules and switch customer to address book
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import models, fields, api
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class ContactCommunication(models.Model):
|
||||
_name = 'dsrpt.contact.communication'
|
||||
_description = 'Contact Communication'
|
||||
_order = 'is_preferred desc, id'
|
||||
|
||||
contact_id = fields.Many2one(
|
||||
'dsrpt.contact',
|
||||
string='Contact',
|
||||
required=True,
|
||||
ondelete='cascade'
|
||||
)
|
||||
communication_type_id = fields.Many2one(
|
||||
'dsrpt.communication.type',
|
||||
string='Type',
|
||||
required=True
|
||||
)
|
||||
value = fields.Char(string='Value', required=True)
|
||||
is_preferred = fields.Boolean(string='Preferred', default=False)
|
||||
|
||||
@api.constrains('is_preferred')
|
||||
def _check_single_preferred(self):
|
||||
"""Ensure only one preferred communication per contact"""
|
||||
for record in self:
|
||||
if record.is_preferred:
|
||||
# Проверяем есть ли другие preferred для этого контакта
|
||||
domain = [
|
||||
('contact_id', '=', record.contact_id.id),
|
||||
('is_preferred', '=', True),
|
||||
('id', '!=', record.id)
|
||||
]
|
||||
if self.search_count(domain) > 0:
|
||||
raise ValidationError(
|
||||
'Only one communication method can be marked as preferred per contact.'
|
||||
)
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
# Если это первый способ связи для контакта, делаем его preferred
|
||||
if 'contact_id' in vals and not vals.get('is_preferred'):
|
||||
existing = self.search_count([('contact_id', '=', vals['contact_id'])])
|
||||
if existing == 0:
|
||||
vals['is_preferred'] = True
|
||||
return super().create(vals)
|
||||
|
||||
def name_get(self):
|
||||
result = []
|
||||
for record in self:
|
||||
name = f"{record.communication_type_id.name}: {record.value}"
|
||||
if record.is_preferred:
|
||||
name = f"★ {name}"
|
||||
result.append((record.id, name))
|
||||
return result
|
||||
Reference in New Issue
Block a user