Exemplo n.º 1
0
Arquivo: views.py Projeto: mzimza/WWW
def book(request):
    json_data = json.dumps({"HTTPRESPONSE":0})
    if request.method == "POST":
        room = Room.objects.get(pk=request.POST['room_id'])
        date = datetime.strptime(request.POST['date'], '%Y-%m-%d')
        hours = json.loads(request.POST['hours'])
        delta = timedelta(hours = 1)

        error = False
        try:
            with transaction.atomic():
                for h in hours:
                    begin = datetime.strptime(h, "%H:%M").time()
                    end = (datetime.combine(dt.today(), begin) + delta).time()
                    reservation = Reservation(
                        user=request.user,
                        room=room,
                        date=date,
                        begin_time=begin,
                        end_time=end
                    )
                    try:
                        reservation.clean()
                    except ValidationError as e:
                        message = begin.__str__()[:5] + "-" + end.__str__()[:5] + " is not available"
                        json_data = json.dumps({"HTTPRESPONSE":0, "ERROR": message})
                        error = True
                        break
                    for t in room.freeterm_set.filter(date=date):
                        if t.begin_time <= begin and t.end_time >= end:
                            break
                    left = FreeTerm(
                        room=room,
                        date=date,
                        begin_time=t.begin_time,
                        end_time=begin
                    )
                    right = FreeTerm(
                        room=room,
                        date=date,
                        begin_time=end,
                        end_time=t.end_time
                    )
                    t.delete()
                    if left.begin_time < left.end_time:
                        left.save()
                    if right.begin_time < right.end_time:
                        right.save()
                    reservation.save()
            if not error:
                json_data = json.dumps({"HTTPRESPONSE":1})

        except IntegrityError:
            messages.error(request, 'Something went wrong')

    return HttpResponse(json_data, mimetype="application/json")
def reserve(email,roombc,datetime_start,datetime_end):
    ret = {
        'success': False,
        'error': '',
    }
    
    if len(email) == 0 or len(roombc) == 0 or datetime_start is None or datetime_end is None:
        ret['error'] = 'INTERNAL ERROR: reserve function was not given valid values.'
        #print "ERROR: {%s} {%s} {%s} {%s}" % (email,roombc,datetime_start,datetime_end)
        return ret
    
    try:
        user = Patron.objects.get(email=email)
    except:
        user = Patron()
        user.email = email
        user.date_last_booking = datetime.now() # mostly for daily quotas
        
    try:
        roomkey = RoomKey.objects.get(barcode=roombc)
        room = roomkey.room
    except:
        ret['error'] = 'That room doesn\'t appear to exist. Please select another room.'
        return ret

    # don't 'try-except' this if it errors because that means a core problem exists
    # that should be fixed.    
    user.save()
    
    res = Reservation()
    res.requested_user = user
    res.room = room
    res.datetime_start = datetime_start
    res.datetime_end = datetime_end
    
    # Allow early returns of keys and semi-correction of reservation end datetimes.
    _ = return_key(roombc,False)
    
    try:
        res.clean() # not called automatically without a form
    except ValidationError as ve:
        # failure to clean, only validation errors are raised
        if len(ve.messages) > 1:
            for msg in ve.messages:
                ret['error'] += msg + '<br />'
        else:
            ret['error'] = ve.messages[0]
            
        return ret
    
    # again, if an exception occurs by now, it's likely a bug.        
    res.save()
    
    ret['success'] = True
    return ret
Exemplo n.º 3
0
def book(request):
    json_data = json.dumps({"HTTPRESPONSE": 0})
    if request.method == "POST":
        room = Room.objects.get(pk=request.POST['room_id'])
        date = datetime.strptime(request.POST['date'], '%Y-%m-%d')
        hours = json.loads(request.POST['hours'])
        delta = timedelta(hours=1)

        error = False
        try:
            with transaction.atomic():
                for h in hours:
                    begin = datetime.strptime(h, "%H:%M").time()
                    end = (datetime.combine(dt.today(), begin) + delta).time()
                    reservation = Reservation(user=request.user,
                                              room=room,
                                              date=date,
                                              begin_time=begin,
                                              end_time=end)
                    try:
                        reservation.clean()
                    except ValidationError as e:
                        message = begin.__str__()[:5] + "-" + end.__str__(
                        )[:5] + " is not available"
                        json_data = json.dumps({
                            "HTTPRESPONSE": 0,
                            "ERROR": message
                        })
                        error = True
                        break
                    for t in room.freeterm_set.filter(date=date):
                        if t.begin_time <= begin and t.end_time >= end:
                            break
                    left = FreeTerm(room=room,
                                    date=date,
                                    begin_time=t.begin_time,
                                    end_time=begin)
                    right = FreeTerm(room=room,
                                     date=date,
                                     begin_time=end,
                                     end_time=t.end_time)
                    t.delete()
                    if left.begin_time < left.end_time:
                        left.save()
                    if right.begin_time < right.end_time:
                        right.save()
                    reservation.save()
            if not error:
                json_data = json.dumps({"HTTPRESPONSE": 1})

        except IntegrityError:
            messages.error(request, 'Something went wrong')

    return HttpResponse(json_data, mimetype="application/json")