공부한 것 꼭꼭 씹어먹기

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

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

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

젤라솜 2022. 8. 23. 15:44
반응형

 

이어서 대망의 6번 항목을 만들어 보겠습니다.

 

 

관리자 메뉴를 따로 만들어서 현재 로그인한 관리자가 관리하는 직원들의 휴가 내역만 보여주게 할 건데요,

우선 관리자 화면에 표출할 슬라이스를 만들겠습니다.

'휴가 관리'라는 이름을 지어주고 source table은 당연히 leave 입니다.

Row filter condition에는 다음과 같은 수식을 써줍니다.

 

IN([신청자], FILTER("member", [직속 팀장] = USEREMAIL()))

 

member 테이블에서 직속 팀장 아이디가 현재 로그인한 유저의 아이디와 같은 row들만 필터링한 데이터 중에 이메일이 leave 테이블의 신청자와 같은 것이 있으면 true를 반환합니다.

Update mode는 Add와 Delete 체크를 해제하여 오직 수정만 할 수 있게 하겠습니다.

row-filter-condition-설정
row-filter-condition-설정

 

 

 

그러면 이제 관리자 화면을 만들어야겠죠!

view 메뉴에서 새로운 뷰를 만들고 '관리자'라고 이름 지었습니다.

방금 만든 슬라이스를 data로 선택하구요, [진행 상태]로 group by 해줍니다. 

그러면 관리자 화면에 승인 대기 상태인 휴가들끼리, 승인 상태인 휴가들끼리 묶여서 표출됩니다.

관리자화면-만들기
관리자화면-만들기

 

 

 

 

데이터와 화면을 만들었으니 이제 기능을 만들어야겠습니다.

우선 관리자 화면에서 한 row를 클릭했을때 진행 상태를 업데이트 하도록 만들게요.

 

휴가 관리_Detail 뷰에서 Quick Edit Column에 진행 상태를 추가합니다.

그러면 아래 화면처럼 진행 상태만 업데이트 할 수 있도록 변경되는 것을 볼 수 있습니다.

실제로 진행상태를 승인 대기 눌렀다 승인 눌렀다 하면 스프레드 시트에도 바로 업데이트가 됩니다.

quick-edit-column-설정
quick-edit-column-설정

 

 

 

 

승인 대기를 승인으로 바꿨을때 남은 휴가 일수 계산해서 업데이트하는 로직을 쪼개보면 다음과 같은데요.

 

1. 관리자가 '승인'을 누르면 leave 테이블의 [진행 상태] 컬럼의 값이 '승인'으로 업데이트 된다.

2. leave 테이블의 [상태 변경일] 컬럼의 값이 TODAY()로 변경된다.

3. leave 테이블의 [휴가 시작일], [휴가 종료일] 컬럼의 값을 이용하여 신청한 휴가 일 수를 구한다.

4. member 테이블의 [사용한 휴가] 컬럼에 2번에서 구한 값을 업데이트 한다.

5. member 테이블의 [사용한 휴가] 컬럼이 업데이트 되면 [총 휴가] - [사용한 휴가]의 값을 [남은 휴가] 컬럼에 업데이트 한다. 

 

 

위에서 휴가관리_Detail 뷰의 EDIT 설정을 통해 1번은 해결했습니다.

leave 테이블의 [상태 변경일] 컬럼에 다음과 같은 formula를 적용해 줍니다.

 

IF(NOT([진행 상태] = "승인 대기"), TODAY(), [신청일])

 

[진행 상태] 컬럼의 값이 '승인 대기'가 아닐 때는 오늘 날짜를, '승인 대기'일 때는 신청일을 그대로 적용합니다.

(사실, 엄밀히 말하면 진정한 의미의 상태 변경일이 적용되는 건 아닙니다... 승인 대기를 승인으로 바꿨다가 다시 승인 대기나 반려로 바꿀 수도 있기 때문이죠.. 자동화 봇으로 할 수도 있지만 이번엔 그냥 이렇게 하겠습니다.)

 

상태변경일-컬럼에-조건달기
상태변경일-컬럼에-조건달기

 

 

 

3번 항목을 위해 [휴가 일수]라는 컬럼을 새로 만들었습니다.

앱시트에서 만들지 않고 스프레드 시트에 직접 만들었어요! 

삽질을 조금 했는데, 결국 이 방법이 더 간단하더라구요~

 

스프레드시트에-휴가일수-컬럼을-만듭니다
스프레드시트에-휴가일수-컬럼을-만듭니다

 

leave 테이블에 [휴가 일수] 컬럼을 만들고

=if(H2="승인", E2-D2+1, 0)

이라는 함수를 써줬는데요.

H2 cell(진행 상태 컬럼의 값)이 "승인"이면 E2-D2+1(휴가 종료일-휴가 시작일+1)을 휴가 일수 셀에 적용하라는 뜻입니다.

 

 

이제 이렇게 구한 휴가 일수를 member 테이블의 [사용한 휴가] 컬럼에 적용하고 [남은 휴가] 값도 계산하면 되겠죠!

member테이블-사용한휴가-컬럼
member테이블-사용한휴가-컬럼

 

[사용한 휴가] 셀에 다음 함수를 적용해 줍니다.

=SUMIF(leave!B:B, A2, leave!J:J)

leave 테이블의 B 컬럼(신청자)에 member 테이블의 A2(이메일)을 찾아서 일치하면 leave 테이블의 J열(휴가 일수)를 더하라는 뜻입니다.

그리고 물론, [남은 휴가] 셀에는 [총 휴가]-[사용한 휴가] 수식을 적용하면 됩니다.

 

 

 

이제 다시 앱시트로 와서 Data 메뉴의 Columns 탭에서 각 테이블을 열고 Regenerate Structure를 클릭합니다.

regenerate-structure를-통해-데이터-연동
regenerate-structure를-통해-데이터-연동

 

그러면 leave 테이블에 새로 만든 [휴가 일수] 컬럼이 생긴 걸 볼 수 있습니다.

테스트 결과 다 잘되는데 관리자가 '승인 대기'를 '승인'으로 업데이트 할때 신청자 컬럼이 현재 로그인한 관리자로 자꾸 바뀌는 겁니다..

이것은 leave 테이블의 [신청자] 컬럼의 FORMULA에 USEREMAIL()이 있었기 때문입니다.

이것만 지워주면 관리자 이메일로 바뀌지 않고 잘 되네요! 😌

 

마지막으로!!

관리자가 로그인 했을때만 관리자 메뉴를 보이게 해보겠습니다.

 

show-if에-관리자만-볼수있는-권한을-줍니다
show-if에-관리자만-볼수있는-권한을-줍니다

 

관리자 view 편집 화면에서 Display쪽에 보면 Show if 항목이 있습니다.

LOOKUP(USEREMAIL(), "member", "이메일", "권한") = "관리자"

이 수식을 걸어주면 현재 로그인한 사람의 이메일로 권한을 찾아서 그것이 '관리자'이면 보여주게 됩니다.

 

 

이번 포스팅은 좀 삽질을 많이 했네요... 퓨...

특히 휴가 일 수를 계산해서 사용한 휴가에 적용하는 부분을 앱시트 내에서 처리하려고 하다가 잘 안되서 벽에 부딪혔는데

코딩하는 약사님의 블로그에서 스프레드시트에 건 수식도 앱시트에 적용이 된다는 것을 알게 되었습니다.

 

 

자세히 잘 설명해 주셔서 감사합니다 :)

https://blog.naver.com/eye_mong85/222405957752

 

반응형
Comments