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

87 lines
3.2 KiB
Python
Raw Normal View History

import StringIO
import zipfile
from django.contrib import messages
2014-09-06 10:56:30 +00:00
from django.contrib.admin import helpers
2014-08-20 18:50:07 +00:00
from django.http import HttpResponse
2014-09-06 10:56:30 +00:00
from django.shortcuts import render
from django.utils.translation import ugettext_lazy as _
2014-09-06 10:56:30 +00:00
from orchestra.admin.forms import adminmodelformset_factory
2014-09-10 16:53:09 +00:00
from orchestra.admin.utils import get_object_from_url
from orchestra.utils.html import html_to_pdf
2014-09-06 10:56:30 +00:00
from .forms import SelectSourceForm
2014-08-20 18:50:07 +00:00
def download_bills(modeladmin, request, queryset):
if queryset.count() > 1:
stringio = StringIO.StringIO()
archive = zipfile.ZipFile(stringio, 'w')
for bill in queryset:
2014-09-04 15:55:43 +00:00
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
2014-08-20 18:50:07 +00:00
bill = queryset.get()
pdf = html_to_pdf(bill.html)
2014-08-29 12:45:27 +00:00
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()
2014-09-04 15:55:43 +00:00
html = bill.html or bill.render()
return HttpResponse(html)
view_bill.verbose_name = _("View")
view_bill.url_name = 'view'
def close_bills(modeladmin, request, queryset):
2014-09-18 15:07:39 +00:00
queryset = queryset.filter(is_open=True)
if not queryset:
messages.warning(request, _("Selected bills should be in open state"))
return
2014-09-16 17:14:24 +00:00
SelectSourceFormSet = adminmodelformset_factory(modeladmin, SelectSourceForm, extra=0)
2014-09-06 10:56:30 +00:00
formset = SelectSourceFormSet(queryset=queryset)
2014-09-08 15:10:16 +00:00
if request.POST.get('post') == 'generic_confirmation':
2014-09-06 10:56:30 +00:00
formset = SelectSourceFormSet(request.POST, request.FILES, queryset=queryset)
if formset.is_valid():
for form in formset.forms:
2014-09-06 10:56:30 +00:00
source = form.cleaned_data['source']
form.instance.close(payment=source)
2014-09-16 17:14:24 +00:00
for bill in queryset:
modeladmin.log_change(request, bill, 'Closed')
messages.success(request, _("Selected bills have been closed"))
return
2014-09-06 10:56:30 +00:00
opts = modeladmin.model._meta
context = {
2014-09-08 15:10:16 +00:00
'title': _("Are you sure about closing the following bills?"),
'content_message': _("Once a bill is closed it can not be further modified.</p>"
"<p>Please select a payment source for the selected bills"),
'action_name': 'Close bills',
2014-09-06 10:56:30 +00:00
'action_value': 'close_bills',
2014-09-08 15:10:16 +00:00
'display_objects': [],
2014-09-06 10:56:30 +00:00
'queryset': queryset,
'opts': opts,
'app_label': opts.app_label,
'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
'formset': formset,
2014-09-10 16:53:09 +00:00
'obj': get_object_from_url(modeladmin, request),
2014-09-06 10:56:30 +00:00
}
2014-09-08 15:10:16 +00:00
return render(request, 'admin/orchestra/generic_confirmation.html', context)
close_bills.verbose_name = _("Close")
close_bills.url_name = 'close'
2014-09-04 15:55:43 +00:00
def send_bills(modeladmin, request, queryset):
for bill in queryset:
bill.send()
2014-09-16 17:14:24 +00:00
modeladmin.log_change(request, bill, 'Sent')
2014-09-04 15:55:43 +00:00
send_bills.verbose_name = _("Send")
send_bills.url_name = 'send'