diff --git a/standards/models.py b/standards/models.py
index bcc46eb..e4938bb 100644
--- a/standards/models.py
+++ b/standards/models.py
@@ -9,6 +9,11 @@ from users.models import AgencyGroup
import datetime
from django.utils import timezone
#from ckeditor_uploader.fields import RichTextUploadingField
+class StandardCommentRate(models.Model):
+ standard = models.ForeignKey("Standards", on_delete=models.CASCADE)
+ rated_by = models.ForeignKey(User, on_delete=models.PROTECT)
+ rate_stats = models.IntegerField(default=0)
+ oncomment = models.ForeignKey("StandardComments", on_delete=models.PROTECT)
class StandardComments(models.Model):
standard = models.ForeignKey("Standards", on_delete=models.CASCADE)
@@ -16,10 +21,8 @@ class StandardComments(models.Model):
comment_by = models.ForeignKey(User, on_delete=models.CASCADE)
comment_on = models.DateTimeField(default=timezone.now, blank=True)
last_modified_on = models.DateTimeField(default=timezone.now, blank=True)
- rated = models.IntegerField()
-
+
class Standards(models.Model):
-
agency = models.ForeignKey(Agency, on_delete=models.CASCADE)
area = models.ForeignKey(Areas, on_delete=models.CASCADE)
task = models.ForeignKey(Tasks, on_delete=models.CASCADE)
@@ -59,8 +62,8 @@ class Standards(models.Model):
# GORUPS
visibleby = models.ManyToManyField(AgencyGroup, blank=True)
- indi_name = models.CharField(max_length=200, blank=False, default="")
- indi_conmtent = models.CharField(max_length=500, blank=False, default="")
+ #indi_name = models.CharField(max_length=200, blank=False, default="")
+ #indi_conmtent = models.CharField(max_length=500, blank=False, default="")
# FIELD FOR AGENCYNETWORK
comments = models.ManyToManyField("StandardComments", blank=True, related_name='comments')
diff --git a/standards/templates/standards/agencynetwork_content.html b/standards/templates/standards/agencynetwork_content.html
index bf42b3b..a5d497b 100644
--- a/standards/templates/standards/agencynetwork_content.html
+++ b/standards/templates/standards/agencynetwork_content.html
@@ -55,7 +55,11 @@
Beliebte Standards
- Keine
+ {% for s in allagencynetworkstandards %}
+ {% if forloop.counter < 10 %}
+ {{s.name|truncatechars:30}} ({{s.agencynetworkcounter}})
+ {% endif %}
+ {% endfor %}
diff --git a/standards/templates/standards/standards_from_agn.html b/standards/templates/standards/standards_from_agn.html
index c85e069..013cff9 100644
--- a/standards/templates/standards/standards_from_agn.html
+++ b/standards/templates/standards/standards_from_agn.html
@@ -5,7 +5,7 @@
Standards aus Agenturverbund {{agn.name}}
-
Sie sehen nur veröffentlichte Standards innerhalb des Verbunds und Standards, die nicht von Ihrer Agentur geteilt sind.
+
Sie sehen nur veröffentlichte Standards innerhalb des Verbunds und Standards, die nicht von Ihrer Agentur geteilt worden sind.
@@ -19,16 +19,20 @@
Agentur
Zuletzt geändert am
Geteilt
+
Status
{% for standard in standards_of_agency_network %}
+ {% checkifsharedstandardinagency request.user.profile.agency standard as isshared %}
+
{% if standard.public and standard.agency != request.user.profile.agency %}
{{standard.name}}
{{standard.agency.name}}
{{standard.last_modified_on|date:"d.m.Y, H:i"}}
{{standard.agencynetworkcounter}}
+ {% if isshared %}Übernommen{% endif %}
{% endif %}
{% endfor %}
@@ -46,9 +50,6 @@
$(document).ready(function(){
-
-
-
$('#agnstandards').DataTable({
responsive: true,
diff --git a/standards/templates/standards/standards_single_agn.html b/standards/templates/standards/standards_single_agn.html
index 1fb52e7..8f27ee6 100644
--- a/standards/templates/standards/standards_single_agn.html
+++ b/standards/templates/standards/standards_single_agn.html
@@ -2,8 +2,18 @@
{% load counter_tag %}
{% block content %}
-
{{standard.name}}
-
+
{{standard.name}}
+ {% checkifsharedstandardinagency request.user.profile.agency standard as isshared %}
+ {% if isshared == False %}
+
+ Standard übernehmen
+
+ {% else %}
+
+ Standard übernommen
+
+ {% endif %}
+
{% if standard.addedfiles.all|length > 0 or standard.linked_standards.all|length > 0 or standard.authority.count > 0 or standard.executor.count > 0 or standard.representative.count > 0 or standard.addedfiles.all|length > 0 or standard.linked_standards.all|length > 0 or standard.freefield_title|length > 0 %}
@@ -19,10 +29,7 @@
-
-
-
{% if standard.freefield_title|length > 0 %}
{% endif %}
-
-
-
-
-
{% if standard.addedfiles.all|length > 0 %}
@@ -57,8 +59,127 @@
- Erstellt in Agentur {{standard.agency.name}} und zuletzt bearbeitet am {{ standard.last_modified_on}}. Der Standard wurde bereits {{standard.agencynetworkcounter}} geteilt.
+ Erstellt in Agentur {{standard.agency.name}} und zuletzt bearbeitet am {{ standard.last_modified_on}}. Der Standard wurde bereits {{standard.agencynetworkcounter}} mal geteilt.
+
-{% endblock content %}
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Möchten Sie den Standard {{standard.name}} inkl. aller Dateien und Informationen im Freifeld in Ihre Agentur übernehmen?
+ Es wird ein neuer Standard in Ihrer Agentur mit den Informationen dieses Standards erstellt.
+
+
+
+
+
+
+
+
+{% endblock content %}
diff --git a/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc b/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc
index 8921ee4..43b55d5 100644
Binary files a/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc and b/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc differ
diff --git a/standards/templatetags/counter_tag.py b/standards/templatetags/counter_tag.py
index 97f83a1..7d59f05 100644
--- a/standards/templatetags/counter_tag.py
+++ b/standards/templatetags/counter_tag.py
@@ -159,29 +159,15 @@ def getoutstandinginvites(agnetwork):
if len(AgencyNetworkPreperation.objects.filter(target_network=agnetwork)) > 0:
outstanding = True
-
-
return outstanding
-
-'''
-class Counter:
- count = 0
- @register.simple_tag
- def increment(self):
- self.count += 1
- return ''
+@register.simple_tag
+def checkifsharedstandardinagency(agency, standard):
- @register.simple_tag
- def decrement(self):
- self.count -= 1
- return ''
+ checkstandard = Standards.objects.filter(agency=agency, parent_standard=standard)
- @register.simple_tag
- def double(self):
- self.count *= 2
- return ''
+ in_agency = False
- def getCounter(self):
- return count
-'''
\ No newline at end of file
+ if len(checkstandard) > 0:
+ in_agency = True
+ return in_agency
diff --git a/standards/urls.py b/standards/urls.py
index 59ccdae..419a55f 100644
--- a/standards/urls.py
+++ b/standards/urls.py
@@ -13,6 +13,7 @@ urlpatterns = [
path('standardupdate/
', views.StandardUpdate, name='standard-update'),
path('ajax/loadtasks/', views.load_tasks, name='ajax_loadtasks'),
path('ajups/', views.updatesbyajax, name='update_standard_by_ajax'),
+ path('ajupsagn/', views.updatesbyajax_agn, name='update_standard_by_ajax_agn'),
path('standards//delete', StandardDeleteView.as_view(), name='standard-delete'),
path('standard//changestat', views.StandardChangePublic, name="standard-status"),
path('standard//single', views.StandardSingle, name="standard-single"),
@@ -20,4 +21,8 @@ urlpatterns = [
path('standard//area', views.StandardArea, name="standard-area"),
path('standard//task', views.StandardTask, name="standard-task"),
path('standardsagn/', views.StandardFromAgn, name="standard-agn"),
+ path('standardcopy/', views.CopyStandard, name="standard-copyagn"),
+
+
+
]
\ No newline at end of file
diff --git a/standards/views.py b/standards/views.py
index d637038..00249f7 100644
--- a/standards/views.py
+++ b/standards/views.py
@@ -2,7 +2,7 @@ from django.shortcuts import render, redirect
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.models import User
from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView, View
-from .models import Standards
+from .models import Standards, StandardComments
from django.contrib import messages
from django.http import HttpResponse, JsonResponse
from .forms import StandardAddStandard, StandardAddStandardEditor, StandardUpdateStandard, StandardUpdateStandardEditor
@@ -13,6 +13,8 @@ from datetime import datetime
from users.models import AgencyGroup, AgencyNetwork
from cloud.models import DataFile, DataDir
from django.contrib.auth.decorators import login_required
+import re
+from django.template import defaultfilters
# ALLE STANDARDS EINER AGENTUR
class StandardsManagement(LoginRequiredMixin, ListView):
@@ -42,10 +44,15 @@ class StandardsManagement(LoginRequiredMixin, ListView):
agencynetworks = AgencyNetwork.objects.filter(creator_agency=self.request.user.profile.agency) | AgencyNetwork.objects.filter(adminagencys__in=[self.request.user.profile.agency.pk]) | AgencyNetwork.objects.filter(members__in=[self.request.user.profile.agency.pk]) | AgencyNetwork.objects.filter(sharemembers__in=[self.request.user.profile.agency.pk])
+ allagencynetworkstandards = []
+ for agn in agencynetworks:
+ for agn_s in agn.standards.all():
+ allagencynetworkstandards.append(agn_s)
-
-
- context.update({'active_link' : 'standards', 'unpubstandards_of_user' : unpubstandards_of_user, 'areas' : areas, 'standards_of_user' : standards_of_user, 'standardcontent' : standardcontent, "agencynetworks" : agencynetworks})
+
+ allagencynetworkstandards.sort(key=lambda x: x.agencynetworkcounter, reverse=True)
+
+ context.update({'active_link' : 'standards', 'unpubstandards_of_user' : unpubstandards_of_user, 'areas' : areas, 'standards_of_user' : standards_of_user, 'standardcontent' : standardcontent, "agencynetworks" : agencynetworks, "allagencynetworkstandards" : allagencynetworkstandards})
return context
@@ -374,15 +381,47 @@ def StandardSingle(request, pk):
}
return render(request, 'standards/standards_noentrie.html', context)
+
+
@login_required
-def StandardSingleAgn(request, pk):
+def CopyStandard(request, pk):
+ #SANDARD COPY
+ sc = Standards.objects.get(pk=pk)
+ sc.agencynetworkcounter = sc.agencynetworkcounter+1
+ sc.save()
- context = {
- 'active_link':'standards',
- 'standard' : Standards.objects.get(pk=pk)
- }
- return render(request, 'standards/standards_single_agn.html', context)
+ area = list(Areas.objects.filter(agency=request.user.profile.agency))[0]
+ task = list(Tasks.objects.filter(agency=request.user.profile.agency))[0]
+
+ new_standard = Standards()
+ new_standard.agency = request.user.profile.agency
+ new_standard.created_standard_by = request.user
+ new_standard.published_by = request.user
+ new_standard.last_modified_by = request.user
+ new_standard.created_standard_date = datetime.now()
+ new_standard.last_modified_on = datetime.now()
+ new_standard.task = task
+ new_standard.area = area
+ new_standard.name = sc.name
+ new_standard.content = sc.content
+ new_standard.public = False
+ new_standard.freefield_content = sc.freefield_content
+ new_standard.freefield_title = sc.freefield_title
+
+ new_standard.parent_standard = sc
+ new_standard.shared_on = datetime.now()
+
+ new_standard.save()
+
+ datadir_parentid = list(DataDir.objects.filter(is_defaultstandard=True, agency__pk=request.user.profile.agency.pk))[0]
+
+ for f in sc.addedfiles.all():
+ tempdatafile = DataFile(file=f.file, name=f.name, owner=request.user, parent=datadir_parentid, agency=request.user.profile.agency)
+ tempdatafile.save()
+ new_standard.addedfiles.add(tempdatafile)
+
+ return redirect('standard-update', new_standard.pk)
@login_required
def StandardArea(request, pk):
@@ -411,7 +450,7 @@ def StandardTask(request, pk):
}
return render(request, 'standards/standard_task.html', context)
-# AJAX SHIT
+# AJAX Standard
@login_required
def updatesbyajax(request, pk):
if(request.method == "GET"):
@@ -467,8 +506,7 @@ def updatesbyajax(request, pk):
else:
agn.standards.remove(workingstandard)
agn.lastactivity = datetime.now()
- agn.save()
-
+ agn.save()
else:
success = False
@@ -487,3 +525,32 @@ def StandardFromAgn(request, pk):
'agn' :agn,
}
return render(request, 'standards/standards_from_agn.html', context)
+
+
+# View for SingleStandard from AgencyNetwork
+@login_required
+def StandardSingleAgn(request, pk):
+
+ context = {
+ 'active_link':'standards',
+ 'standard' : Standards.objects.get(pk=pk),
+ 'comments' : StandardComments.objects.filter(standard=Standards.objects.get(pk=pk)).order_by("-last_modified_on")
+ }
+ return render(request, 'standards/standards_single_agn.html', context)
+
+@login_required
+def updatesbyajax_agn(request, pk):
+ if(request.method == "GET"):
+
+ if(request.GET["action"] == "add_comment"):
+ content = re.sub('[^A-Za-z0-9,!?_ äüöÄÜÖ]+', '', request.GET.get("content"))
+ sc = StandardComments(standard=Standards.objects.get(pk=pk), content=content, comment_by=request.user, comment_on=datetime.now(), last_modified_on=datetime.now())
+ sc.save()
+
+ return JsonResponse({"success" : "success", "sc_id" : sc.pk, "sc_c" : sc.content, "sc_user" : sc.comment_by.first_name + " " + sc.comment_by.last_name, "sc_date" : defaultfilters.date(sc.last_modified_on, "SHORT_DATETIME_FORMAT") })
+ elif(request.GET["action"] == "del_comment"):
+ StandardComments.objects.get(pk=request.GET.get("id")).delete()
+ return JsonResponse({})
+
+
+
+ {{comment.content}}
+
+