def populate_event_bookings(self, event_id):
     event = get_event(event_id)
     self.event_name.data = event.full_name()
     self.sub_title.data = 'to date' if datetime.date.today(
     ) <= event.booking_end else ''
     cd = event.course.course_data_as_of(event.date.year)
     self.slope.data = cd.slope
     total = 0
     for booking in event.bookings:
         item_form = BookingItemForm()
         item_form.date = fmt_date(booking.date)
         item_form.member_name = booking.member.player.full_name()
         if booking.playing:
             item_form.hcap = booking.member.player.state_as_of(
                 event.date).playing_handicap(event)
             number = 1 + len(booking.guests)
             item_form.number = number
             total += number
             item_form.guests = ', '.join([
                 g.name +
                 ' ({})'.format(cd.apply_slope_factor(g.handicap, cd.slope))
                 for g in booking.guests
             ])
             item_form.comment = booking.comment or ''
             self.booking_list.append_entry(item_form)
     self.total.data = total
示例#2
0
    def populate_tour_results(self, event_id):
        event = get_event(event_id)
        self.event_name.data = event.full_name()
        venues = event.tour_events
        for venue in venues:
            venue_form = TourEventVenueItemForm()
            venue_form.name = venue.course.name
            self.venues.append_entry(venue_form)

        results = get_tour_results(event)
        player_names = get_player_names_as_dict(
            results.get_columns('player_id'))

        for res in results.data:
            item_form = TourResultItemForm()
            guest = "" if (
                res[results.column_index('status')] != 0) else " (guest)"
            item_form.position = res[results.column_index('position')]
            item_form.player = player_names[res[results.column_index(
                'player_id')]] + guest
            item_form.total = res[results.column_index('total')]
            for score in res[results.column_index('scores')]:
                score_form = TourEventScoreItemForm()
                score_form.points = score if score > 0 else ''
                item_form.venue_scores.append_entry(score_form)
            self.scores.append_entry(item_form)
示例#3
0
def results_event(event_id):
    event_id = int(event_id)
    event_type = get_event(event_id).type
    if event_type in [EventType.wags_vl_event, EventType.non_vl_event]:
        return MaintainEvents.results_vl_event(event_id)
    else:
        return redirect(request.referrer)
    def populate_card(self, event_id, player_id, position, handicap, status):
        event = get_event(event_id)
        course_data = event.course.course_data_as_of(event.date.year)
        card = get_event_card(event_id, player_id)

        self.event_name.data = event.full_name()
        self.player.data = get_player(player_id).full_name()
        self.handicap.data = handicap
        self.positionReturn.data = position
        self.handicapReturn.data = handicap
        self.statusReturn.data = status
        self.editable.data = is_event_result_editable(event)

        holes = range(1, 19)
        for hole in holes:
            i = hole - 1
            shots = "-" if card[i] == 99 or card[i] is None else card[i]
            item_form = EventCardItemForm()
            item_form.hole = hole
            item_form.par = course_data.par[i]
            item_form.si = course_data.si[i]
            item_form.shots = shots
            item_form.points = 0
            if hole <= 9:
                self.scoresOut.append_entry(item_form)
            else:
                self.scoresIn.append_entry(item_form)
示例#5
0
    def populate_event_report(self, event_id, report_file):
        event = get_event(event_id)
        self.event_name.data = event.full_name()

        all = get_event_scores(event_id)
        all.sort(['last_name', 'first_name'])
        if len(all.data) == 0:
            return False

        def lu_fn(values):
            return values['status'] == PlayerStatus.member

        members = all.where(lu_fn)
        players = all.get_columns('player_name')
        pos = [s for s in members.get_columns('position')]
        pos = pos.index(min(pos))
        self.winner.data = members.get_columns('player_name')[pos]
        self.winner_return.data = self.winner.data
        set_select_field(self.ntp, 'player', players)
        set_select_field(self.ld, 'player', players)
        report = get_file_contents(report_file)
        if report:
            values = get_elements_from_html(report, ['ld', 'ntp', 'report'])
            if len(values) == 0:
                values = self.alt_get_report_elements_from_html(
                    report, {
                        'ld': 'Longest Drive:',
                        'ntp': 'Nearest the Pin:'
                    })
            self.ntp.data = values['ntp']
            self.ld.data = values['ld']
            self.report.data = values.get('report') or ''
        return True
 def populate_event_handicaps(self, event_id):
     self.event_id.data = event_id
     event = get_event(event_id)
     self.event_name.data = event.full_name()
     scratch = competition_scratch_score(event)
     self.new_date.data = fmt_date(event.date + datetime.timedelta(days=1))
     self.editable.data = True  # is_latest_event(event)
     if self.editable.data:
         next_event_date = datetime.date.today()
     else:
         next_event = get_next_event(event.date)
         if next_event:
             next_event_date = next_event.date
         else:
             next_event_date = datetime.date.today()
     num = 0
     for player in sorted_players_for_event(event):
         num += 1
         item_form = EventHandicapItemForm()
         item_form.num = str(num)
         orig_state = player.state_as_of(event.date)
         new_state = player.state_as_of(next_event_date)
         item_form.player = player.full_name() + orig_state.status.qualify()
         item_form.handicap = new_state.handicap
         item_form.old_handicap = orig_state.handicap
         score = player.score_for(event.id)
         item_form.suggested = suggested_handicap_change(
             scratch, orig_state.handicap, score.points)
         item_form.points = score.points
         item_form.strokes = score.shots
         item_form.position = score.position
         item_form.player_id = player.id
         item_form.status_return = orig_state.status.value
         item_form.old_handicap_return = orig_state.handicap
         self.scores.append_entry(item_form)
