# HG changeset patch # User Paul Boddie # Date 1444686818 -7200 # Node ID 86d401e6e30ab1c610619c6b7ac3139a8fe13063 # Parent 317174543da97492d0653b18b7f624dd4b9baae5 Show suggested attendees as well as suggested periods for counter-proposals. diff -r 317174543da9 -r 86d401e6e30a imipweb/event.py --- a/imipweb/event.py Mon Oct 12 17:42:03 2015 +0200 +++ b/imipweb/event.py Mon Oct 12 23:53:38 2015 +0200 @@ -540,13 +540,66 @@ attendees = self.get_verbose_attendees(attendees) - page.p("The following counter-proposals have been received for this event:") + # Get suggestions. Attendees are aggregated and reference the existing + # attendees suggesting them. Periods are referenced by each existing + # attendee. + + suggested_attendees = {} + suggested_periods = {} + + for i, attendee in enumerate(attendees): + attendee_uri = get_uri(attendee) + obj = self.get_stored_object(self.uid, self.recurrenceid, "counters", attendee_uri) + + # Get suggested attendees. + + for suggested_uri, suggested_attr in uri_dict(obj.get_value_map("ATTENDEE")).items(): + if suggested_uri == attendee_uri: + continue + suggested = get_verbose_address(suggested_uri, suggested_attr) + + if not suggested_attendees.has_key(suggested): + suggested_attendees[suggested] = [] + suggested_attendees[suggested].append(attendee) + + # Get suggested periods. + + suggested_periods[attendee] = self.get_periods(obj) + + # Present the suggested attendees. + + page.p("The following attendees have been suggested for this event:") page.table(cellspacing=5, cellpadding=5, class_="counters") page.thead() page.tr() - page.th("Attendee", rowspan=2) + page.th("Attendee") + page.th("Suggested by...") + page.tr.close() + page.thead.close() + page.tbody() + + suggested_attendees = list(suggested_attendees.items()) + suggested_attendees.sort() + + for suggested, attendees in suggested_attendees: + page.tr() + page.td(suggested) + page.td(", ".join(attendees)) + page.tr.close() + + page.tbody.close() + page.table.close() + + # Present the suggested periods. + + page.p("The following periods have been suggested for this event:") + + page.table(cellspacing=5, cellpadding=5, class_="counters") + page.thead() + page.tr() page.th("Periods", colspan=2) + page.th("Suggested by...", rowspan=2) page.tr.close() page.tr() page.th("Start") @@ -555,28 +608,30 @@ page.thead.close() page.tbody() - for i, attendee in enumerate(attendees): - attendee_uri = get_uri(attendee) - obj = self.get_stored_object(self.uid, self.recurrenceid, "counters", attendee_uri) - periods = self.get_periods(obj) + suggested_periods = list(suggested_periods.items()) + suggested_periods.sort() + for attendee, periods in suggested_periods: first = True for p in periods: identifier = "%s-%s" % (format_datetime(p.get_start_point()), format_datetime(p.get_end_point())) css = identifier == counter and "selected" or "" - + page.tr(class_=css) - if first: - page.td(attendee, rowspan=len(periods)) - start = self.format_datetime(to_timezone(p.get_start(), tzid), "long") end = self.format_datetime(to_timezone(p.get_end(), tzid), "long") + # Show each period. + page.td(start) page.td(end) + # Show attendees and controls alongside the first period in each + # attendee's collection. + if first: + page.td(attendee, rowspan=len(periods)) page.td(rowspan=len(periods)) self.control("accept-%d" % i, "submit", "Accept") self.control("decline-%d" % i, "submit", "Decline")