Changeset - fcf4e5cffb54
[Not reviewed]
0 3 0
Christopher Neugebauer - 8 years ago 2016-12-07 00:19:30
chrisjrn@gmail.com
Adds forms for nag_unpaid
3 files changed with 46 insertions and 0 deletions:
0 comments (0 inline, 0 general)
registrasion/forms.py
Show inline comments
 
from registrasion.controllers.product import ProductController
 
from registrasion.models import commerce
 
from registrasion.models import inventory
 

	
 
from django import forms
 
from django.core.exceptions import ValidationError
 
from django.db.models import Q
 

	
 

	
 
class ApplyCreditNoteForm(forms.Form):
 

	
 
    def __init__(self, user, *a, **k):
 
        ''' User: The user whose invoices should be made available as
 
        choices. '''
 
        self.user = user
 
        super(ApplyCreditNoteForm, self).__init__(*a, **k)
 

	
 
        self.fields["invoice"].choices = self._unpaid_invoices_for_user
 

	
 
    def _unpaid_invoices_for_user(self):
 
        invoices = commerce.Invoice.objects.filter(
 
            status=commerce.Invoice.STATUS_UNPAID,
 
            user=self.user,
 
        )
 

	
 
        return [
 
            (invoice.id, "Invoice %(id)d - $%(value)d" % invoice.__dict__)
 
            for invoice in invoices
 
        ]
 

	
 
    invoice = forms.ChoiceField(
 
        required=True,
 
    )
 

	
 

	
 
class CancellationFeeForm(forms.Form):
 

	
 
    percentage = forms.DecimalField(
 
        required=True,
...
 
@@ -365,32 +366,59 @@ class VoucherForm(forms.Form):
 
        required=False,
 
    )
 

	
 

	
 
def staff_products_form_factory(user):
 
    ''' Creates a StaffProductsForm that restricts the available products to
 
    those that are available to a user. '''
 

	
 
    products = inventory.Product.objects.all()
 
    products = ProductController.available_products(user, products=products)
 

	
 
    product_ids = [product.id for product in products]
 
    product_set = inventory.Product.objects.filter(id__in=product_ids)
 

	
 
    class StaffProductsForm(forms.Form):
 
        ''' Form for allowing staff to add an item to a user's cart. '''
 

	
 
        product = forms.ModelChoiceField(
 
            widget=forms.Select,
 
            queryset=product_set,
 
        )
 

	
 
        quantity = forms.IntegerField(
 
            min_value=0,
 
        )
 

	
 
    return StaffProductsForm
 

	
 
def staff_products_formset_factory(user):
 
    ''' Creates a formset of StaffProductsForm for the given user. '''
 
    form_type = staff_products_form_factory(user)
 
    return forms.formset_factory(form_type)
 

	
 

	
 
class InvoiceNagForm(forms.Form):
 
    invoice = forms.ModelMultipleChoiceField(
 
        widget=forms.CheckboxSelectMultiple,
 
        queryset=commerce.Invoice.objects.all(),
 
    )
 

	
 
    def __init__(self, *a, **k):
 
        category = k.pop('category', None) or []
 
        product = k.pop('product', None) or []
 

	
 
        category = [int(i) for i in category]
 
        product = [int(i) for i in product]
 

	
 
        super(InvoiceNagForm, self).__init__(*a, **k)
 

	
 
        print repr(category), repr(product)
 

	
 
        qs = commerce.Invoice.objects.filter(
 
            status=commerce.Invoice.STATUS_UNPAID,
 
        ).filter(
 
            Q(lineitem__product__category__in=category) |
 
            Q(lineitem__product__in=product)
 
        )
 

	
 
        self.fields['invoice'].queryset = qs
registrasion/urls.py
Show inline comments
 
from reporting import views as rv
 

	
 
from django.conf.urls import include
 
from django.conf.urls import url
 

	
 
from .views import (
 
    amend_registration,
 
    checkout,
 
    credit_note,
 
    edit_profile,
 
    extend_reservation,
 
    guided_registration,
 
    invoice,
 
    invoice_access,
 
    manual_payment,
 
    nag_unpaid,
 
    product_category,
 
    refund,
 
    review,
 
)
 

	
 

	
 
