def METHOD_NAME(self, out, session):
    # part 1, include staff and contractor badges
    PersonalizedBadgeReport().run(
        out,
        session,
        Attendee.badge_type.in_([c.STAFF_BADGE, c.CONTRACTOR_BADGE]),
        Attendee.badge_num != None,
        badge_type_override='Staff',
        order_by='badge_num')  # noqa: E711
    # part 2, include some extra for safety margin
    minimum_extra_amount = c.BLANK_STAFF_BADGES
    max_badges = max(c.BADGE_RANGES[c.STAFF_BADGE][1], c.BADGE_RANGES[c.CONTRACTOR_BADGE][1])
    last_taken_badge = session.query(Attendee).filter(Attendee.badge_num < max_badges).order_by(Attendee.badge_num.desc()).first().badge_num
    last_taken_badge = last_taken_badge or 0
    start_badge = max(last_taken_badge, max_badges - minimum_extra_amount + 1)
    end_badge = max_badges
    generate_staff_badges(start_badge, end_badge, out, session)