First round of PDF support, based on ReportLab.
- pdf.py provides the PDF generation routines for Name Cards, Drinks Forms and Door Listings.
- views.py retrieves all the data and passes it to pdf.py.
There are a couple of URLs not exercised: door_listings_for_day, and door_listings_for_room_and_day. Should figure out whether we really need those.
The widths of the door listings column might break, with start texts like "Midnight", so should really extend to select a width based on the maximum start text width.
Determine the width of the start-time column automatically, for door listings.
Add comments to explain what's going on.
Bug: drinks form didn't say which day the item was on.
Zap some of the to-do items that we've now done.
Added three flags to PersonRole:
- drink, to indicate whether they should be listed on the drinks form.
- name card, to indicate whether they should get a name card printed for them.
- canClash, to indicate whether their presence should be considered a problem if they're scheduled elsewhere, or aren't available.
Modified the person availability/clash checks, in light of this, and the drinks/namecard views.