def send_email_intern(request): sent = 0 if request.method != 'POST': raise Http404 emails = set() sender = request.POST.get('sender') if request.POST.get('allsubscription') == 'on': m_emails = MemberDao.members_for_email_with_subscription().values_list( 'email', flat=True) emails.update(m_emails) if request.POST.get('allshares') == 'on': emails.update(MemberDao.members_for_email_with_shares().values_list( 'email', flat=True)) if request.POST.get('all') == 'on': emails.update(MemberDao.members_for_email().values_list('email', flat=True)) if request.POST.get('recipients'): emails.update(re.split(r'\s*,?\s*', request.POST.get('recipients'))) if request.POST.get('allsingleemail'): emails |= set(request.POST.get('singleemail').split(' ')) attachements = [] append_attachements(request, attachements) if len(emails) > 0: send_filtered_mail(request.POST.get('subject'), request.POST.get('message'), request.POST.get('textMessage'), emails, attachements, sender=sender) sent = len(emails) return redirect('/my/mails/send/result/' + str(sent) + '/')
def send_email_intern(request): sent = 0 if request.method != 'POST': raise Http404 emails = set() sender = request.POST.get("sender") if request.POST.get("allsubscription") == "on": for member in MemberDao.members_for_email_with_subscription(): emails.add(member.email) if request.POST.get("allshares") == "on": for member in MemberDao.members_for_email(): if member.share_set.count() > 0: emails.add(member.email) if request.POST.get("all") == "on": for member in MemberDao.members_for_email(): emails.add(member.email) if request.POST.get("recipients"): recipients = re.split(r"\s*,?\s*", request.POST.get("recipients")) for recipient in recipients: emails.add(recipient) if request.POST.get("allsingleemail"): emails |= set(request.POST.get("singleemail").split(' ')) index = 1 attachements = [] while request.FILES.get("image-" + str(index)) is not None: attachements.append(request.FILES.get("image-" + str(index))) index += 1 if len(emails) > 0: send_filtered_mail(request.POST.get("subject"), request.POST.get("message"), request.POST.get("textMessage"), emails, attachements, sender=sender) sent = len(emails) return redirect("/my/mails/send/result/" + str(sent) + "/")
def send_email_intern(request): sent = 0 if request.method != 'POST': raise Http404 emails = set() sender = request.POST.get('sender') if request.POST.get('allsubscription') == 'on': m_emails = MemberDao.members_for_email_with_subscription().values_list('email', flat=True) emails.update(m_emails) if request.POST.get('allshares') == 'on': emails.update(MemberDao.members_for_email_with_shares( ).values_list('email', flat=True)) if request.POST.get('all') == 'on': emails.update(MemberDao.members_for_email( ).values_list('email', flat=True)) if request.POST.get('recipients'): emails.update(re.split(r'[\s,;]+', request.POST.get('recipients'))) if request.POST.get('allsingleemail'): emails.update(re.split(r'[\s,;]+', request.POST.get('singleemail'))) files = [] append_attachements(request, files) if len(emails) > 0: formemails.internal( request.POST.get('subject'), request.POST.get('message'), request.POST.get('textMessage'), emails, files, sender=sender ) sent = len(emails) return redirect('mail-result', numsent=sent)
def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == 'member': if self.parent_obj is None: kwargs['queryset'] = MemberDao.members_for_create_subscription() elif self.parent_obj.state == 'waiting': kwargs['queryset'] = MemberDao.members_for_future_subscription(self.parent_obj) elif self.parent_obj.state == 'inactive': kwargs['queryset'] = MemberDao.all_members() else: kwargs['queryset'] = MemberDao.members_for_subscription(self.parent_obj) return super().formfield_for_foreignkey(db_field, request, **kwargs)
def get_queryset(self, request): queryset = super().get_queryset(request) request.GET = request.GET.copy() name = request.GET.pop('qs_name', ['all'])[0] subscription_id = request.GET.pop('sub_id', ['0'])[0] if name == 'cs': return MemberDao.members_for_create_subscription() elif name == 'fs': subscription = Subscription.objects.get(id=int(subscription_id)) return MemberDao.members_for_future_subscription(subscription) elif name == 's': subscription = Subscription.objects.get(id=int(subscription_id)) return MemberDao.members_for_subscription(subscription) return queryset
def __init__(self, *a, **k): forms.ModelForm.__init__(self, *a, **k) self.fields['primary_member'].queryset = self.instance.recipients if self.instance.pk is None: self.fields['subscription_members'].queryset = MemberDao.members_for_create_subscription() elif self.instance.state == 'waiting': self.fields['subscription_members'].queryset = MemberDao.members_for_future_subscription( self.instance) elif self.instance.state == 'inactive': self.fields['subscription_members'].queryset = MemberDao.all_members() else: self.fields['subscription_members'].queryset = MemberDao.members_for_subscription( self.instance) self.fields['subscription_members'].initial = self.instance.recipients_all
def filters_area(request, area_id): area = get_object_or_404(ActivityArea, id=int(area_id)) members = MemberDao.members_with_assignments_count_in_area(area) renderdict = get_menu_dict(request) renderdict['can_send_mails'] = True renderdict.update({'members': members, 'enhanced': 'area'}) return render(request, 'members.html', renderdict)
def filters(request): members = MemberDao.active_members_with_assignments_count() renderdict = get_menu_dict(request) renderdict.update({ 'members': members }) return render(request, 'members.html', renderdict)
def clean_email(self): email = self.cleaned_data['email'] if email in self.existing_emails: raise ValidationError( mark_safe( _('Diese E-Mail-Adresse wird bereits von dir oder deinen {} verwendet.' ).format(Config.vocabulary('co_member_pl')))) existing_member = MemberDao.member_by_email(email) if existing_member: if existing_member.blocked: raise ValidationError( mark_safe( escape( _('Die Person mit dieser E-Mail-Adresse ist bereits aktiv\ {}-BezierIn. Bitte meldet euch bei {}, wenn ihr bestehende {} als {} hinzufügen möchtet.' )).format( Config.vocabulary('subscription'), '<a href="mailto:{0}">{0}</a>'.format( Config.info_email()), Config.vocabulary('member_type_pl'), Config.vocabulary('co_member_pl')))) else: # store existing member for reevaluation self.existing_member = existing_member return email
def filters_emails(request): members = MemberDao.active_members() renderdict = get_menu_dict(request) renderdict.update({'members': members}) return render(request, 'members_only_emails.html', renderdict)
def filter_subscriptions_depot(request, depot_id): now = timezone.now() subscriptions = [] depot = get_object_or_404(Depot, id=int(depot_id)) for subscription in SubscriptionDao.subscritions_by_depot(depot): assignments = 0 core_assignments = 0 for member in MemberDao.members_with_assignments_count_in_subscription(subscription): assignments += member.assignment_count if member.assignment_count is not None else 0 core_assignments += member.core_assignment_count if member.core_assignment_count is not None else 0 subscriptions.append({ 'subscription': subscription, 'text': get_status_image_text(100 / (subscription.size * 10) * assignments if subscription.size > 0 else 0), 'assignments': assignments, 'core_assignments': core_assignments, 'icon': get_status_image( 100 / (subscription.size * 10) * assignments if subscription.size > 0 else 0) }) renderdict = get_menu_dict(request) renderdict.update({ 'subscriptions': subscriptions }) return render(request, 'subscriptions.html', renderdict)
def filters_depot(request, depot_id): depot = get_object_or_404(Depot, id=int(depot_id)) members = MemberDao.members_with_assignments_count_for_depot(depot) renderdict = get_menu_dict(request) renderdict['can_send_mails'] = True renderdict.update({'members': members, 'enhanced': 'depot'}) return render(request, 'members.html', renderdict)
def get_emails_by_permission(permission_code): """ Get all email addresses of members by permission of user """ from juntagrico.dao.memberdao import MemberDao emails = MemberDao.members_by_permission(permission_code).values_list('email', flat=True) return emails
def subscriptions(request): now = timezone.now() subscriptions = [] for subscription in SubscriptionDao.all_subscritions(): assignments = 0 core_assignments = 0 for member in MemberDao.members_with_assignments_count_in_subscription(subscription): assignments += member.assignment_count core_assignments += member.core_assignment_count subscriptions.append({ 'subscription': subscription, 'text': get_status_image_text(100 / (subscription.size * 10) * assignments if subscription.size > 0 else 0), 'assignments': assignments, 'core_assignments': core_assignments, 'icon': get_status_image( 100 / (subscription.size * 10) * assignments if subscription.size > 0 else 0) }) renderdict = get_menu_dict(request) renderdict.update({ 'subscriptions': subscriptions }) return render(request, 'subscriptions.html', renderdict)
def filters(request): now = timezone.now() members = MemberDao.members_with_assignments_count() renderdict = get_menu_dict(request) renderdict.update({ 'members': members }) return render(request, 'members.html', renderdict)
def __init__(self, *a, **k): forms.ModelForm.__init__(self, *a, **k) self.fields["primary_member"].queryset = self.instance.members.all() self.fields[ "subscription_members"].queryset = MemberDao.members_for_subscription( self.instance) self.fields[ "subscription_members"].initial = self.instance.members.all()
def filters(request): members = MemberDao.all_members() renderdict = get_menu_dict(request) renderdict.update({ 'members': members, 'title': _('Alle {}').format(Config.vocabulary('member_pl')) }) return render(request, 'members.html', renderdict)
class SubscriptionAdminForm(forms.ModelForm): class Meta: model = Subscription fields = '__all__' subscription_members = forms.ModelMultipleChoiceField(queryset=MemberDao.all_members(), required=False, widget=admin.widgets.FilteredSelectMultiple('Member', False)) def __init__(self, *a, **k): forms.ModelForm.__init__(self, *a, **k) self.fields['primary_member'].queryset = self.instance.recipients if self.instance.pk is None: self.fields['subscription_members'].queryset = MemberDao.members_for_create_subscription() elif self.instance.state == 'waiting': self.fields['subscription_members'].queryset = MemberDao.members_for_future_subscription( self.instance) elif self.instance.state == 'inactive': self.fields['subscription_members'].queryset = MemberDao.all_members() else: self.fields['subscription_members'].queryset = MemberDao.members_for_subscription( self.instance) self.fields['subscription_members'].initial = self.instance.recipients_all def clean(self): # enforce integrity constraint on primary_member members = self.cleaned_data['subscription_members'] primary = self.cleaned_data['primary_member'] if primary not in members: self.cleaned_data['primary_member'] = members[0] if members else None return forms.ModelForm.clean(self) def save(self, commit=True): # HACK: set commit=True, ignoring what the admin tells us. # This causes save_m2m to be called. return forms.ModelForm.save(self, commit=True) def save_m2m(self): # update Subscription-Member many-to-one through foreign keys on Members old_members = set(self.instance.members.all()) new_members = set(self.cleaned_data['subscription_members']) for obj in old_members - new_members: if self.instance.state == 'waiting': obj.future_subscription = None elif self.instance.state == 'inactive': obj.old_subscriptions.remove(self.instance) else: obj.subscription = None obj.save() for obj in new_members - old_members: if self.instance.state == 'waiting': obj.future_subscription = self.instance elif self.instance.state == 'inactive': obj.old_subscriptions.add(self.instance) else: obj.subscription = self.instance obj.save()
def members_with_assignments_no_filter(start_date, end_date, activty_area=None, members=None): members = members or MemberDao.all_members().filter(inactive=False) return members.annotate(assignments=Sum( 'assignment__amount', filter=Q(assignment__job__time__range=(start_date, end_date)) & Q(assignment__job__in=jobs_in_activity_area(activty_area))))
def filters_area(request, area_id): area = get_object_or_404(ActivityArea, id=int(area_id), coordinator=request.user.member) members = MemberDao.members_in_area(area) renderdict = get_menu_dict(request) renderdict['can_send_mails'] = True renderdict.update({ 'members': members, 'mail_url': 'mail-area', 'title': _('Alle aktiven {} im Tätigkeitsbereich {}').format(Config.vocabulary('member_pl'), area.name) }) return render(request, 'members.html', renderdict)
def filters_depot(request, depot_id): depot = get_object_or_404(Depot, id=int(depot_id), contact=request.user.member) members = MemberDao.member_with_active_subscription_for_depot(depot) renderdict = get_menu_dict(request) renderdict['can_send_mails'] = True renderdict.update({ 'members': members, 'mail_url': 'mail-depot', 'title': _('Alle aktiven {} im {} {}').format(Config.vocabulary('member_pl'), Config.vocabulary('depot'), depot.name) }) return render(request, 'members.html', renderdict)
def confirm(request, hash): ''' Confirm from a user that has been added as a co_subscription member ''' for member in MemberDao.all_members(): if hash == hashlib.sha1((member.email + str(member.id)).encode('utf8')).hexdigest(): member.confirmed = True member.save() return redirect('/my/home')
def confirm(request, member_hash): """ Confirm from a user that has been added as a co_subscription member """ for member in MemberDao.all_members().filter(confirmed=False): if member_hash == member.get_hash(): member.confirmed = True member.save() return redirect('home')
def new_password(request): sent = False if request.method == 'POST': sent = True members = MemberDao.members_by_email(request.POST.get('username')) if len(members) > 0: member = members[0] pw = password_generator() member.user.set_password(pw) member.user.save() send_mail_password_reset(member.email, pw) renderdict = {'sent': sent} return render(request, 'newpassword.html', renderdict)
def new_password(request): sent = False if request.method == 'POST': sent = True member = MemberDao.member_by_email(request.POST.get('username')) if member is not None: pw = password_generator() member.user.set_password(pw) member.user.save() membernotification.reset_password(member.email, pw) renderdict = get_page_dict(request) renderdict.update({'sent': sent}) return render(request, 'newpassword.html', renderdict)
def add_member(request, subscription_id): shareerror = False shares = 0 memberexists = False memberblocked = False main_member = request.user.member subscription = get_object_or_404(Subscription, id=subscription_id) if request.method == 'POST': memberform = RegisterMemberForm(request.POST) try: if Config.enable_shares(): shares = int(request.POST.get('shares')) shareerror = shares < 0 except: shareerror = True member = next( iter(MemberDao.members_by_email(request.POST.get('email')) or []), None) if member is not None: memberexists = True memberblocked = member.blocked if memberform.is_valid() or (memberexists is True and memberblocked is False): if memberexists is False: member = Member(**memberform.cleaned_data) create_member(member, subscription, main_member, shares) else: update_member(member, subscription, main_member, shares) for i in range(shares): create_share(member) return redirect('/my/subscription/detail/' + str(subscription_id) + '/') else: initial = { 'addr_street': main_member.addr_street, 'addr_zipcode': main_member.addr_zipcode, 'addr_location': main_member.addr_location, 'phone': main_member.phone, } memberform = RegisterMemberForm(initial=initial) renderdict = { 'shares': shares, 'memberexists': memberexists, 'memberblocked': memberblocked, 'shareerror': shareerror, 'memberform': memberform, 'subscription_id': subscription_id } return render(request, 'add_member.html', renderdict)
def excel_export_members_filter(request): response = HttpResponse( content_type= 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') response['Content-Disposition'] = 'attachment; filename=Report.xlsx' output = BytesIO() workbook = Workbook(output) worksheet_s = workbook.add_worksheet(Config.vocabulary('member_pl')) worksheet_s.write_string(0, 0, str(_('Name'))) worksheet_s.write_string(0, 1, str(Config.vocabulary('assignment'))) worksheet_s.write_string( 0, 2, str(Config.vocabulary('assignment') + ' ' + _('Kernbereich'))) worksheet_s.write_string(0, 3, str(_('Taetigkeitsbereiche'))) worksheet_s.write_string(0, 4, str(_('Depot'))) worksheet_s.write_string(0, 5, str(_('Email'))) worksheet_s.write_string(0, 6, str(_('Telefon'))) worksheet_s.write_string(0, 7, str(_('Mobile'))) members = MemberDao.members_with_assignments_count() row = 1 for member in members: member.all_areas = '' for area in member.areas.all(): member.all_areas = member.all_areas + area.name + ' ' if member.all_areas == '': member.all_areas = str(_('-Kein Tätigkeitsbereich-')) member.depot_name = str(_('Kein Depot definiert')) if member.subscription_current is not None: member.depot_name = member.subscription_current.depot.name full_name = member.first_name + ' ' + member.last_name worksheet_s.write_string(row, 0, full_name) worksheet_s.write(row, 1, member.assignment_count) worksheet_s.write(row, 2, member.core_assignment_count) worksheet_s.write_string(row, 3, member.all_areas) worksheet_s.write_string(row, 4, member.depot_name) worksheet_s.write_string(row, 5, member.email) worksheet_s.write_string(row, 6, member.phone) if member.mobile_phone is not None: worksheet_s.write_string(row, 7, member.mobile_phone) row += 1 workbook.close() xlsx_data = output.getvalue() response.write(xlsx_data) return response
def excel_export_members_filter(request): response = HttpResponse(content_type='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment; filename=Report.xlsx' output = StringIO() workbook = xlsxwriter.Workbook(output) worksheet_s = workbook.add_worksheet(Config.members_string()) worksheet_s.write_string(0, 0, str('Name', 'utf-8')) worksheet_s.write_string(0, 1, str(Config.assignments_string(), 'utf-8')) worksheet_s.write_string(0, 2, str(Config.assignments_string() + ' Kernbereich', 'utf-8')) worksheet_s.write_string(0, 3, str('Taetigkeitsbereiche', 'utf-8')) worksheet_s.write_string(0, 4, str('Depot', 'utf-8')) worksheet_s.write_string(0, 5, str('Email', 'utf-8')) worksheet_s.write_string(0, 6, str('Telefon', 'utf-8')) worksheet_s.write_string(0, 7, str('Mobile', 'utf-8')) now = timezone.now() members = MemberDao.members_with_assignments_count() row = 1 for member in members: member.all_areas = '' for area in member.areas.all(): member.all_areas = member.all_areas + area.name + ' ' if member.all_areas == '': member.all_areas = str('-Kein Tätigkeitsbereich-', 'utf-8') member.depot_name = str('Kein Depot definiert', 'utf-8') if member.subscription is not None: member.depot_name = member.subscription.depot.name looco_full_name = member.first_name + ' ' + member.last_name worksheet_s.write_string(row, 0, looco_full_name) worksheet_s.write(row, 1, member.assignment_count) worksheet_s.write(row, 2, member.core_assignment_count) worksheet_s.write_string(row, 3, member.all_areas) worksheet_s.write_string(row, 4, member.depot_name) worksheet_s.write_string(row, 5, member.email) worksheet_s.write_string(row, 6, member.phone) if member.mobile_phone is not None: worksheet_s.write_string(row, 7, member.mobile_phone) row += 1 workbook.close() xlsx_data = output.getvalue() response.write(xlsx_data) return response
def subscriptions_with_assignments(subscriptions): subscriptions_list = [] for subscription in subscriptions: assignments = 0 core_assignments = 0 members = MemberDao.members_with_assignments_count_in_subscription( subscription) for member in members: assignments += member.assignment_count \ if member.assignment_count is not None else 0 core_assignments += member.core_assignment_count \ if member.core_assignment_count is not None else 0 subscriptions_list.append({ 'subscription': subscription, 'assignments': assignments, 'core_assignments': core_assignments }) return subscriptions_list
class SubscriptionAdminForm(forms.ModelForm): class Meta: model = Subscription fields = '__all__' subscription_members = forms.ModelMultipleChoiceField( queryset=MemberDao.all_members(), required=False, widget=admin.widgets.FilteredSelectMultiple("Member", False)) def __init__(self, *a, **k): forms.ModelForm.__init__(self, *a, **k) self.fields["primary_member"].queryset = self.instance.members.all() self.fields[ "subscription_members"].queryset = MemberDao.members_for_subscription( self.instance) self.fields[ "subscription_members"].initial = self.instance.members.all() def clean(self): # enforce integrity constraint on primary_member members = self.cleaned_data["subscription_members"] primary = self.cleaned_data["primary_member"] if primary not in members: self.cleaned_data[ "primary_member"] = members[0] if members else None return forms.ModelForm.clean(self) def save(self, commit=True): # HACK: set commit=True, ignoring what the admin tells us. # This causes save_m2m to be called. return forms.ModelForm.save(self, commit=True) def save_m2m(self): # update Subscription-Member many-to-one through foreign keys on Members old_members = set(self.instance.members.all()) new_members = set(self.cleaned_data["subscription_members"]) for obj in old_members - new_members: obj.subscription = None obj.save() for obj in new_members - old_members: obj.subscription = self.instance obj.save()