示例#7
0
def calc_event_positions(event_id, result):
    event = get_event(event_id)
    course_data = event.course.course_data_as_of(event.date.year)
    if 'card' not in result.head:
        cards = get_event_cards(event_id)
    else:
        cards = {
            pc[0]: pc[1]
            for pc in result.get_columns(['player_id', 'card']) if pc[1]
        }
    sort = []
    for row in result.data:
        player = dict(zip(result.head, row))
        player_id = int(player['player_id'])
        player_hcap = my_round(float(player['handicap']))
        if player_id in cards:
            shots = [int(s) for s in cards[player_id]]
            points = calc_stableford_points(player_hcap, shots, course_data.si,
                                            course_data.par)
            # countback
            tot = (1e6 * sum(points[-18:])) + (1e4 * sum(points[-9:])) + (
                1e2 * sum(points[-6:])) + sum(points[-3:])
        else:
            tot = 1e6 * coerce(player['points'], float)
        sort.append(tot)
    result.sort_using(sort, reverse=True)
    position = list(range(1, len(result.data) + 1))
    result.update_column('position', position)
    return result
示例#8
0
 def populate_event(self, event_id, event_type):
     event = get_event(event_id)
     if not event_type:
         event_type = event.type
     self.editable = is_event_editable(event.date.year)
     self.date.data = event.date
     self.member_price.data = event.member_price
     self.guest_price.data = event.guest_price
     self.start_booking.data = event.booking_start
     self.end_booking.data = event.booking_end
     self.max.data = event.max
     self.event_type.data = event_type.value
     self.note.data = event.note
     if event_type in [
             EventType.wags_vl_event, EventType.non_vl_event,
             EventType.non_event, EventType.cancelled
     ]:
         for item in event.schedule + (6 -
                                       len(event.schedule)) * [Schedule()]:
             item_form = ScheduleForm()
             item_form.time = item.time
             item_form.text = item.text
             self.schedule.append_entry(item_form)
     if event_type in [EventType.wags_tour, EventType.minotaur]:
         for item in event.tour_events + (
                 6 - len(event.tour_events)) * [Event()]:
             item_form = TourScheduleForm()
             item_form.date = item.date
             self.tour_schedule.append_entry(item_form)
     self.populate_choices(event_id, event_type)
     return event_id
    def populate_event(self, event_id, member_id):
        event = get_event(event_id)
        self.bookable.data = event.is_bookable()
        self.at_capacity.data = event.at_capacity()
        if self.bookable.data:
            self.title.data = 'Book Event'
        else:
            self.title.data = 'Event Details'
        self.show_bookings.data = len(event.bookings) > 0
        self.event_id.data = event_id
        self.event_type.data = event.type
        self.date.data = encode_date(event.date)
        if event.organiser:
            self.organiser_id.data = event.organiser.id
            self.organiser.data = event.organiser.player.full_name()
        else:
            self.organiser_id.data = 0
        self.event.data = event.trophy.name if event.trophy else event.venue.name
        self.venue.data = event.venue.name
        contact = event.venue.contact or Contact()
        post_code = contact.post_code or ''
        self.venue_address.data = line_break(
            (contact.address or '') + ',' + post_code, [',', '\r', '\n'])
        self.venue_phone.data = contact.phone or ''
        self.map_url.data = 'http://maps.google.co.uk/maps?q={}&title={}&z=12 target="googlemap"' \
            .format(post_code.replace(' ', '+'), event.venue.name)
        self.venue_directions.data = line_break(event.venue.directions or '',
                                                '\n')
        self.schedule.data = line_break([(s.time.strftime('%H:%M ') + s.text)
                                         for s in event.schedule])
        self.member_price.data = event.member_price
        self.guest_price.data = event.guest_price
        self.booking_deadline.data = encode_date(event.booking_end)
        self.notes.data = event.note or ''

        if member_id == 0:
            self.message.data = ''
            return

        booking = get_booking(event_id, member_id)
        if not booking.id:
            booking.member = get_member(member_id)
            booking.playing = True
        self.message.data = self.booking_message(event, booking)
        if event.is_bookable() or booking.id:
            self.attend.data = booking.playing
            self.comment.data = booking.comment
            self.booking_date.data = fmt_date(booking.date)
            self.member_name.data = booking.member.player.full_name()

            count = 1
            for guest in booking.guests + (3 -
                                           len(booking.guests)) * [Guest()]:
                item_form = GuestForm()
                item_form.item_pos = count
                item_form.guest_name = guest.name
                item_form.handicap = guest.handicap
                self.guests.append_entry(item_form)
                count += 1
 def populate_history(self, player_id, event_id):
     player = get_player(player_id)
     event = get_event(event_id)
     self.player.data = player.full_name()
     for item in player.states_up_to(event.date):
         item_form = HandicapItemForm()
         item_form.date = fmt_date(item.date)
         item_form.handicap = item.handicap
         item_form.status = item.status.name
         self.history.append_entry(item_form)
