mirror of
https://github.com/ansible/awx.git
synced 2026-03-06 11:11:07 -03:30
Merge pull request #3808 from ghjm/workflow_approved_by
Add approved_by field to workflow approvals
This commit is contained in:
@@ -140,6 +140,7 @@ SUMMARIZABLE_FK_FIELDS = {
|
|||||||
'source_credential': DEFAULT_SUMMARY_FIELDS + ('kind', 'cloud', 'credential_type_id'),
|
'source_credential': DEFAULT_SUMMARY_FIELDS + ('kind', 'cloud', 'credential_type_id'),
|
||||||
'target_credential': DEFAULT_SUMMARY_FIELDS + ('kind', 'cloud', 'credential_type_id'),
|
'target_credential': DEFAULT_SUMMARY_FIELDS + ('kind', 'cloud', 'credential_type_id'),
|
||||||
'webhook_credential': DEFAULT_SUMMARY_FIELDS,
|
'webhook_credential': DEFAULT_SUMMARY_FIELDS,
|
||||||
|
'approved_or_denied_by': ('id', 'username', 'first_name', 'last_name'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -3501,6 +3502,8 @@ class WorkflowApprovalSerializer(UnifiedJobSerializer):
|
|||||||
kwargs={'pk': obj.workflow_approval_template.pk})
|
kwargs={'pk': obj.workflow_approval_template.pk})
|
||||||
res['approve'] = self.reverse('api:workflow_approval_approve', kwargs={'pk': obj.pk})
|
res['approve'] = self.reverse('api:workflow_approval_approve', kwargs={'pk': obj.pk})
|
||||||
res['deny'] = self.reverse('api:workflow_approval_deny', kwargs={'pk': obj.pk})
|
res['deny'] = self.reverse('api:workflow_approval_deny', kwargs={'pk': obj.pk})
|
||||||
|
if obj.approved_or_denied_by:
|
||||||
|
res['approved_or_denied_by'] = self.reverse('api:user_detail', kwargs={'pk': obj.approved_or_denied_by.pk})
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
# Generated by Django 2.2.4 on 2019-10-11 15:40
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
('main', '0096_v360_container_groups'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='workflowapproval',
|
||||||
|
name='approved_or_denied_by',
|
||||||
|
field=models.ForeignKey(default=None, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="{'class': 'workflowapproval', 'model_name': 'workflowapproval', 'app_label': 'main'}(class)s_approved+", to=settings.AUTH_USER_MODEL),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -13,6 +13,9 @@ from django.utils.translation import ugettext_lazy as _
|
|||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
#from django import settings as tower_settings
|
#from django import settings as tower_settings
|
||||||
|
|
||||||
|
# Django-CRUM
|
||||||
|
from crum import get_current_user
|
||||||
|
|
||||||
# AWX
|
# AWX
|
||||||
from awx.api.versioning import reverse
|
from awx.api.versioning import reverse
|
||||||
from awx.main.models import (prevent_search, accepts_json, UnifiedJobTemplate,
|
from awx.main.models import (prevent_search, accepts_json, UnifiedJobTemplate,
|
||||||
@@ -690,6 +693,14 @@ class WorkflowApproval(UnifiedJob, JobNotificationMixin):
|
|||||||
default=False,
|
default=False,
|
||||||
help_text=_("Shows when an approval node (with a timeout assigned to it) has timed out.")
|
help_text=_("Shows when an approval node (with a timeout assigned to it) has timed out.")
|
||||||
)
|
)
|
||||||
|
approved_or_denied_by = models.ForeignKey(
|
||||||
|
'auth.User',
|
||||||
|
related_name='%s(class)s_approved+',
|
||||||
|
default=None,
|
||||||
|
null=True,
|
||||||
|
editable=False,
|
||||||
|
on_delete=models.SET_NULL,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -711,6 +722,7 @@ class WorkflowApproval(UnifiedJob, JobNotificationMixin):
|
|||||||
|
|
||||||
def approve(self, request=None):
|
def approve(self, request=None):
|
||||||
self.status = 'successful'
|
self.status = 'successful'
|
||||||
|
self.approved_or_denied_by = get_current_user()
|
||||||
self.save()
|
self.save()
|
||||||
self.send_approval_notification('approved')
|
self.send_approval_notification('approved')
|
||||||
self.websocket_emit_status(self.status)
|
self.websocket_emit_status(self.status)
|
||||||
@@ -719,6 +731,7 @@ class WorkflowApproval(UnifiedJob, JobNotificationMixin):
|
|||||||
|
|
||||||
def deny(self, request=None):
|
def deny(self, request=None):
|
||||||
self.status = 'failed'
|
self.status = 'failed'
|
||||||
|
self.approved_or_denied_by = get_current_user()
|
||||||
self.save()
|
self.save()
|
||||||
self.send_approval_notification('denied')
|
self.send_approval_notification('denied')
|
||||||
self.websocket_emit_status(self.status)
|
self.websocket_emit_status(self.status)
|
||||||
|
|||||||
Reference in New Issue
Block a user