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) + '/')
Example #2
0
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) + "/")
Example #3
0
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)
Example #4
0
 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)
Example #5
0
 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)
Example #8
0
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)
Example #9
0
 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
Example #10
0
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)
Example #11
0
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)
Example #13
0
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
Example #14
0
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)
Example #15
0
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)
Example #16
0
 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()
Example #17
0
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()
Example #19
0
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))))
Example #20
0
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)
Example #21
0
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)
Example #22
0
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')
Example #23
0
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')
Example #24
0
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)
Example #25
0
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)
Example #26
0
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)
Example #27
0
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
Example #28
0
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
Example #29
0
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
Example #30
0
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()