示例#11
0
 def populate_history(self, event_id, player_id):
     event = get_event(event_id)
     if is_latest_event(event):
         date = datetime.date.today()
     else:
         date = event.date
     player = get_player(player_id)
     self.player.data = player.full_name()
     for state in player.states_up_to(date):
         item_form = HandicapItemForm()
         item_form.date = state.date
         item_form.handicap = state.handicap
         item_form.status = state.status.name
         self.history.append_entry(item_form)
示例#12
0
 def report_event(event_id):
     event = get_event(event_id)
     form = EventReportForm()
     if form.is_submitted():
         if form.save:
             MaintainEvents.save_report_page('static/event_report.html', event, form)
             flash('report saved', 'success')
             return redirect(url_for_admin('list_events', year=event.date.year))
     else:
         report_file = MaintainEvents.report_file_name(event.date)
         if not form.populate_event_report(event_id, report_file):
             flash('Results not yet available', 'warning')
             return redirect(url_for_admin('events_main', event_id=event_id))
     return render_template('admin/event_report.html', form=form, event=event_id)
 def populate_event_results(self, event_id):
     event = get_event(event_id)
     self.event_id.data = event_id
     self.event_name.data = event.full_name()
     for score in [s for s in event.scores if s.points > 0]:
         item_form = EventResultItemForm()
         player = score.player
         state = player.state_as_of(event.date)
         item_form.player = player.full_name() + state.status.qualify()
         item_form.handicap = state.playing_handicap(event)
         item_form.points = score.points
         item_form.strokes = score.shots
         item_form.position = score.position
         item_form.player_id = player.id
         self.scores.append_entry(item_form)
    def save_event_handicaps(self, event_id):
        errors = self.errors
        if len(errors) > 0:
            return False
        date = get_event(event_id).date + datetime.timedelta(days=1)
        fields = ['player_id', 'date', 'status', 'handicap']
        data = [[
            int(d['player_id']), date,
            PlayerStatus(int(d['status_return'])),
            float(d['handicap'])
        ] for d in self.data['scores']
                if d['handicap'] != d['old_handicap_return']]

        save_handicaps(Table(fields, data))
        return True
示例#15
0
 def populate_choices(self, event_id, event_type):
     courses = get_course_select_choices()
     event = get_event(event_id)
     organiser = event.organiser.id if event.organiser else 0
     trophy = event.trophy.id if event.trophy else 0
     venue = event.venue.id if event.venue else 0
     course = event.course.id if event.course else 0
     set_select_field_new(self.organiser,
                          get_member_select_choices(),
                          default_selection=organiser,
                          item_name='Organiser')
     set_select_field_new(self.trophy,
                          get_trophy_select_choices(),
                          default_selection=trophy,
                          item_name='Trophy')
     set_select_field_new(self.venue,
                          get_venue_select_choices(),
                          default_selection=venue,
                          item_name='Venue')
     if event_type in [
             EventType.wags_vl_event, EventType.non_vl_event,
             EventType.non_event, EventType.cancelled
     ]:
         set_select_field_new(self.course,
                              courses,
                              default_selection=course,
                              item_name='Course')
     if event_type in [EventType.wags_tour, EventType.minotaur]:
         item_count = 0
         for item in event.tour_events + (
                 6 - len(event.tour_events)) * [Event()]:
             course_id = item.course_id if item.course else 0
             field = self.tour_schedule.entries[item_count].course
             set_select_field_new(field,
                                  courses,
                                  default_selection=course_id,
                                  item_name='Course')
             item_count += 1
示例#16
0
    def populate_card(self, event_id, player_id):
        event = get_event(event_id)
        player = get_player(player_id)
        card = get_event_card(event_id, player_id)
        course_data = event.course.course_data_as_of(event.date.year)
        state = player.state_as_of(event.date)
        self.event_name.data = event.full_name()
        self.player.data = player.full_name()
        self.handicap.data = state.playing_handicap(event)

        holes = range(1, 19)
        for hole in holes:
            i = hole - 1
            shots = "-" if card[i] == 99 or card[i] is None else card[i]
            item_form = EventCardItemForm()
            item_form.hole = hole
            item_form.par = course_data.par[i]
            item_form.si = course_data.si[i]
            item_form.shots = shots
            item_form.points = 0
            if hole <= 9:
                self.scoresOut.append_entry(item_form)
            else:
                self.scoresIn.append_entry(item_form)