docs: def project_hours_for_contract(contract, project, billable=None):
      """Total billable hours worked on project for contract.
      If billable is passed as 'billable' or 'nonbillable', limits to
      the corresponding hours.  (Must pass a variable name first, of course.)
      """
      hours = contract.entries.filter(project=project)
      if billable is not None:
          if billable in (u'billable', u'nonbillable'):
              billable = (billable.lower() == u'billable')
              hours = hours.filter(activity__billable=billable)
          else:
              msg = '`project_hours_for_contract` arg 4 must be "billable" ' \
                    'or "nonbillable"'
              raise template.TemplateSyntaxError(msg)
      hours = hours.aggregate(s=Sum('hours'))['s'] or 0
      return hours