django-orchestra-test/orchestra/apps/bills/actions.py

70 lines
2.4 KiB
Python

import StringIO
import zipfile
from django.contrib import messages
from django.http import HttpResponse
from django.utils.translation import ugettext_lazy as _
from orchestra.utils.html import html_to_pdf
def download_bills(modeladmin, request, queryset):
if queryset.count() > 1:
stringio = StringIO.StringIO()
archive = zipfile.ZipFile(stringio, 'w')
for bill in queryset:
html = bill.html or bill.render()
pdf = html_to_pdf(html)
archive.writestr('%s.pdf' % bill.number, pdf)
archive.close()
response = HttpResponse(stringio.getvalue(), content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename="orchestra-bills.zip"'
return response
bill = queryset.get()
pdf = html_to_pdf(bill.html)
return HttpResponse(pdf, content_type='application/pdf')
download_bills.verbose_name = _("Download")
download_bills.url_name = 'download'
def view_bill(modeladmin, request, queryset):
bill = queryset.get()
html = bill.html or bill.render()
return HttpResponse(html)
view_bill.verbose_name = _("View")
view_bill.url_name = 'view'
from django import forms
from django.forms.models import BaseModelFormSet
from django.forms.formsets import formset_factory
from django.forms.models import modelformset_factory
from django.shortcuts import render
from .forms import SelectPaymentSourceForm
def close_bills(modeladmin, request, queryset):
queryset = queryset.filter(status=queryset.model.OPEN)
if not queryset:
messages.warning(request, _("Selected bills should be in open state"))
return
SelectPaymentSourceFormSet = modelformset_factory(queryset.model, form=SelectPaymentSourceForm, extra=0)
if request.POST.get('action') == 'close_selected_bills':
formset = SelectPaymentSourceFormSet(request.POST, queryset=queryset)
if formset.is_valid():
for form in formset.forms:
form.save()
messages.success(request, _("Selected bills have been closed"))
return
formset = SelectPaymentSourceFormSet(queryset=queryset)
return render(request, 'admin/bills/close_confirmation.html', {'formset': formset})
close_bills.verbose_name = _("Close")
close_bills.url_name = 'close'
def send_bills(modeladmin, request, queryset):
for bill in queryset:
bill.send()
send_bills.verbose_name = _("Send")
send_bills.url_name = 'send'