diff options
Diffstat (limited to 'app/income/views.py')
-rw-r--r-- | app/income/views.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/app/income/views.py b/app/income/views.py new file mode 100644 index 0000000..69ca1fd --- /dev/null +++ b/app/income/views.py @@ -0,0 +1,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) |