digitaleagenturnc/news/views.py

125 lines
4.3 KiB
Python

from django.shortcuts import render, redirect
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView
from django.contrib.auth.models import User
from .models import News
from .forms import NewsAddNews
from django.contrib.auth.decorators import login_required
from datetime import datetime
from django.contrib import messages
from django.utils.dateparse import parse_date
from django.utils import timezone
# Create your views here.
# ALLE STANDARDS EINER AGENTUR
class NewsManagement(LoginRequiredMixin, ListView):
model = News
# Adding active_link
# Loading only user same agency
# Change context and return for template-data
def get_context_data(self, **kwargs):
filterdate = timezone.now()
news = News.objects.filter(agency__pk=self.request.user.profile.agency.pk).filter(go_online_on__lt=filterdate).filter(go_offline_on__gt=filterdate).order_by('-created_date')
news_arch = News.objects.filter(agency__pk=self.request.user.profile.agency.pk).filter(go_offline_on__lt=filterdate).order_by('-created_date')
context = super().get_context_data(**kwargs)
context.update({'active_link' : 'dashboard', 'news' : news, 'news_arch' : news_arch})
return context
'''
class NewsAddNews(LoginRequiredMixin, CreateView):
model = News
fields = ['name', 'content','go_online_on', 'go_offline_on']
success_url = '/dashboard/news/'
'''
@login_required
def NewsAdd(request):
if request.method == 'POST':
normalForm = NewsAddNews(request.POST, instance=request.user)
#editorForm = NewsAddNewsEditor(request.POST, instance=request.user)
#if editorForm.is_valid() and normalForm.is_valid():
if normalForm.is_valid():
normalForm.agency = request.user.profile.agency
normalForm.created_by = request.user
normalForm.last_modified_by = request.user
normalForm.save()
#editorForm.save()
new_news = News()
new_news.agency = request.user.profile.agency
new_news.created_by = request.user
new_news.last_modified_by = request.user
new_news.created_date = datetime.now()
new_news.last_modified_on = datetime.now()
new_news.name = normalForm.cleaned_data['name']
new_news.content = normalForm.cleaned_data['content']
new_news.go_online_on = normalForm.cleaned_data['go_online_on']
new_news.go_offline_on = normalForm.cleaned_data['go_offline_on']
new_news.save()
messages.success(request, f'News gespeichert!')
return redirect('users-dashboard')
else:
normalForm = NewsAddNews(instance=request.user)
#editorForm = NewsAddNewsEditor(instance=request.user)
context = {
'normalForm' : normalForm,
#'editorForm' : editorForm,
'active_link' : 'dashboard'
}
return render(request, 'news/news_addnews.html', context)
@login_required
def NewsUpdate(request, id):
news = News.objects.get(pk=id, agency=request.user.profile.agency)
if request.method == 'POST':
normalForm = NewsAddNews(request.POST, instance=news)
#editorForm = NewsAddNewsEditor(request.POST, instance=news)
if normalForm.is_valid():
news = News.objects.get(pk=id, agency=request.user.profile.agency)
news.last_modified_by = request.user
news.last_modified_on = datetime.now()
news.go_online_on = normalForm.cleaned_data['go_online_on']
news.go_offline_on = normalForm.cleaned_data['go_offline_on']
news.name = normalForm.cleaned_data['name']
news.content = normalForm.cleaned_data['content']
news.save()
messages.success(request, f'News aktualisiert!')
return redirect('/news')
else:
normalForm = NewsAddNews(instance=news)
#editorForm = NewsAddNewsEditor(instance=news)
context = {
'normalForm' : normalForm,
#'editorForm' : editorForm,
'active_link' : 'dashboard',
'news_id' : news.pk,
}
return render(request, 'news/news_update.html', context)
class NewsDeleteView(LoginRequiredMixin, DeleteView):
model = News
success_url = '/news'
template_name = 'news/news_confirm_delete.html'
def get_context_data(self, **kwargs):
context = super(NewsDeleteView, self).get_context_data(**kwargs)
context['active_link'] = 'newsmanagement'
return context
@login_required
def NewsSingle(request, pk):
news = News.objects.get(pk=pk, agency=request.user.profile.agency)
context = {
'active_link':'dashboard',
'news' : news
}
return render(request, 'news/news_single.html', context)