Make it possible to control badge pagebreaks in report generation
authorMagnus Hagander <magnus@hagander.net>
Sun, 11 Mar 2018 17:47:08 +0000 (18:47 +0100)
committerMagnus Hagander <magnus@hagander.net>
Sun, 11 Mar 2018 17:47:08 +0000 (18:47 +0100)
Just like borders it makes sense to be able to control this when the
PDFs are written, not just when the template is built.

postgresqleu/confreg/jinjabadge.py
postgresqleu/confreg/reports.py
template/confreg/reports.html

index 7128d72fe82d995fdd9d46428c205b5e59052a7c..ab7ee175608d2167944f1017be8c8a97c2171838 100755 (executable)
@@ -150,10 +150,11 @@ def test_inlist(v,l):
        return v in l
 
 class JinjaRenderer(object):
-       def __init__(self, rootdir, debug=False, border=False):
+       def __init__(self, rootdir, debug=False, border=False, pagebreaks=False):
                self.templatedir = os.path.join(rootdir, 'templates')
                self.debug = debug
                self.border = border
+               self.pagebreaks = pagebreaks
 
                registerFont(TTFont('DejaVu Serif', "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf"))
                registerFont(TTFont('DejaVu Serif Bold', "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif-Bold.ttf"))
@@ -214,6 +215,8 @@ class JinjaRenderer(object):
                        js['border'] = self.border
                self.story.append(JinjaBadge(js, self.staticdir))
 
+               if not 'forcebreaks' in js:
+                       js['forcebreaks'] = self.pagebreaks
                if js.get('forcebreaks', False):
                        self.story.append(PageBreak())
 
@@ -224,8 +227,8 @@ class JinjaRenderer(object):
 
 # Render badges from within the website scope, meaning we have access to the
 # django objects here.
-def render_jinja_badges(conference, registrations, output, border):
-       renderer = JinjaRenderer(conference.jinjadir, border=border)
+def render_jinja_badges(conference, registrations, output, border, pagebreaks):
+       renderer = JinjaRenderer(conference.jinjadir, border=border, pagebreaks=pagebreaks)
 
        for reg in registrations:
                renderer.add_badge(reg.safe_export())
@@ -239,10 +242,11 @@ if __name__ == "__main__":
        parser.add_argument('attendeelist', type=str, help='JSON file with attendee list')
        parser.add_argument('outputfile', type=str, help='Name of output PDF file')
        parser.add_argument('--borders', action='store_true', help='Enable borders on written file')
+       parser.add_argument('--pagebreaks', action='store_true', help='Enable pagebreaks on written file')
 
        args = parser.parse_args()
 
-       renderer = JinjaRenderer(args.repopath, debug=True, border=args.borders)
+       renderer = JinjaRenderer(args.repopath, debug=True, border=args.borders, pagebreaks=args.pagebreaks)
 
        with open(args.attendeelist) as f:
                a = json.load(f)
index acf4a48bd007e90bb6426a8b719d75f55e375b8c..f53ef16071f83b92db28a701fc6305b47dd7fba6 100644 (file)
@@ -183,6 +183,7 @@ def build_attendee_report(conference, POST):
        format = POST['format']
        orientation = POST['orientation']
        borders = POST.has_key('border')
+       pagebreaks = POST.has_key('pagebreaks')
        fields = POST.getlist('fields')
        extracols = filter(None, map(lambda x: x.strip(), POST['additionalcols'].split(',')))
 
@@ -218,7 +219,7 @@ def build_attendee_report(conference, POST):
                # pass the full objects into the badge builder.
                try:
                        resp = HttpResponse(content_type='application/pdf')
-                       render_jinja_badges(conference, result, resp, borders)
+                       render_jinja_badges(conference, result, resp, borders, pagebreaks)
                        return resp
                except Exception, e:
                        return HttpResponse("Exception occured: %s" % e, content_type='text/plain')
index a1b8deaf808738bb9039713aa184736be89dbce8..55f22e5a64c85d0738310ea572c0d1bb0ffac943 100644 (file)
        <tr>
          <td>Borders</td>
          <td><input type="checkbox" name="border" CHECKED> include table and badge borders</td>
+       <tr>
+         <td>Pagebreaks</td>
+         <td><input type="checkbox" name="pagebreaks" CHECKED> force page break (between badges only)</td>
+       </tr>
        </tr>
       </table>
     </td>