Example #1
0
def print_id_label(participant):
    competition = participant.competition
    license_holder = participant.license_holder

    bib = participant.bib
    name = license_holder.first_last
    if len(name) > 32:
        name = license_holder.first_last_short

    system_name = 'CrossMgr'

    inches_to_points = 72.0

    # Use points at the units.
    page_width = 3.9 * inches_to_points
    page_height = 2.4 * inches_to_points

    pdf = PDF('L', (page_height, page_width))
    pdf.set_author(RaceDBVersion)
    pdf.set_title('Bib Number: {}'.format(bib))
    pdf.set_subject('Rider ID and Emergency Information.')
    pdf.set_creator(getpass.getuser())
    pdf.set_keywords(
        'RaceDB CrossMgr Bicycle Racing Software Database Road Time Trial MTB CycloCross'
    )

    margin = min(page_height, page_width) / 18.0
    sep = margin / 2.5

    height = page_height - margin * 2.0
    width = page_width - margin * 2.0

    header = Rect(margin, margin, width, height / 10.0)
    footer_height = height / 20
    footer = Rect(margin, page_height - margin - footer_height, header.width,
                  footer_height)
    field = Rect(header.x, header.bottom + sep, width,
                 footer.top - header.bottom - sep * 2)

    leftArrow, rightArrow = chr(172), chr(174)

    font_name = 'Helvetica'
    pdf.add_page()
    pdf.set_font(font_name, 'b')

    header.draw_text_to_fit(pdf, name, Rect.AlignLeft, True)

    pdf.set_font(font_name)
    info = []
    info.append([
        '',
        u',  '.join([
            u'Age: {}'.format(license_holder.get_age()),
            u'Gender: {}'.format(license_holder.get_gender_display()),
            u'Nation: {}'.format(license_holder.nation_code),
        ]),
    ])
    info.append(['', ''])
    if participant.team:
        info.append(['', u'{}'.format(participant.team.name)])
    info.append([
        '',
        u',  '.join([
            u'Bib: {}'.format(participant.bib),
            u'Category: {}'.format(participant.category.code_gender
                                   if participant.category else ''),
        ]),
    ])
    if license_holder.phone:
        info.append([
            '',
            u'  '.join([
                u'Phone: {}'.format(format_phone(license_holder.phone)),
            ]),
        ])

    info.append(['', ''])
    if license_holder.emergency_medical:
        info.append([
            '', u'Medical Alert: {}'.format(license_holder.emergency_medical)
        ])
    info.append(['', u'Emergency Contact:'])
    if license_holder.emergency_contact_name:
        info.append([
            '', u'  {}'.format(license_holder.emergency_contact_name
                               or 'None provided')
        ])
    info.append([
        '', u'  {}'.format(
            format_phone(license_holder.emergency_contact_phone)
            or 'No phone number provided')
    ])

    pdf.table_in_rectangle(field.x,
                           field.y,
                           field.width,
                           field.height,
                           info,
                           leftJustifyCols=[0, 1],
                           hasHeader=False,
                           horizontalLines=False)

    footer.draw_text_to_fit(pdf, system_name, Rect.AlignRight, True)

    pdf_str = pdf.output(dest='s')
    return pdf_str