Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def update(self, instance, validated_data):
- levels = self.initial_data.get('levels')
- categories = self.initial_data['selectedCategories']
- instance.name = validated_data.get('name', instance.name)
- instance.description = validated_data.get('description', instance.description)
- instance.tenant = self.context['request'].user.tenant
- levels_it_has = [workflow_level.level for workflow_level in WorkflowLevel.objects.filter(workflow=instance).order_by('level') ]
- for level in levels:
- # Check if editing existing level
- if WorkflowLevel.objects.filter(workflow=instance,level=level['level']).exists():
- level_var = WorkflowLevel.objects.get(workflow=instance,level=level['level'])
- level_var.level = level['level']
- level_var.operation=level['operation']
- level_var.save()
- #If creating new Level
- else:
- level_var = WorkflowLevel()
- level_var.workflow = instance
- level_var.level = level['level']
- level_var.operation = level['operation']
- level_var.save()
- ########### Level Permissions ############3#########
- for permission in level['workflow_permissions']:
- permission_obj = WorkflowPermission.objects.get(short_name=permission['short_name'])
- permissions_in_level = [ perm.permission.short_name for perm in
- WorkflowLevelPermission.objects.filter(
- level=level_var,permission=permission_obj,
- level__workflow=instance).select_related('permission') ]
- if not level_permissions.exists():
- permission = WorkflowLevelPermission()
- permission.level = level_var
- permission.permission = permission_obj
- permission.save()
- new_perms=[ perm.permission.short_name for perm in
- WorkflowLevelPermission.objects.filter(
- level=level_var,
- level__workflow=instance).select_related('permission') ]
- ####################### DELETE PERMISSIONS ####################################
- if len(new_perms) > len(level['workflow_permissions']):
- short_names = [perm['short_name'] for perm in level['workflow_permissions'] ]
- perm_to_delete = [item for item in new_perms if item not in short_names]
- workflow_permission_to_delete = WorkflowLevelPermission.objects.filter(level=level_var,level__workflow=instance,permission__short_name__in=perm_to_delete)
- workflow_permission_to_delete.delete()
- if len(level['workflow_permissions']) == 0:
- WorkflowLevelPermission.objects.filter(level=level_var,level__workflow=instance).delete()
- ####################### DELETE LEVELS ####################################
- if len(levels_it_has) > len(levels):
- level_numbers = [lev['level'] for lev in levels]
- level_to_delete = [item for item in levels_it_has if item not in level_numbers]
- workflow_level_to_delete = WorkflowLevel.objects.filter(workflow=instance,level__in=level_to_delete)
- workflow_level_to_delete.delete()
- ##########################################################################
- for category in categories:
- if not WorkflowCategoryLink.objects.filter(workflow=instance,target_type__short_name=category['short_name']):
- workflow_category = WorkflowCategory.objects.get(short_name=category['short_name'])
- workflow_category_link = WorkflowCategoryLink()
- workflow_category_link.workflow=instance
- workflow_category_link.target_type=workflow_category
- workflow_category_link.save()
- new_categories = [cat.target_type.short_name for cat in WorkflowCategoryLink.objects.filter(workflow=instance).select_related('target_type')]
- ######################## DELETE CATEGORIES ##############################
- if len(new_categories)> len(categories):
- short_names = [cacat['short_name'] for cat in categories]
- category_to_delete = [item for item in new_categories if item not in short_names]
- category_link_to_delete = WorkflowCategoryLink.objects.filter(workflow=instance,target_type__short_name__in=category_to_delete)
- category_link_to_delete.delete()
- instance.save()
- return instance
Add Comment
Please, Sign In to add comment