Split FSM into separate modules and switch customer to address book

This commit is contained in:
Ruslan Bakiev
2026-02-13 15:27:48 +07:00
parent 98a92286ce
commit dc58e1ffe4
46 changed files with 3125 additions and 152 deletions

View File

@@ -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