Пример #1
0
    def obj_update(self, bundle, pk='', **kwargs):

        is_offline_booking = bool(bundle.data.pop("is_offline_booking", False))
        require_keys(["state"], bundle.data)

        new_state = bundle.data["state"].lower()
        booking = Booking.objects.get(pk=pk)

        def error(error_str):
            raise ImmediateHttpResponse(response=HttpResponseBadRequest(
                content_type='application/json',
                content=json.dumps({"error": error_str})))

        def assert_current_state_is(from_state):

            if type(from_state) is list:
                wrong_status = booking.state not in from_state
            else:
                wrong_status = booking.state != from_state

            if wrong_status:
                raise ImmediateHttpResponse(response=error(
                    "Need to be in state %s to switch to state %s" %
                    (from_state, booking.state)))

        if booking.owner != bundle.request.user:
            error("Can't modify booking : Wrong user")

        if new_state == 'pending':

            if booking.product.payment_type == PAYMENT_TYPE.PAYPAL:
                is_valid = booking.owner.is_valid
                is_confirmed = booking.owner.is_confirmed
                if not booking.owner.has_paypal():
                    return error("The owner doesn't have paypal account")
                elif not is_verified:
                    return error("The owner's paypal account is invalid")
                elif not is_confirmed:
                    return error("The owner's paypal email is not confirmed")

            assert_current_state_is("authorized")
            booking.send_acceptation_email()
            GoalRecord.record('rent_object_accepted', WebUser(bundle.request))

        elif new_state == 'rejected':
            assert_current_state_is("authorized")
            booking.send_rejection_email()
            GoalRecord.record('rent_object_rejected', WebUser(bundle.request))

        elif new_state == 'closed':
            assert_current_state_is(["closing", "ongoing"])
            if not is_offline_booking:
                booking.init_payment_processor()
                booking.close()

        return super(BookingResource, self).obj_update(bundle,
                                                       request=bundle.request,
                                                       pk=pk,
                                                       **kwargs)
Пример #2
0
 def web_user(self, user):
     session = get_session(None)
     request = self.mox.CreateMock(HttpRequest)
     request.user = user
     request.session = session
     experiment_user = WebUser(request)
     experiment_user.get_or_create_anonymous_visitor()
     yield experiment_user
Пример #3
0
 def web_user(self, user):
     session = get_session(None)
     request = self.mox.CreateMock(HttpRequest)
     request.user = user
     request.session = session
     experiment_user = WebUser(request)
     experiment_user.get_or_create_anonymous_visitor()
     yield experiment_user
Пример #4
0
def confirm_human(request):
    experiment_user = WebUser(request)
    experiment_user.confirm_human()
    return HttpResponse(status=204)
Пример #5
0
def record_experiment_goal(request, goal_name):
    try:
        GoalRecord.record(goal_name, WebUser(request))
    except Exception, e:
        l.warn("unknown goal type '%s': %s" % (goal_name, e))
Пример #6
0
def confirm_human(request):
    experiment_user = WebUser(request)
    experiment_user.confirm_human()
    return HttpResponse(status=204)
Пример #7
0
 def event(self, name, properties, request=None):
     if request:
         self._submit(name, properties, experiment_user=WebUser(request))