mirror of
https://github.com/jumpserver/jumpserver.git
synced 2026-04-10 22:37:34 +00:00
* perf: 重构 ticket * perf: 优化 tickets * perf: 暂存 * perf: 建立 ticket model * perf: 暂存一下 * perf: 修改 tickets * perf: 修改 import * perf: 修改model * perf: 暂存一波 * perf: 修改... * del process_map field * 工单重构 * 资产 应用对接前端 * perf: 修改 ticket * fix: bug * 修改迁移文件 * 添加其他api * 去掉process_map * perf: 优化去掉 signal * perf: 修改这里 * 修改一点 * perf: 修改工单 * perf: 修改状态 * perf: 修改工单流转 * step 状态切换 * perf: 修改 ticket open * perf: 修改流程 * perf: stash it * 改又改 * stash it * perf: stash * stash * migrate * perf migrate * 调整一下 * 修复bug * 修改一点 * 修改一点 * 优化一波 * perf: ticket migrations Co-authored-by: ibuler <ibuler@qq.com> Co-authored-by: feng626 <1304903146@qq.com>
64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
from django.db.transaction import atomic
|
|
from django.db.models import Model
|
|
from django.utils.translation import ugettext as _
|
|
from rest_framework import serializers
|
|
|
|
from orgs.utils import tmp_to_org
|
|
from tickets.models import Ticket
|
|
|
|
__all__ = ['DefaultPermissionName', 'get_default_permission_name', 'BaseApplyAssetApplicationSerializer']
|
|
|
|
|
|
def get_default_permission_name(ticket):
|
|
name = ''
|
|
if isinstance(ticket, Ticket):
|
|
name = _('Created by ticket ({}-{})').format(ticket.title, str(ticket.id)[:4])
|
|
return name
|
|
|
|
|
|
class DefaultPermissionName(object):
|
|
default = None
|
|
|
|
@staticmethod
|
|
def _construct_default_permission_name(serializer_field):
|
|
permission_name = ''
|
|
ticket = serializer_field.root.instance
|
|
if isinstance(ticket, Ticket):
|
|
permission_name = get_default_permission_name(ticket)
|
|
return permission_name
|
|
|
|
def set_context(self, serializer_field):
|
|
self.default = self._construct_default_permission_name(serializer_field)
|
|
|
|
def __call__(self):
|
|
return self.default
|
|
|
|
|
|
class BaseApplyAssetApplicationSerializer(serializers.Serializer):
|
|
permission_model: Model
|
|
|
|
def validate(self, attrs):
|
|
attrs = super().validate(attrs)
|
|
|
|
apply_date_start = attrs['apply_date_start'].strftime('%Y-%m-%d %H:%M:%S')
|
|
apply_date_expired = attrs['apply_date_expired'].strftime('%Y-%m-%d %H:%M:%S')
|
|
|
|
if apply_date_expired <= apply_date_start:
|
|
error = _('The expiration date should be greater than the start date')
|
|
raise serializers.ValidationError({'apply_date_expired': error})
|
|
|
|
attrs['apply_date_start'] = apply_date_start
|
|
attrs['apply_date_expired'] = apply_date_expired
|
|
return attrs
|
|
|
|
@atomic
|
|
def create(self, validated_data):
|
|
instance = super().create(validated_data)
|
|
name = _('Created by ticket ({}-{})').format(instance.title, str(instance.id)[:4])
|
|
with tmp_to_org(instance.org_id):
|
|
if not self.permission_model.objects.filter(name=name).exists():
|
|
instance.apply_permission_name = name
|
|
instance.save()
|
|
return instance
|
|
raise serializers.ValidationError(_('Permission named `{}` already exists'.format(name)))
|