示例#1
0
    def build(self, context):
        int_ids = getUtility(IIntIds)
        schedule_calendars = set()
        calendar = getScheduleCalendar(self.calendar.__parent__)
        if calendar is None:
            return

        schedule_calendars.add(calendar)

        for event in self.events:
            schedule = context.shared.schedule_map.get(event['timetable_key'])
            if schedule is None:
                continue

            period = context.shared.period_map[event['period_key']]
            owner_int_id = int(schedule.__parent__.__name__)
            owner = int_ids.getObject(owner_int_id)

            calendar = getScheduleCalendar(owner)
            if calendar is None:
                continue

            if calendar not in schedule_calendars:
                schedule_calendars.add(calendar)

            new_event = self.findEvent(calendar, period, event['dtstart'],
                                       event['duration'])
            if new_event is not None:
                new_event.description = event['description']
                new_event.location = event['location']
                for resource in event['resources']:
                    if resource not in new_event.resources:
                        new_event.bookResource(resource)

        # XXX: maybe copy over old "free" section events here

        schedule_cal_relationships = [(cal, IRelationshipLinks(cal))
                                      for cal in schedule_calendars]

        old_relationships = IRelationshipLinks(self.calendar)
        old_subscriptions = list(
            old_relationships.getLinksByRole(URICalendarSubscriber))

        for link in old_subscriptions:
            old_info = link.extra_info
            for schedule_cal, relationships in schedule_cal_relationships:
                info = CalendarOverlayInfo(schedule_cal, old_info.show,
                                           old_info.color1, old_info.color2)
                info.__parent__ = old_info.__parent__
                try:
                    relationships.find(link.my_role, link.target, link.role,
                                       link.rel_type)
                except ValueError:
                    relate(link.rel_type, (schedule_cal, link.my_role),
                           (link.target, link.role),
                           extra_info=info)

        for link in old_subscriptions:
            unrelate(link.rel_type, (self.calendar, link.my_role),
                     (link.target, link.role))
    def build(self, context):
        int_ids = getUtility(IIntIds)
        schedule_calendars = set()
        calendar = getScheduleCalendar(self.calendar.__parent__)
        if calendar is None:
            return

        schedule_calendars.add(calendar)

        for event in self.events:
            schedule = context.shared.schedule_map.get(event['timetable_key'])
            if schedule is None:
                continue

            period = context.shared.period_map[event['period_key']]
            owner_int_id = int(schedule.__parent__.__name__)
            owner = int_ids.getObject(owner_int_id)

            calendar = getScheduleCalendar(owner)
            if calendar is None:
                continue

            if calendar not in schedule_calendars:
                schedule_calendars.add(calendar)

            new_event = self.findEvent(
                calendar, period, event['dtstart'], event['duration'])
            if new_event is not None:
                new_event.description = event['description']
                new_event.location = event['location']
                for resource in event['resources']:
                    if resource not in new_event.resources:
                        new_event.bookResource(resource)

        # XXX: maybe copy over old "free" section events here

        schedule_cal_relationships = [
            (cal, IRelationshipLinks(cal)) for cal in schedule_calendars]

        old_relationships = IRelationshipLinks(self.calendar)
        old_subscriptions = list(
            old_relationships.getLinksByRole(URICalendarSubscriber))

        for link in old_subscriptions:
            old_info = link.extra_info
            for schedule_cal, relationships in schedule_cal_relationships:
                info = CalendarOverlayInfo(schedule_cal, old_info.show,
                                           old_info.color1, old_info.color2)
                info.__parent__ = old_info.__parent__
                try:
                    relationships.find(
                        link.my_role, link.target, link.role, link.rel_type)
                except ValueError:
                    relate(link.rel_type,
                           (schedule_cal, link.my_role),
                           (link.target, link.role),
                           extra_info = info)

        for link in old_subscriptions:
            unrelate(link.rel_type,
                     (self.calendar, link.my_role),
                     (link.target, link.role))