"""
https://bcrm.carbonsoft.ru/desk/Task/CLD-1625032147
Механизм блокировки версии релиза
1) Если есть задачи с этим приоритетом  - релиз нельзя перевести в статус тайп клозе
2) Задача с таким приоритетом  - запрещено менять приоритет и удалять из списка
   (добавлять можно) Все кроме овнера задачи, в том числе менять овнера задачи

Этот модуль реализует второй пункт.
"""
def run(self):
    """Основная функция"""
    # Новая задача
    if not self.logic_type:
        return
    # Пропускаем эпики
    if 'epic' in self.logic_type.code:
        return
    # Если задача ещё не запланирована в релиз - пропускаем
    if self.fix_versions.is_changed and not self.fix_versions.old:
        return
    # Постановщик может менять любые параметры
    if g.current_person == self.cmf_owner:
        return

    # Надо убедиться, что есть приоритет
    try:
        old_priority = self.priority.old or 0
        old_priority = int(old_priority)
    except Exception as e:
        cmf_alert(f"""Ошибка автоматизации релизов!
 {self.priority.old=}, {e=}.
 Скопируйте сообщение и напишите администратору""")
        return
    # Только для задач с блокирующим приоритетом
    if old_priority < 3:
        return

    if self.priority.is_changed:
        msg='Менять приоритет блокирующей задачи может только постановщик!'
        cmf_alert(msg, abort=True)
    if self.cmf_owner.is_changed:
        msg='Менять постановщика блокирующей задачи может только постановщик!',
        cmf_alert(msg, abort=True)
    if self.fix_versions.is_changed:
        for r in self.fix_versions.old:
            if r not in self.fix_versions.new:
                msg = 'Убирать задачу из релиза может только постановщик!'
                cmf_alert(msg, abort=True)
