diff --git a/apps/authentication/models.py b/apps/authentication/models.py index 614906c73..e8d4b6114 100644 --- a/apps/authentication/models.py +++ b/apps/authentication/models.py @@ -54,13 +54,14 @@ class LoginConfirmSetting(CommonModelMixin): if request: remote_addr = get_request_ip(request) city = get_ip_city(remote_addr) + datetime = timezone.now().strftime('%Y-%m-%d %H:%M:%S') body = __("{user_key}: {username}
" "IP: {ip}
" "{city_key}: {city}
" "{date_key}: {date}
").format( user_key=__("User"), username=self.user, ip=remote_addr, city_key=_("City"), city=city, - date_key=__("Datetime"), date=timezone.now() + date_key=__("Datetime"), date=datetime ) else: body = '' diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 83f364a18..e5c3a3820 100644 Binary files a/apps/locale/zh/LC_MESSAGES/django.mo and b/apps/locale/zh/LC_MESSAGES/django.mo differ diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index fcdd6011c..f284a666a 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Jumpserver 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-15 17:39+0800\n" +"POT-Creation-Date: 2019-11-18 11:41+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: Jumpserver team\n" @@ -259,7 +259,7 @@ msgstr "创建日期" #: perms/templates/perms/remote_app_permission_detail.html:94 #: settings/models.py:34 terminal/models.py:33 #: terminal/templates/terminal/terminal_detail.html:63 -#: tickets/templates/tickets/ticket_detail.html:106 users/models/group.py:15 +#: tickets/templates/tickets/ticket_detail.html:104 users/models/group.py:15 #: users/models/user.py:443 users/templates/users/user_detail.html:130 #: users/templates/users/user_group_detail.html:67 #: users/templates/users/user_group_list.html:37 @@ -527,7 +527,7 @@ msgstr "创建远程应用" #: settings/templates/settings/terminal_setting.html:107 #: terminal/templates/terminal/session_list.html:36 #: terminal/templates/terminal/terminal_list.html:36 -#: tickets/templates/tickets/ticket_list.html:93 +#: tickets/templates/tickets/ticket_list.html:94 #: users/templates/users/_granted_assets.html:34 #: users/templates/users/user_group_list.html:38 #: users/templates/users/user_list.html:41 @@ -1127,9 +1127,9 @@ msgstr "默认资产组" #: terminal/templates/terminal/command_list.html:65 #: terminal/templates/terminal/session_list.html:27 #: terminal/templates/terminal/session_list.html:71 tickets/models/ticket.py:32 -#: tickets/models/ticket.py:85 tickets/templates/tickets/ticket_detail.html:32 +#: tickets/models/ticket.py:104 tickets/templates/tickets/ticket_detail.html:32 #: tickets/templates/tickets/ticket_list.html:22 -#: tickets/templates/tickets/ticket_list.html:88 users/forms.py:339 +#: tickets/templates/tickets/ticket_list.html:89 users/forms.py:339 #: users/models/user.py:149 users/models/user.py:165 users/models/user.py:537 #: users/serializers/group.py:21 #: users/templates/users/user_group_detail.html:78 @@ -2306,7 +2306,7 @@ msgstr "原因" #: audits/models.py:88 audits/templates/audits/login_log_list.html:64 #: tickets/templates/tickets/ticket_detail.html:34 #: tickets/templates/tickets/ticket_list.html:24 -#: tickets/templates/tickets/ticket_list.html:89 +#: tickets/templates/tickets/ticket_list.html:90 #: xpack/plugins/cloud/models.py:275 xpack/plugins/cloud/models.py:310 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:70 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:65 @@ -2366,7 +2366,7 @@ msgstr "ID" msgid "UA" msgstr "Agent" -#: audits/templates/audits/login_log_list.html:61 authentication/models.py:62 +#: audits/templates/audits/login_log_list.html:61 authentication/models.py:63 msgid "City" msgstr "城市" @@ -4208,7 +4208,7 @@ msgstr "批量命令" msgid "Task monitor" msgstr "任务监控" -#: templates/_nav.html:128 tickets/views.py:17 tickets/views.py:32 +#: templates/_nav.html:128 tickets/views.py:17 tickets/views.py:34 msgid "Tickets" msgstr "工单管理" @@ -4562,7 +4562,8 @@ msgid "Accept" msgstr "接受" #: terminal/templates/terminal/terminal_list.html:80 -#: tickets/models/ticket.py:30 tickets/templates/tickets/ticket_list.html:95 +#: tickets/models/ticket.py:30 tickets/templates/tickets/ticket_detail.html:101 +#: tickets/templates/tickets/ticket_list.html:96 msgid "Reject" msgstr "拒绝" @@ -4600,11 +4601,11 @@ msgid "" msgstr "你可以使用ssh客户端工具连接终端" #: tickets/models/ticket.py:17 tickets/models/ticket.py:69 -#: tickets/templates/tickets/ticket_list.html:90 +#: tickets/templates/tickets/ticket_list.html:91 msgid "Open" msgstr "开启" -#: tickets/models/ticket.py:18 tickets/templates/tickets/ticket_list.html:91 +#: tickets/models/ticket.py:18 tickets/templates/tickets/ticket_list.html:92 msgid "Closed" msgstr "关闭" @@ -4616,20 +4617,21 @@ msgstr "一般" msgid "Login confirm" msgstr "登录复核" -#: tickets/models/ticket.py:29 tickets/templates/tickets/ticket_list.html:94 +#: tickets/models/ticket.py:29 tickets/templates/tickets/ticket_detail.html:100 +#: tickets/templates/tickets/ticket_list.html:95 msgid "Approve" msgstr "同意" -#: tickets/models/ticket.py:33 tickets/models/ticket.py:86 +#: tickets/models/ticket.py:33 tickets/models/ticket.py:105 msgid "User display name" msgstr "用户显示名称" #: tickets/models/ticket.py:35 tickets/templates/tickets/ticket_list.html:21 -#: tickets/templates/tickets/ticket_list.html:87 +#: tickets/templates/tickets/ticket_list.html:88 msgid "Title" msgstr "标题" -#: tickets/models/ticket.py:36 tickets/models/ticket.py:87 +#: tickets/models/ticket.py:36 tickets/models/ticket.py:106 msgid "Body" msgstr "内容" @@ -4657,8 +4659,12 @@ msgstr "待处理人名称" msgid "{} {} this ticket" msgstr "{} {} 这个工单" +#: tickets/models/ticket.py:81 +msgid "this ticket" +msgstr "这个工单" + #: tickets/templates/tickets/ticket_detail.html:66 -#: tickets/templates/tickets/ticket_detail.html:81 +#: tickets/templates/tickets/ticket_detail.html:80 msgid "ago" msgstr "前" @@ -4738,7 +4744,7 @@ msgstr "" msgid "Ticket list" msgstr "工单列表" -#: tickets/views.py:33 +#: tickets/views.py:35 msgid "Ticket detail" msgstr "工单详情" diff --git a/apps/tickets/models/ticket.py b/apps/tickets/models/ticket.py index 98712da1e..0db499817 100644 --- a/apps/tickets/models/ticket.py +++ b/apps/tickets/models/ticket.py @@ -78,7 +78,7 @@ class Ticket(CommonModelMixin): def create_action_comment(self, action, user): action_display = dict(self.ACTION_CHOICES).get(action) - body = '{} {} {}'.format(user, action_display, _("this order")) + body = '{} {} {}'.format(user, action_display, _("this ticket")) self.comments.create(body=body, user=user, user_display=str(user)) def perform_action(self, action, user): @@ -89,6 +89,12 @@ class Ticket(CommonModelMixin): self.assignees_display = str(user) self.save() + def is_assignee(self, user): + return self.assignees.filter(id=user.id).exists() + + def is_user(self, user): + return self.user == user + class Meta: ordering = ('-date_created',) diff --git a/apps/tickets/serializers/ticket.py b/apps/tickets/serializers/ticket.py index 9eb2d777b..b7bcde25a 100644 --- a/apps/tickets/serializers/ticket.py +++ b/apps/tickets/serializers/ticket.py @@ -13,7 +13,7 @@ class TicketSerializer(serializers.ModelSerializer): fields = [ 'id', 'user', 'user_display', 'title', 'body', 'assignees', 'assignees_display', - 'status', 'date_created', 'date_updated', + 'status', 'action', 'date_created', 'date_updated', 'type_display', 'action_display', ] read_only_fields = [ @@ -32,6 +32,8 @@ class TicketSerializer(serializers.ModelSerializer): if action and user not in instance.assignees.all(): error = {"action": "Only assignees can update"} raise serializers.ValidationError(error) + print(validated_data) + print(instance.status) if instance.status == instance.STATUS_CLOSED: validated_data.pop('action') instance = super().update(instance, validated_data) diff --git a/apps/tickets/templates/tickets/ticket_detail.html b/apps/tickets/templates/tickets/ticket_detail.html index ec25f50e7..bcbe83045 100644 --- a/apps/tickets/templates/tickets/ticket_detail.html +++ b/apps/tickets/templates/tickets/ticket_detail.html @@ -96,7 +96,7 @@
- {% if object.type == object.TYPE_LOGIN_CONFIRM %} + {% if has_action_perm %} {% trans 'Approve' %} {% trans 'Reject' %} {% endif %} diff --git a/apps/tickets/views.py b/apps/tickets/views.py index 0432ec6bc..84a08eb1c 100644 --- a/apps/tickets/views.py +++ b/apps/tickets/views.py @@ -27,9 +27,12 @@ class TicketDetailView(PermissionsMixin, mixins.TicketMixin, DetailView): queryset = Ticket.objects.all() def get_context_data(self, **kwargs): + ticket = self.get_object() + has_action_perm = ticket.is_assignee(self.request.user) context = super().get_context_data(**kwargs) context.update({ 'app': _("Tickets"), - 'action': _("Ticket detail") + 'action': _("Ticket detail"), + 'has_action_perm': has_action_perm, }) return context