1
0
Fork 0

Compare commits

..

No commits in common. "6ecc5e985fdc244b7945e445b34579d66106c834" and "5286b544415cc5c24fe52a1bbd18682a9fd2f246" have entirely different histories.

145 changed files with 112 additions and 2670 deletions

4
.gitignore vendored Executable file → Normal file
View File

@ -1,9 +1,7 @@
# secret passwords and so
/secrets.json
/staticfiles
# /foerderbarometer/settings.py
/foerderbarometer/*settings*
/foerderbarometer/input/settings.py
/foerderbarometer/settings.py
/nohup.out
/logfile
*~

0
LICENSE Executable file → Normal file
View File

0
README.md Executable file → Normal file
View File

0
TODO Executable file → Normal file
View File

0
foerderbarometer/__init__.py Executable file → Normal file
View File

0
foerderbarometer/asgi.py Executable file → Normal file
View File

View File

@ -1,151 +0,0 @@
"""
Django settings for foerderbarometer project.
Generated by 'django-admin startproject' using Django 3.1.1.
For more information on this file, see
https://docs.djangoproject.com/en/3.1/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.1/ref/settings/
"""
import json
import os
from pathlib import Path
from django.core.exceptions import ImproperlyConfigured
# prefix for urls in mails
URLPREFIX = 'http://localhost:8000'
# mails in development go to stdout
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# get secrets
with open(os.path.join(BASE_DIR, 'secrets.json')) as secrets_file:
secrets = json.load(secrets_file)
def get_secret(setting, secrets=secrets):
"""Get secret setting or fail with ImproperlyConfigured"""
try:
return secrets[setting]
except KeyError:
raise ImproperlyConfigured("Set the {} setting".format(setting))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '*&7p9#_n$@^%0z49s+7jpy@+j1rw_hqh05knyd6y2*!0)r&b6h'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
STATIC_ROOT = BASE_DIR / 'staticfiles'
ALLOWED_HOSTS = ['*']
# Application definition
INSTALLED_APPS = [
'input.apps.InputConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'formtools',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'foerderbarometer.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'foerderbarometer.wsgi.application'
# Database
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
'PASSWORD': get_secret('DATABASE_PASSWORD')
}
}
# Password validation
# https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/3.1/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.1/howto/static-files/
STATIC_URL = '/static/'
# needed since django 3.2
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'

9
foerderbarometer/settings_development.py Executable file → Normal file
View File

@ -20,14 +20,7 @@ from django.core.exceptions import ImproperlyConfigured
URLPREFIX = 'http://localhost:8000'
# mails in development go to stdout
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'email.wikimedia.de'
EMAIL_PORT = '587'
EMAIL_USE_TLS = True
EMAIL_HOST_USER = '636ea784dd6ec43'
EMAIL_HOST_PASSWORD = 'wsgqp4ZaVRZZEpRJ'
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent

0
foerderbarometer/settings_mariadb_development.py Executable file → Normal file
View File

11
foerderbarometer/settings_production.py Executable file → Normal file
View File

@ -19,11 +19,8 @@ from django.core.exceptions import ImproperlyConfigured
# mails in development go to stdout
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'email.wikimedia.de'
EMAIL_PORT = '587'
EMAIL_USE_TLS = True
EMAIL_HOST_USER = '636ea784dd6ec43'
EMAIL_HOST_PASSWORD = 'wsgqp4ZaVRZZEpRJ'
EMAIL_HOST = '10.0.6.25'
EMAIL_PORT = '25'
# prefix for urls in mails
URLPREFIX = 'http://foerderung.wikimedia.de'
@ -111,8 +108,8 @@ WSGI_APPLICATION = 'foerderbarometer.wsgi.application'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'fdbdevel',
'USER': 'fdbdevel',
'NAME': 'fdb',
'USER': 'fdb',
'PASSWORD': get_secret('DATABASE_PASSWORD'),
'HOST': '10.0.6.7', # Or an IP Address that your database is hosted on
# 'PORT': '3306',

8
foerderbarometer/urls.py Executable file → Normal file
View File

@ -15,17 +15,9 @@ Including another URLconf
"""
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.i18n import i18n_patterns
urlpatterns = [
path('', include("input.urls")),
path('admin/', admin.site.urls),
path('accounts/', include('django.contrib.auth.urls')),
]
#urlpatterns = i18n_patterns('',
# path('', include("input.urls")),
# path('admin/', admin.site.urls),
# path('accounts/', include('django.contrib.auth.urls')),
# #your urls
#)

0
foerderbarometer/wsgi.py Executable file → Normal file
View File

0
input/__init__.py Executable file → Normal file
View File

114
input/admin.py Executable file → Normal file
View File

@ -22,114 +22,26 @@ def export_as_csv(self, request, queryset):
return response
export_as_csv.short_description = "Ausgewähltes zu CSV exportieren"
export_as_csv.short_description = "Export Selected"
admin.site.add_action(export_as_csv)
@admin.register(Project)
class ProjectAdmin(admin.ModelAdmin):
save_as = True
search_fields = ('name', 'pid','finance_id', 'realname', 'start', 'end', 'participants_estimated', 'participants_real', 'cost', 'status', 'end_quartal')
list_display = ('name', 'pid','finance_id', 'realname', 'start', 'end', 'participants_estimated', 'participants_real', 'cost', 'status', 'end_quartal')
fields = ('realname', 'email', 'granted', 'granted_date', 'mail_state', 'end_mail_send', 'survey_mail_send', 'survey_mail_date', 'name', 'description', 'pid', 'finance_id', 'start', 'end', 'otrs', 'plan', 'page', 'urls', 'group', 'location', 'participants_estimated', 'participants_real', 'insurance', 'insurance_technic', 'support', 'cost', 'account', 'granted_from', 'notes', 'intern_notes', 'status', 'project_of_year', 'end_quartal')
readonly_fields = ('pid','finance_id','project_of_year')
# action = ['export_as_csv']
date_hierarchy = 'end'
readonly_fields = ('end_quartal', 'project_of_year', 'pid', 'finance_id')
@admin.register(BusinessCard)
class BusinessCardAdmin(admin.ModelAdmin):
save_as = True
search_fields = ('realname', 'service_id', 'granted', 'granted_date', 'project')
list_display = ('realname', 'service_id', 'granted', 'granted_date', 'project')
list_display_links = ('realname', 'service_id')
# action = ['export_as_csv']
date_hierarchy = 'granted_date'
readonly_fields = ['service_id']
class Media:
js = ('dropdown/js/base.js',)
@admin.register(Literature)
class LiteratureAdmin(admin.ModelAdmin):
save_as = True
search_fields = ('realname', 'service_id', 'granted', 'granted_date')
list_display = ('realname', 'service_id', 'granted', 'granted_date')
list_display_links = ('realname', 'service_id')
date_hierarchy = 'granted_date'
readonly_fields = ['service_id']
@admin.register(Account)
class AccountAdmin(admin.ModelAdmin):
save_as = True
@admin.register(HonoraryCertificate)
class HonoraryCertificateAdmin(admin.ModelAdmin):
save_as = True
search_fields = ['realname', 'granted', 'project__name', 'project__pid']
list_display = ('realname', 'granted','project')
date_hierarchy = 'granted_date'
autocomplete_fields = ['project']
@admin.register(Library)
class LibraryAdmin(admin.ModelAdmin):
save_as = True
search_fields = ('realname', 'service_id', 'granted', 'granted_date')
list_display = ('realname', 'service_id', 'granted', 'granted_date')
list_display_links = ('realname', 'service_id')
date_hierarchy = 'granted_date'
readonly_fields = ['service_id']
@admin.register(IFG)
class IFGAdmin(admin.ModelAdmin):
save_as = True
search_fields = ('realname', 'service_id', 'granted', 'granted_date')
list_display = ('realname', 'service_id', 'granted', 'granted_date')
list_display_links = ('realname', 'service_id')
date_hierarchy = 'granted_date'
readonly_fields = ['service_id']
@admin.register(Travel)
class TravelAdmin(admin.ModelAdmin):
save_as = True
search_fields = ['realname', 'service_id', 'granted_date', 'project__name', 'project__pid']
list_display = ('realname', 'service_id', 'granted', 'granted_date', 'project_end', 'project', 'project_end_quartal')
list_display_links = ('realname', 'project')
date_hierarchy = 'project_end'
readonly_fields = ('project_end_quartal', 'project_end')
autocomplete_fields = ['project']
readonly_fields = ['service_id']
@admin.register(Email)
class EmailAdmin(admin.ModelAdmin):
save_as = True
search_fields = ('realname', 'service_id', 'granted', 'granted_date')
list_display = ('realname', 'service_id', 'granted', 'granted_date')
list_display_links = ('realname', 'service_id')
date_hierarchy = 'granted_date'
radio_fields = {'adult': admin.VERTICAL}
readonly_fields = ['service_id']
class Media:
js = ('dropdown/js/base.js',)
@admin.register(List)
class ListAdmin(admin.ModelAdmin):
save_as = True
search_fields = ('realname', 'service_id', 'granted', 'granted_date')
list_display = ('realname', 'service_id', 'granted', 'granted_date')
list_display_links = ('realname', 'service_id')
date_hierarchy = 'granted_date'
readonly_fields = ['service_id']
# commented out because of the individual registering to control displays in admin panel
#admin.site.register([
# Account,
# HonoraryCertificate,
# Library,
# IFG,
# Travel,
# Email,
# List,
# ])
admin.site.register([
Account,
HonoraryCertificate,
Library,
IFG,
Travel,
Email,
BusinessCard,
List,
Literature,
])

0
input/apps.py Executable file → Normal file
View File

0
input/fixtures/accounts.json Executable file → Normal file
View File

91
input/forms.py Executable file → Normal file
View File

@ -22,24 +22,22 @@ class ProjectForm(FdbForm):
class Meta:
model = Project
exclude = ('pid', 'project_of_year', 'finance_id','granted', 'granted_date', 'realname', 'email',\
'end_mail_send', 'status', 'persons', 'survey_mail_date', 'mail_state')
'end_mail_send', 'status', 'persons', 'survey_mail_date')
widgets = {'start': AdminDateWidget(),
'end': AdminDateWidget(),}
class ExternForm(FdbForm):
choice = ChoiceField(choices=TYPE_CHOICES.items(), widget=RadioSelect,
label='Was möchtest Du beantragen?')
check = BooleanField(required=True,
label=format_html("Ich stimme den <a href='{}' target='_blank' rel='noopener'>Datenschutzbestimmungen</a> und den <a href='{}' target='_blank' rel='noopener'>Förderrichtlinen</a> zu",
label=format_html("Ich stimme den <a href='{}'>Datenschutzbestimmungen</a> und den <a href='{}'>Förderrichtlinen</a> zu",
DATAPROTECTION, FOERDERRICHTLINIEN))
class Meta:
model = ConcreteExtern
exclude = ('granted', 'granted_date', 'survey_mail_send', 'service_id', 'survey_mail_date', 'mail_state')
exclude = ('granted', 'granted_date', 'survey_mail_send', 'service_id', 'survey_mail_date')
INTERN_CHOICES = {'PRO': 'Projektsteckbrief',
'HON': 'Ehrenamtsbescheinigung, Akkreditierung oder Redaktionsbestätigung',
@ -51,60 +49,31 @@ class InternForm(FdbForm):
class Meta:
model = ConcreteVolunteer
exclude = ('granted', 'granted_date', 'survey_mail_send', 'survey_mail_date', 'mail_state')
HOTEL_CHOICES = {'TRUE': format_html('Hotelzimmer benötigt'),
'FALSE': format_html('Kein Hotelzimmer benötigt')
}
exclude = ('granted', 'granted_date', 'survey_mail_send', 'survey_mail_date')
class TravelForm(FdbForm):
# TODO: add some javascript to show/hide other-field
# this is the code, to change required to false if needed
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['project_name'].required = True
self.fields['transport'].required = True
self.fields['travelcost'].required = True
self.fields['checkin'].required = True
self.fields['checkout'].required = True
self.fields['hotel'].required = True
class Meta:
model = Travel
exclude = ('granted', 'granted_date', 'survey_mail_send', 'realname', 'email', 'survey_mail_date', 'project', 'request_url', 'payed_for_hotel_by', 'payed_for_travel_by', 'intern_notes', 'mail_state' )
exclude = ('granted', 'granted_date', 'survey_mail_send', 'realname', 'email', 'survey_mail_date')
widgets = {'checkin': AdminDateWidget(),
'checkout': AdminDateWidget(),}
fields = ['project_name', 'transport', 'travelcost', 'checkin', 'checkout', 'hotel', 'notes']
hotel = ChoiceField(label='Hotelzimmer benötigt:', choices=HOTEL_CHOICES.items(), widget=RadioSelect())
class Media:
css = {
'all': ('css/dateFieldNoNowShortcutInTravels.css',)
}
class LibraryForm(FdbForm):
class Meta:
model = Library
fields = ['cost', 'library', 'duration', 'notes', 'survey_mail_send']
exclude = ['intern_notes', 'survey_mail_send', 'mail_state']
fields = ['cost', 'library', 'duration', 'notes']
class HonoraryCertificateForm(FdbForm):
class Meta:
model = HonoraryCertificate
fields = ['request_url', 'project']
exclude = ['intern_notes']
class IFGForm(FdbForm):
class Meta:
model = IFG
fields = ['cost', 'url', 'notes']
exclude = ['intern_notes', 'survey_mail_send', 'mail_state']
class CheckForm(FdbForm):
@ -113,63 +82,23 @@ class CheckForm(FdbForm):
label=format_html("Ich stimme den <a href='{}'>Nutzungsbedingungen</a> zu",
NUTZUNGSBEDINGUNGEN))
class LiteratureForm(CheckForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['selfbuy_give_data'].required = True
class Meta:
model = Literature
fields = ['cost', 'info', 'source', 'notes', 'selfbuy', 'selfbuy_data', 'selfbuy_give_data']
exclude = ['intern_notes', 'survey_mail_send', 'mail_state']
class Media:
js = ('dropdown/js/literature.js',)
ADULT_CHOICES = {'TRUE': format_html('Ich bin volljährig.'),
'FALSE': format_html('Ich bin noch nicht volljährig.')
}
fields = ['cost', 'info', 'source', 'notes']
class EmailForm(CheckForm):
# this is the code, to change required to false if needed
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['adult'].required = True
self.fields['other'].required = True
adult = ChoiceField(label='Volljährigkeit', choices=ADULT_CHOICES.items(), widget=RadioSelect())
# TODO: add some javascript to show/hide other-field
class Meta:
model = Email
fields = ['domain', 'address', 'other', 'adult']
exclude = ['intern_notes', 'survey_mail_send', 'mail_state']
class Media:
js = ('dropdown/js/mail.js',)
fields = ['domain', 'address', 'other']
class BusinessCardForm(CheckForm):
# this is the code, to change required to false if needed
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['url_of_pic'].required = True
self.fields['send_data_to_print'].required = True
class Meta:
class Meta:
model = BusinessCard
exclude = ['intern_notes', 'survey_mail_send', 'mail_state']
fields = ['project', 'data', 'variant', 'url_of_pic', 'send_data_to_print', 'sent_to']
class Media:
js = ('dropdown/js/businessCard.js',)
fields = ['project', 'data', 'variant', 'sent_to']
class ListForm(CheckForm):
class Meta:
model = List
fields = ['domain', 'address']
exclude = ['intern_notes', 'survey_mail_send','mail_state']

201
input/management/commands/sendmails.py Executable file → Normal file
View File

@ -4,7 +4,6 @@ import sys
from django.core.management.base import BaseCommand, CommandError
from django.template.loader import get_template
from django.core.mail import send_mail, BadHeaderError, EmailMessage
from django.core.mail import EmailMultiAlternatives
from django.conf import settings
from input.models import Project, Library, HonoraryCertificate, Travel, Email,\
@ -35,187 +34,41 @@ class Command(BaseCommand):
'name': name,
'pid': pid,
'SURVEYPREFIX': SURVEYPREFIX, }
txt_mail_template = get_template('input/survey_mail.txt')
html_mail_template = get_template('input/survey_mail.html')
mail_template = get_template('input/survey_mail.txt')
try:
subject, from_email, to = 'Dein Feedback zur Förderung durch Wikimedia Deutschland', IF_EMAIL, email
text_content = txt_mail_template.render(context)
html_content = html_mail_template.render(context)
msg = EmailMultiAlternatives(subject, text_content, from_email, [to], bcc=[SURVEY_EMAIL])
msg.attach_alternative(html_content, "text/html")
msg.send()
#print('survey mail would have been send')
#survey_mail = EmailMessage('Dein Feedback zur Förderung durch Wikimedia Deutschland',
# mail_template.render(context),
# IF_EMAIL,
# [email],
# bcc=[SURVEY_EMAIL])
#survey_mail.send(fail_silently=False)
survey_mail = EmailMessage('Dein Feedback zur Förderung durch Wikimedia Deutschland',
mail_template.render(context),
IF_EMAIL,
[email],
bcc=[SURVEY_EMAIL])
survey_mail.send(fail_silently=False)
except BadHeaderError:
return HttpResponse('Invalid header found.')
print(f'send surveylinkemail to {email}...')
''' the db entry mail_state was added. Useful when migrating databases. first delete the entry, then makemigrations
then migrate.. after that, recreate the entry with default END, after that makemigrations and migrate.
now all entries have the value END. after that rewrite the default to NONE in models.py, then makemigrations
and migrate again, to have NONE as default for all new queries. '''
def end_of_projects_reached(self):
''' end of project reached '''
# get all projects which ended
old = Project.objects.filter(end__lt = date.today())\
.exclude(end_mail_send = True)\
.filter(mail_state = 'NONE')
txt_mail_template = get_template('input/if_end_of_project.txt')
html_mail_template = get_template('input/if_end_of_project.html')
.exclude(end_mail_send = True)
mail_template = get_template('input/if_end_of_project.txt')
for project in old:
context = {'project': project}
context['URLPREFIX'] = settings.URLPREFIX
try:
subject, from_email, to = 'Projektende erreicht', IF_EMAIL, IF_EMAIL
text_content = txt_mail_template.render(context)
html_content = html_mail_template.render(context)
msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
msg.attach_alternative(html_content, "text/html")
msg.send()
#print('end of project mail would have been sent')
#send_mail('Projektende erreicht',
# mail_template.render(context),
# IF_EMAIL,
# [IF_EMAIL],
# fail_silently=False)
send_mail('Projektende erreicht',
mail_template.render(context),
IF_EMAIL,
[IF_EMAIL],
fail_silently=False)
project.end_mail_send = True
project.mail_state = 'INF'
try:
project.save()
except:
print( 'For project', project, 'there is possibly no project.start (', project.start, ') class')
except BadHeaderError:
self.stdout.write(self.style.ERROR('Invalid header found.'))
self.stdout.write(self.style.SUCCESS('end_of_projects_reached() executed.'))
def end_of_projects_approved(self):
''' end of project approved '''
# get all projects where end was reached already, and send mails for the ones already set to status "ended" by the admins
approved_end = Project.objects.filter(status = 'END')\
.exclude(end_mail_send = True)\
.filter(mail_state = 'INF')
txt_mail_template = get_template('input/if_end_of_project_approved.txt')
html_mail_template = get_template('input/if_end_of_project_approved.html')
txt_informMail_template = get_template('input/if_end_of_project_orginformed.txt')
html_informMail_template = get_template('input/if_end_of_project_orginformed.html')
# send the mail to project.email, which would be the mail of the volunteer filling out the form
for project in approved_end:
context = {'project': project}
context['URLPREFIX'] = settings.URLPREFIX
try:
subject, from_email, to = 'Projektende erreicht', IF_EMAIL, project.email
text_content = txt_mail_template.render(context)
html_content = html_mail_template.render(context)
msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
msg.attach_alternative(html_content, "text/html")
msg.send()
#print('if and of project approved mail would have been sent')
inform_subject, inform_from_email, inform_to = 'Projektorganisator*in wurde informiert', IF_EMAIL, IF_EMAIL
inform_text_content = txt_informMail_template.render(context)
inform_html_content = html_informMail_template.render(context)
inform_msg = EmailMultiAlternatives(inform_subject, inform_text_content, inform_from_email, [inform_to])
inform_msg.attach_alternative(html_content, "text/html")
inform_msg.send()
#print('if end of project orginformed mail would have been sent')
#send_mail('Projektende erreicht',
# mail_template.render(context),
# IF_EMAIL,
# [project.email],
# fail_silently=False)
#send_mail('Projektorganisator*in wurde informiert',
# informMail_template.render(context),
# IF_EMAIL,
# [IF_EMAIL],
# fail_silently=False)
project.end_mail_send = True
project.mail_state = 'CLOSE'
try:
project.save()
except:
print( 'For project', project, 'there is possibly no project.start (', project.start, ') class')
except BadHeaderError:
self.stdout.write(self.style.ERROR('Invalid header found.'))
self.stdout.write(self.style.SUCCESS('end_of_projects_approved() executed.'))
def notHappened_of_projects_approved(self):
''' notHappened of project approved '''
# get all projects where end was reached already, and send mails for the ones where status was put to NOT by admins
approved_notHappened = Project.objects.filter(status = 'NOT')\
.exclude(end_mail_send = True)\
.filter(mail_state = 'INF')
html_mail_template = get_template('input/if_not_of_project_approved.html')
txt_mail_template = get_template('input/if_not_of_project_approved.txt')
txt_informMail_template = get_template('input/if_end_of_project_orginformed.txt')
html_informMail_template = get_template('input/if_end_of_project_orginformed.html')
# send the mail to project.email, which would be the mail of the volunteer that filled out the form
for project in approved_notHappened:
context = {'project': project}
context['URLPREFIX'] = settings.URLPREFIX
try:
subject, from_email, to = 'Projektende erreicht', IF_EMAIL, project.email
text_content = txt_mail_template.render(context)
html_content = html_mail_template.render(context)
msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
msg.attach_alternative(html_content, "text/html")
msg.send()
#print('if not of project approved end mail would have been sent')
#send_mail('Projektende erreicht',
# mail_template.render(context),
# IF_EMAIL,
# [project.email],
# fail_silently=False)
inform_subject, inform_from_email, inform_to = 'Projektorganisator*in wurde informiert', IF_EMAIL, IF_EMAIL
inform_text_content = txt_informMail_template.render(context)
inform_html_content = html_informMail_template.render(context)
inform_msg = EmailMultiAlternatives(inform_subject, inform_text_content, inform_from_email, [inform_to])
inform_msg.attach_alternative(html_content, "text/html")
inform_msg.send()
#print('if not of project approved end mail orginformed would have been sent')
#send_mail('Projektorganisator*in wurde informiert',
# informMail_template.render(context),
# IF_EMAIL,
# [IF_EMAIL],
# fail_silently=False)
project.end_mail_send = True
project.mail_state = 'CLOSE'
project.save()
except BadHeaderError:
self.stdout.write(self.style.ERROR('Invalid header found.'))
self.stdout.write(self.style.SUCCESS('notHappened_of_projects_approved() executed.'))
self.stdout.write(self.style.SUCCESS('end_of_projects_reached() executed.'))
def surveymails_to_object(self, supported, name='', type='LIB'):
mytype=type
@ -232,7 +85,6 @@ class Command(BaseCommand):
name=myname,
realname=item.realname)
item.survey_mail_send = True
item.mail_state = 'END'
item.survey_mail_date = date.today()
item.save()
self.stdout.write(self.style.SUCCESS(f'surveymails for object type {type} sent'))
@ -245,8 +97,7 @@ class Command(BaseCommand):
supported = Library.objects.filter(granted=True)\
.filter(granted_date__lt = date.today() - timedelta(days=14))\
.exclude(survey_mail_send=True)\
.exclude(mail_state = 'END')
.exclude(survey_mail_send=True)
self.surveymails_to_object(supported,name='library')
def surveymails_to_hon(self):
@ -254,8 +105,7 @@ class Command(BaseCommand):
supported = HonoraryCertificate.objects.filter(granted=True)\
.filter(granted_date__lt = date.today() - timedelta(days=14))\
.exclude(survey_mail_send=True)\
.exclude(mail_state = 'END')
.exclude(survey_mail_send=True)
self.surveymails_to_object(supported, type='HON', name='project')
def surveymails_to_ifg(self):
@ -263,8 +113,7 @@ class Command(BaseCommand):
supported = IFG.objects.filter(granted=True)\
.filter(granted_date__lt = date.today() - timedelta(days=14))\
.exclude(survey_mail_send=True)\
.exclude(mail_state = 'END')
.exclude(survey_mail_send=True)
self.surveymails_to_object(supported, type='IFG', name='url')
def surveymails_to_lit(self):
@ -272,16 +121,14 @@ class Command(BaseCommand):
supported = Literature.objects.filter(granted=True)\
.filter(granted_date__lt = date.today() - timedelta(days=14))\
.exclude(survey_mail_send=True)\
.exclude(mail_state = 'END')
.exclude(survey_mail_send=True)
self.surveymails_to_object(supported, type='LIT', name='info')
def surveymails_to_project(self):
'''send survey link 4 weeks after end of project reached'''
supported = Project.objects.filter(granted=True)\
.filter(end__lt = date.today() - timedelta(days=28))\
.exclude(survey_mail_send=True)\
.exclude(mail_state = 'END')
.exclude(survey_mail_send=True)
self.surveymails_to_object(supported, type='PRO', name='name')
def surveymails_to_travel(self):
@ -289,8 +136,7 @@ class Command(BaseCommand):
supported = Travel.objects.filter(project__granted=True)\
.filter(project__end__lt = date.today() - timedelta(days=21))\
.exclude(survey_mail_send=True)\
.exclude(mail_state = 'END')
.exclude(survey_mail_send=True)
self.surveymails_to_object(supported, type='TRAV', name='project')
def surveymails_to_mail_vis_lis(self):
@ -303,8 +149,7 @@ class Command(BaseCommand):
# get class via string
supported = getattr(sys.modules[__name__], c).objects.filter(granted=True)\
.filter(granted_date__lt = lastdate)\
.exclude(survey_mail_send=True)\
.exclude(mail_state = 'END')
.exclude(survey_mail_send=True)
self.surveymails_to_object(supported, type=typefield[count])
count += 1
@ -313,8 +158,6 @@ class Command(BaseCommand):
'''the main function which is called by the custom command'''
self.end_of_projects_reached()
self.end_of_projects_approved()
self.notHappened_of_projects_approved()
self.surveymails_to_lib()
self.surveymails_to_hon()
self.surveymails_to_ifg()

0
input/migrations/0001_initial.py Executable file → Normal file
View File

0
input/migrations/0002_auto_20200922_1340.py Executable file → Normal file
View File

0
input/migrations/0003_volonteer.py Executable file → Normal file
View File

0
input/migrations/0004_project_contact.py Executable file → Normal file
View File

0
input/migrations/0005_auto_20200930_1015.py Executable file → Normal file
View File

0
input/migrations/0006_honorarycertificate.py Executable file → Normal file
View File

0
input/migrations/0007_library.py Executable file → Normal file
View File

0
input/migrations/0008_ifg.py Executable file → Normal file
View File

0
input/migrations/0009_project_pid.py Executable file → Normal file
View File

0
input/migrations/0010_auto_20201007_0732.py Executable file → Normal file
View File

0
input/migrations/0011_auto_20201007_0743.py Executable file → Normal file
View File

0
input/migrations/0012_auto_20201007_0754.py Executable file → Normal file
View File

0
input/migrations/0013_library_type.py Executable file → Normal file
View File

0
input/migrations/0014_auto_20201020_0714.py Executable file → Normal file
View File

0
input/migrations/0015_auto_20201021_0721.py Executable file → Normal file
View File

0
input/migrations/0016_project_account.py Executable file → Normal file
View File

0
input/migrations/0017_auto_20201021_1145.py Executable file → Normal file
View File

0
input/migrations/0018_auto_20201021_1147.py Executable file → Normal file
View File

0
input/migrations/0019_auto_20201021_1148.py Executable file → Normal file
View File

0
input/migrations/0020_project_project_end_mail.py Executable file → Normal file
View File

0
input/migrations/0021_auto_20201022_0934.py Executable file → Normal file
View File

0
input/migrations/0022_auto_20201022_1233.py Executable file → Normal file
View File

0
input/migrations/0023_auto_20201022_1400.py Executable file → Normal file
View File

0
input/migrations/0024_travel.py Executable file → Normal file
View File

0
input/migrations/0025_auto_20201026_1048.py Executable file → Normal file
View File

0
input/migrations/0026_auto_20201026_1214.py Executable file → Normal file
View File

0
input/migrations/0027_businesscard_email_list.py Executable file → Normal file
View File

0
input/migrations/0028_auto_20201027_1131.py Executable file → Normal file
View File

0
input/migrations/0029_auto_20201027_1247.py Executable file → Normal file
View File

0
input/migrations/0030_auto_20201027_1337.py Executable file → Normal file
View File

0
input/migrations/0031_auto_20201028_1402.py Executable file → Normal file
View File

0
input/migrations/0032_auto_20201029_1213.py Executable file → Normal file
View File

0
input/migrations/0033_auto_20201029_1338.py Executable file → Normal file
View File

0
input/migrations/0034_auto_20201102_0913.py Executable file → Normal file
View File

0
input/migrations/0035_auto_20201102_0944.py Executable file → Normal file
View File

0
input/migrations/0036_auto_20201102_1049.py Executable file → Normal file
View File

0
input/migrations/0037_auto_20201102_1054.py Executable file → Normal file
View File

0
input/migrations/0038_auto_20201102_1055.py Executable file → Normal file
View File

0
input/migrations/0039_auto_20201102_1212.py Executable file → Normal file
View File

0
input/migrations/0040_auto_20201102_1302.py Executable file → Normal file
View File

0
input/migrations/0041_auto_20201102_1318.py Executable file → Normal file
View File

0
input/migrations/0042_auto_20201102_1319.py Executable file → Normal file
View File

0
input/migrations/0043_auto_20201102_1320.py Executable file → Normal file
View File

0
input/migrations/0044_auto_20201103_1545.py Executable file → Normal file
View File

0
input/migrations/0044_auto_20201116_1531.py Executable file → Normal file
View File

0
input/migrations/0045_auto_20201116_1557.py Executable file → Normal file
View File

0
input/migrations/0046_auto_20201117_1542.py Executable file → Normal file
View File

0
input/migrations/0047_auto_20201117_1546.py Executable file → Normal file
View File

0
input/migrations/0048_auto_20201118_1503.py Executable file → Normal file
View File

0
input/migrations/0049_auto_20201118_1509.py Executable file → Normal file
View File

0
input/migrations/0050_auto_20201118_1512.py Executable file → Normal file
View File

0
input/migrations/0051_auto_20201118_1521.py Executable file → Normal file
View File

0
input/migrations/0052_auto_20201118_1524.py Executable file → Normal file
View File

0
input/migrations/0053_auto_20201118_1531.py Executable file → Normal file
View File

0
input/migrations/0054_auto_20201118_1702.py Executable file → Normal file
View File

0
input/migrations/0055_merge_20201118_1734.py Executable file → Normal file
View File

0
input/migrations/0056_auto_20201217_1215.py Executable file → Normal file
View File

0
input/migrations/0057_auto_20210104_0937.py Executable file → Normal file
View File

0
input/migrations/0058_auto_20210412_0946.py Executable file → Normal file
View File

0
input/migrations/0059_auto_20210412_1142.py Executable file → Normal file
View File

0
input/migrations/0060_concreteextern.py Executable file → Normal file
View File

0
input/migrations/0061_concretevolunteer.py Executable file → Normal file
View File

0
input/migrations/0062_auto_20211103_1155.py Executable file → Normal file
View File

View File

@ -1,58 +0,0 @@
# Generated by Django 4.1.2 on 2022-11-11 07:28
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('input', '0062_auto_20211103_1155'),
]
operations = [
migrations.AddField(
model_name='businesscard',
name='url_of_pic',
field=models.TextField(default='', help_text='Bitte gib die Wikimedia-Commons-URL des Bildes an.', max_length=200, verbose_name='Url des Bildes'),
),
migrations.AlterField(
model_name='ifg',
name='notes',
field=models.TextField(blank=True, help_text='Bitte gib an wofür Du das Stipendium verwenden willst.', max_length=1000, verbose_name='Anmerkungen'),
),
migrations.AlterField(
model_name='library',
name='notes',
field=models.TextField(blank=True, help_text='Bitte gib an wofür Du das Stipendium verwenden willst.', max_length=1000, verbose_name='Anmerkungen'),
),
migrations.AlterField(
model_name='library',
name='type',
field=models.CharField(choices=[('BIB', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/Zugang_zu_Fachliteratur#Bibliotheksstipendium" target="_blank" rel="noopener">Bibliotheksstipendium</a>'), ('ELIT', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/Zugang_zu_Fachliteratur#eLiteraturstipendium" target="_blank" rel="noopener">eLiteraturstipendium</a>'), ('MAIL', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/E-Mail-Adressen_und_Visitenkarten#E-Mail-Adressen" target="_blank" rel="noopener">E-Mail-Adresse</a>'), ('IFG', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/Gebührenerstattungen_für_Behördenanfragen" target="_blank" rel="noopener">Kostenübernahme IFG-Anfrage</a>'), ('LIT', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/Zugang_zu_Fachliteratur#Literaturstipendium" target="_blank" rel="noopener">Literaturstipendium</a>'), ('LIST', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/E-Mail-Adressen_und_Visitenkarten#Mailinglisten" target="_blank" rel="noopener">Mailingliste</a>'), ('SOFT', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/Software-Stipendien" target="_blank" rel="noopener">Softwarestipendium</a>'), ('VIS', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/E-Mail-Adressen_und_Visitenkarten#Visitenkarten" target="_blank" rel="noopener">Visitenkarten</a>')], default='BIB', max_length=4),
),
migrations.AlterField(
model_name='literature',
name='notes',
field=models.TextField(blank=True, help_text='Bitte gib an wofür Du das Stipendium verwenden willst.', max_length=1000, verbose_name='Anmerkungen'),
),
migrations.AlterField(
model_name='project',
name='notes',
field=models.TextField(blank=True, max_length=1000, null=True, verbose_name='Anmerkungen'),
),
migrations.AlterField(
model_name='project',
name='start',
field=models.DateField(null=True, verbose_name='Startdatum'),
),
migrations.AlterField(
model_name='project',
name='status',
field=models.CharField(choices=[('RUN', 'läuft'), ('END', 'beendet'), ('NOT', 'nicht stattgefunden')], default='RUN', max_length=3),
),
migrations.AlterField(
model_name='travel',
name='notes',
field=models.TextField(blank=True, max_length=1000),
),
]

View File

@ -1,33 +0,0 @@
# Generated by Django 4.1.2 on 2022-11-11 10:28
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('input', '0063_businesscard_url_of_pic_alter_ifg_notes_and_more'),
]
operations = [
migrations.AddField(
model_name='businesscard',
name='send_data_to_print',
field=models.BooleanField(default=False, help_text='Hiermit erlaube ich die Weitergabe meiner Daten (Name, Postadresse) an den von Wikimedia Deutschland ausgewählten Dienstleister (z. B. <a href="wir-machen-druck.de">wir-machen-druck.de</a>) zum Zwecke des direkten Versands der Druckerzeugnisse an mich.', verbose_name='Datenweitergabe erlauben'),
),
migrations.AddField(
model_name='literature',
name='selfbuy',
field=models.CharField(choices=[('TRUE', 'Ich möchte das Werk selbst kaufen und per Kostenerstattung bei Wikimedia Deutschland abrechnen.'), ('FALSE', 'Ich möchte, dass Wikimedia Deutschland das Werk für mich kauft')], default='TRUE', max_length=10, verbose_name='Selbstkauf?'),
),
migrations.AddField(
model_name='literature',
name='selfbuy_give_data',
field=models.BooleanField(default=False, help_text='Weitergabe meiner Daten (Name, Postadresse) an den von mir angegebenen Anbieter/Dienstleister.', verbose_name='Datenweitergabe erlauben'),
),
migrations.AlterField(
model_name='businesscard',
name='url_of_pic',
field=models.CharField(default='', help_text='Bitte gib die Wikimedia-Commons-URL des Bildes an.', max_length=200, verbose_name='Url des Bildes'),
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 4.1.2 on 2022-11-11 11:20
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('input', '0064_businesscard_send_data_to_print_literature_selfbuy_and_more'),
]
operations = [
migrations.AlterField(
model_name='literature',
name='selfbuy',
field=models.CharField(choices=[('TRUE', 'Ich möchte das Werk selbst kaufen und per Kostenerstattung bei Wikimedia Deutschland abrechnen.'), ('FALSE', 'Ich möchte, dass Wikimedia Deutschland das Werk für mich kauft'), ('NONE', 'Nichts ausgewählt')], default='TRUE', max_length=10, verbose_name='Selbstkauf?'),
),
migrations.AlterField(
model_name='literature',
name='selfbuy_give_data',
field=models.BooleanField(default='NONE', help_text='Weitergabe meiner Daten (Name, Postadresse) an den von mir angegebenen Anbieter/Dienstleister.', verbose_name='Datenweitergabe erlauben'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 4.1.2 on 2022-11-17 11:12
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('input', '0065_alter_literature_selfbuy_and_more'),
]
operations = [
migrations.AddField(
model_name='email',
name='adult',
field=models.CharField(choices=[('TRUE', 'Ich bin volljährig.'), ('FALSE', 'Ich bin noch nicht volljährig.'), ('NONE', 'Nichts ausgewählt')], default='NONE', max_length=10, verbose_name='Volljährigkeit'),
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 4.1.2 on 2022-11-17 15:41
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('input', '0066_email_adult'),
]
operations = [
migrations.AddField(
model_name='travel',
name='project_name',
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='Projektname:'),
),
migrations.AlterField(
model_name='library',
name='type',
field=models.CharField(choices=[('BIB', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/Zugang_zu_Fachliteratur#Bibliotheksstipendium" target="_blank" rel="noopener">Bibliotheksstipendium</a>'), ('ELIT', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/Zugang_zu_Fachliteratur#eLiteraturstipendium" target="_blank" rel="noopener">eLiteraturstipendium</a>'), ('MAIL', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/E-Mail-Adressen_und_Visitenkarten#E-Mail-Adressen" target="_blank" rel="noopener">E-Mail-Adresse</a>'), ('IFG', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/Gebührenerstattungen_für_Behördenanfragen" target="_blank" rel="noopener">Kostenübernahme IFG-Anfrage</a>'), ('LIT', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/Zugang_zu_Fachliteratur#Literaturstipendium" target="_blank" rel="noopener">Literaturstipendium</a>'), ('LIST', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/E-Mail-Adressen_und_Visitenkarten#Mailinglisten" target="_blank" rel="noopener">Mailingliste</a>'), ('SOFT', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/Software-Stipendien" target="_blank" rel="noopener">Softwarestipendium</a>'), ('VIS', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/E-Mail-Adressen_und_Visitenkarten#Visitenkarten" target="_blank" rel="noopener">Visitenkarten</a>'), ('TRAV', 'Reisekosten')], default='BIB', max_length=4),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 4.1.2 on 2022-11-17 15:48
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('input', '0067_travel_project_name_alter_library_type'),
]
operations = [
migrations.AddField(
model_name='travel',
name='hotel',
field=models.BooleanField(default=False, verbose_name='Hotelzimmer benötigt:'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 4.1.2 on 2022-11-17 15:58
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('input', '0068_travel_hotel'),
]
operations = [
migrations.AlterField(
model_name='travel',
name='transport',
field=models.CharField(choices=[('BAHN', 'Bahn'), ('NONE', 'Keine Fahrtkosten'), ('OTHER', 'Sonstiges (mit Begründung)')], default='BAHN', max_length=5, verbose_name='Transportmittel:'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 4.1.2 on 2022-11-17 16:13
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('input', '0069_alter_travel_transport'),
]
operations = [
migrations.AlterField(
model_name='travel',
name='project',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='input.project'),
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 4.1.2 on 2022-11-17 17:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('input', '0070_alter_travel_project'),
]
operations = [
migrations.AddField(
model_name='honorarycertificate',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000),
),
migrations.AddField(
model_name='travel',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000),
),
]

View File

@ -1,43 +0,0 @@
# Generated by Django 4.1.2 on 2022-11-17 18:13
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('input', '0071_honorarycertificate_intern_notes_travel_intern_notes'),
]
operations = [
migrations.AddField(
model_name='businesscard',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000),
),
migrations.AddField(
model_name='email',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000),
),
migrations.AddField(
model_name='ifg',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000),
),
migrations.AddField(
model_name='library',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000),
),
migrations.AddField(
model_name='list',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000),
),
migrations.AddField(
model_name='literature',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 4.1.2 on 2022-11-17 18:14
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('input', '0072_businesscard_intern_notes_email_intern_notes_and_more'),
]
operations = [
migrations.AddField(
model_name='account',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 4.1.2 on 2022-11-17 18:15
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('input', '0073_account_intern_notes'),
]
operations = [
migrations.AddField(
model_name='project',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 4.1.2 on 2022-11-21 13:49
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('input', '0074_project_intern_notes'),
]
operations = [
migrations.AddField(
model_name='literature',
name='selfbuy_data',
field=models.TextField(default='', help_text='Bitte gib hier alle persönlichen Daten an, und zwar genau so,<br> wie sie (auch in der entsprechenden Reihenfolge) auf den Visitenkarten stehen sollen<br> (z.B. Vorname Nachname, Benutzer:/Benutzerin:, Benutzer-/-innenname, Anschrift,<br> Telefonnummer, E-Mail-Adresse usw.). Trenne die einzelnen Angaben durch Zeilenumbrüche.<br> Hinweis: Telefonnummern bilden wir üblicherweise im internationalen Format gemäß<br> DIN 5008 ab. Als anzugebende E-Mail-Adresse empfehlen wir dir eine Wikimedia-Projekt-<br> Adresse, die du ebenfalls beantragen kannst, sofern du nicht bereits eine besitzt.', max_length=1000, verbose_name='Persönliche Daten für die Visitenkarten'),
),
]

View File

@ -1,78 +0,0 @@
# Generated by Django 3.1.2 on 2022-11-29 16:01
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('input', '0075_literature_selfbuy_data'),
]
operations = [
migrations.AlterField(
model_name='businesscard',
name='survey_mail_send',
field=models.BooleanField(default=True, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='concreteextern',
name='survey_mail_send',
field=models.BooleanField(default=True, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='concretevolunteer',
name='survey_mail_send',
field=models.BooleanField(default=True, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='email',
name='survey_mail_send',
field=models.BooleanField(default=True, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='honorarycertificate',
name='survey_mail_send',
field=models.BooleanField(default=True, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='ifg',
name='survey_mail_send',
field=models.BooleanField(default=True, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='library',
name='survey_mail_send',
field=models.BooleanField(default=True, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='list',
name='survey_mail_send',
field=models.BooleanField(default=True, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='literature',
name='selfbuy_data',
field=models.TextField(default='', help_text='Bitte gib hier alle persönlichen Daten an, die wir benötigen, um das Werk<br> für dich zu kaufen und es dir anschließend zu schicken (z.B. Vorname Nachname, Anschrift, <br> Telefonnummer, E-Mail-Adresse usw.). Trenne die einzelnen Angaben durch Zeilenumbrüche. <br> Hinweis: Telefonnummern bilden wir üblicherweise im internationalen Format gemäß<br> DIN 5008 ab. Als anzugebende E-Mail-Adresse empfehlen wir dir eine Wikimedia-Projekt-<br> Adresse, die du ebenfalls beantragen kannst, sofern du nicht bereits eine besitzt.', max_length=1000, verbose_name='Persönliche Daten sowie Adresse'),
),
migrations.AlterField(
model_name='literature',
name='selfbuy_give_data',
field=models.BooleanField(help_text='Weitergabe meiner Daten (Name, Postadresse) an den von mir angegebenen Anbieter/Dienstleister.', verbose_name='Datenweitergabe erlauben'),
),
migrations.AlterField(
model_name='literature',
name='survey_mail_send',
field=models.BooleanField(default=True, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='project',
name='survey_mail_send',
field=models.BooleanField(default=True, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='travel',
name='survey_mail_send',
field=models.BooleanField(default=True, verbose_name='Keine Umfragemail schicken'),
),
]

View File

@ -1,123 +0,0 @@
# Generated by Django 3.1.2 on 2022-11-29 17:06
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('input', '0076_auto_20221129_1601'),
]
operations = [
migrations.AddField(
model_name='businesscard',
name='mailState',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('SURVEY', 'die Survey Mail wurde bereits versendet'), ('END', 'alle automatischen Mails wurden bereits versendet')], default='END', max_length=6),
),
migrations.AddField(
model_name='concreteextern',
name='mailState',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('SURVEY', 'die Survey Mail wurde bereits versendet'), ('END', 'alle automatischen Mails wurden bereits versendet')], default='END', max_length=6),
),
migrations.AddField(
model_name='concretevolunteer',
name='mailState',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('SURVEY', 'die Survey Mail wurde bereits versendet'), ('END', 'alle automatischen Mails wurden bereits versendet')], default='END', max_length=6),
),
migrations.AddField(
model_name='email',
name='mailState',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('SURVEY', 'die Survey Mail wurde bereits versendet'), ('END', 'alle automatischen Mails wurden bereits versendet')], default='END', max_length=6),
),
migrations.AddField(
model_name='honorarycertificate',
name='mailState',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('SURVEY', 'die Survey Mail wurde bereits versendet'), ('END', 'alle automatischen Mails wurden bereits versendet')], default='END', max_length=6),
),
migrations.AddField(
model_name='ifg',
name='mailState',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('SURVEY', 'die Survey Mail wurde bereits versendet'), ('END', 'alle automatischen Mails wurden bereits versendet')], default='END', max_length=6),
),
migrations.AddField(
model_name='library',
name='mailState',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('SURVEY', 'die Survey Mail wurde bereits versendet'), ('END', 'alle automatischen Mails wurden bereits versendet')], default='END', max_length=6),
),
migrations.AddField(
model_name='list',
name='mailState',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('SURVEY', 'die Survey Mail wurde bereits versendet'), ('END', 'alle automatischen Mails wurden bereits versendet')], default='END', max_length=6),
),
migrations.AddField(
model_name='literature',
name='mailState',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('SURVEY', 'die Survey Mail wurde bereits versendet'), ('END', 'alle automatischen Mails wurden bereits versendet')], default='END', max_length=6),
),
migrations.AddField(
model_name='project',
name='mailState',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('SURVEY', 'die Survey Mail wurde bereits versendet'), ('END', 'alle automatischen Mails wurden bereits versendet')], default='END', max_length=6),
),
migrations.AddField(
model_name='travel',
name='mailState',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('SURVEY', 'die Survey Mail wurde bereits versendet'), ('END', 'alle automatischen Mails wurden bereits versendet')], default='END', max_length=6),
),
migrations.AlterField(
model_name='businesscard',
name='survey_mail_send',
field=models.BooleanField(default=False, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='concreteextern',
name='survey_mail_send',
field=models.BooleanField(default=False, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='concretevolunteer',
name='survey_mail_send',
field=models.BooleanField(default=False, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='email',
name='survey_mail_send',
field=models.BooleanField(default=False, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='honorarycertificate',
name='survey_mail_send',
field=models.BooleanField(default=False, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='ifg',
name='survey_mail_send',
field=models.BooleanField(default=False, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='library',
name='survey_mail_send',
field=models.BooleanField(default=False, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='list',
name='survey_mail_send',
field=models.BooleanField(default=False, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='literature',
name='survey_mail_send',
field=models.BooleanField(default=False, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='project',
name='survey_mail_send',
field=models.BooleanField(default=False, verbose_name='Keine Umfragemail schicken'),
),
migrations.AlterField(
model_name='travel',
name='survey_mail_send',
field=models.BooleanField(default=False, verbose_name='Keine Umfragemail schicken'),
),
]

View File

@ -1,68 +0,0 @@
# Generated by Django 3.1.2 on 2022-11-29 17:12
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('input', '0077_auto_20221129_1706'),
]
operations = [
migrations.RenameField(
model_name='businesscard',
old_name='mailState',
new_name='mail_state',
),
migrations.RenameField(
model_name='concreteextern',
old_name='mailState',
new_name='mail_state',
),
migrations.RenameField(
model_name='concretevolunteer',
old_name='mailState',
new_name='mail_state',
),
migrations.RenameField(
model_name='email',
old_name='mailState',
new_name='mail_state',
),
migrations.RenameField(
model_name='honorarycertificate',
old_name='mailState',
new_name='mail_state',
),
migrations.RenameField(
model_name='ifg',
old_name='mailState',
new_name='mail_state',
),
migrations.RenameField(
model_name='library',
old_name='mailState',
new_name='mail_state',
),
migrations.RenameField(
model_name='list',
old_name='mailState',
new_name='mail_state',
),
migrations.RenameField(
model_name='literature',
old_name='mailState',
new_name='mail_state',
),
migrations.RenameField(
model_name='project',
old_name='mailState',
new_name='mail_state',
),
migrations.RenameField(
model_name='travel',
old_name='mailState',
new_name='mail_state',
),
]

View File

@ -1,68 +0,0 @@
# Generated by Django 3.1.2 on 2022-11-29 23:10
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('input', '0078_auto_20221129_1712'),
]
operations = [
migrations.AlterField(
model_name='businesscard',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('END', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('APPR', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='APPR', max_length=6),
),
migrations.AlterField(
model_name='concreteextern',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('END', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('APPR', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='APPR', max_length=6),
),
migrations.AlterField(
model_name='concretevolunteer',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('END', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('APPR', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='APPR', max_length=6),
),
migrations.AlterField(
model_name='email',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('END', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('APPR', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='APPR', max_length=6),
),
migrations.AlterField(
model_name='honorarycertificate',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('END', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('APPR', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='APPR', max_length=6),
),
migrations.AlterField(
model_name='ifg',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('END', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('APPR', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='APPR', max_length=6),
),
migrations.AlterField(
model_name='library',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('END', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('APPR', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='APPR', max_length=6),
),
migrations.AlterField(
model_name='list',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('END', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('APPR', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='APPR', max_length=6),
),
migrations.AlterField(
model_name='literature',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('END', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('APPR', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='APPR', max_length=6),
),
migrations.AlterField(
model_name='project',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('END', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('APPR', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='APPR', max_length=6),
),
migrations.AlterField(
model_name='travel',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('END', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('APPR', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='APPR', max_length=6),
),
]

View File

@ -1,68 +0,0 @@
# Generated by Django 3.1.2 on 2022-11-29 23:23
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('input', '0079_auto_20221129_2310'),
]
operations = [
migrations.AlterField(
model_name='businesscard',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('INF', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('END', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='NONE', max_length=6),
),
migrations.AlterField(
model_name='concreteextern',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('INF', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('END', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='NONE', max_length=6),
),
migrations.AlterField(
model_name='concretevolunteer',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('INF', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('END', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='NONE', max_length=6),
),
migrations.AlterField(
model_name='email',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('INF', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('END', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='NONE', max_length=6),
),
migrations.AlterField(
model_name='honorarycertificate',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('INF', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('END', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='NONE', max_length=6),
),
migrations.AlterField(
model_name='ifg',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('INF', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('END', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='NONE', max_length=6),
),
migrations.AlterField(
model_name='library',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('INF', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('END', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='NONE', max_length=6),
),
migrations.AlterField(
model_name='list',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('INF', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('END', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='NONE', max_length=6),
),
migrations.AlterField(
model_name='literature',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('INF', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('END', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='NONE', max_length=6),
),
migrations.AlterField(
model_name='project',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('INF', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('END', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='NONE', max_length=6),
),
migrations.AlterField(
model_name='travel',
name='mail_state',
field=models.CharField(choices=[('NONE', 'noch keine Mail versendet'), ('INF', 'die Benachrichtigung End-Mail wurde bereits versendet'), ('END', 'alle automatischen Mails, auch surveyMail, wurden bereits versendet')], default='NONE', max_length=6),
),
]

View File

@ -1,213 +0,0 @@
# Generated by Django 3.1.2 on 2022-12-04 17:33
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('input', '0080_auto_20221129_2323'),
]
operations = [
migrations.AlterField(
model_name='account',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000, verbose_name='interne Anmerkungen'),
),
migrations.AlterField(
model_name='businesscard',
name='granted',
field=models.BooleanField(null=True, verbose_name='bewilligt'),
),
migrations.AlterField(
model_name='businesscard',
name='granted_date',
field=models.DateField(null=True, verbose_name='bewilligt am'),
),
migrations.AlterField(
model_name='businesscard',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000, verbose_name='interne Anmerkungen'),
),
migrations.AlterField(
model_name='businesscard',
name='send_data_to_print',
field=models.BooleanField(default=False, help_text='Hiermit erlaube ich die Weitergabe meiner Daten (Name, Postadresse) an den von Wikimedia<br> Deutschland ausgewählten Dienstleister (z. B. <a href="wir-machen-druck.de">wir-machen-druck.de</a>) zum Zwecke des direkten <br> Versands der Druckerzeugnisse an mich.', verbose_name='Datenweitergabe erlauben'),
),
migrations.AlterField(
model_name='concreteextern',
name='granted',
field=models.BooleanField(null=True, verbose_name='bewilligt'),
),
migrations.AlterField(
model_name='concreteextern',
name='granted_date',
field=models.DateField(null=True, verbose_name='bewilligt am'),
),
migrations.AlterField(
model_name='concretevolunteer',
name='granted',
field=models.BooleanField(null=True, verbose_name='bewilligt'),
),
migrations.AlterField(
model_name='concretevolunteer',
name='granted_date',
field=models.DateField(null=True, verbose_name='bewilligt am'),
),
migrations.AlterField(
model_name='email',
name='granted',
field=models.BooleanField(null=True, verbose_name='bewilligt'),
),
migrations.AlterField(
model_name='email',
name='granted_date',
field=models.DateField(null=True, verbose_name='bewilligt am'),
),
migrations.AlterField(
model_name='email',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000, verbose_name='interne Anmerkungen'),
),
migrations.AlterField(
model_name='honorarycertificate',
name='granted',
field=models.BooleanField(null=True, verbose_name='bewilligt'),
),
migrations.AlterField(
model_name='honorarycertificate',
name='granted_date',
field=models.DateField(null=True, verbose_name='bewilligt am'),
),
migrations.AlterField(
model_name='honorarycertificate',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000, verbose_name='interne Anmerkungen'),
),
migrations.AlterField(
model_name='ifg',
name='granted',
field=models.BooleanField(null=True, verbose_name='bewilligt'),
),
migrations.AlterField(
model_name='ifg',
name='granted_date',
field=models.DateField(null=True, verbose_name='bewilligt am'),
),
migrations.AlterField(
model_name='ifg',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000, verbose_name='interne Anmerkungen'),
),
migrations.AlterField(
model_name='library',
name='granted',
field=models.BooleanField(null=True, verbose_name='bewilligt'),
),
migrations.AlterField(
model_name='library',
name='granted_date',
field=models.DateField(null=True, verbose_name='bewilligt am'),
),
migrations.AlterField(
model_name='library',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000, verbose_name='interne Anmerkungen'),
),
migrations.AlterField(
model_name='library',
name='type',
field=models.CharField(choices=[('BIB', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/Zugang_zu_Fachliteratur#Bibliotheksstipendium" target="_blank" rel="noopener">Bibliotheksstipendium</a>'), ('ELIT', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/Zugang_zu_Fachliteratur#eLiteraturstipendium" target="_blank" rel="noopener">eLiteraturstipendium</a>'), ('MAIL', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/E-Mail-Adressen_und_Visitenkarten#E-Mail-Adressen" target="_blank" rel="noopener">E-Mail-Adresse</a>'), ('IFG', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/Gebührenerstattungen_für_Behördenanfragen" target="_blank" rel="noopener">Kostenübernahme IFG-Anfrage</a>'), ('LIT', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/Zugang_zu_Fachliteratur#Literaturstipendium" target="_blank" rel="noopener">Literaturstipendium</a>'), ('LIST', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/E-Mail-Adressen_und_Visitenkarten#Mailinglisten" target="_blank" rel="noopener">Mailingliste</a>'), ('TRAV', '<a href="https://de.wikipedia.org/wiki/Wikipedia:F%C3%B6rderung/Reisekostenerstattungen" target="_blank" rel="noopener">Reisekosten</a>'), ('SOFT', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/Software-Stipendien" target="_blank" rel="noopener">Softwarestipendium</a>'), ('VIS', '<a href="https://de.wikipedia.org/wiki/Wikipedia:Förderung/E-Mail-Adressen_und_Visitenkarten#Visitenkarten" target="_blank" rel="noopener">Visitenkarten</a>')], default='BIB', max_length=4),
),
migrations.AlterField(
model_name='list',
name='granted',
field=models.BooleanField(null=True, verbose_name='bewilligt'),
),
migrations.AlterField(
model_name='list',
name='granted_date',
field=models.DateField(null=True, verbose_name='bewilligt am'),
),
migrations.AlterField(
model_name='list',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000, verbose_name='interne Anmerkungen'),
),
migrations.AlterField(
model_name='literature',
name='granted',
field=models.BooleanField(null=True, verbose_name='bewilligt'),
),
migrations.AlterField(
model_name='literature',
name='granted_date',
field=models.DateField(null=True, verbose_name='bewilligt am'),
),
migrations.AlterField(
model_name='literature',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000, verbose_name='interne Anmerkungen'),
),
migrations.AlterField(
model_name='literature',
name='selfbuy',
field=models.CharField(choices=[('TRUE', 'Ich möchte das Werk selbst kaufen und per Kostenerstattung bei Wikimedia Deutschland abrechnen.'), ('FALSE', 'Ich möchte, dass Wikimedia Deutschland das Werk für mich kauft')], default='TRUE', max_length=10, verbose_name='Selbstkauf?'),
),
migrations.AlterField(
model_name='project',
name='cost',
field=models.IntegerField(blank=True, null=True, verbose_name='Kosten'),
),
migrations.AlterField(
model_name='project',
name='end_mail_send',
field=models.BooleanField(null=True, verbose_name='Endmail versenden'),
),
migrations.AlterField(
model_name='project',
name='granted',
field=models.BooleanField(null=True, verbose_name='bewilligt'),
),
migrations.AlterField(
model_name='project',
name='granted_date',
field=models.DateField(null=True, verbose_name='bewilligt am'),
),
migrations.AlterField(
model_name='project',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000, verbose_name='interne Anmerkungen'),
),
migrations.AlterField(
model_name='travel',
name='checkin',
field=models.DateTimeField(blank=True, null=True, verbose_name='Anreise'),
),
migrations.AlterField(
model_name='travel',
name='checkout',
field=models.DateTimeField(blank=True, null=True, verbose_name='Abreise'),
),
migrations.AlterField(
model_name='travel',
name='granted',
field=models.BooleanField(null=True, verbose_name='bewilligt'),
),
migrations.AlterField(
model_name='travel',
name='granted_date',
field=models.DateField(null=True, verbose_name='bewilligt am'),
),
migrations.AlterField(
model_name='travel',
name='intern_notes',
field=models.TextField(blank=True, max_length=1000, verbose_name='interne Anmerkungen'),
),
migrations.AlterField(
model_name='travel',
name='notes',
field=models.TextField(blank=True, max_length=1000, verbose_name='Anmerkungen'),
),
]

Some files were not shown because too many files have changed in this diff Show More