Пример #1
0
 def get(self, request, page_slug):
     page = get_object_or_404(Page, page_slug=page_slug)
     if page.deleted == False:
         if page.stripe_verified == True:
             if utils.has_dashboard_access(request.user, page,
                                           'manager_view_dashboard'):
                 return render(
                     self.request, 'page/dashboard_campaigns.html', {
                         'page':
                         page,
                         'donations':
                         donation_statistics(page),
                         'campaign_types':
                         campaign_types(page),
                         'campaign_average_duration':
                         campaign_average_duration(page),
                         'campaign_success_pct':
                         campaign_success_pct(page),
                     })
             else:
                 return redirect('notes:error_permissions')
         else:
             return stripe_unverified(request, page)
     else:
         return redirect('notes:error_page_does_not_exist')
Пример #2
0
 def get(self, request, page_slug):
     page = get_object_or_404(Page, page_slug=page_slug)
     if page.deleted == False:
         if page.stripe_verified == True:
             if utils.has_dashboard_access(request.user, page,
                                           'manager_view_dashboard'):
                 graph = donation_graph(page, 30)
                 graph_dates = []
                 graph_donations = []
                 for k, v in graph.items():
                     graph_dates.append(k.strftime('%b %-d'))
                     graph_donations.append(int(v / 100))
                 graph_dates = list(reversed(graph_dates))
                 graph_donations = list(reversed(graph_donations))
                 return render(
                     self.request, 'page/dashboard_analytics.html', {
                         'page': page,
                         'donations': donation_statistics(page),
                         'graph_dates': graph_dates,
                         'graph_donations': graph_donations,
                     })
             else:
                 return redirect('notes:error_permissions')
         else:
             return stripe_unverified(request, page)
     else:
         return redirect('notes:error_page_does_not_exist')
Пример #3
0
def page_edit(request, page_slug):
    page = get_object_or_404(Page, page_slug=page_slug)

    if page.deleted == False:
        if page.stripe_verified == True:
            if utils.has_dashboard_access(request.user, page, 'manager_edit'):
                form = forms.PageEditForm(instance=page)
                if request.method == 'POST':
                    form = forms.PageEditForm(instance=page, data=request.POST)
                    if form.is_valid():
                        if 'page_slug' in form.changed_data:
                            # update the stripe metadata for the url
                            metadata = {
                                'url':
                                'https://page.fund/{}/'.format(
                                    form.cleaned_data['page_slug']),
                            }
                            account = stripe.Account.retrieve(
                                page.stripe_account_id)
                            account.metadata = metadata
                            account.save()
                        form.save()
                        messages.success(request,
                                         'Page updated',
                                         fail_silently=True)
                        return redirect('page_dashboard_admin',
                                        page_slug=page.page_slug)
            else:
                return redirect('notes:error_permissions')
        else:
            return stripe_unverified(request, page)
    else:
        return redirect('notes:error_page_does_not_exist')

    return render(request, 'page/page_edit.html', {'page': page, 'form': form})
Пример #4
0
 def get(self, request, page_slug):
     page = get_object_or_404(Page, page_slug=page_slug)
     if page.type == 'nonprofit':
         if page.stripe_verified == True:
             form = forms.PageEditBankEINForm()
         else:
             form = forms.PageUnverifiedEditBankEINForm()
     else:
         if page.stripe_verified == True:
             form = forms.PageEditBankForm()
         else:
             form = forms.PageUnverifiedEditBankForm()
     if page.deleted == False:
         if utils.has_dashboard_access(request.user, page, 'manager_edit'):
             if page.stripe_verified == True:
                 return render(request, 'page/page_edit_bank_info.html', {
                     'page': page,
                     'form': form
                 })
             else:
                 return render(request,
                               'page/page_unverified_edit_bank_info.html', {
                                   'page': page,
                                   'form': form
                               })
         else:
             return redirect('notes:error_permissions')
     else:
         return redirect('notes:error_page_does_not_exist')
Пример #5
0
def page_image_delete(request, image_pk):
    image = get_object_or_404(PageImage, pk=image_pk)
    if utils.has_dashboard_access(request.user, image.page,
                                  'manager_image_edit'):
        image.delete()
        return HttpResponse('')
    else:
        return redirect('notes:error_permissions')
