Exemplo n.º 1
0
    def available_events_summary(self):
        summary = OrderedDict()
        for event in self.available_events:
            start_time = event.start_time_local
            day = start_time.strftime('%A')
            if day not in summary:
                summary[day] = OrderedDict()

            time_of_day = 'Evening'
            if start_time < noon_datetime(start_time):
                time_of_day = 'Morning'
            elif start_time < evening_datetime(start_time):
                time_of_day = 'Afternoon'
            if time_of_day not in summary[day]:
                summary[day][time_of_day] = 0

            summary[day][time_of_day] += event.remaining_slots

        return summary
Exemplo n.º 2
0
    def available_events_summary(self):
        summary = OrderedDict()
        for event in self.available_events:
            start_time = event.start_time_local
            day = start_time.strftime('%A')
            if day not in summary:
                summary[day] = OrderedDict()

            time_of_day = 'Evening'
            if start_time < noon_datetime(start_time):
                time_of_day = 'Morning'
            elif start_time < evening_datetime(start_time):
                time_of_day = 'Afternoon'
            if time_of_day not in summary[day]:
                summary[day][time_of_day] = 0

            summary[day][time_of_day] += event.remaining_slots

        return summary
Exemplo n.º 3
0
def _inconsistent_shoulder_shifts(session):
    query = session.query(Attendee).join(HotelRequests) \
        .options(
            subqueryload(Attendee.depts_where_working),
            subqueryload(Attendee.shifts).subqueryload(Shift.job).subqueryload(Job.department),
            subqueryload(Attendee.hotel_requests)) \
        .filter(HotelRequests.approved == True).order_by(Attendee.full_name, Attendee.id)  # noqa: E712

    shoulder_nights_missing_shifts = defaultdict(lambda: defaultdict(list))

    for attendee in query:
        if attendee.is_dept_head:
            continue
        approved_nights = set(attendee.hotel_requests.nights_ints)
        approved_shoulder_nights = approved_nights.difference(c.CORE_NIGHTS)
        shifts_by_night = defaultdict(list)
        departments = set()
        for shift in attendee.shifts:
            job = shift.job
            dept = job.department
            departments.add(dept)
            start_time = job.start_time.astimezone(c.EVENT_TIMEZONE)
            shift_night = getattr(c, start_time.strftime('%A').upper())
            shifts_by_night[shift_night].append(shift)

            if start_time <= noon_datetime(start_time):
                day_before = start_time - timedelta(days=1)
                shift_night = getattr(c, day_before.strftime('%A').upper())
                shifts_by_night[shift_night].append(shift)

        discrepencies = approved_shoulder_nights.difference(
            set(shifts_by_night.keys()))
        if discrepencies:
            for dept in departments:
                shoulder_nights_missing_shifts[dept][attendee] = list(
                    discrepencies)

    return shoulder_nights_missing_shifts
Exemplo n.º 4
0
def _inconsistent_shoulder_shifts(session):
    query = session.query(Attendee).join(HotelRequests) \
        .options(
            subqueryload(Attendee.depts_where_working),
            subqueryload(Attendee.shifts).subqueryload(Shift.job).subqueryload(Job.department),
            subqueryload(Attendee.hotel_requests)) \
        .filter(HotelRequests.approved == True).order_by(Attendee.full_name, Attendee.id)  # noqa: E712

    shoulder_nights_missing_shifts = defaultdict(lambda: defaultdict(list))

    for attendee in query:
        if attendee.is_dept_head:
            continue
        approved_nights = set(attendee.hotel_requests.nights_ints)
        approved_shoulder_nights = approved_nights.difference(c.CORE_NIGHTS)
        shifts_by_night = defaultdict(list)
        departments = set()
        for shift in attendee.shifts:
            job = shift.job
            dept = job.department
            departments.add(dept)
            start_time = job.start_time.astimezone(c.EVENT_TIMEZONE)
            shift_night = getattr(c, start_time.strftime('%A').upper())
            shifts_by_night[shift_night].append(shift)

            if start_time <= noon_datetime(start_time):
                day_before = start_time - timedelta(days=1)
                shift_night = getattr(c, day_before.strftime('%A').upper())
                shifts_by_night[shift_night].append(shift)

        discrepencies = approved_shoulder_nights.difference(set(shifts_by_night.keys()))
        if discrepencies:
            for dept in departments:
                shoulder_nights_missing_shifts[dept][attendee] = list(discrepencies)

    return shoulder_nights_missing_shifts