Adaptions to changed simplified user profile additions in users module
This commit is contained in:
parent
80db1f71e9
commit
7ff8071be9
@ -21,10 +21,6 @@ def url_tasklist(request, user_filter_id=None, search_txt=None, common_filter_id
|
|||||||
return reverse('patt-tasklist')
|
return reverse('patt-tasklist')
|
||||||
|
|
||||||
|
|
||||||
def url_profile(request):
|
|
||||||
return reverse('patt-profile')
|
|
||||||
|
|
||||||
|
|
||||||
def url_projectlist(request):
|
def url_projectlist(request):
|
||||||
return reverse('patt-projectlist')
|
return reverse('patt-projectlist')
|
||||||
|
|
||||||
|
16
context.py
16
context.py
@ -49,7 +49,6 @@ def navigationbar(context, request, caller_name, **kwargs):
|
|||||||
def menubar(context, request, caller_name, **kwargs):
|
def menubar(context, request, caller_name, **kwargs):
|
||||||
bar = context[context.MENUBAR]
|
bar = context[context.MENUBAR]
|
||||||
menubar_users(bar, request)
|
menubar_users(bar, request)
|
||||||
replace_profile(request, bar)
|
|
||||||
add_help_menu(request, bar)
|
add_help_menu(request, bar)
|
||||||
add_tasklist_menu(request, bar)
|
add_tasklist_menu(request, bar)
|
||||||
add_filter_submenu(request, bar, VIEW_TASKLIST_UID)
|
add_filter_submenu(request, bar, VIEW_TASKLIST_UID)
|
||||||
@ -83,21 +82,6 @@ def finalise_bar(request, bar):
|
|||||||
bar.append_entry(*empty_entry_parameters(request))
|
bar.append_entry(*empty_entry_parameters(request))
|
||||||
|
|
||||||
|
|
||||||
def replace_profile(request, bar):
|
|
||||||
try:
|
|
||||||
bar.replace_entry(
|
|
||||||
PROFILE_ENTRY_UID,
|
|
||||||
PROFILE_ENTRY_UID, # uid
|
|
||||||
request.user.username, # name
|
|
||||||
color_icon_url(request, 'user.png'), # icon
|
|
||||||
patt.url_profile(request), # url
|
|
||||||
False, # left
|
|
||||||
False # active
|
|
||||||
)
|
|
||||||
except ValueError:
|
|
||||||
pass # Profile entry does not exist, so exchange is not needed (e.g. no user is logged in)
|
|
||||||
|
|
||||||
|
|
||||||
def add_help_menu(request, bar):
|
def add_help_menu(request, bar):
|
||||||
bar.append_entry(
|
bar.append_entry(
|
||||||
HELP_UID, # uid
|
HELP_UID, # uid
|
||||||
|
8
forms.py
8
forms.py
@ -2,7 +2,7 @@ from django import forms
|
|||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from .models import Task, Project, Comment, Search, TASKSTATE_CHOICES, PROJECTSTATE_OPEN, ModelList, PattUserProfile
|
from .models import Task, Project, Comment, Search, TASKSTATE_CHOICES, PROJECTSTATE_OPEN, ModelList, PattUserProfile, get_pattuserprofile
|
||||||
from .search import INDEX_STATES
|
from .search import INDEX_STATES
|
||||||
|
|
||||||
|
|
||||||
@ -14,7 +14,11 @@ class PattUserProfileForm(forms.ModelForm):
|
|||||||
'threshold_very_soon': _('Period to targetdate for warning Group "very soon"'),
|
'threshold_very_soon': _('Period to targetdate for warning Group "very soon"'),
|
||||||
'threshold_soon': _('Period to targetdate for warning Group "soon"'),
|
'threshold_soon': _('Period to targetdate for warning Group "soon"'),
|
||||||
}
|
}
|
||||||
|
def __init__(self, request):
|
||||||
|
if request.POST:
|
||||||
|
super().__init__(data=request.POST, instance=get_pattuserprofile(request.user))
|
||||||
|
else:
|
||||||
|
super().__init__(instance=get_pattuserprofile(request.user))
|
||||||
|
|
||||||
class TaskForm(forms.ModelForm):
|
class TaskForm(forms.ModelForm):
|
||||||
|
|
||||||
|
71
migrations/0014_alter_historicalcomment_options_and_more.py
Normal file
71
migrations/0014_alter_historicalcomment_options_and_more.py
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
# Generated by Django 5.1.2 on 2024-11-01 19:29
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('patt', '0013_auto_20210117_1332'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='historicalcomment',
|
||||||
|
options={'get_latest_by': ('history_date', 'history_id'), 'ordering': ('-history_date', '-history_id'), 'verbose_name': 'historical comment', 'verbose_name_plural': 'historical comments'},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='historicaltask',
|
||||||
|
options={'get_latest_by': ('history_date', 'history_id'), 'ordering': ('-history_date', '-history_id'), 'verbose_name': 'historical task', 'verbose_name_plural': 'historical tasks'},
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='comment',
|
||||||
|
name='id',
|
||||||
|
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='historicalcomment',
|
||||||
|
name='history_date',
|
||||||
|
field=models.DateTimeField(db_index=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='historicalcomment',
|
||||||
|
name='id',
|
||||||
|
field=models.BigIntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='historicaltask',
|
||||||
|
name='history_date',
|
||||||
|
field=models.DateTimeField(db_index=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='historicaltask',
|
||||||
|
name='id',
|
||||||
|
field=models.BigIntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='pattuserprofile',
|
||||||
|
name='id',
|
||||||
|
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='pattuserprofile',
|
||||||
|
name='threshold_soon',
|
||||||
|
field=models.IntegerField(choices=[(1, '1 day'), (2, '2 days'), (3, '3 days'), (5, '5 days'), (7, '7 days'), (10, '10 days'), (14, '14 days'), (21, ' 21 days')], default=10),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='project',
|
||||||
|
name='id',
|
||||||
|
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='search',
|
||||||
|
name='id',
|
||||||
|
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='task',
|
||||||
|
name='id',
|
||||||
|
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
||||||
|
),
|
||||||
|
]
|
@ -6,7 +6,7 @@ from simple_history.models import HistoricalRecords
|
|||||||
|
|
||||||
|
|
||||||
THRESHOLD_VERY_SOON_CHOICES = ((1, '1 day'), (2, '2 days'), (3, '3 days'), (4, '4 days'), (5, '5 days'), (7, '7 days'), (9, '9 days'), (12, '12 days'), ) # REQ-38
|
THRESHOLD_VERY_SOON_CHOICES = ((1, '1 day'), (2, '2 days'), (3, '3 days'), (4, '4 days'), (5, '5 days'), (7, '7 days'), (9, '9 days'), (12, '12 days'), ) # REQ-38
|
||||||
THRESHOLD_SOON_CHOICES = ((1, '1 day'), (2, '2 days'), (3, '3 days'), (5, '5 days'), (7, '7 days'), (10, '10 days'), (14, '14 days'), (21, ' days'), ) # REQ-39
|
THRESHOLD_SOON_CHOICES = ((1, '1 day'), (2, '2 days'), (3, '3 days'), (5, '5 days'), (7, '7 days'), (10, '10 days'), (14, '14 days'), (21, ' 21 days'), ) # REQ-39
|
||||||
|
|
||||||
|
|
||||||
# PROJECTSTATE (REQ-??)
|
# PROJECTSTATE (REQ-??)
|
||||||
|
1
urls.py
1
urls.py
@ -6,7 +6,6 @@ from . import views
|
|||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', lambda request: redirect(reverse('patt-commonfilter', kwargs={'common_filter_id': SEARCH_MY_OPEN_TASKS}), permanent=False)),
|
path('', lambda request: redirect(reverse('patt-commonfilter', kwargs={'common_filter_id': SEARCH_MY_OPEN_TASKS}), permanent=False)),
|
||||||
path('profile', views.patt_profile, name='patt-profile'),
|
|
||||||
#
|
#
|
||||||
# views and urls
|
# views and urls
|
||||||
#
|
#
|
||||||
|
42
views.py
42
views.py
@ -7,14 +7,12 @@ from django.shortcuts import render, redirect
|
|||||||
from django.urls.base import reverse
|
from django.urls.base import reverse
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from .forms import TaskForm, TaskFormLimited, ProjectForm, CommentForm, TaskCommentForm, SearchForm, EasySearchForm, PattUserProfileForm
|
from .forms import TaskForm, TaskFormLimited, ProjectForm, CommentForm, TaskCommentForm, SearchForm, EasySearchForm
|
||||||
from .help import help_pages
|
from .help import help_pages
|
||||||
from .models import Task, ModelList, Comment, TASKSTATE_CHOICES, PRIO_CHOICES, TASKS_IN_WORK
|
from .models import Task, ModelList, Comment, TASKSTATE_CHOICES, PRIO_CHOICES, TASKS_IN_WORK
|
||||||
from .models import Project, Search, get_pattuserprofile
|
from .models import Project, Search
|
||||||
import patt
|
import patt
|
||||||
from .search import load_index, search, mk_search_pattern, get_project_ids_from_search_pattern, common_searches
|
from .search import load_index, search, mk_search_pattern, get_project_ids_from_search_pattern, common_searches
|
||||||
from users.forms import UserProfileForm
|
|
||||||
from users.models import get_userprofile
|
|
||||||
from themes import Context
|
from themes import Context
|
||||||
|
|
||||||
|
|
||||||
@ -144,42 +142,6 @@ def get_next(request):
|
|||||||
return request.POST.get('next', '/')
|
return request.POST.get('next', '/')
|
||||||
|
|
||||||
|
|
||||||
def profile_post_actions(request, context):
|
|
||||||
if request.POST:
|
|
||||||
form = context.get('form_userprofile')
|
|
||||||
if form.is_valid():
|
|
||||||
form.save()
|
|
||||||
form = context.get('form_pattprofile')
|
|
||||||
if form.is_valid():
|
|
||||||
form.save()
|
|
||||||
return redirect(request.GET.get('next') or '/')
|
|
||||||
|
|
||||||
|
|
||||||
def profile_pre_actions(request, context, form_to_be_used=UserProfileForm):
|
|
||||||
user_profile = get_userprofile(request.user)
|
|
||||||
patt_user_profile = get_pattuserprofile(request.user)
|
|
||||||
if request.POST:
|
|
||||||
userprofile_form = UserProfileForm(request.POST, instance=user_profile)
|
|
||||||
pattprofile_form = PattUserProfileForm(request.POST, instance=patt_user_profile)
|
|
||||||
else:
|
|
||||||
userprofile_form = UserProfileForm(instance=user_profile)
|
|
||||||
pattprofile_form = PattUserProfileForm(instance=patt_user_profile)
|
|
||||||
context['form_userprofile'] = userprofile_form
|
|
||||||
context['form_pattprofile'] = pattprofile_form
|
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
|
||||||
def patt_profile(request):
|
|
||||||
context = Context(request) # needs to be executed first because of time mesurement
|
|
||||||
profile_pre_actions(request, context)
|
|
||||||
response = profile_post_actions(request, context)
|
|
||||||
if response is not None:
|
|
||||||
return response
|
|
||||||
else:
|
|
||||||
context_adaption(context, request, title=_('Profile for %(username)s') % {'username': request.user.username})
|
|
||||||
return render(request, 'patt/profile.html', context=context)
|
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def patt_tasklist(request, user_filter_id=None, common_filter_id=None):
|
def patt_tasklist(request, user_filter_id=None, common_filter_id=None):
|
||||||
context = Context(request) # needs to be executed first because of time mesurement
|
context = Context(request) # needs to be executed first because of time mesurement
|
||||||
|
Loading…
x
Reference in New Issue
Block a user