diff --git a/api/tacticalrmm/automation/views.py b/api/tacticalrmm/automation/views.py index 67534642..baa0995e 100644 --- a/api/tacticalrmm/automation/views.py +++ b/api/tacticalrmm/automation/views.py @@ -129,7 +129,14 @@ class GetRelated(APIView): response = {} policy = ( - Policy.objects.filter(pk=pk).prefetch_related("clients", "sites").first() + Policy.objects.filter(pk=pk) + .prefetch_related( + "workstation_clients", + "workstation_sites", + "server_clients", + "server_sites", + ) + .first() ) response["clients"] = ClientSerializer(policy.clients.all(), many=True).data @@ -157,7 +164,7 @@ class GetRelated(APIView): related_type = request.data["type"] pk = request.data["pk"] - #If policy is set in request + # If policy is set in request if request.data["policy"] != 0: policy = get_object_or_404(Policy, pk=request.data["policy"]) diff --git a/api/tacticalrmm/clients/migrations/0004_auto_20200821_2115.py b/api/tacticalrmm/clients/migrations/0004_auto_20200821_2115.py new file mode 100644 index 00000000..e3bab5cc --- /dev/null +++ b/api/tacticalrmm/clients/migrations/0004_auto_20200821_2115.py @@ -0,0 +1,43 @@ +# Generated by Django 3.1 on 2020-08-21 21:15 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('automation', '0004_auto_20200617_0332'), + ('clients', '0003_auto_20200609_1607'), + ] + + operations = [ + migrations.RemoveField( + model_name='client', + name='policy', + ), + migrations.RemoveField( + model_name='site', + name='policy', + ), + migrations.AddField( + model_name='client', + name='server_policy', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='server_clients', to='automation.policy'), + ), + migrations.AddField( + model_name='client', + name='workstation_policy', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='workstation_clients', to='automation.policy'), + ), + migrations.AddField( + model_name='site', + name='server_policy', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='server_sites', to='automation.policy'), + ), + migrations.AddField( + model_name='site', + name='workstation_policy', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='workstation_sites', to='automation.policy'), + ), + ] diff --git a/api/tacticalrmm/clients/models.py b/api/tacticalrmm/clients/models.py index 57e3468c..4502b371 100644 --- a/api/tacticalrmm/clients/models.py +++ b/api/tacticalrmm/clients/models.py @@ -4,9 +4,17 @@ from agents.models import Agent class Client(models.Model): client = models.CharField(max_length=255, unique=True) - policy = models.ForeignKey( + workstation_policy = models.ForeignKey( "automation.Policy", - related_name="clients", + related_name="workstation_clients", + null=True, + blank=True, + on_delete=models.SET_NULL, + ) + + server_policy = models.ForeignKey( + "automation.Policy", + related_name="server_clients", null=True, blank=True, on_delete=models.SET_NULL, @@ -33,9 +41,17 @@ class Client(models.Model): class Site(models.Model): client = models.ForeignKey(Client, related_name="sites", on_delete=models.CASCADE) site = models.CharField(max_length=255) - policy = models.ForeignKey( + workstation_policy = models.ForeignKey( "automation.Policy", - related_name="sites", + related_name="workstation_sites", + null=True, + blank=True, + on_delete=models.SET_NULL, + ) + + server_policy = models.ForeignKey( + "automation.Policy", + related_name="server_sites", null=True, blank=True, on_delete=models.SET_NULL, diff --git a/web/src/components/automation/modals/PolicyAdd.vue b/web/src/components/automation/modals/PolicyAdd.vue index 4badf108..c38fdf26 100644 --- a/web/src/components/automation/modals/PolicyAdd.vue +++ b/web/src/components/automation/modals/PolicyAdd.vue @@ -1,19 +1,64 @@