def filing(request, region, name, period_name): company = request.company form = registry.get_form(region, name) period = get_period(period_name, None) if form is None or period is None: raise Http404 create_json = { 'filer': '/api/v1/account/{}/'.format(company.account.id), 'region': region, 'name': name, 'period_name': period_name, 'date': None, } filing = form.tally(company, period) real_filings = sorted(company.filings(form=form, period=period), key=lambda f: f.date) # How close to on-time was the initial filing? if real_filings: real_filings[0].offset = (filing.due_date - real_filings[0].date).days return render_to_response('publican/filing.html', { 'filing': filing, 'form': form, 'grid': _generate_grid(form, filing), 'period': period, 'real_filings': real_filings, 'today': company.today, 'create_json': json.dumps(create_json), })
def pdf(request, region, name, period_name): """Generate and return a PDF for the given tax form.""" company = request.company form = registry.get_form(region, name) period = get_period(period_name, None) if form is None or period is None: raise Http404 filing = form.tally(company, period) c = canvas.Canvas("hello.pdf") for spec in form.pdf_fields: x, y, name = spec[:3] value = getattr(filing.pages[0], name, None) if value is None: value = u'' if isinstance(value, Decimal): dollars, cents = unicode(value).split('.') c.drawString(x - 8 - c.stringWidth(dollars), y, dollars) c.drawString(x + 4, y, cents) elif len(spec) > 3: value = unicode(value) step = spec[3] for i, char in enumerate(value): c.drawString(x + i * step, y, char) else: value = unicode(value) c.drawString(x, y, value) c.showPage() datadir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'data') pdfpath = os.path.join(datadir, form.filename) taxform = PdfFileReader(file(pdfpath, 'rb')) rendering = PdfFileReader(StringIO(c.getpdfdata())) output = PdfFileWriter() watermark = rendering.getPage(0) page1 = taxform.getPage(0) page1.mergePage(watermark) output.addPage(page1) pdfdata = StringIO() output.write(pdfdata) return HttpResponse(pdfdata.getvalue(), content_type='application/pdf')