from django.contrib import admin from django.template.response import TemplateResponse from django.urls import path from django.shortcuts import render from hardcopy import bytestring_to_pdf from django.core.files.temp import NamedTemporaryFile from django.http import FileResponse from django.template.loader import render_to_string from uncloud_pay.models import * class BillRecordInline(admin.TabularInline): model = BillRecord class RecurringPeriodInline(admin.TabularInline): model = ProductToRecurringPeriod class ProductAdmin(admin.ModelAdmin): inlines = [ RecurringPeriodInline ] # class BillAdmin(admin.ModelAdmin): # inlines = [ BillRecordInline ] # def get_urls(self): # """ # Create URLs for PDF view # """ # info = "%s_%s" % (self.model._meta.app_label, self.model._meta.model_name) # pat = lambda regex, fn: url(regex, self.admin_site.admin_view(fn), name='%s_%s' % (info, fn.__name__)) # url_patterns = [ # pat(r'^([0-9]+)/as_pdf/$', self.as_pdf), # pat(r'^([0-9]+)/as_html/$', self.as_html), # ] + super().get_urls() # return url_patterns # def as_pdf(self, request, object_id): # bill = self.get_object(request, object_id=object_id) # print(bill) # if bill is None: # raise self._get_404_exception(object_id) # output_file = NamedTemporaryFile() # bill_html = render_to_string( # "uncloud_pay/bill.html.j2", # { # 'bill': bill, # 'bill_records': bill.bill_records.all() # } # ) # bytestring_to_pdf(bill_html.encode('utf-8'), output_file) # response = FileResponse(output_file, content_type="application/pdf") # response['Content-Disposition'] = f'filename="bill_{bill}.pdf"' # return response # def as_html(self, request, object_id): # bill = self.get_object(request, object_id=object_id) # if bill is None: # raise self._get_404_exception(object_id) # return render(request, 'uncloud_pay/bill.html.j2', # {'bill': bill, # 'bill_records': bill.bill_records.all() # }) # bill_html = render_to_string("bill.html.j2", {'bill': bill, # 'bill_records': bill.bill_records.all() # }) # bytestring_to_pdf(bill_html.encode('utf-8'), output_file) # response = FileResponse(output_file, content_type="application/pdf") # response['Content-Disposition'] = f'filename="bill_{bill}.pdf"' # return HttpResponse(template.render(context, request)) # return response #admin.site.register(Bill, BillAdmin) admin.site.register(Product, ProductAdmin) for m in [ BillingAddress, Order, BillRecord, Payment, ProductToRecurringPeriod, RecurringPeriod, StripeCreditCard, StripeCustomer, PricingPlan, VATRate ]: admin.site.register(m)