Exemple #1
0
def send_message_code(user, business_id, message, user_id):
    recv_user = None
    if user_id:
        if not business.user_owns_business(user.user_id(), business_id):
            return {"error": "You don't own that business"}
        recv_user = CoUser.get(user_id)
        if not recv_user:
            return {"error": "no such user"}
        interaction = InteractionRecord.gql("WHERE business_id = :1 AND user = :2", business_id, recv_user).get()
        if not interaction:
            return {"error": "no reason to talk to that person"}
        contractor = True
    else:
        interaction = InteractionRecord.guaranteed_get(business_id, user)
        contractor = False
    senderoo = Solicitation(
        interaction = interaction,
        from_contractor = contractor,
        when = js_time(),
        message = message
    )

    senderoo.put()

    send_emails.message_recieved(user, business_id,recv_user, message)

    return model_to_dict(senderoo)
Exemple #2
0
    def get_availability(self, business_id, starting=None, until=None):
        # TODO: add a minimum appt length
        if not starting:
            starting = js_time()
        if not until:
            until = starting + (7*24*60*60*1000)

        available = ScheduleAvailability.gql("WHERE business_id = :1", business_id)
        booked = Booking.gql("WHERE business_id = :1", business_id)

        el_booking = NextMunger()
        el_available = NextMunger()

        for availability in available:
            el_available.add(WeeklyEvent(availability))
        for booking in booked:
            el_booking.add(SingleEvent(booking))

        ret_arr = []
        def maybe_append(el):
            # Just to make sure that we don't send tiny openings.
            # This will be better fixed in the future with better data integrity TODO: do that - AH
            # pulled this number out of what the bugs look like
            if el["end"] - el["start"] > 100000\
            and el["start"] < until:
                ret_arr.append(el)


        cursor = starting
        while cursor < until and el_available.next(cursor):
            next_available = el_available.next(cursor)
            next_book = el_booking.next(cursor)
            if next_book and next_book["start"]<next_available["start"]:
                cursor = next_book["end"] + 1 # + 1 is an extra ms just in case something broke with equal values in the algorithm
            elif next_book and next_book["start"] < next_available["end"]:
                augment = next_available
                augment["end"] = next_book["start"]
                if augment["end"] != augment["start"]:
                    maybe_append(augment)
                cursor = next_book["end"] + 1
            else:
                if next_available["end"] != next_available["start"]:
                    maybe_append(next_available)
                cursor = next_available["end"] + 1

        return ret_arr
Exemple #3
0
 def respond(self, user, business_id, user_to, message):
     """ Used by businesses to respond to user queries
     """
     if not business.user_owns_business(user.user_id(), business_id):
         return {"error": "NOT ALLOWED DOG"}
     interaction = InteractionRecord.get(business_id, user_to)
     if not interaction:
         return {"error": "You cannot contact that user"}
     senderoo = Solicitation(
         interaction = interaction,
         from_contractor=True,
         when = js_time(),
         message = message
     )
     senderoo.put()
     # TODO: tell everyone again
     return model_to_dict(senderoo)