Ejemplo n.º 1
0
def budgetrequestcategory(request, org, year, category):
    LineItemFormSet = modelformset_factory(afap.models.LineItem,
        exclude=('application', 'category'), can_delete=True, extra=10)
    try:
        year = afap.models.Year.objects.get(date=RangedDate(int(year), 1, 1))
    except (ValueError, afap.models.Year.DoesNotExist):
        return shortcuts.redirect(urlresolvers.reverse(home))
    try:
        app = afap.models.Application.objects.get(organization=org, year=year.date)
        category = afap.models.LineItemCategory.objects.get(pk=category, years=year)
    except afap.models.Application.DoesNotExist:
        messages.error(request, "You do not have an application for year %s" % year.range)
        return shortcuts.redirect(urlresolvers.reverse(home))
    except afap.models.LineItemCategory.DoesNotExist:
        return shortcuts.redirect(urlresolvers.reverse(budgetrequest, args=(year.year,)))
    if redirect_to_application(app):
        return shortcuts.redirect(urlresolvers.reverse(application, args=(year.year,)))
    if request.method == 'POST':
        if year.read_only:
            return shortcuts.redirect(urlresolvers.reverse(budgetrequestcategory,
                args=[year.year, category.pk]))
        formset = LineItemFormSet(request.POST)
        if formset.is_valid():
            instances = formset.save(commit=False)
            for instance in instances:
                instance.application = app
                instance.category = category
                instance.save()
            messages.info(request, "Your changes have been saved.")
            return shortcuts.redirect(urlresolvers.reverse(budgetrequestcategory,
                args=[year.year, category.pk]))
    else:
        formset = LineItemFormSet(
            queryset=afap.models.LineItem.objects.filter(application=app, category=category))
    for form in formset.forms:
        form.fields['description'].widget.attrs['class'] = 'itemdescription'
        form.fields['amount'].widget.attrs['class'] = 'itemamount'
        form.fields['income'].widget.attrs['class'] = 'itemincome'
        form.fields['DELETE'].widget.attrs['class'] = 'itemdelete'
    category_sum = sum_line_items(
        afap.models.LineItem.objects.filter(application=app, category=category))
    return shortcuts.render_to_response('budgetrequestcategory.html', {
        'formset': formset, 'year': year, 'active_year': year, 'category': category,
        'category_sum': category_sum, 'read_only': year.read_only,},
        template.RequestContext(request))
Ejemplo n.º 2
0
def budgetrequest(request, org, year):
    try:
        year = afap.models.Year.objects.get(date=RangedDate(int(year), 1, 1))
        app = afap.models.Application.objects.get(organization=org, year=year.date)
    except ValueError:
        return shortcuts.redirect(urlresolvers.reverse(home))
    except afap.models.Application.DoesNotExist:
        messages.error(request, "You do not have an application for year %s" % year.range)
        return shortcuts.redirect(urlresolvers.reverse(home))
    if redirect_to_application(app):
        return shortcuts.redirect(urlresolvers.reverse(application, args=(year.year,)))
    if request.method == 'POST':
        if year.read_only:
            return shortcuts.redirect(urlresolvers.reverse(budgetrequest,
                args=(year.year,)))
        form = afap.forms.BudgetRequestForm(request.POST, instance=app)
        if form.is_valid():
            form.save()
            messages.info(request, "Your changes have been saved.")
            return shortcuts.redirect(urlresolvers.reverse(budgetrequest, args=(year.year,)))
    else:
        form = afap.forms.BudgetRequestForm(instance=app)
    categories = []
    current_year = {}
    # XXX HACKS -- make current year categories always come first!
    for category in afap.models.LineItemCategory.objects.filter(years__date=year.date).order_by('pk'):
        category_sum = sum_line_items(
            afap.models.LineItem.objects.filter(application=app, category=category))
        # XXX HACKS
        if category.name.startswith("Current"):
            current_year['name'] = category.name
            current_year['sum'] = category_sum
            current_year['pk'] = category.pk
            current_year['end_balance'] = category_sum - app.balance_forward - app.afap_income
        else:
            categories.append({'name': category.name, 'sum': category_sum, 'pk': category.pk})
    total_sum = sum([x['sum'] for x in categories]) + current_year['end_balance']
    total_sum = total_sum or 0
    total_request = max(total_sum, 0)

    return shortcuts.render_to_response('budgetrequest.html', {
        'categories': categories, 'total_sum': total_sum, 'year': year, 'active_year': year,
        'total_request': total_request, 'form': form, 'current_year': current_year,
        'read_only': year.read_only},
        template.RequestContext(request))
Ejemplo n.º 3
0
def signatures(request, org, year):
    try:
        year = afap.models.Year.objects.get(date=RangedDate(int(year), 1, 1))
        app = afap.models.Application.objects.get(organization=org, year=year.date)
    except (ValueError, afap.models.Year.DoesNotExist):
        return shortcuts.redirect(urlresolvers.reverse(home))
    except afap.models.Application.DoesNotExist:
        messages.error(request, "You do not have an application for year %s" % year.range)
        return shortcuts.redirect(urlresolvers.reverse(home))
    if redirect_to_application(app):
        return shortcuts.redirect(urlresolvers.reverse(application, args=(year.year,)))
    if request.method == 'POST':
        people = (app.president, app.treasurer, app.advisor)
        for approval in app.approval_set.filter(approver__in=people):
            t = get_template('emails/approve.txt')
            c = Context({'to': approval.approver.name, 'organization': approval.application.organization.name,
                'location': request.build_absolute_uri(urlresolvers.reverse(approve, args=(year.year, approval.key)))})
            from_ = afap.models.Year.objects.get(date=approval.application.year).email_from
            # can we only email when the approver hasn't yet approved the application?
            approval.approver.email("AFAP Application Approval", t.render(c), from_)
        return shortcuts.redirect(urlresolvers.reverse(signatures, args=(year.year,)))
    return shortcuts.render_to_response('signatures.html', {'last_modified': app.last_modified,
        'approvals': app.approval_set.all(), 'year': year, 'active_year': year,},
        template.RequestContext(request))