added sharing to meal plan + fixed meal plan visibility
This commit is contained in:
parent
edbc21df19
commit
2e23fcfd5d
@ -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}
|
||||||
|
25
cookbook/migrations/0043_auto_20200507_2302.py
Normal file
25
cookbook/migrations/0043_auto_20200507_2302.py
Normal 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),
|
||||||
|
),
|
||||||
|
]
|
@ -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()
|
||||||
|
@ -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>
|
||||||
|
@ -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):
|
||||||
|
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user