Example #1
0
def invited_to_attending(beacon, user, contact):
    name = get_user_or_contact_name(user, contact)
    push_message, chat_message, avatar_url = is_going(name)
    create_hotspot_message_in_chat(beacon, chat_message, user, contact,
                                   avatar_url)
    send_hotspot_push_to_correct_profiles(
        beacon, push_message, message_type=MESSAGE_TYPE.HOTSPOT_JOIN)
Example #2
0
def invite_friends(user, beacon, invite_list, message=None):
    if DealStatus.objects.filter(beacon=beacon).exists():
        deal_status = DealStatus.objects.filter(beacon=beacon, user=user)[0]
        deal_id = deal_status.deal.id
        deal = Deal.objects.get(pk=deal_id)
        #beacon_datetime = datetime.datetime.fromtimestamp(timestamp)
        # deal = Deal.objects.select_related('place').get(pk=deal_id)
        # place = deal.place
        # description = smart_format("Deal at {0}", place.name)

        #get deal hours
        timezone = GeoTimeZone().get_timezone(latitude=beacon.latitude, longitude=beacon.longitude)
        timestamp = calendar.timegm(deal_status.start.timetuple())
        beacon_datetime = datetime.datetime.fromtimestamp(timestamp, tz=timezone)
        # beacon_datetime = deal_status.start
        today_time = 60*60*beacon_datetime.hour + 60*beacon_datetime.minute + beacon_datetime.second

        deal_hours = deal_hours_for_datetime(deal, beacon.time)
        # start = beacon_datetime + datetime.timedelta(seconds=deal_hours.start - today_time)
        start = deal_status.start
        end = deal_status.end
        #create deal status and beacon status objects
        user_list, contact_list = parse_json_into_users_and_contact_lists(user, invite_list)
        beacon_follows = []
        deal_statuses = []
        cleaned_contact_list = remove_duplicate_contacts(contact_list)
        #create deal status and beacon follow for creator
        # deal_statuses.append(DealStatus(deal=deal, beacon=beacon, user=user, hours=deal_hours, start=start, end=end))
        # beacon_follows.append(BeaconFollow(beacon=beacon, user=user, state=BEACON_FOLLOW_STATUS.GOING))
        for invited_user in user_list:
            deal_statuses.append(DealStatus(deal=deal, beacon=beacon, user=invited_user, invited_by=user, hours=deal_hours, start=start, end=end))
            beacon_follows.append(BeaconFollow(beacon=beacon, user=invited_user, invited_by=user))
        for invited_contact in cleaned_contact_list:
            deal_statuses.append(DealStatus(deal=deal, beacon=beacon, contact=invited_contact, invited_by=user, hours=deal_hours, start=start, end=end))
            beacon_follows.append(BeaconFollow(beacon=beacon, contact=invited_contact, invited_by=user))
        BeaconFollow.objects.bulk_create(beacon_follows)
        DealStatus.objects.bulk_create(deal_statuses)
        update_deal_statuses_for_beacon(beacon, deal)

        #send invitations
        if message is None:
            send_deal_invites.delay(deal_statuses, beacon.custom_deal_message)
        else:
            send_deal_invites.delay(deal_statuses, message, user)
        return True
    else:
        # invite more people to this Beacon if the new follower included an invite list
        user_list, contact_list = parse_json_into_users_and_contact_lists(user, invite_list)
        numberOfInvites = len(user_list) + len(contact_list)
        if numberOfInvites > 0:
            send_sms_invites(user, beacon, user_list, contact_list)
            chat_message, avatar_url = invite_friends_message(user, numberOfInvites)
            if beacon.creator != user:
                send_hotspot_message(users=[beacon.creator], push_text=chat_message,
                                     message_type=MESSAGE_TYPE.HOTSPOT_UPDATE, beacon_id=beacon.id)
            create_hotspot_message_in_chat(beacon, chat_message, user, None, avatar_url)
        return True
Example #3
0
def invited_or_going_to_here(beacon, user, contact, checkedInByUser):
    name = get_user_or_contact_name(user, contact)
    checkedInByName = get_user_or_contact_name(checkedInByUser, None)
    if user == checkedInByUser:
        push_message, chat_message, avatar_url = is_here(name)
    else:
        push_message, chat_message, avatar_url = is_here_check_in(
            name, checkedInByName)
    create_hotspot_message_in_chat(beacon, chat_message, user, contact,
                                   avatar_url)
    send_hotspot_push_to_correct_profiles(beacon, push_message)
Example #4
0
def going_or_here_to_invited(beacon, user, contact, checkedOutByUser):
    name = get_user_or_contact_name(user, contact)
    checkedOutByName = get_user_or_contact_name(checkedOutByUser, None)
    if user == checkedOutByName:
        chat_message, avatar_url = has_left(name)
    else:
        chat_message, avatar_url = has_left_checked_out(name, checkedOutByName)
    create_hotspot_message_in_chat(beacon,
                                   chat_message,
                                   user,
                                   contact,
                                   avatar_url=avatar_url)
