diff --git a/input/admin.py b/input/admin.py index dc83ea1..f617d8e 100644 --- a/input/admin.py +++ b/input/admin.py @@ -34,6 +34,7 @@ class ProjectAdmin(admin.ModelAdmin): # action = ['export_as_csv'] date_hierarchy = 'start' + @admin.register(BusinessCard) class BusinessCardAdmin(admin.ModelAdmin): save_as = True @@ -45,6 +46,11 @@ class BusinessCardAdmin(admin.ModelAdmin): class Media: js = ('dropdown/js/base.js',) +@admin.register(Literature) +class LiteratureAdmin(admin.ModelAdmin): + + class Media: + js = ('dropdown/js/base.js',) @@ -56,5 +62,4 @@ admin.site.register([ Travel, Email, List, - Literature, ]) diff --git a/input/forms.py b/input/forms.py index 9f12c31..20b0746 100644 --- a/input/forms.py +++ b/input/forms.py @@ -83,21 +83,37 @@ class CheckForm(FdbForm): 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'] + fields = ['cost', 'info', 'source', 'notes', 'selfbuy', 'selfbuy_give_data'] + class Media: + js = ('dropdown/js/base.js',) class EmailForm(CheckForm): # TODO: add some javascript to show/hide other-field class Meta: model = Email fields = ['domain', 'address', 'other'] + class Media: + js = ('dropdown/js/base.js',) + + class BusinessCardForm(CheckForm): - class Meta: + # 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 + + class Meta: model = BusinessCard fields = ['project', 'data', 'variant', 'url_of_pic', 'sent_to'] + class Media: + js = ('dropdown/js/base.js',) class ListForm(CheckForm): class Meta: diff --git a/input/management/commands/sendmails.py b/input/management/commands/sendmails.py index 4e3e2ae..917fc74 100644 --- a/input/management/commands/sendmails.py +++ b/input/management/commands/sendmails.py @@ -50,9 +50,11 @@ class Command(BaseCommand): def end_of_projects_reached(self): ''' end of project reached ''' # get all projects which ended + + print(Project.objects.filter(end__lt = date.today())) old = Project.objects.filter(end__lt = date.today())\ .exclude(end_mail_send = True) - + mail_template = get_template('input/if_end_of_project.txt') for project in old: context = {'project': project} @@ -70,6 +72,31 @@ class Command(BaseCommand): 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 = False) + print(approved_end) + mail_template = get_template('input/if_end_of_project.txt') + for project in approved_end: + context = {'project': project} + context['URLPREFIX'] = settings.URLPREFIX + try: + send_mail('Projektende erreicht', + mail_template.render(context), + IF_EMAIL, + [IF_EMAIL], + fail_silently=False) + project.end_mail_send = True + project.save() + except BadHeaderError: + self.stdout.write(self.style.ERROR('Invalid header found.')) + + self.stdout.write(self.style.SUCCESS('end_of_projects_reached() executed.')) + + def surveymails_to_object(self, supported, name='', type='LIB'): mytype=type myname = name @@ -158,6 +185,7 @@ class Command(BaseCommand): '''the main function which is called by the custom command''' self.end_of_projects_reached() + self.end_of_projects_approved() self.surveymails_to_lib() self.surveymails_to_hon() self.surveymails_to_ifg() diff --git a/input/migrations/0064_businesscard_send_data_to_print_literature_selfbuy_and_more.py b/input/migrations/0064_businesscard_send_data_to_print_literature_selfbuy_and_more.py new file mode 100644 index 0000000..2875fec --- /dev/null +++ b/input/migrations/0064_businesscard_send_data_to_print_literature_selfbuy_and_more.py @@ -0,0 +1,33 @@ +# 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. wir-machen-druck.de) 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'), + ), + ] diff --git a/input/migrations/0065_alter_literature_selfbuy_and_more.py b/input/migrations/0065_alter_literature_selfbuy_and_more.py new file mode 100644 index 0000000..d081397 --- /dev/null +++ b/input/migrations/0065_alter_literature_selfbuy_and_more.py @@ -0,0 +1,23 @@ +# 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'), + ), + ] diff --git a/input/models.py b/input/models.py index 341561c..d1f6589 100644 --- a/input/models.py +++ b/input/models.py @@ -190,17 +190,27 @@ class Library(Grant): def __str__(self): return self.library + +SELFBUY_CHOICES = {'TRUE': format_html('Ich möchte das Werk selbst kaufen und per Kostenerstattung bei Wikimedia Deutschland abrechnen.'), + 'FALSE': format_html('Ich möchte, dass Wikimedia Deutschland das Werk für mich kauft'), + 'NONE': format_html('Nichts ausgewählt') + } + + class Literature(Grant): info = models.CharField(max_length=500, verbose_name='Informationen zum Werk', help_text=format_html("Bitte gib alle Informationen zum benötigten Werk an,
\ die eine eindeutige Identifizierung ermöglichen (Autor, Titel, Verlag, ISBN, ...)")) source = models.CharField(max_length=200, verbose_name='Bezugsquelle', help_text="Bitte gib an, wo du das Werk kaufen möchtest.") + selfbuy = models.CharField( max_length=10, verbose_name='Selbstkauf?', choices=SELFBUY_CHOICES.items(), default='TRUE') + selfbuy_give_data = models.BooleanField(default='NONE', verbose_name=format_html('Datenweitergabe erlauben'), help_text=format_html('Weitergabe meiner Daten (Name, Postadresse) an den von mir angegebenen Anbieter/Dienstleister.')) class IFG(Grant): url = models.URLField(max_length=2000, verbose_name="URL", help_text="Bitte gib den Link zu deiner Anfrage bei Frag den Staat an.") + def __str__(self): return "IFG-Anfrage von " + self.realname @@ -270,4 +280,4 @@ class BusinessCard(Extern): sent_to = models.TextField(max_length=1000, verbose_name='Versandadresse', default='', help_text="Bitte gib den Namen und die vollständige Adresse ein, an welche die Visitenkarten geschickt werden sollen.") - send_data_to_print = models.BooleanField(null=False, verbose_name=format_html('Datenweitergabe erlauben'), help_text=format_html('Hiermit erlaube ich die Weitergabe meiner Daten (Name, Postadresse) an den von Wikimedia Deutschland ausgewählten Dienstleister (z. B. wir-machen-druck.de) zum Zwecke des direkten Versands der Druckerzeugnisse an mich.')) + send_data_to_print = models.BooleanField(default=False, verbose_name=format_html('Datenweitergabe erlauben'), help_text=format_html('Hiermit erlaube ich die Weitergabe meiner Daten (Name, Postadresse) an den von Wikimedia Deutschland ausgewählten Dienstleister (z. B. wir-machen-druck.de) zum Zwecke des direkten Versands der Druckerzeugnisse an mich.')) diff --git a/input/settings.py b/input/settings.py index eacac3f..8b01de1 100644 --- a/input/settings.py +++ b/input/settings.py @@ -1,6 +1,8 @@ # mail for IF-OTRS -IF_EMAIL = 'community@wikimedia.de' -SURVEY_EMAIL = 'christof.pins@wikimedia.de' +#IF_EMAIL = 'community@wikimedia.de' +IF_EMAIL = 'luca@cannabinieri.de' +#SURVEY_EMAIL = 'christof.pins@wikimedia.de' +SURVEY_EMAIL = 'luca.wulf@cannabinieri.de' # prefix for urls SURVEYPREFIX = 'https://wikimedia.sslsurvey.de/Foerderbarometer/?'