Guest User

Untitled

a guest
Feb 18th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.43 KB | None | 0 0
  1. def update(self, instance, validated_data):
  2. levels = self.initial_data.get('levels')
  3. categories = self.initial_data['selectedCategories']
  4. instance.name = validated_data.get('name', instance.name)
  5. instance.description = validated_data.get('description', instance.description)
  6. instance.tenant = self.context['request'].user.tenant
  7. levels_it_has = [workflow_level.level for workflow_level in WorkflowLevel.objects.filter(workflow=instance).order_by('level') ]
  8.  
  9. for level in levels:
  10. # Check if editing existing level
  11. if WorkflowLevel.objects.filter(workflow=instance,level=level['level']).exists():
  12. level_var = WorkflowLevel.objects.get(workflow=instance,level=level['level'])
  13. level_var.level = level['level']
  14. level_var.operation=level['operation']
  15. level_var.save()
  16. #If creating new Level
  17. else:
  18. level_var = WorkflowLevel()
  19. level_var.workflow = instance
  20. level_var.level = level['level']
  21. level_var.operation = level['operation']
  22. level_var.save()
  23.  
  24. ########### Level Permissions ############3#########
  25.  
  26. for permission in level['workflow_permissions']:
  27. permission_obj = WorkflowPermission.objects.get(short_name=permission['short_name'])
  28. permissions_in_level = [ perm.permission.short_name for perm in
  29. WorkflowLevelPermission.objects.filter(
  30. level=level_var,permission=permission_obj,
  31. level__workflow=instance).select_related('permission') ]
  32.  
  33.  
  34. if not level_permissions.exists():
  35. permission = WorkflowLevelPermission()
  36. permission.level = level_var
  37. permission.permission = permission_obj
  38. permission.save()
  39.  
  40. new_perms=[ perm.permission.short_name for perm in
  41. WorkflowLevelPermission.objects.filter(
  42. level=level_var,
  43. level__workflow=instance).select_related('permission') ]
  44.  
  45.  
  46. ####################### DELETE PERMISSIONS ####################################
  47.  
  48. if len(new_perms) > len(level['workflow_permissions']):
  49. short_names = [perm['short_name'] for perm in level['workflow_permissions'] ]
  50. perm_to_delete = [item for item in new_perms if item not in short_names]
  51. workflow_permission_to_delete = WorkflowLevelPermission.objects.filter(level=level_var,level__workflow=instance,permission__short_name__in=perm_to_delete)
  52. workflow_permission_to_delete.delete()
  53.  
  54. if len(level['workflow_permissions']) == 0:
  55. WorkflowLevelPermission.objects.filter(level=level_var,level__workflow=instance).delete()
  56.  
  57.  
  58. ####################### DELETE LEVELS ####################################
  59.  
  60.  
  61. if len(levels_it_has) > len(levels):
  62. level_numbers = [lev['level'] for lev in levels]
  63. level_to_delete = [item for item in levels_it_has if item not in level_numbers]
  64. workflow_level_to_delete = WorkflowLevel.objects.filter(workflow=instance,level__in=level_to_delete)
  65. workflow_level_to_delete.delete()
  66.  
  67.  
  68.  
  69. ##########################################################################
  70.  
  71. for category in categories:
  72. if not WorkflowCategoryLink.objects.filter(workflow=instance,target_type__short_name=category['short_name']):
  73. workflow_category = WorkflowCategory.objects.get(short_name=category['short_name'])
  74. workflow_category_link = WorkflowCategoryLink()
  75. workflow_category_link.workflow=instance
  76. workflow_category_link.target_type=workflow_category
  77. workflow_category_link.save()
  78.  
  79. new_categories = [cat.target_type.short_name for cat in WorkflowCategoryLink.objects.filter(workflow=instance).select_related('target_type')]
  80.  
  81. ######################## DELETE CATEGORIES ##############################
  82.  
  83. if len(new_categories)> len(categories):
  84. short_names = [cacat['short_name'] for cat in categories]
  85. category_to_delete = [item for item in new_categories if item not in short_names]
  86. category_link_to_delete = WorkflowCategoryLink.objects.filter(workflow=instance,target_type__short_name__in=category_to_delete)
  87. category_link_to_delete.delete()
  88.  
  89. instance.save()
  90. return instance
Add Comment
Please, Sign In to add comment