Пример #6
0
 def post(self, request, page_slug):
     page = get_object_or_404(Page, page_slug=page_slug)
     if utils.has_dashboard_access(request.user, page,
                                   'manager_image_edit'):
         form = forms.PageImageForm(self.request.POST, self.request.FILES)
         data = image_is_valid(request, form, page)
         if data:
             return JsonResponse(data)
         else:
             return HttpResponse('')
     else:
         return redirect('notes:error_permissions')
Пример #7
0
def page_invite(request, page_slug):
    page = get_object_or_404(Page, page_slug=page_slug)

    if page.deleted == False:
        if page.stripe_verified == True:
            if utils.has_dashboard_access(request.user, page,
                                          'manager_invite'):
                form = forms.ManagerInviteForm()
                if request.method == 'POST':
                    form = forms.ManagerInviteForm(request.POST)
                    if form.is_valid():
                        # check if the person we are inviting is already a manager/admin
                        try:
                            user = User.objects.get(
                                email=form.cleaned_data['email'])
                            if user.userprofile in page.admins.all(
                            ) or user.userprofile in page.managers.all():
                                return redirect(
                                    'notes:error_invite_manager_exists')
                        except User.DoesNotExist:
                            pass
                        data = {
                            "request": request,
                            "form": form,
                            "page": page,
                            "campaign": None
                        }
                        status = invite(data)
                        if status == True:
                            messages.success(request,
                                             'Invitation sent',
                                             fail_silently=True)
                            # redirect the admin/manager to the Page
                            return redirect('page_dashboard_admin',
                                            page_slug=page.page_slug)
                return render(request, 'page/page_invite.html', {
                    'form': form,
                    'page': page
                })
            # the user isn't an admin or a manager, so they can't invite someone
            # the only way someone got here was by typing the url manually
            else:
                return redirect('notes:error_permissions')
        else:
            return stripe_unverified(request, page)
    else:
        return redirect('notes:error_page_does_not_exist')
Пример #8
0
 def get(self, request, page_slug):
     page = get_object_or_404(Page, page_slug=page_slug)
     if page.deleted == False:
         if page.stripe_verified == True:
             if utils.has_dashboard_access(request.user, page,
                                           'manager_image_edit'):
                 images = PageImage.objects.filter(page=page)
                 return render(self.request, 'page/dashboard_images.html', {
                     'page': page,
                     'images': images,
                 })
             else:
                 return redirect('notes:error_permissions')
         else:
             return stripe_unverified(request, page)
     else:
         return redirect('notes:error_page_does_not_exist')
Пример #9
0
 def get(self, request, page_slug):
     page = get_object_or_404(Page, page_slug=page_slug)
     if page.deleted == False:
         if page.stripe_verified == True:
             invitations = ManagerInvitation.objects.filter(page=page,
                                                            expired=False)
             if utils.has_dashboard_access(request.user, page, None):
                 return render(self.request, 'page/dashboard_admin.html', {
                     'page': page,
                     'invitations': invitations,
                 })
             else:
                 return redirect('notes:error_permissions')
         else:
             return stripe_unverified(request, page)
     else:
         return redirect('notes:error_page_does_not_exist')
Пример #10
0
def page_profile_update(request, image_pk):
    image = get_object_or_404(PageImage, pk=image_pk)
    if utils.has_dashboard_access(request.user, image.page,
                                  'manager_image_edit'):
        try:
            profile_picture = PageImage.objects.get(page=image.page,
                                                    profile_picture=True)
        except PageImage.DoesNotExist:
            profile_picture = None
        if profile_picture:
            profile_picture.profile_picture = False
            profile_picture.save()
        image.profile_picture = True
        image.save()
        return HttpResponse('')
    else:
        return redirect('notes:error_permissions')
