276 lines
7.8 KiB
Python
276 lines
7.8 KiB
Python
from datetime import datetime
|
|
|
|
from django.db.models import Sum
|
|
from django.shortcuts import render
|
|
from django.utils.translation import gettext as _
|
|
from django_tables2 import RequestConfig
|
|
|
|
from cookbook.helper.permission_helper import group_required
|
|
from cookbook.models import InviteLink, RecipeImport, Storage, SyncLog, UserFile, ConnectorConfig
|
|
from cookbook.tables import ImportLogTable, InviteLinkTable, RecipeImportTable, StorageTable, ConnectorConfigTable
|
|
|
|
|
|
@group_required('admin')
|
|
def sync_log(request):
|
|
table = ImportLogTable(
|
|
SyncLog.objects.filter(sync__space=request.space).all().order_by('-created_at')
|
|
)
|
|
RequestConfig(request, paginate={'per_page': 25}).configure(table)
|
|
|
|
return render(
|
|
request,
|
|
'generic/list_template.html',
|
|
{'title': _("Import Log"), 'table': table}
|
|
)
|
|
|
|
|
|
@group_required('user')
|
|
def recipe_import(request):
|
|
table = RecipeImportTable(RecipeImport.objects.filter(space=request.space).all())
|
|
|
|
RequestConfig(request, paginate={'per_page': 25}).configure(table)
|
|
|
|
return render(
|
|
request,
|
|
'generic/list_template.html',
|
|
{'title': _("Discovery"), 'table': table, 'import_btn': True}
|
|
)
|
|
|
|
|
|
@group_required('user')
|
|
def shopping_list(request):
|
|
return render(
|
|
request,
|
|
'shoppinglist_template.html',
|
|
{
|
|
"title": _("Shopping List"),
|
|
|
|
}
|
|
)
|
|
|
|
|
|
@group_required('admin')
|
|
def storage(request):
|
|
table = StorageTable(Storage.objects.filter(space=request.space).all())
|
|
RequestConfig(request, paginate={'per_page': 25}).configure(table)
|
|
|
|
return render(
|
|
request,
|
|
'generic/list_template.html',
|
|
{
|
|
'title': _("Storage Backend"),
|
|
'table': table,
|
|
'create_url': 'new_storage'
|
|
}
|
|
)
|
|
|
|
|
|
@group_required('admin')
|
|
def connector_config(request):
|
|
table = ConnectorConfigTable(ConnectorConfig.objects.filter(space=request.space).all())
|
|
RequestConfig(request, paginate={'per_page': 25}).configure(table)
|
|
|
|
return render(
|
|
request,
|
|
'generic/list_template.html',
|
|
{
|
|
'title': _("Connector Config Backend"),
|
|
'table': table,
|
|
'create_url': 'new_connector_config'
|
|
}
|
|
)
|
|
|
|
|
|
@group_required('admin')
|
|
def invite_link(request):
|
|
table = InviteLinkTable(
|
|
InviteLink.objects.filter(valid_until__gte=datetime.today(), used_by=None, space=request.space).all())
|
|
RequestConfig(request, paginate={'per_page': 25}).configure(table)
|
|
|
|
return render(request, 'generic/list_template.html', {
|
|
'title': _("Invite Links"),
|
|
'table': table,
|
|
'create_url': 'new_invite_link'
|
|
})
|
|
|
|
|
|
@group_required('user')
|
|
def keyword(request):
|
|
return render(
|
|
request,
|
|
'generic/model_template.html',
|
|
{
|
|
"title": _("Keywords"),
|
|
"config": {
|
|
'model': "KEYWORD",
|
|
'recipe_param': 'keywords'
|
|
}
|
|
}
|
|
)
|
|
|
|
|
|
@group_required('user')
|
|
def food(request):
|
|
# recipe-param is the name of the parameters used when filtering recipes by this attribute
|
|
# model-name is the models.js name of the model, probably ALL-CAPS
|
|
return render(
|
|
request,
|
|
'generic/model_template.html',
|
|
{
|
|
"title": _("Foods"),
|
|
"config": {
|
|
'model': "FOOD", # *REQUIRED* name of the model in models.js
|
|
'recipe_param': 'foods' # *OPTIONAL* name of the listRecipes parameter if filtering on this attribute
|
|
}
|
|
}
|
|
)
|
|
|
|
|
|
@group_required('user')
|
|
def unit(request):
|
|
# recipe-param is the name of the parameters used when filtering recipes by this attribute
|
|
# model-name is the models.js name of the model, probably ALL-CAPS
|
|
return render(
|
|
request,
|
|
'generic/model_template.html',
|
|
{
|
|
"title": _("Units"),
|
|
"config": {
|
|
'model': "UNIT", # *REQUIRED* name of the model in models.js
|
|
'recipe_param': 'units', # *OPTIONAL* name of the listRecipes parameter if filtering on this attribute
|
|
}
|
|
}
|
|
)
|
|
|
|
|
|
@group_required('user')
|
|
def supermarket(request):
|
|
# recipe-param is the name of the parameters used when filtering recipes by this attribute
|
|
# model-name is the models.js name of the model, probably ALL-CAPS
|
|
return render(
|
|
request,
|
|
'generic/model_template.html',
|
|
{
|
|
"title": _("Supermarkets"),
|
|
"config": {
|
|
'model': "SUPERMARKET", # *REQUIRED* name of the model in models.js
|
|
}
|
|
}
|
|
)
|
|
|
|
|
|
@group_required('user')
|
|
def supermarket_category(request):
|
|
# recipe-param is the name of the parameters used when filtering recipes by this attribute
|
|
# model-name is the models.js name of the model, probably ALL-CAPS
|
|
return render(
|
|
request,
|
|
'generic/model_template.html',
|
|
{
|
|
"title": _("Shopping Categories"),
|
|
"config": {
|
|
'model': "SHOPPING_CATEGORY", # *REQUIRED* name of the model in models.js
|
|
}
|
|
}
|
|
)
|
|
|
|
|
|
@group_required('user')
|
|
def automation(request):
|
|
# recipe-param is the name of the parameters used when filtering recipes by this attribute
|
|
# model-name is the models.js name of the model, probably ALL-CAPS
|
|
return render(
|
|
request,
|
|
'generic/model_template.html',
|
|
{
|
|
"title": _("Automations"),
|
|
"config": {
|
|
'model': "AUTOMATION", # *REQUIRED* name of the model in models.js
|
|
}
|
|
}
|
|
)
|
|
|
|
|
|
@group_required('user')
|
|
def custom_filter(request):
|
|
# recipe-param is the name of the parameters used when filtering recipes by this attribute
|
|
# model-name is the models.js name of the model, probably ALL-CAPS
|
|
return render(
|
|
request,
|
|
'generic/model_template.html',
|
|
{
|
|
"title": _("Custom Filters"),
|
|
"config": {
|
|
'model': "CUSTOM_FILTER", # *REQUIRED* name of the model in models.js
|
|
}
|
|
}
|
|
)
|
|
|
|
|
|
@group_required('user')
|
|
def user_file(request):
|
|
try:
|
|
current_file_size_mb = UserFile.objects.filter(space=request.space).aggregate(Sum('file_size_kb'))[
|
|
'file_size_kb__sum'] / 1000
|
|
except TypeError:
|
|
current_file_size_mb = 0
|
|
|
|
return render(
|
|
request,
|
|
'generic/model_template.html',
|
|
{
|
|
"title": _("Files"),
|
|
"config": {
|
|
'model': "USERFILE", # *REQUIRED* name of the model in models.js
|
|
},
|
|
'current_file_size_mb': current_file_size_mb, 'max_file_size_mb': request.space.max_file_storage_mb
|
|
}
|
|
)
|
|
|
|
|
|
@group_required('user')
|
|
def step(request):
|
|
# recipe-param is the name of the parameters used when filtering recipes by this attribute
|
|
# model-name is the models.js name of the model, probably ALL-CAPS
|
|
return render(
|
|
request,
|
|
'generic/model_template.html',
|
|
{
|
|
"title": _("Steps"),
|
|
"config": {
|
|
'model': "STEP", # *REQUIRED* name of the model in models.js
|
|
'recipe_param': 'steps',
|
|
}
|
|
}
|
|
)
|
|
|
|
|
|
@group_required('user')
|
|
def unit_conversion(request):
|
|
# model-name is the models.js name of the model, probably ALL-CAPS
|
|
return render(
|
|
request,
|
|
'generic/model_template.html',
|
|
{
|
|
"title": _("Unit Conversions"),
|
|
"config": {
|
|
'model': "UNIT_CONVERSION", # *REQUIRED* name of the model in models.js
|
|
}
|
|
}
|
|
)
|
|
|
|
|
|
@group_required('user')
|
|
def property_type(request):
|
|
# model-name is the models.js name of the model, probably ALL-CAPS
|
|
return render(
|
|
request,
|
|
'generic/model_template.html',
|
|
{
|
|
"title": _("Property Types"),
|
|
"config": {
|
|
'model': "PROPERTY_TYPE", # *REQUIRED* name of the model in models.js
|
|
}
|
|
}
|
|
)
|