erp 도전

상품 복사 구현 1)js전체선택, 폼 인풋 리스트 가져오기, 날짜(듀프,요일 체크)

나도초딩 2023. 5. 1.

일정표 공유 기능에 이어서, 상품 복사 기능을 구현하기로 했다.

사실 이게 여행 ERP 의 핵심일 것이다.

 

1/1 3박5일 다낭 상품을 앞으로 1년 동안 복사한다.

근데, 이 상품은 주 2회 매주 목, 일만 운항한다. 요런 식이다.

목요일은 3박5일, 일요일은 4박6일이라면,

 

1. 목요일, 일요일 대표 상품을 만든다.

2. 복사할 원본상품을 클릭해서, 지정한 기간 동안 상품을 반복한다. ( --> 반복할 요일 input 받아서, list 로 만들기 )

3. 이미 해당날짜에 같은 상품이 있을 경우 처리. ( --> 기 등록된 날짜 list 로 만들기)

- 덮어쓸지? (지우고, 생성)

- 통과할지

 

그렇게 복잡한 로직은 아닌데, 이게 장고로 하니까 상당히 복잡하고, 뇌에 마비가 자주 왔다. ㅠㅠ

대표 일정 복사 클릭

1. 요일 체크

  • - 템플릿에서는 인풋박스 name="yoil" 을 같은 값으로 주고,
<input class="form-check-input" type="checkbox" value="0" id="yoil_0" name="yoil">
  •  - 장고 뷰에서 Post.getlist('yoil') 로 리스트로 받는다. 
    yoil = ["0","1","2",.....] 식으로 문자열 리스트가 만들어진다.
yoil = request.POST.getlist('yoil')

 

** 지정한 날짜가 체크한 요일에 해당하는지 검사

if str(target_date.weekday()) in yoil:

yoil 리스트에 문자열로 저장돼있기 때문에, 요소 검사시, str()로 변환 후, 검사해야 한다.

 

1-1 자바스크립트 전체 체크

자바스크립트를 잘 못해서 -_- 그냥 복붙으로만 썼었는데, 안먹히는 것도 많았고, 파이썬과 같이 쓰려하니, 고려할 것들이 있었다.

대표적으로 js 로 클래스 선택시, 

머 하튼, 오래되고, 잘못된 전체선택 코드, j쿼리 코드 ... 중복 쩌는 희한한 코드 등이 많이 있었다. 뭐 나도 복붙해서 썼었으니깐. ㅋㅋㅋ

이건 아주 살짝 바꿨다. -_-; 

뭔가 코드를 더 간소하게 만들 수도 있을 것 같은데, forEach ? 흠

** 요일 자체를 리스트에서 보내면, html 을 반복문으로 간소화시킬 수 있겠다... 이게 핵심이였다. 나중에 해봐야짐

yoil_list = [0,1,2,3,4,5,6] 을 템플릿으로 보내서, {% for y in yoil_list %} 뭐 요런 식으로 하면, inpubox 7개 복붙하는걸 줄일 수 있지 않나 싶은데... 해야되나? 디자인 변경할 때, 아무래도 유리하게띠?

    function checkAll(){
        const all = document.getElementById('all')
        const yoil =document.getElementsByName('yoil')
        if(all.checked == true){
            for(i=0; i<yoil.length ;i++){
            yoil[i].checked = true;
            }
        } else if(all.checked == false) {
            for(i=0; i<yoil.length;i++){
            yoil[i].checked = false;
            }
        }
        return;
    }

2.  복사하려는 날짜에 이미 상품이 있는지 체크

이 부분이 좀 어렵고 복잡한 요소가 있었는데, 아호 지난 주에 개고생 했던 것들이 조합이 돼서 쉽게 해결됐다.

-_-;; 아후 끔띡해

dupe_item = TourItem.objects.annotate(code=Concat('basiccode_fk__name', 'air_code','suffix_code')).filter(code=origin.item_code)
 
dupe_list = [item.d_date1 for item in dupe_item]
 