Пример #11
0
def page_delete(request, page_slug):
    page = get_object_or_404(Page, page_slug=page_slug)

    if page.deleted == False:
        if page.stripe_verified == True:
            if utils.has_dashboard_access(request.user, page,
                                          'manager_delete'):
                page.deleted = True
                page.deleted_by = request.user
                page.deleted_on = timezone.now()
                page.name = page.name + "_deleted_" + timezone.now().strftime(
                    "%Y%m%d")
                page.page_slug = page.page_slug + "deleted" + timezone.now(
                ).strftime("%Y%m%d")
                page.save()

                campaigns = Campaign.objects.filter(page=page, deleted=False)
                if campaigns:
                    for c in campaigns:
                        c.deleted = True
                        c.deleted_by = request.user
                        c.deleted_on = timezone.now()
                        c.name = c.name + "_deleted_" + timezone.now(
                        ).strftime("%Y%m%d")
                        c.campaign_slug = c.campaign_slug + "deleted" + timezone.now(
                        ).strftime("%Y%m%d")
                        c.save()

                if not settings.TESTING:
                    try:
                        account = stripe.Account.retrieve(
                            page.stripe_account_id)
                        account.delete()
                    except stripe.error.InvalidRequestError:
                        pass

                return HttpResponseRedirect(reverse('home'))
            else:
                return redirect('notes:error_permissions')
        else:
            return stripe_unverified(request, page)
    else:
        return redirect('notes:error_page_does_not_exist')
Пример #12
0
    def post(self, request, page_slug):
        page = get_object_or_404(Page, page_slug=page_slug)
        # if the page is a nonprofit,
        # we need their EIN
        if page.type == 'nonprofit':
            if page.stripe_verified == True:
                form = forms.PageEditBankEINForm(request.POST)
            else:
                form = forms.PageUnverifiedEditBankEINForm(request.POST)
        else:
            if page.stripe_verified == True:
                form = forms.PageEditBankForm(request.POST)
            else:
                form = forms.PageUnverifiedEditBankForm(request.POST)
        if page.deleted == False:
            if utils.has_dashboard_access(request.user, page, 'manager_edit'):
                if form.is_valid():
                    if not settings.TESTING:

                        # set the stripe type to determine if we need EIN
                        if page.type == 'nonprofit':
                            stripe_type = 'company'
                        else:
                            stripe_type = 'individual'

                        # retrieve account from stripe
                        account = stripe.Account.retrieve(
                            page.stripe_account_id)
                        # update stripe information
                        if page.stripe_verified == True:
                            if account['legal_entity'][
                                    'ssn_last_4_provided'] == False:
                                account.legal_entity.ssn_last_4 = form.cleaned_data[
                                    'ssn']
                        else:
                            account.legal_entity.personal_id_number = form.cleaned_data[
                                'ssn']
                        if page.type == 'nonprofit':
                            account.legal_entity.business_tax_id = form.cleaned_data[
                                'ein']

                        # save the account or redirect for an exception
                        try:
                            account.save()
                        except stripe.error.InvalidRequestError as e:
                            print("e = {}".format(e))
                            error = create_error(e, request)
                            return redirect(
                                'notes:error_stripe_invalid_request')

                        # create the bank account
                        external_account = {
                            'object': 'bank_account',
                            'country': 'US',
                            'currency': 'usd',
                            'account_number':
                            form.cleaned_data['account_number'],
                            'account_holder_type': stripe_type,
                            'routing_number':
                            form.cleaned_data['routing_number'],
                            'default_for_currency': 'true',
                        }
                        try:
                            ext_account = account.external_accounts.create(
                                external_account=external_account)
                        except Exception as e:
                            print("exception = {}".format(e))

                        # delete the old account here
                        # so that we can set the new one as default first
                        try:
                            account.external_accounts.retrieve(
                                page.stripe_bank_account_id).delete()
                        except:
                            pass

                        page.stripe_bank_account_id = ext_account.id
                    page.save()

                    # email the user
                    substitutions = {
                        "-pagename-": page.name,
                    }
                    utils.email(request.user.email, "blank", "blank",
                                "page_bank_information_updated", substitutions)
                    # add message
                    messages.success(request,
                                     'Bank information updated',
                                     fail_silently=True)
                    return redirect('page_dashboard_admin',
                                    page_slug=page.page_slug)
            else:
                return redirect('notes:error_permissions')
        else:
            return redirect('notes:error_page_does_not_exist')