장비 예약 사이트 만들기4

치즈말랑이·2022년 2월 23일
0

장비예약사이트

목록 보기
4/11

2022-02-22
1. 예약취소 안됨 (해결)
2. 예약하고나서 내예약에 뜰수도있고 안뜰수도있음 -> 오늘날짜 이전 예약은 예약현황에 안뜸 (해결)
3. 예약사이트에서 장비바꾸면 예약현황안뜸 홈화면돌아가서 장비바꾸면 예약현황뜸 (해결)
4. 다른사람이 예약한거 누가했는지 못봄 (미해결) -> 어떻게 하는지는 알겠는데 자바스크립트를 몰라서 변수를못쓰고있음

  1. 예약취소버튼을 누르면 에러가 생긴다 (해결)
def delete(request, reservation_id):
    reservation= get_object_or_404(Reservation, pk= reservation_id) # 특정 객체 가져오기(없으면 404 에러)
    if reservation.user == request.user.username:
        reservation.delete()
    return redirect('/reservation/my')    

이렇게 되어있는거를

def delete(request, reservation_id):
    reservation = get_object_or_404(Reservation, pk=reservation_id)
    if reservation.author == request.user:
        reservation.delete()
    return redirect('/reservation/my')

이렇게바꿨다. 사용자 모델 변수명을 user에서 author로 바꿨었는데, veiws에서는 user로 놔둬서 생긴 에러였다.
그리고 reservation.author와 request.user가 매칭되어야하는데 user.username이 매칭되어서 생긴에러기도하다.

  1. 예약사이트에서 장비바꾸면 예약현황안뜸 홈화면돌아가서 장비바꾸면 예약현황뜸 (해결)
    이건 내 잘못으로 인한 에러이다...
    홈화면에서 들어가면 http://127.0.0.1:8000/reservation/new/Dsc/ 링크로 접속되는데
    예약창에서 장비를 바꾸면 http://127.0.0.1:8000/reservation/new/dsc/ 링크로 이동한다.
    링크 변경해서 고쳤다.

2022-02-23
1. 예약창에서 다른장비로 옮기면 gui도 움직여서 클릭한 장비이름을 가리켜야하는데 가만히있음 -> 색변경하고 버튼 width늘리니까 사라짐 (없어도됨)
2. 지난주 예약기록 볼 수 있게 기능넣어야함 (미해결)
3. 후드와 칠러의 경우 종류가 여러가지라서 예약창이 더필요함 (미해결)
4. 로그인고쳐야함.. (미해결)
5. 중복예약됨 -> ajax 통신이 제대로 안되서 그런건데, TypeError: strptime() argument 1 must be str, not None
에러가 뜬다. -> 변수명 통일안해서 그랬음. 변수명 수정하니 됨 (해결)
6. 예약이 2시간까지만됨 (해결)
7. UTM, 가교기는 chart 작동안함 -> 당일 예약만 차트 작동 (해결)
8. 예약취소하면 내 예약에서는 사라지는데 테이블에서는 안사라짐 (미해결)

  1. 예약 2시간까지만되는거 (해결)
    new.html에서
// finish 시간 세팅
        function finishSet(){
            $('#equip_finish_time').empty();
            var start_time = $('#equip_start_time').val(); // 시작시간 가져오기
            var hour = Math.floor(start_time); // 시 가져오기
            var min = start_time-hour // 분 가져오기
            for(var cnt = 0; cnt<4; cnt++){
                // 시간 늘리기
                min = min+0.5;
                if(min == 1){
                    hour+=1;
                    min=0;
                }

                // 탈출 조건
                if(hour+min == 21.5){
                    break;
                }

                // 출력양식 조절
                if(hour == 9 && min== 0.5){
                    var option = $("<option value="+(hour+min)+">0"+hour+":"+ "30</option>");
                }
                else if(min==0){
                    var option = $("<option value="+(hour+min)+">"+hour+":"+ min + "0</option>");
                }
                else{
                    var option = $("<option value="+(hour+min)+">"+hour+":" +"30</option>");
                }
                $('#equip_finish_time').append(option);


            }

        }

for에 cnt<4로 되어있어서 그런거였다. 오후6시까지 나오게 하기 위해 아래처럼 바꿨다.