public = [
 
    url(r"^amend/([0-9]+)$", amend_registration, name="amend_registration"),
 
    url(r"^category/([0-9]+)$", product_category, name="product_category"),
 
    url(r"^checkout$", checkout, name="checkout"),
 
    url(r"^checkout/([0-9]+)$", checkout, name="checkout"),
 
    url(r"^credit_note/([0-9]+)$", credit_note, name="credit_note"),
 
    url(r"^extend/([0-9]+)$", extend_reservation, name="extend_reservation"),
 
    url(r"^invoice/([0-9]+)$", invoice, name="invoice"),
 
    url(r"^invoice/([0-9]+)/([A-Z0-9]+)$", invoice, name="invoice"),
 
    url(r"^invoice/([0-9]+)/manual_payment$",
 
        manual_payment, name="manual_payment"),
 
    url(r"^invoice/([0-9]+)/refund$",
 
        refund, name="refund"),
 
    url(r"^invoice_access/([A-Z0-9]+)$", invoice_access,
 
        name="invoice_access"),
 
    url(r"^nag_unpaid$", nag_unpaid, name="nag_unpaid"),
 
    url(r"^profile$", edit_profile, name="attendee_edit"),
 
    url(r"^register$", guided_registration, name="guided_registration"),
 
    url(r"^review$", review, name="review"),
 
    url(r"^register/([0-9]+)$", guided_registration,
 
        name="guided_registration"),
 
]
 

	
 

	
 
reports = [
 
    url(r"^$", rv.reports_list, name="reports_list"),
 
    url(r"^attendee/?$", rv.attendee, name="attendee"),
 
    url(r"^attendee_data/?$", rv.attendee_data, name="attendee_data"),
 
    url(r"^attendee/([0-9]*)$", rv.attendee, name="attendee"),
 
    url(r"^credit_notes/?$", rv.credit_notes, name="credit_notes"),
 
    url(r"^discount_status/?$", rv.discount_status, name="discount_status"),
 
    url(r"^invoices/?$", rv.invoices, name="invoices"),
 
    url(
 
        r"^paid_invoices_by_date/?$",
 
        rv.paid_invoices_by_date,
 
        name="paid_invoices_by_date"
 
    ),
 
    url(r"^product_status/?$", rv.product_status, name="product_status"),
 
    url(r"^reconciliation/?$", rv.reconciliation, name="reconciliation"),
 
    url(
 
        r"^speaker_registrations/?$",
 
        rv.speaker_registrations,
 
        name="speaker_registrations",
 
    ),
 
]
 

	
 

	
 
urlpatterns = [
registrasion/views.py
Show inline comments
...
 
@@ -887,32 +887,48 @@ def amend_registration(request, user_id):
 
                    if form.cleaned_data["product"] == product:
 
                        form.add_error("quantity", message)
 

	
 
    if request.POST and voucher_form.has_changed() and voucher_form.is_valid():
 
        try:
 
            current_cart.apply_voucher(voucher_form.cleaned_data["voucher"])
 
            return redirect(amend_registration, user_id)
 
        except ValidationError as ve:
 
            voucher_form.add_error(None, ve)
 

	
 
    ic = ItemController(user)
 
    data = {
 
        "user": user,
 
        "paid": ic.items_purchased(),
 
        "cancelled": ic.items_released(),
 
        "form": formset,
 
        "voucher_form": voucher_form,
 
    }
 

	
 
    return render(request, "registrasion/amend_registration.html", data)
 

	
 

	
 
@user_passes_test(_staff_only)
 
def extend_reservation(request, user_id, days=7):
 
    ''' Allows staff to extend the reservation on a given user's cart.
 
    '''
 

	
 
    user = User.objects.get(id=int(user_id))
 
    cart = CartController.for_user(user)
 
    cart.extend_reservation(datetime.timedelta(days=days))
 

	
 
    return redirect(request.META["HTTP_REFERER"])
 

	
 

	
 
@user_passes_test(_staff_only)
 
def nag_unpaid(request):
 
    ''' Allows staff to nag users with unpaid invoices. '''
 

	
 
    category = request.GET.getlist("category", [])
 
    product  = request.GET.getlist("product", [])
 

	
 
    form = forms.InvoiceNagForm(
 
        request.POST or None,
 
        category=category,
 
        product=product,
 
    )
 

	
 
    print form.fields['invoice'].queryset
0 comments (0 inline, 0 general)