added sharing to meal plan + fixed meal plan visibility

This commit is contained in:
vabene1111 2020-05-07 23:16:24 +02:00
parent edbc21df19
commit 2e23fcfd5d
6 changed files with 45 additions and 6 deletions

View File

@ -31,11 +31,16 @@ class UserPreferenceForm(forms.ModelForm):
class Meta: class Meta:
model = UserPreference model = UserPreference
fields = ('default_unit', 'theme', 'nav_color', 'default_page', 'search_style') fields = ('default_unit', 'theme', 'nav_color', 'default_page', 'search_style', 'plan_share')
help_texts = { help_texts = {
'nav_color': _('Color of the top navigation bar. Not all colors work with all themes, just try them out!'), 'nav_color': _('Color of the top navigation bar. Not all colors work with all themes, just try them out!'),
'default_unit': _('Default Unit to be used when inserting a new ingredient into a recipe.') 'default_unit': _('Default Unit to be used when inserting a new ingredient into a recipe.'),
'plan_share': _('Default user to share newly created meal plan entries with.')
}
widgets = {
'plan_share': MultiSelectWidget
} }
@ -257,6 +262,6 @@ class MealPlanForm(forms.ModelForm):
class Meta: class Meta:
model = MealPlan model = MealPlan
fields = ('recipe', 'title', 'meal', 'note', 'date') fields = ('recipe', 'title', 'meal', 'note', 'date', 'shared')
widgets = {'recipe': SelectWidget, 'date': DateWidget} widgets = {'recipe': SelectWidget, 'date': DateWidget, 'shared': MultiSelectWidget}

View File

@ -0,0 +1,25 @@
# Generated by Django 3.0.5 on 2020-05-07 21:02
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('cookbook', '0042_cooklog'),
]
operations = [
migrations.AddField(
model_name='mealplan',
name='shared',
field=models.ManyToManyField(blank=True, related_name='plan_share', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='userpreference',
name='plan_share',
field=models.ManyToManyField(blank=True, related_name='plan_share_default', to=settings.AUTH_USER_MODEL),
),
]

View File

@ -61,6 +61,7 @@ class UserPreference(models.Model):
default_unit = models.CharField(max_length=32, default='g') default_unit = models.CharField(max_length=32, default='g')
default_page = models.CharField(choices=PAGES, max_length=64, default=SEARCH) default_page = models.CharField(choices=PAGES, max_length=64, default=SEARCH)
search_style = models.CharField(choices=SEARCH_STYLE, max_length=64, default=LARGE) search_style = models.CharField(choices=SEARCH_STYLE, max_length=64, default=LARGE)
plan_share = models.ManyToManyField(User, blank=True, related_name='plan_share_default')
def __str__(self): def __str__(self):
return str(self.user) return str(self.user)
@ -223,6 +224,7 @@ class MealPlan(models.Model):
recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE, blank=True, null=True) recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE, blank=True, null=True)
title = models.CharField(max_length=64, blank=True, default='') title = models.CharField(max_length=64, blank=True, default='')
created_by = models.ForeignKey(User, on_delete=models.CASCADE) created_by = models.ForeignKey(User, on_delete=models.CASCADE)
shared = models.ManyToManyField(User, blank=True, related_name='plan_share')
meal = models.CharField(choices=MEAL_TYPES, max_length=128, default=BREAKFAST) meal = models.CharField(choices=MEAL_TYPES, max_length=128, default=BREAKFAST)
note = models.TextField(blank=True) note = models.TextField(blank=True)
date = models.DateField() date = models.DateField()

View File

@ -5,6 +5,11 @@
{% block title %}{% trans 'Settings' %}{% endblock %} {% block title %}{% trans 'Settings' %}{% endblock %}
{% block extra_head %}
{{ preference_form.media }}
{% endblock %}
{% block content %} {% block content %}
<h3> <h3>

View File

@ -128,7 +128,8 @@ class MealPlanCreate(GroupRequiredMixin, CreateView):
def get_initial(self): def get_initial(self):
return dict( return dict(
meal=self.request.GET['meal'] if 'meal' in self.request.GET else None, meal=self.request.GET['meal'] if 'meal' in self.request.GET else None,
date=datetime.strptime(self.request.GET['date'], '%Y-%m-%d') if 'date' in self.request.GET else None date=datetime.strptime(self.request.GET['date'], '%Y-%m-%d') if 'date' in self.request.GET else None,
shared=self.request.user.userpreference.plan_share.all() if self.request.user.userpreference.plan_share else None
) )
def form_valid(self, form): def form_valid(self, form):

View File

@ -130,7 +130,7 @@ def meal_plan(request):
plan[t[0]] = {'type_name': t[1], 'days': copy.deepcopy(days_dict)} plan[t[0]] = {'type_name': t[1], 'days': copy.deepcopy(days_dict)}
for d in days: for d in days:
plan_day = MealPlan.objects.filter(date=d).all() plan_day = MealPlan.objects.filter(date=d).filter(Q(created_by=request.user) | Q(shared=request.user)).distinct().all()
for p in plan_day: for p in plan_day:
plan[p.meal]['days'][d].append(p) plan[p.meal]['days'][d].append(p)
@ -195,6 +195,7 @@ def settings(request):
up.default_unit = form.cleaned_data['default_unit'] up.default_unit = form.cleaned_data['default_unit']
up.default_page = form.cleaned_data['default_page'] up.default_page = form.cleaned_data['default_page']
up.search_style = form.cleaned_data['search_style'] up.search_style = form.cleaned_data['search_style']
up.plan_share.set(form.cleaned_data['plan_share'])
up.save() up.save()
if 'user_name_form' in request.POST: if 'user_name_form' in request.POST: