| 
									
										
										
										
											2020-10-22 08:27:14 +00:00
										 |  |  | from datetime import date, timedelta | 
					
						
							| 
									
										
										
										
											2020-10-27 10:55:16 +00:00
										 |  |  | import sys | 
					
						
							| 
									
										
										
										
											2020-10-21 13:01:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-07 09:21:21 +00:00
										 |  |  | from django.core.management.base import BaseCommand, CommandError | 
					
						
							| 
									
										
										
										
											2020-10-22 08:27:14 +00:00
										 |  |  | from django.template.loader import get_template | 
					
						
							|  |  |  | from django.core.mail import send_mail, BadHeaderError | 
					
						
							| 
									
										
										
										
											2020-10-21 13:01:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-27 12:08:47 +00:00
										 |  |  | from input.models import Project, Library, HonoraryCertificate, Travel, Email,\ | 
					
						
							| 
									
										
										
										
											2020-10-27 12:47:46 +00:00
										 |  |  |                          BusinessCard, List, IFG, Literature | 
					
						
							| 
									
										
										
										
											2020-10-22 12:17:34 +00:00
										 |  |  | from input.settings import URLPREFIX, IF_EMAIL, SURVEYPREFIX | 
					
						
							| 
									
										
										
										
											2020-10-07 11:15:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-07 09:21:21 +00:00
										 |  |  | class Command(BaseCommand): | 
					
						
							| 
									
										
										
										
											2020-10-21 13:01:05 +00:00
										 |  |  |     ''' mails will be send here:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     - two weeks after confirmation of support for volunteer (/extern) send link | 
					
						
							|  |  |  |     with surveylink | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-26 11:56:29 +00:00
										 |  |  |     - same for HonoraryCertificate (/intern) | 
					
						
							| 
									
										
										
										
											2020-10-21 13:01:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-26 12:23:05 +00:00
										 |  |  |     - travel: mail 3 weeks after end of project. | 
					
						
							| 
									
										
										
										
											2020-10-21 13:01:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     - assumed end of project (/project) reached: mail to IF, link to project-editpage | 
					
						
							| 
									
										
										
										
											2020-10-22 11:08:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-26 12:23:05 +00:00
										 |  |  |     - 4 weeks after end of project reached: mail with surveylink | 
					
						
							| 
									
										
										
										
											2020-10-21 13:01:05 +00:00
										 |  |  |     '''
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     help = '''This command sends mail with some links to the database or to the survey
 | 
					
						
							|  |  |  |               after some amount of time.'''
 | 
					
						
							| 
									
										
										
										
											2020-10-07 09:21:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-22 11:08:58 +00:00
										 |  |  |     def survey_link(self, email, type, pid, name, realname): | 
					
						
							| 
									
										
										
										
											2020-10-22 12:17:34 +00:00
										 |  |  |         context = {'realname': realname, | 
					
						
							|  |  |  |                        'type': type, | 
					
						
							|  |  |  |                        'name': name, | 
					
						
							|  |  |  |                        'pid': pid, | 
					
						
							|  |  |  |                        'SURVEYPREFIX': SURVEYPREFIX, } | 
					
						
							|  |  |  |         mail_template = get_template('input/survey_mail.txt') | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             send_mail('Projektende erreicht', | 
					
						
							|  |  |  |                   mail_template.render(context), | 
					
						
							|  |  |  |                   IF_EMAIL, | 
					
						
							|  |  |  |                   [email], | 
					
						
							|  |  |  |                   fail_silently=False) | 
					
						
							|  |  |  |         except BadHeaderError: | 
					
						
							|  |  |  |             return HttpResponse('Invalid header found.') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         print(f'send surveylinkemail to {email}...') | 
					
						
							| 
									
										
										
										
											2020-10-07 11:15:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-22 11:08:58 +00:00
										 |  |  |     def end_of_projects_reached(self): | 
					
						
							|  |  |  |         ''' end of project reached ''' | 
					
						
							|  |  |  |         # get all projects which ended | 
					
						
							|  |  |  |         old = Project.objects.filter(end__lt = date.today())\ | 
					
						
							| 
									
										
										
										
											2020-10-22 09:36:16 +00:00
										 |  |  |                              .exclude(end_mail_send = True) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-22 08:27:14 +00:00
										 |  |  |         mail_template = get_template('input/if_end_of_project.txt') | 
					
						
							|  |  |  |         for project in old: | 
					
						
							|  |  |  |             context = {'project': project} | 
					
						
							| 
									
										
										
										
											2020-10-22 08:53:40 +00:00
										 |  |  |             context['URLPREFIX'] = URLPREFIX | 
					
						
							| 
									
										
										
										
											2020-10-22 08:27:14 +00:00
										 |  |  |             try: | 
					
						
							|  |  |  |                 send_mail('Projektende erreicht', | 
					
						
							|  |  |  |                           mail_template.render(context), | 
					
						
							|  |  |  |                           IF_EMAIL, | 
					
						
							|  |  |  |                           [IF_EMAIL], | 
					
						
							|  |  |  |                           fail_silently=False) | 
					
						
							| 
									
										
										
										
											2020-10-22 09:36:16 +00:00
										 |  |  |                 project.end_mail_send = True | 
					
						
							|  |  |  |                 project.save() | 
					
						
							| 
									
										
										
										
											2020-10-22 08:27:14 +00:00
										 |  |  |             except BadHeaderError: | 
					
						
							| 
									
										
										
										
											2020-10-22 12:38:23 +00:00
										 |  |  |                 self.stdout.write(self.style.ERROR('Invalid header found.')) | 
					
						
							| 
									
										
										
										
											2020-10-22 08:27:14 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-22 11:08:58 +00:00
										 |  |  |         self.stdout.write(self.style.SUCCESS('end_of_projects_reached() executed.')) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-27 10:55:16 +00:00
										 |  |  |     def surveymails_to_object(self, supported, name='', type='LIB'): | 
					
						
							| 
									
										
										
										
											2020-10-26 12:55:36 +00:00
										 |  |  |         mytype=type | 
					
						
							| 
									
										
										
										
											2020-10-27 10:55:16 +00:00
										 |  |  |         myname = name | 
					
						
							| 
									
										
										
										
											2020-10-22 11:08:58 +00:00
										 |  |  |         for item in supported: | 
					
						
							| 
									
										
										
										
											2020-10-26 12:55:36 +00:00
										 |  |  |             if type == 'LIB': | 
					
						
							|  |  |  |                 mytype = item.type | 
					
						
							| 
									
										
										
										
											2020-10-27 10:55:16 +00:00
										 |  |  |             elif type not in ('MAIL','VIS','LIST'): | 
					
						
							|  |  |  |                 myname = getattr(item,name) | 
					
						
							| 
									
										
										
										
											2020-10-22 11:08:58 +00:00
										 |  |  |             self.survey_link(email=item.email, | 
					
						
							| 
									
										
										
										
											2020-10-26 12:55:36 +00:00
										 |  |  |                          type=mytype, | 
					
						
							| 
									
										
										
										
											2020-10-26 14:06:19 +00:00
										 |  |  |                          pid=f'{mytype}{item.pk}', | 
					
						
							| 
									
										
										
										
											2020-10-27 10:55:16 +00:00
										 |  |  |                          name=myname, | 
					
						
							| 
									
										
										
										
											2020-10-22 12:38:23 +00:00
										 |  |  |                          realname=item.realname) | 
					
						
							|  |  |  |             item.survey_mail_send = True | 
					
						
							|  |  |  |             item.save() | 
					
						
							| 
									
										
										
										
											2020-10-26 13:46:45 +00:00
										 |  |  |         self.stdout.write(self.style.SUCCESS(f'surveymails for object type {type} sent')) | 
					
						
							| 
									
										
										
										
											2020-10-26 12:55:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-27 11:37:18 +00:00
										 |  |  |     ''' TODO: there could be some more removing of duplicated code in the following functions ''' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-26 12:55:36 +00:00
										 |  |  |     def surveymails_to_lib(self): | 
					
						
							|  |  |  |         '''get all library objects which where granted two weeks ago''' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         supported = Library.objects.filter(granted=True)\ | 
					
						
							|  |  |  |                                    .filter(granted_date__lt = date.today() - timedelta(days=14))\ | 
					
						
							|  |  |  |                                    .exclude(survey_mail_send=True) | 
					
						
							| 
									
										
										
										
											2020-10-26 14:06:19 +00:00
										 |  |  |         self.surveymails_to_object(supported,name='library') | 
					
						
							| 
									
										
										
										
											2020-10-22 11:08:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-26 11:56:29 +00:00
										 |  |  |     def surveymails_to_hon(self): | 
					
						
							|  |  |  |         '''get all HonoraryCertificate objects which where granted two weeks ago''' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-26 11:26:41 +00:00
										 |  |  |         supported = HonoraryCertificate.objects.filter(granted=True)\ | 
					
						
							|  |  |  |                                    .filter(granted_date__lt = date.today() - timedelta(days=14))\ | 
					
						
							|  |  |  |                                    .exclude(survey_mail_send=True) | 
					
						
							| 
									
										
										
										
											2020-10-26 12:55:36 +00:00
										 |  |  |         self.surveymails_to_object(supported, type='HON', name='request_url') | 
					
						
							| 
									
										
										
										
											2020-10-26 11:26:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-27 12:08:47 +00:00
										 |  |  |     def surveymails_to_ifg(self): | 
					
						
							|  |  |  |         '''get all IFG objects which where granted two weeks ago''' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         supported = IFG.objects.filter(granted=True)\ | 
					
						
							|  |  |  |                                    .filter(granted_date__lt = date.today() - timedelta(days=14))\ | 
					
						
							|  |  |  |                                    .exclude(survey_mail_send=True) | 
					
						
							|  |  |  |         self.surveymails_to_object(supported, type='IFG', name='url') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-27 12:47:46 +00:00
										 |  |  |     def surveymails_to_lit(self): | 
					
						
							|  |  |  |         '''get all Litearure objects which where granted two weeks ago''' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         supported = Literature.objects.filter(granted=True)\ | 
					
						
							|  |  |  |                                    .filter(granted_date__lt = date.today() - timedelta(days=14))\ | 
					
						
							|  |  |  |                                    .exclude(survey_mail_send=True) | 
					
						
							|  |  |  |         self.surveymails_to_object(supported, type='LIT', name='info') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-26 11:56:29 +00:00
										 |  |  |     def surveymails_to_project(self): | 
					
						
							| 
									
										
										
										
											2020-10-26 12:01:11 +00:00
										 |  |  |         '''send survey link 4 weeks after end of project reached''' | 
					
						
							|  |  |  |         supported = Project.objects.filter(granted=True)\ | 
					
						
							|  |  |  |                                    .filter(granted_date__lt = date.today() - timedelta(days=28))\ | 
					
						
							|  |  |  |                                    .exclude(survey_mail_send=True) | 
					
						
							| 
									
										
										
										
											2020-10-26 12:55:36 +00:00
										 |  |  |         self.surveymails_to_object(supported, type='PRO', name='realname') | 
					
						
							| 
									
										
										
										
											2020-10-26 12:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-26 11:56:29 +00:00
										 |  |  |     def surveymails_to_travel(self): | 
					
						
							| 
									
										
										
										
											2020-10-26 12:01:11 +00:00
										 |  |  |         '''send survey link 3 weeks after end of project reached''' | 
					
						
							| 
									
										
										
										
											2020-10-26 12:23:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         supported = Travel.objects.filter(project__granted=True)\ | 
					
						
							|  |  |  |                                    .filter(project__granted_date__lt = date.today() - timedelta(days=21))\ | 
					
						
							|  |  |  |                                    .exclude(survey_mail_send=True) | 
					
						
							| 
									
										
										
										
											2020-10-26 12:55:36 +00:00
										 |  |  |         self.surveymails_to_object(supported, type='TRAV', name='request_url') | 
					
						
							| 
									
										
										
										
											2020-10-26 11:56:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-27 10:55:16 +00:00
										 |  |  |     def surveymails_to_mail_vis_lis(self): | 
					
						
							|  |  |  |         '''send survey link 2 weeks after mailadresss, mailinglist or businesscards are granted''' | 
					
						
							|  |  |  |         lastdate = date.today() - timedelta(days=14) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         typefield = ('MAIL','VIS','LIST') | 
					
						
							|  |  |  |         count = 0 | 
					
						
							|  |  |  |         for c in ('Email', 'BusinessCard', 'List'): | 
					
						
							| 
									
										
										
										
											2020-10-27 11:37:18 +00:00
										 |  |  |             # get class via string | 
					
						
							| 
									
										
										
										
											2020-10-27 10:55:16 +00:00
										 |  |  |             supported = getattr(sys.modules[__name__], c).objects.filter(granted=True)\ | 
					
						
							|  |  |  |                                        .filter(granted_date__lt = lastdate)\ | 
					
						
							|  |  |  |                                        .exclude(survey_mail_send=True) | 
					
						
							|  |  |  |             self.surveymails_to_object(supported, type=typefield[count]) | 
					
						
							|  |  |  |             count += 1 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-26 11:56:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def handle(self, *args, **options): | 
					
						
							|  |  |  |         '''the main function which is called by the custom command''' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.end_of_projects_reached() | 
					
						
							|  |  |  |         self.surveymails_to_lib() | 
					
						
							|  |  |  |         self.surveymails_to_hon() | 
					
						
							| 
									
										
										
										
											2020-10-27 12:08:47 +00:00
										 |  |  |         self.surveymails_to_ifg() | 
					
						
							| 
									
										
										
										
											2020-10-27 12:47:46 +00:00
										 |  |  |         self.surveymails_to_lit() | 
					
						
							| 
									
										
										
										
											2020-10-26 11:56:29 +00:00
										 |  |  |         self.surveymails_to_project() | 
					
						
							|  |  |  |         self.surveymails_to_travel() | 
					
						
							| 
									
										
										
										
											2020-10-27 10:55:16 +00:00
										 |  |  |         self.surveymails_to_mail_vis_lis() | 
					
						
							| 
									
										
										
										
											2020-10-26 11:56:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-07 09:21:21 +00:00
										 |  |  |         self.stdout.write(self.style.SUCCESS('sendmails custom command executed')) |