공부한 것 꼭꼭 씹어먹기

[앱시트 AppSheet] 휴가 관리 어플 - 3. 기능 구현하기_01 본문

노코딩으로 문제 해결하기/AppSheet - 앱시트

[앱시트 AppSheet] 휴가 관리 어플 - 3. 기능 구현하기_01

젤라솜 2022. 8. 17. 16:29
반응형

 

기능 구현하기

 

 

휴가관리어플의 기능을 만들어 보겠습니다.

 

주요 기능으로는,

  1. 휴가 신청할 때 휴가 시작일이 휴가 종료일보다 늦으면 신청할 수 없다
  2. 휴가 신청할 때 신청한 휴가의 일수가 남은 휴가 일수보다 크면 신청할 수 없다.
  3. Upcoming 화면에는 지난 일정은 안보이고 앞으로의 휴가 일정만 보고 싶다.
  4. 휴가 수정은 신청자 본인이 '승인 대기' 상태의 휴가만 할 수 있다.
  5. 휴가 신청할 때 진행 상태를 '승인 대기' 외에는 선택하지 못하게 하고 싶다.
  6. 승인대기 상태의 휴가가 승인으로 update될 경우 총 휴가에서 사용한 휴가를 뺀 값을 남은 휴가 컬럼에 update한다.

 

 

✨ 1 & 2

우선 1번, 2번 두 가지 기능을 한 번에 만들어 보겠습니다.

휴가 시작일이 휴가 종료일보다 늦으면 신청할 수 없고, 신청한 휴가의 일수가 남은 휴가 일수보다 크면 신청할 수 없게 만들어 보겠습니다.

 

왼쪽 Data 메뉴 > Columns 탭 > leave 테이블에서  [휴가 종료일] 컬럼 edit버튼(✏️)을 클릭합니다.

Data validity 밑에 valid if에 다음 수식을 작성해줍니다.

 

AND([휴가 종료일] >= [휴가 시작일], [신청자].[남은 휴가] >= DAY([휴가 종료일])-DAY([휴가 시작일])+1) 

 

콤마로 분리된 두 가지 조건이 모두 참이어야 할 때 AND() 함수를 씁니다.

휴가 종료일이 휴가 시작일보다 같거나 커야하고, 해당 신청자의 남은 휴가 일수가 신청한 일수보다 같거나 커야합니다.

Date 타입인 날짜의 일수 계산은 DAY()를 활용하면 됩니다.

 

valid-if에-휴가종료일의-조건을-써줍니다
valid-if에-휴가종료일의-조건을-써줍니다

 

Invalid value error에는 에러 메시지를 작성해 줍니다.

 

박포도 사원의 휴가는 2일 남았는데요,

남은 휴가인 2일보다 더 많은 휴가를 신청하거나 더 빠른 일자로 휴가를 신청하면 에러 메시지가 나오는 것을 볼 수 있습니다.

박포도사원의-남은휴가는-2일입니다
박포도사원의-남은휴가는-2일입니다
박포도사원이-2일보다-많은-휴가를-쓰려고하면-에러가-납니다
박포도사원이-2일보다-많은-휴가를-쓰려고하면-에러가-납니다

 

휴가종료일이-휴가시작일보다-빠를때도-에러가-납니다
휴가종료일이-휴가시작일보다-빠를때도-에러가-납니다

 

 

 

3

이제 3번 Upcoming 화면에 지난 일정은 안보이고 앞으로의 휴가 일정만 보이게 만들겠습니다.

여기서 앞으로의 휴가 일정이란, [휴가 종료일]이 오늘 이후인 휴가들을 말합니다.

현재 Upcoming 화면은 leave 테이블의 내용을 그대로 보여주고 있는데요, 테이블에서 필요한 내용만 잘라서 가져오는 기능이 있습니다.

Data 메뉴에 보면 Slices라는 탭이 있습니다.

여기에서 새로운 슬라이스를 만들고 '최신 휴가 일정'이라고 이름을 지어줬습니다. 

Source Table은 leave를 선택하고, Row filter condition에  [휴가 종료일] >= TODAY() 수식을 걸어줍니다.

최신휴가일정에-row-filter-condition을-줍니다
최신휴가일정에-row-filter-condition을-줍니다

 

그리고 UX > Views에 가서 Upcoming 뷰에 For this data 부분을 leave가 아닌 방금 만든 '최신 휴가일정(slice)'로 변경해 줍니다.

(저는 하는김에 Group by 부분도 '신청자'가 아닌 '진행 상태'로 바꿨습니다.)

 

최신휴가일정-slice로-교체
최신휴가일정-slice로-교체

 

 

 

✨ 4

휴가 신청할 때 진행 상태를 '승인 대기' 외에는 선택하지 못하게 해보겠습니다.

간단하게 Data > Columns에서 진행 상태 컬럼의 EDITABLE?  체크 해제하면 됩니다.

editable을 체크 해제하면 관리자도 진행상태를 업데이트 하지 못하게 됩니다.

업데이트 자체를 원천적으로 막기 보다는 관리자인 사람에게만 진행상태 컬럼이 보이는 걸로 바꾸겠습니다.

leave 테이블의 [진행 상태]컬럼 편집을 열면 Show? 항목이 있습니다. 이 컬럼을 보여주고 싶은 조건을 써주면 됩니다.

여기에 다음과 같은 수식을 입력합니다. 

 

IN(USEREMAIL(), FILTER("member", [권한]="관리자"))

 

member 테이블에서 권한 컬럼의 값이 관리자인 row들 중에 useremail, 즉 지금 로그인한 사용자가 있으면 true를 반환합니다. 

관리자가 로그인했을 경우 show 해주고, 관리자가 아닌 사람이 로그인했을 경우 보여주지 않습니다.

관리자가-로그인했을때만-보여주기
관리자가-로그인했을때만-보여주기

 

 

✨ 5 

다음으로 휴가 수정은 신청자 본인이 '승인 대기' 상태의 휴가만 할 수 있도록 만들건데요.

왼쪽 메뉴 중 Behavior에서 Actions탭을 보면 leave 테이블에 Add, Delete, Edit등의 블럭이 있습니다.

Edit을 펼쳐서 Only if this conditions is true에 아래 수식을 써줍니다.

 

AND(USEREMAIL() = [신청자].[이메일], [진행 상태] = '승인 대기')

 

신청자의 이메일이 지금 로그인한 사람(USEREMAIL())이고 진행상태가 승인 대기 일때만 Edit이 가능하게 됩니다.

휴가수정은-본인의-승인대기-상태의-휴가만-가능하게
휴가수정은-본인의-승인대기-상태의-휴가만-가능하게

 

 

 

마지막으로 6번 항목이 남았네요!

사실 이 기능이 제일 중요한 기능인데 마지막에 하게 되었습니다..

이건 다음 포스팅에서 해보도록 할게요! 👉

반응형
Comments