for i in range((end-start).days+1):
target_date = start+timedelta(days=i)
 
if target_date in dupe_list:

3. 모델 변경 필요

모델에 치명적인 에러가 있다는 것을 알게됐다.

뒤집어야 하는구먼 -_-;;;

출발일만 필드에 넣고, 매개변수 값을 필드에 등록해서 출도착일을 뽑아주는 방식으로 생각했는데, 삽질이였어...

 

출,도착일, 시간등을 최초에 모두 집어넣고,

계산을 위한 매개변수는 모델의 메서드로 처리했어야 했다. 에혀... 끄응.... 이런게 경험이게띠. 뭐 좋은 경험했다.

계산해서 키인하는 멍청한 짓을 생각했다니. ㅠㅠ

다 뒤집어야하는구먼. ㅠㅠ 

 

4. 중간 점검

이제 전체 로직을 구현함에 있어서 특별히 풀지 못하는 문제는 없는 것 같다.

허접한 코딩일지라도 스스로 생각해서 풀어낸거니, 다 할 수 있을거다.

 

여러 조건으로 조회할 수 있고,

조회한 레코드를 체크박스 등으로 전송 받은 후,

데이터를 조작하는 법을 모두 수행해봤다. ( 검사 후, 일괄 복사 , 생성 등 )

수정이나 삭제 는 같은 맥락이니 문제될건 없겠고...

 

5. To Do

이제 가장 싫은 폼 디자인 구현을 익혀야겠다. 이것도 날잡고 딱 해야지. 끙. 시간을 정해서 딱 끝내자.

 

대충 훑어만 봐서, 쓰지도 못하지만 매우 흥미 진진했던 자바스크립트도 빠짝 공부하고 싶고,

장고는 다른 실전 예제들 소스 파악, 내껄로 만들기

장고는 머리에 떠오르면 바로 코딩할 수 있도록, 연습이 더 필요하겠다.

 

여행 ERP 로 

  • 블록 공유 시스템, 좌석 - 3일
  • 판매가 및 일괄 정보 수정 시스템. 3일
  • 고객 관리 :: 글쎄?? 1주일?
  • 정산 시스템 ::: 1주일 ??? 혹은 그 이상?

아직 B2C 화면, 판매 시스템을 고려한 것은 아니니까, 아마 이 정도 걸릴꺼고,

B2C 로 구성한다면, 일정표에 들어가는 호텔, 관광지 등 컨텐츠를 등록 수정하는 시스템을 구현해야할 거다.

더 문제는 내가 프론트는 공부를 안해서, 극히 취약하다는 거다.

뭐 뼈대만 만든다면 그리 오래 걸리진 않을꺼다.

 

모 어찌됐건, 스스로 ERP 를 만들 수 있다는 .. 뿌듯함.

 

고도화보다는 , 효율성을 찾아서 , 크롤링이나 프론트 학습에 더 투자하고자 한다.

 

* 뱀발

장고.... 학습 커브가 너무 높다.

 

하...

함수뷰로만 구현이 다 된다지만, 소스들이 클래스뷰들이 많아서 함수뷰만 결코 고집할 수 없고,

클래스뷰를 사용하려하면, 필수적으로 함수뷰는 기본빵 빠삭해야하고,

게다가 같은 동작을 구현하기 위해, 갖가기 뷰들의 로직을 다 알고 있어야 한다.

결국 다 알아야 한다는 말.

장고만을 위해 알아야할게 너무 많다는 치명적인 문제...

 

이건 ... 하...증말.

머라해야 되나.

 

웹을 위해서는 노드js 나 php 가 훨씬 간편하겠다.

php 는 쓰는 사람이 계속 줄어들고 있지만, 그누보드, 워드프레스 뿐 아니라, 어마어마한 프리소스들이 많고...

노드 js 는 자바스크립트와 함께 간편 깔끔 그 자체고.

 

장고는 이거 뭐라 해야 되나.... 아휴...........

댓글