From c7873d6d44b4cba31b7efd32fa53da6e8c4b3b3d Mon Sep 17 00:00:00 2001 From: "holger.trampe" Date: Sun, 12 Apr 2020 23:54:10 +0200 Subject: [PATCH] Zwischencommit 5 Agenturverbund --- standards/models.py | 13 +- .../standards/agencynetwork_content.html | 6 +- .../standards/standards_from_agn.html | 9 +- .../standards/standards_single_agn.html | 145 ++++++++++++++++-- .../__pycache__/counter_tag.cpython-38.pyc | Bin 4180 -> 4440 bytes standards/templatetags/counter_tag.py | 28 +--- standards/urls.py | 5 + standards/views.py | 93 +++++++++-- 8 files changed, 243 insertions(+), 56 deletions(-) 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 %} + + + + {% 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 %}
@@ -33,11 +40,6 @@
{% 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 + +
+
+

{{comments|length}} {% if comments|length < 2 %} Kommentar {% else %} Kommentare {% endif %}

+
+ +
+ +
+
+
+ {% for comment in comments %} + +
+ Von {{comment.comment_by.first_name}} {{comment.comment_by.last_name}} am {{comment.last_modified_on|date:"d.m.Y H:i"}}
+ {{comment.content}}
+
+ + + {% if comment.comment_by == request.user or standard.created_standard_by == request.user or standard.last_modified_by == request.user %} + + + + {% endif %} +
+ +
+
+ {% endfor %} +
+ + + + + + + + + +{% endblock content %} diff --git a/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc b/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc index 8921ee4696f171e23bcfc9ef9e3cbf38de4792b3..43b55d537fd286516fc7a8b65a47b2392e5ac219 100644 GIT binary patch delta 330 zcmcbja6^eVl$V!_0SKZ?CdYM5%#KjswqJ$xfF^j2&p@uPqv6rcqDTS$)xrDifshKf_ zIh&x2 z5t=}vz6fLiP#CO>1ExHRH#s9UIUCO9%*=~VOi#^At}GG+X$2EPK-Mi;u)@r=;tZgL zDKHJ0c@Wi0fJ%zN0m3Z6#KOeG$ii3@2C`7&7F$YIVqW^@GkhG3jA4^6@T)P#O#aRv J!_3aY2mp+tPGJB5 delta 69 zcmcbibVY$Tl$V!_0SK~pOpH4@kynYESo X^D|BsVHTPEN`Q|sYVuEk7)CAtfWZ;| 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({}) + + +