// finish 시간 세팅
        function finishSet(){
            $('#equip_finish_time').empty();
            var start_time = $('#equip_start_time').val(); // 시작시간 가져오기
            var hour = Math.floor(start_time); // 시 가져오기
            var min = start_time-hour // 분 가져오기
            for(var cnt = 0; cnt<19; cnt++){
                // 시간 늘리기
                min = min+0.5;
                if(min == 1){
                    hour+=1;
                    min=0;
                }

                // 탈출 조건
                if(hour+min == 18.5){
                    break;
                }

                // 출력양식 조절
                if(hour == 9 && min== 0.5){
                    var option = $("<option value="+(hour+min)+">0"+hour+":"+ "30</option>");
                }
                else if(min==0){
                    var option = $("<option value="+(hour+min)+">"+hour+":"+ min + "0</option>");
                }
                else{
                    var option = $("<option value="+(hour+min)+">"+hour+":" +"30</option>");
                }
                $('#equip_finish_time').append(option);


            }

        }

  1. 중복 예약 문제 (해결)
    중복예약하면 ajax통신을 통해 이미 예약된 시간이라고 떠야하는데 그게 안떴었다. 내가 변수명을 잘못 입력해서 그런거였는데,
    그후에는 예를들어 16:00~16:30 예약이되어있으면 시작시간을 16:30로 했을때 이미 예약된 시간이라고 뜨는 에러가 발생했다.
    시간은 lt, lte, gt, gte로 제어를 하는데 lte와 gte를 없앴더니 정상작동한다.
def check(request):
    equipment_type_vr = request.POST.get('equipment_type', None)
    equipment_date_vr = request.POST.get('equipment_date', None)  # ajax 통신으로 template에서 POST방식으로 전달
    equip_start_time_vr = request.POST.get('equip_start_time', None)
    equip_finish_time_vr = request.POST.get('equip_finish_time', None)

    reservations = Reservation.objects.all()
    reserve_date = datetime.strptime(equipment_date_vr, "%Y-%m-%d ").date()
    check_error = 0 # 정상

    # 겹치는 시간 있는지 체크
    message = "이미 예약된 시간입니다."

    # 고쳐봐야겠음 왜 if로 하지 ?
    # <1> 오른쪽 겹치기
    # start 시간보다 크고 finish 시간보다 작다
    if reservations.filter(equipment_type=equipment_type_vr, equipment_date=reserve_date, equip_finish_time__gt=equip_start_time_vr, equip_start_time__lt=equip_finish_time_vr).count() != 0:
        check_error = 1
        context = {
            "message":message,
            'check_error':check_error
        }
        return HttpResponse(json.dumps(context), content_type="application/json")
    # <2> 사이 들어가기
    # start 시간보다 작거나 같고 finish 시간보다 크거나 같다
    # if reservations.filter(equipment_type=equipment_type_vr, equipment_date=reserve_date, equip_finish_time__lte=equip_start_time_vr, equip_start_time__gte=equip_finish_time_vr).count() != 0:
    #     check_error = 1
    #     context = {
    #         "message":message,
    #         'check_error':check_error
    #     }
    #     return HttpResponse(json.dumps(context), content_type="application/json")
    # <3> 오른쪽 포개지기
    # start 시간보다 작고 finish 시간보다 크다
    if reservations.filter(equipment_type=equipment_type_vr, equipment_date=reserve_date, equip_finish_time__lt=equip_finish_time_vr, equip_start_time__gt=equip_start_time_vr).count() != 0:
        check_error = 1
        context = {
            "message":message,
            'check_error':check_error
        }
        return HttpResponse(json.dumps(context), content_type="application/json")
    # <4> 밖에 감싸기
    # start 시간보다 크거나 같고 finish 시간보다 작거나 같다
    # if reservations.filter(equipment_type=equipment_type_vr, equipment_date=reserve_date, equip_finish_time__gte=equip_start_time_vr, equip_start_time__lte=equip_finish_time_vr).count() != 0:
    #     check_error = 1
    #     context = {
    #         "message":message,
    #         'check_error':check_error
    #     }
    #     return HttpResponse(json.dumps(context), content_type="application/json")
    # <5> 가능
    context = {
        'message':message,
        'check_error':check_error
    }
    return HttpResponse(json.dumps(context), content_type="application/json")
profile
공부일기

0개의 댓글