blob: 69ca1fdf0071c36bda6e12cda12e3588924079e8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import datetime
from django.views.generic.detail import DetailView
from templated_docs import fill_template
from templated_docs.http import FileResponse
from .models import Invoice, InvoiceItem
class MonthlyInvoiceView(DetailView):
model = Invoice
template_name = "admin/income/monthly.html"
slug_field = "slug"
def get_context_data(self, **kwargs):
context = super(MonthlyInvoiceView, self).get_context_data(**kwargs)
context['object_list'] = InvoiceItem.objects.filter(time_start__range=[self.object.date_start, self.object.date_end])
total_time = []
for item in context['object_list']:
total_time.append(item.rounded_total)
duration = (sum(total_time, datetime.timedelta()))
hours = duration.total_seconds() // 3600
context['total_hours'] = hours
context['total_billed'] = int(hours * 100)
context['invoice_number'] = self.object.id+21
return context
class DownloadMonthlyInvoiceView(MonthlyInvoiceView):
model = Invoice
slug_field = "slug"
def get(self, *args, **kwargs):
self.object = self.get_object() # assign the object to the view
obj = self.get_context_data()
filename = fill_template('invoice.odt', obj, output_format='pdf')
visible_filename = 'invoice.{}'.format('pdf')
return FileResponse(filename, visible_filename)
|