Example #5
0
def create_hotspot(user,
                   latitude,
                   longitude,
                   address,
                   description,
                   time,
                   invite_list,
                   user_latitude=None,
                   user_longitude=None):
    beacon = Beacon(creator=user,
                    description=description,
                    time=time,
                    private=False,
                    longitude=longitude,
                    latitude=latitude,
                    address=address)
    beacon.save()

    creatorIsGoing = BeaconFollow(user=user,
                                  beacon=beacon,
                                  state=BEACON_FOLLOW_STATUS.GOING)
    if user_latitude:
        distance = distance_between_two_points(latitude, longitude,
                                               user_latitude, user_longitude)
        dt = abs(datetime.now() - time).total_seconds()
        if distance < 0.2 and dt < 60 * 15:
            creatorIsGoing.state = BEACON_FOLLOW_STATUS.HERE

    creatorIsGoing.save()

    user_list, contact_list = parse_json_into_users_and_contact_lists(
        user, invite_list)

    numberOfFriends = len(user_list) + len(contact_list)
    if numberOfFriends > 0:
        send_sms_invites(user, beacon, user_list, contact_list)
        chat_message1, avatar_url1 = set_hotspot_message(user)
        chat_message2, avatar_url2 = invite_friends_message(
            user, numberOfFriends)
        create_hotspot_message_in_chat(beacon, chat_message1, user, None,
                                       avatar_url1)
        create_hotspot_message_in_chat(beacon, chat_message2, user, None,
                                       avatar_url2)
    else:
        chat_message, avatar_url = set_hotspot_message(user)
        create_hotspot_message_in_chat(beacon, chat_message, user, None,
                                       avatar_url)
    hotspot_with_extra_properties = add_extra_hotspot_properties(beacon)

    scheduler.enqueue_at(beacon.time, send_push_to_wakeup_users, user_list)
    scheduler.enqueue_at(beacon.time + timedelta(hours=1),
                         send_push_to_wakeup_users, user_list)
    scheduler.enqueue_at(beacon.time + timedelta(hours=2),
                         send_push_to_wakeup_users, user_list)

    if (beacon.time - datetime.now()).total_seconds() > 60 * 60 * 2:
        scheduler.enqueue_at(beacon.time - timedelta(minutes=15),
                             send_reminder, beacon)

    return hotspot_with_extra_properties
Example #6
0
def update_hotspot(user, beacon, request_data):
    date_time = datetime.fromtimestamp(float(request_data['time']))
    lat = float(request_data['latitude'])
    long = float(request_data['longitude'])
    beacon.description = request_data['description']
    beacon.time = date_time
    beacon.latitude = lat
    beacon.longitude = long
    beacon.address = request_data['address']
    beacon.save()
    name = get_name(user)
    chat_message = smart_format("{0} updated this Hotspot", name)
    sms_message = smart_format(
        "{0} updated their Hotspot\nHotspot://Go-to-App", name)
    push_message = smart_format("{0} updated their Hotspot", name)
    change_hotspot_message(beacon, sms_message, push_message)
    create_hotspot_message_in_chat(beacon,
                                   chat_message,
                                   user,
                                   None,
                                   avatar_url=HOTBOT_AVATAR.HAPPY)
    return beacon
Example #7
0
def create_beacon(user, beacon_data, invite_list):
    if not ('time' and 'longitude' and 'latitude' and 'description'
            and 'address' in beacon_data):
        return False
    date_time = datetime.fromtimestamp(float(beacon_data['time']))
    lat = float(beacon_data['latitude'])
    long = float(beacon_data['longitude'])
    description = smart_str(beacon_data['description'])
    beacon = Beacon(creator=user,
                    description=description,
                    time=date_time,
                    private=False,
                    longitude=long,
                    latitude=lat,
                    address=beacon_data['address'])
    beacon.save()

    creatorIsGoing = BeaconFollow(user=user,
                                  beacon=beacon,
                                  state=BEACON_FOLLOW_STATUS.GOING)
    creatorIsGoing.save()

    user_list, contact_list = parse_json_into_users_and_contact_lists(
        user, invite_list)

    numberOfFriends = len(user_list) + len(contact_list)
    if numberOfFriends > 0:
        send_sms_invites(user, beacon, user_list, contact_list)
        chat_message1, avatar_url1 = set_hotspot_message(user)
        chat_message2, avatar_url2 = invite_friends_message(
            user, numberOfFriends)
        create_hotspot_message_in_chat(beacon, chat_message1, user, None,
                                       avatar_url1)
        create_hotspot_message_in_chat(beacon, chat_message2, user, None,
                                       avatar_url2)
    else:
        chat_message, avatar_url = set_hotspot_message(user)
        create_hotspot_message_in_chat(beacon, chat_message, user, None,
                                       avatar_url)
    return beacon