示例#1
0
 def _update_calendar_event(self, current_user):
     from roulette.google import get_calendar_id
     calendar_id = get_calendar_id(current_user)
     update_calendar_events(
         self.first_user,
         calendar_id=calendar_id,
         calendar_event_id=self.master_calendar_item_id,
         attendees=LunchAttendee.objects.filter(lunch=self).exclude(user=self.first_user),
         is_golden_ticket=self.is_golden_ticket,
         date=self.date)
示例#2
0
 def _create_calendar_event(self, current_user):
     from roulette.google import get_calendar_id
     calendar_id = get_calendar_id(current_user)
     event_id = create_calendar_event(
         current_user,
         calendar_id,
         date=self.date)
     self.first_user = current_user
     self.master_calendar_item_id = event_id
     self.save()
     return event_id
示例#3
0
def schedule_lunch(user):
    logger.info('Schedule lunch for user %s' % user)
    today = datetime.today().date()
    try:
        profile = user.profile
    except:
        logger.info('User %s never filled out their profile' % user)
        return
    try:
        calendar_id = get_calendar_id(user)
    except UserSocialAuth.DoesNotExist as e:
        # admin users
        logger.error(e)
        return
    logger.info('Found calendar id %s for user %s' % (calendar_id, user))
    start, end = _get_week_start_end(today, offset_weeks=1)
    logger.info('Start %s, end %s' % (start, end))
    already_exists = LunchAttendee.get_existing(user, start, end)
    if already_exists:
        logger.info('Already has a lunch this week %s, aborting.' % (already_exists))
        return
    #if profile and profile.already_tried_to_schedule(today):
    #    logger.info('Already tried to schedule this user, defer until %s' % (profile.min_lunch_date))
    #    return
    dates_to_check = [
        (start + timedelta(days=WEDNESDAY)),
        (start + timedelta(days=THURSDAY)),
        (start + timedelta(days=FRIDAY)),
    ]
    logger.info('Checking dates %s' % dates_to_check)
    lunch_date = get_random_date_available(user, calendar_id, dates_to_check)
    if not lunch_date:
        logger.info('Found NO availability for user %s' % user)
        if profile:
            profile.min_lunch_date = end
            profile.save()
        logger.info('Updating min_lunch_date for user %s to %s' % (user, end))
        # TODO: send email to user?
        return
    logger.info('Found availability for date %s' % lunch_date)
    open_lunch = Lunch.get_open_for_date(lunch_date)
    if open_lunch:
        logger.info('Found existing open lunch entry %s' % open_lunch)
    else:
        open_lunch = Lunch.create_new(lunch_date)
        logger.info('Created new lunch entry %s' % open_lunch)
    open_lunch.add_attendee(user)
    logger.info('Added %s to lunch %s as an attendee' % (user, open_lunch))
    new_event_id = open_lunch.create_or_update_calendar_event(user)
    if new_event_id:
        logger.info('Created new calendar event %s' % new_event_id)