변경 로그
무슨 일이야?
플랫폼에 대한 모든 개선 사항, 그것이 선적.
· SecurityService
Payroll 공급자 체제를 위한 허가 경계
릴레이 새로운 *********** 표면 및 강제 내 계정 TimecardService는 엔진과 세션을 보유합니다. 이것은 세션 및 결정. SecurityService는 anyRequest().permitAll()를 실행합니다. 손전등 per-handler auth, 그래서 그것의 경비원을 잊는 핸들은 약하게 아니다 제어 - 그것은 통제되지 않고 공공 인터넷에서 도달 할 수 있습니다. 기존의 /api/security/payroll 접두사 아래 지도: kamo-internal catch-all BFF 노선을 통해 도달하고, 새로운 접두사는 404에 모든 서비스는 건강하고 모든 빌드는 녹색입니다. 4개의 층: - MANAGE PAYROLL PROVIDER (199)는 자격 증명을 작성하고 연결하거나 차단합니다. 오아우트 이것은 조직의 시간을 결정하는 능력입니다. 전송, 왜 그것은 그것의 자신의 권리입니다. - MANAGE HRS SETTINGS (45)는 연결과 건강을 읽습니다. - MANAGE TIMECARDS (183)는 직원 매핑 및 동기화 기록을 포함합니다. - FINALIZE PAY PERIODS (198)는 주어진 배치를 전달합니다 - 동일한 층을 것과 같이 같은 행위이기 때문에 수출을 투입. 테스트 연결은 읽는 것 보다는 오히려 쓰기로 앉습니다: 그것은 입니다 저장한 credentials로 만든 아웃바운드 호출, 누구든지 볼 수 있는 시켰습니다 페이지는 org의 payroll 납품업자를 조사하는 방법을 그립니다. OAuth 교환은 org id를 전달하지 않습니다. TimecardService 는 HMAC 서명된 상태이므로, 1개의 임차인이 적을 수 없습니다. 모두에서 오른쪽을 붙인 콜러에 의해 다른 사람에 대하여. TimecardServiceClient에 put/delete를 추가합니다.
· kamo-shared-library
Timecard 엔진 뒤에 payroll-provider 도메인
조직의 timecards를 연결하는 persistence spine 추가 타사 급여 시스템 : 연결 및 암호화 된 per-org 구성, OAuth 교부금, 구성원 - 직원 링크, 수입 코드 맵, 그리고 두 개의 append-only 레코드(dispatch attempts and sync issues)를 만드는 sync는 나중에 설명할 수 있습니다. Kept 내부 com.kamo.z.shared.hr.timecard 오히려 새로운 패키지에 목적: 새로운 shared-lib 패키지는 3개의 별도의 명시된 대로 추가되어야 합니다. @EnableJpaRepositories 목록 및 서비스 컨텍스트를 omitting - 또는, KamoInitializer에서, 여전히 BUILD SUCCESS를보고하면서 실행을 낙관합니다. 모양에 주: - PayrollProviderType은 토큰 어휘를 이미 문서화합니다. ****** ********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** (ADP WFN, PAYCHEX, GUSTO, ...). 두 번째 같은 공급 업체의 맞춤법은 오류없이 수출 기록을 분할 할 것입니다. 어디로. ADP RUN 및 QUICKBOOKS는 payroll 수출 스크린 때문에 지켜집니다 배송되기 때문에 그들은 제공, 그래서 라이브 행을 수행 할 수 있습니다. - 직원 링크는 연결이 아닌 공급자에 의해 키워, 그래서 전환 공급자와 엇바꾸기는 다시 맵핑 일을 던지지 않습니다. 사이트맵 독특한 제약 : 두 개의 링크를 들고 회원을 중지, 다른 중지 두 명의 회원은 한 명의 공급자 직원을 주장합니다. 즉, 이중 지불을 방지합니다. - PayrollDispatch 및 PayrollSyncIsssue는 WORM입니다. payroll 전송 시도는 돈 사건입니다; "우리는 그것을 보냈습니다, 그때 우리는 그것을 다시 보냈습니다"는 사실입니다 reconciliation 필요. - Credentials는 1개의 암호화된 config json blob에서 열 보다는 오히려 살 필드, 그래서 공급 업체를 추가하는 것은 모든 서비스를 다시 팔하는 스키마 변화가 아니다. RoleRightType은 MANAGE PAYROLL PROVIDER (199)를 획득합니다. 레거시 MANAGE PAYROLL (40), 오늘 아무것도 문지르고 이미 개최 회원의 알 수없는 번호; 그것을 재사용하는 것은 제 3 자 급여 출하된 부트에 모든 비율 보기 오른쪽 홀더에 credentials. PlatformOAuthProviderType은 Kamo가 1개를 보유하고 있는 7개의 급여 공급업체를 얻습니다. 파트너 등록 (ids 11-17). Dayforce, Workday 및 UKG 발행 자격 고객 및 deliberately에 의하여 상수하지 않습니다: 플랫폼 스크린은 만듭니다 각 상수에 대한 카드, 그래서 그들에 대 한 하나 양식을 할 수 없었다 로그인 또한 BillingDelegationModeTest에서 stale assertion을 수정합니다. 9487을 REQUIRES APPROVAL 을 정의하여 그룹을 허용한다. 승인 경로 제한) 하지만 테스트는 오래된 행동을 주장, 그래서 이 스위트는 이후 빨간색이었습니다. 이 푸시 전에 Yugabyte에 적용 및 검증 된 Schema.
· kamo-internal
"지금"의 벽과 취소 펀치를 설명하는 카드
아무도 아직 작동하지 않는 시간을 기록 할 수 없습니다. 가장자리를 파괴, 슬라이딩 전체적인 경간, 화살표 키, 자석, 마우스 오른쪽 블록 및 수동은 오늘 행에 현재 분에 모든 중지를 추가, 그리고 미래의 날은 전혀 없습니다. 오늘의 일부가 일어나지 않았다 모자를 씌우기 때문에 "당신은 여기에 알약을 드래그 할 수 없습니다" 누군가가 볼 수있는 통제, 규칙으로 아닙니다. 서버는 이미 펀치 삽입을 거부하거나 지금 수정했습니다. 왜 클라이언트가 이것을 필요로 하는지 정확히: 벽 없이 끌기 성공, pill sat 거기 보고 단계, 전체 저장 실패 에 끝 와 펀치에 대한 메시지 회원이 찾을 수 없습니다. 자석은 동일한 벽을 가져옵니다. 잘못된 장치로 미래에 펀치 시계는 합법적 인 스냅 대상이었으므로 가장자리가 앞으로 끌어올릴 수 있습니다. 저장을 거부 할 땅. 그리고 체크 카드는 지금 펀치 CANCELS가 1 전에 그것을 밖으로 OUT 때 열립니다, TimecardService가 아침을 시작으로 어떤 역전을 위해 분. 그 회원이 버튼을 누르지 않고, 상태 스냅을 다시 볼 수 있습니다. 그것이 시작된 곳에, 그리고 reasonably 결론 단추는 부서집니다. 내 계정 카드는 피커와 행동 복사를 떨어뜨리고, 한 문장을 보여줍니다. 그리고 하나의 버튼, 그리고 backdrop에 해고 중지 — stray click that so 자주 확인은 무슨 일이 있었는지의 유일한 설명을 닫아야한다.
· kamo-internal
지원 및 소셜 창 회원 채팅 작곡가
지원 티켓 및 소셜 DM은 회원 채팅과 같은 것입니다 — a 메시지가있는 미디어 세션 - 그러나 그들은 베어를 통해 응답했다 텍스트 필드. 에이전트는 고객에 의해 스크린 샷을 전송 할 수 없으며 방법이 없었다. 한 번에 보내기 : 첨부 버튼 없음, 드래그 드롭 없음, 페이스트 없음, 이모티콘 없음, 1개의 선을 지나지 않을 것입니다. 이제 둘 다 회원 채팅의 Composer, 그래서 업로드 기계, 쟁반 부착, 이동 패널, emoji 피커 및 Enter-to-send는 입니다 모든 3에 걸쳐 하나의 구현. 수신 및 전송된 첨부 파일 렌더링 같은 AttachmentChip을 통해 거품. 두 가지 탭 지원 창이 열립니다 : - Drafts는 대화 당 주차됩니다 (useDraftParking). 한 작곡가 봉사 몇몇 표 및 누구든지에 포스트는 스크린에, 이렇게 초안 왼쪽에 있습니다 상자에는 다른 것을 목표로 한 고객의 단어입니다. 전송 후 삭제 키가 시작된 후, 또는 전환 탭 중간 기쁨을 닦아 다른 사람에게 입력되는 대답. - 스테이지 첨부파일은 세션당도 개최됩니다. 편평한 명부는 1개의 고객의 뒀습니다 다른 트레이에 파일이 업로드; uploadAll 지금 주소 파일에 대해 단계적으로, 어떤 탭을 볼 때 토지. Social replies는 10 MB의 1개의 파일에서 모자를 씌웁니다: 메시지는 단 하나를 나릅니다 MediaObjSocialRef, 그래서 두 번째 첨부 파일을 저장하고 릴레이 할 수, 10 MB는 우리가 통해 보내는 가장 단단한 공급자 천장입니다. 그것에 혼란 작곡가는 그것을 조용히 잃습니다. 실패한 전송은 이제 실패한 업로드에서 별도로보고 - 파일은 위로, 메시지가 아니고, 초안은 여전히 다시 시도 할 수 있습니다.
· kamo-internal
스피드 다이얼은 org의 부서 확장을 나열합니다
탭은 6 개의 발명 된 항목을 배송 - 1001에 판매 팀, 회의실 영구적으로 링 - 그래서 다이얼링 하나가 그 대답에 무슨 일이 있었는지 도달 확장 및 BLF 배지를보고 된 존재는 구독되지 않았습니다. 이제 /api/security/departments를 읽고 org의 모든 부서를 나열합니다. 제목에 의해 정렬 된 확장, 외부 번호 underneath 때 1 세트입니다. 적재, 비어 있는 retryable-error 국가는 타일을 대체합니다 비어있지 않을 수 있었습니다. GET은 org-scoped이며 권리가 없으며 불 한 번만 탭이 오픈되었습니다.
· kamo-internal
Widen 채팅, 소셜, ai-chat 및 지원 크기에 창 구성
지원 티켓 창은 회원 채팅, 소셜 채팅, AI 채팅 동안 460px에서 열립니다. 360-420의 이메일 작곡가. 같은 도크, 같은 종류의 내용 — 그들은 이제 지원 창의 460px 기본을 공유합니다 (그리고 420px 바닥 재시동할 수 있습니다. ones), 그래서 층계 단계 대신 열린 공구 창의 행.
· kamo-internal
모든 queue 행에 메시지가 표시되지 않습니다
배지와 행 틴트는 이미 여기에 있었다 - 그들은 단순히 결코 포화되지 않았다 목록의 대부분. getUnreadFor 읽기 만 살고있는 per-session 읽지 않은 맵, 시청자의 자신의 회원 행에서 파생되는 티켓이므로 결합은 결코 점화할 수 있었습니다. 이 queue에 그것의 대부분, 그리고 지정되지 않은 티켓 아무도 픽업은 대부분과 행 모두 플래그가 필요합니다. 이제 라이브 맵을 선호합니다. 즉, 뷰어 대화에 대한 권한이 있습니다. STOMP에 대한 업데이트는 그들이 읽고 또는 응답 땅, 가을 서버의 per-ticket 카운트로 다시 다른 모든 것을 찾습니다. 2는 할 수 없습니다 합병 : 여전히 읽지 않은 세션 만 라이브 맵 메시지, 그래서 "두 번째 전에 읽기"와 "never counted"는 indistinguishable입니다 그것은 —이 방문 중 열린 대화의 작은 세트, 이는 유지 회원은 현재 다음 재부팅까지 lit 숙박에서 읽습니다. 지원 종료 카운트가 이동할 때 목록을 다시 읽습니다. 에 대 한 시청자가 참여하지 않았습니다. 이제까지 라이브 채널이 없습니다. snapshot 수정 - 읽지 않은 주제는 세션에서 사람들에게만 도달합니다. queue는 nobody이고, pendingCount는 도달하는 1개의 신호입니다 org의 모든 지원 가능한 회원.
· MediaService
Stamp unseen counts on the ticket list, 과 유지 큐 라이브
getTickets now bulk-loads the unseen-message count per row for the caller, 게다가 방문자는 이미 그 방법을로드, 그리고 getTicketDetail 자신의 이해 독자의 markAsRead 땅의 앞에 — 그래서 창은 무슨 도착한지 보여줄 수 있습니다 그들은 이미 영을 열 수보다 오히려 멀리 있었다. 또한 queue stale 왼쪽 신호 간격을 닫습니다. 지원되는 메시지 대화는 org의 모든 지원 가능한 회원을위한 큐를 이동, 아니 그 세션의 사람들 - 이는 불행히도 주제는 도달하지 않습니다. 방송은 이미 불을 때 공개 채팅 방문자가 보낸 경우 에이전트가 읽을 때; 회원은 응답에서 앱 내부는 구멍이었다, 그래서 앱 지원 대화는 얻을 수 어떤 에이전트의 화면을 다시보고하지 않고 메시지. SupportUnseenCountSqlTest는 쿼리의 모양을 핀으로 합니다. 모든 항목은 load-bearing and nothing of them is 눈에 띄는 전달 빌드 : 한 잘못하고 queue는 여전히 렌더링, 그냥 조용히 거짓하는 계산.
· kamo-shared-library
대화를 하지 않는 뷰어의 메시지 카운트
Unread는 시청자의 자신의 MediaSessionMember 행에서 항상 파생되었습니다, 그래서 그들이 참여하지 않은 대화는 전혀 계산되지 않았습니다. 지원 큐에 그 중 대부분은 — 27 의 37 라이브 티켓은 할당되지 않습니다, 그리고 26 의 그 한 세션 멤버가 여러분의 도움을 요청하신 분 그대는 가장 많이 필요로하는 행을 정확하게 결정하고, 그들은 그 일이었다 구조적으로 플래그를 수행 할 수 없었다 : 아무도 그들에 합류했다, 그래서 거기 없었다 독자가 읽을 수 있습니다. countUnseenBySessionForViewer는 queue가 대신 묻습니다. 더 보기 회원 가입은 전체적인 속임수입니다: 회원 행 없이는 없습니다 읽기 포인터, 그래서 모든 인바운드 메시지 카운트, 이는 진실 - 시청자 그들을 본 적이 없다. 페이지 당 하나의 쿼리, 방문자가 어떻게 옆에 줄 일치 그것은 이미 대량 적재됩니다. 시스템 이벤트는 제외됩니다. 상태 변경 또는 재 할당은 bookkeeping 대화에 관하여, 그리고 그것 빛은 아무도가 실제로 없는 줄을 조사합니다 아무것도 말했다 - 어떤 배지없이 모든 화면에서 작업이 결정되는 어떤 대답이 필요합니다. SupportTicketDTO.unseenCount는 목록 및 세부 사항 읽기 및 왼쪽에 팝업됩니다. 다른 곳에서는 "unseen"이 뷰어와 숫자에 대한 사실이기 때문에 아무도 묻지 않은 콜러에 대한 발명은 단순히 잘못 될 것입니다.
· kamo-internal
삭제, 자석, 오른쪽 클릭 메뉴, 그리고 누가 묻는 시계
기간 그래프와 nav 시계에 6개의 추가. DELETE는 집중된 알약을 제거합니다. Backspace 너무, Mac에서 키 labelled "delete"는 백스페이스이며, 삭제는 단축키를 의미합니다. 노트북에 존재하지 않습니다. 그것은 양쪽의 펀치, 그래서 식사 삭제 그것이 지속의 한 측면을 나타낸다 — 그것이 무엇을 의미하는지 일어나지 않는 식사. 다른 모든 편집과 같은 단계; 아무것도 쓴 저장까지. GUIDELINE은 각 행에 걸쳐 포인터를 따르고, 1 분이 켜져 있습니다. 상단에 칩. 그 직업은 클릭이 땅을 차지하고, 즉 기간에 매일 같은 분. 트랙 엘리먼트를 대신 측정 컨테이너보다, 그 상자는 일명과 총 열을 포함 — 사용 회원이 볼 수없는 폭에 의해 1 분을보고 할 것 매일 15분의 블록을 떨어뜨리는 메뉴를 엽니다. 근무 시간, 식사 또는 점퍼가 있던 휴식. 2개의 펀치, 아무도: 경간 한 쌍이고, 혼자 opener는 자정에 달리는 알약을 그립니다. 식사는 MEAL OUT과 함께 블록 OPENS - 식사는 작업과 뒤에서 시계로 기록됩니다. 에서, 그리고 그 쌍을 뒤로 전환 일. MAGNETS : 다른 펀치 스냅의 5 분 이내에 가장자리 끌기 정확한 분, 1 분 간격을 우회하는 deliberately 죔쇠는 지킵니다. 이름 * 틈새는 그것의 neighbour를 교차하는 가장자리를 멈추습니다; 여기에서 전체적인 intent는 2를 위해 입니다 만날 수 있고, 한 분만 착륙 할 수있는 가장자리는 결코 틈을 닫을 수 없습니다. fortnight의 급상승에서 5 분은 자석없이 몇 가지 픽셀입니다. "다음이 시작 될 때이 휴식 끝"은 작업 아무도 완료 할 수 없습니다 포인터로. 그리고 자석이 가장자리에 SAME 종류 가장자리의 2개의 경간을 착륙할 때, 그들은 MERGE 같은 제스처에서 : 시계 아웃과 시계 인은 이제 1 분의 중지를 공유합니다. 진실하고, 둘 다 voided. 다른 종류 결코 합병 — 이동 종료 식사가 한 쌍이 아니라면 실제로 두 가지 일입니다. 게시 됨. toGraphPunches의 종류가 원래에 묶는 데 필요합니다. 분: 2개의 coincident 가장자리는 그들의 연쇄 순서를 지키고 또는 페어링 그들을 교환, 제로 폭 스팬과 스레이 오프너를 생산, pill vanishes 순간에 두 개의 만남. THREE PILL COLOURS, 그리고 hue에 의해 명백한 — 상표에서 단단한 일 1 차적으로, 식사는 HRS 호박색에서 밴딩해, violet에서 몹니다. 색상 : 혼자는 빨간색 녹색 부족으로 남자의 ~8%를 실패하고 모두에 실패 영사기; 누군가는 지불한 틈에서 선불된 식사를 말할 수 있어야 합니다 검정과 백색 printout. NAV 자물쇠 ASKS 윈치 펀치. "잠금"은 세 가지 다른 행위이며, 무엇 제안에 달려있다 어디 회원 스탠드: 일, 그들은 종료 할 수 있습니다 이동, 식사로 이동하거나 휴식; 식사 또는 휴식, 다시 돌아 오는 것은 기본 및 교대는 여전히 사람들이 곧 떠나기 때문에 점심시간 한 번에 한 번에 누군가가 그날을 종료하는 방법 그들은 점심에 갈 것을 의미한다 - 그들은 다시 얻을 수없는 지불금 시간 길에 누락된 예외. 선택한 행동에 카드 재 스킨 같은 세 가지 색상의 그래프 사용, 그들은 얼마나 오래되었는지 말한다 현재 상태, 그리고 nav dot 지금 3개의 국가의 그것 보고합니다. 서버의 absent `state`는 "불린은 우리가 가지고있는 모든 것"으로 읽습니다. OFF : OFF로 읽을 때 "clock in"를 누군가를 위해 중간 shift로 제공합니다. 배포 창의 길이.
· SecurityService
펀치 void를 릴레이
POST /punches/{id}/void에 대한 Passthrough, 편집기의 삭제 키와 두 개의 인접한 스팬 뒤에 기계. /correct와 같은 권한과 같은 이유 : EMPLOYEE는 그들의 취약점이 될 수 있습니다 자신의 펀치, "두 배는 결코 일어난다"라고 말할 수없는 회원 때문에 그들은 단지 증인을 수정하는 방법. 그들이 할 수없는 것은 을 만들 - 여전히 여전히 을 통해 이동하는 타임 카드에 void 토지 승인 체인, 그리고 이유는 모든 경로에 필수입니다. 배우는 우표 SESSION에서 결코 몸에서; 몸 공급 배우는 누군가의 임금 기록에 몸 공급 서명. 이 서비스가 실행되기 때문에 반대 방향으로 당기는 두 가지 테스트 anyRequest().permitAll() 는 손중량의 핸들러를 사용해서는 안됩니다. colleague의 펀치가 릴레이에 도달하지 않고, 그것을 인정해야합니다 모든 권리 보유.
· kamo-shared-library
펀치는 삭제될 수 있습니다
4개의 nullable 란과 TimecardPunch에 두번째 쓰기 온스 전환. · void는 펀치가 존재하지 않는 것을 말한다 - 시계에 더블 탭, 버려진 휴식, 또는 2 사이에 솔기 타임 카드 편집기는 단지 하나에 합병. 그것은 보정이 없다 ("이 일어난, 다른 시간, 교체 행을 남긴) 또는 삭제: supersededByPunchId 의미 "이 다른 행을 읽고, 여기에 다른 행이 없습니다. 행이 살아남고, 그 저자와 그 이유와 함께. 한국어 펀치를 잊어 버릴 수 있는 기록은 변화하는 inadequacy 정확히 Anderson v. Mt. Clemens Pottery의 고용주에 부담, 그래서 단지 void 제거는 계산에 펀치의 효과입니다. performWorm()는 supersedByPunchId와 같은 용어에 voidedAt를 허용한다. 값에, 한 번 — 그리고 이유없이 공허를 거부. 위치의 안내 deliberately 불가능: 펀치가 삽입되는 것을 의미한다. 그것의 자신의 행 및 그것의 자신의 설명. ****************는 아니다 편의 용품 unfiltered 변형은 클럭 상태를 결정하기 위해 잘못된다 : a superseded 행은 그것의 ORIGINAL 즉시, 그래서 정정되는 시계 밖으로 지킵니다 killAtUtc에 의해 마지막 행을 나타낸다. 새로운 것까지 펀치. 한 번의 답변은 "시계에 당신을 갖게?" 더 이상 존재하지 않는 기록에서. 법인 교환 규칙에 따라 Sequenced: shared-lib는 로컬로 설치, KI 192.168.4.22:5433에 대한 마이그레이션 및 실행 적용, 그리고 그 다음이 Pushed - 그래서 서비스에 대한 구축 할 수 없습니다 부정 행위.
· InitializerService
Hr timecard punch에 void 열
TimecardPunch entity에 4개의 새로운 null이 없는 열을 미러링합니다. void는 입니다 삭제 및 수정 없음 : 펀치가 존재하지 않아야한다고 말합니다. — 시계에 두 배 탭, 버려진 휴식, 또는 2개의 경간 사이 솔기 편집기는 하나에 병합. SUPERSEDED BY PUNCH ID는 표현할 수 없습니다. 그 열은 "이 다른 행을 대신 읽는다"고 다른 것이 없다. 이름 * 모든 4는 NULLABLE, 이는 무엇이 대중적인 테이블에 이 안전을 만드는: CockroachDB는 ADD COLUMN을 거부 ... 비 빈번한 테이블에 NULL하지 않고 롤스 전체적인 문, 그래서 NULL void 마커는 WARN로 기록될 것입니다, 자주 묻는 질문 그들은이 러너에서 FIRST, 인덱스의 앞과 REVOKEs 이미 @Order(0)의 이유를 위해 운반한다 : 순간 공유 -lib는 열을지도, 펀치 엔터가 SELECT에서 방출되는 각 주자, column-add는 늦게 결코 전혀 실행되지 않습니다 — 이전 독자는 "column에 죽는다 존재하지 않는"그리고 초기화가 그것을 가지고. 에 대한 실행 192.168.4.22:5433, 모든 4 적용.
· kamo-internal
CRM 시장이 존재하지 않을 때 시장에 온보딩 패널 표시
/leads는 빈, 장애인 시장 탭 바와 리드 그리드를 렌더링 CRM 시장을 결코 구성하지 않았다. 이제 같은 온보딩 패널을 보여줍니다. /commerce는 누락된 상거래 시장에 대한 쇼 — 추출 MarketOnboardingEmptyState 그래서 두 가지 숙박 동일 — CRM 리드에 의해 구동 Settings > Client Relationship Manager의 마켓은 상업 시장이 아닙니다. CRM Markets & Fields 탭에서 포인트링. 단계 및 설정 CTA는 CRM을 관리 할 수있는 구성원 만 표시됩니다. 설정; 다른 사람은 기존의 체크백-later 복사를 가져옵니다.
· kamo-internal
기간 그래프 및 timecard는 초안으로 편집합니다
1일 타임라인을 ***********로 대체합니다. 전체 급여 기간, 그리고 어떤 편집을 변경 같은 느낌. 약은 텍스트가 없습니다. 그들은 자신의 시간을 수행하기 위해 사용, 라벨은 60px 넓지만 긴 것은 설명했다 — 그래서 10 분 휴식과 4 시간의 이동은 같은 알약을 붓고, 한 개의 속성에는 타임 라인이 있습니다. 테이블은 아닙니다 (폭은 기간을 의미합니다) 재산은 멀리 threw이었습니다. 둘 다 이제는 시작, 끝 및 경간을 지명하는 도구 끝에서 살 그들을 따르고, 그것으로 업데이트하는 읽음으로 가장자리를 끌고 이동. 코너는 2.5px입니다: 기계 경도를 끄는 충분히, 아닙니다 5 분의 알약을 lozenge로 돌릴 정도로 충분합니다. 매 시간 헤더 라벨은 매 시간마다, 각 분기 회전 카운터 시계 방향으로 그래서 모든 20 4 적합. 4개의 상표는 6 시간 떨어져 누군가에게 말할 수 없습니다 a pill은 9 또는 10에서 시작합니다. 이는 헤더가 있어야하는 유일한 질문입니다. 답은 이제 알 약이 unlabelled. 매일 기간에 행을 얻고, 아직 일어나지 않은 작업 일. 데이터와 함께 일하는 그래프는 누락을 표시 할 수 없으며 누락된 펀치는 timecard에 가장 일반적인 것 이다: 격차는 이다 발견, 그리고 발견은 위에 나타나는 줄을 필요로한다. 미래의 날은 오히려 부화됩니다. 단지 dimmed - "not yet"및 "nobody record any"는 다른 이름 * MINUTE에 스냅. 5 분 스냅 9:02를 표현할 수 없습니다, 그래서 2 분이 지나치게 정정되지 않을 수 있던 시계 견적을 읽는 roundness를 인수했습니다. Rounding은 급여 정책입니다. 엔진은 뒤에 중립성 보고로 적용합니다; 슬라이더는 적용하지 않아야 합니다 둘째, 보이지 않는 것. 화살표 키는 1 분, 15로 이동, Alt 자신의 끝에 1개의 끝이 걸립니다 — 포인터는 궤도에 분을 표현할 수 없습니다 분은 화소의 밑에 입니다. 그리고 편집은 이제 초안입니다. 필수 영역 대화 상자를 엽니다. 각 릴리즈에 : 3 개의 잘못된 펀치로 하루를 고정하는 것은 3을 쓰지 않습니다. 설명, 각 변종의 "시계는 잘못되었다"그리고 실제 보호 앤더슨 v. Mt. Clemens Pottery는 유형의 상자 사람들로 전환 "correction"을 멀리 간다. 모든 보호는 패배를 배워 아무도를 보호합니다. 지금 편집 단계는 자유롭고 하나의 설명은 수집됩니다 save — 여전히 필수, 여전히 모든 펀치에 기록, 하지만 누군가가 실제로 그들이 한 것을 알 때 물었다. 아무것도 쓴 그때까지. 지원 변화: - app/lib/timecardGraph.ts는 모든 결정 그래프를 가지고 있습니다. - 페어링, 클램핑, 스냅, DST-safe 즉시 이동 - 순수한 기능으로, wage 레코드에 대한 결정은 무언가를 드래그하여 만 확인할 수 있습니다. 마우스는 의사 결정체 검사입니다. 34 테스트. - fetchRange는 404에 대한 일일 읽기로 돌아갑니다. 그래서 탭은 깨지지 않습니다. 누가 SecurityService 배포와이 사이에로드합니다. - 지역 벽을 통해 추가 시간 필드 왕복. 그것은 UTC를 렌더링 datetime-local 입력으로 슬라이딩하고 그 결과가 다시 로컬로 파싱하므로 필드에 모든 방문은 침묵의 영역 오프셋에 의해 시간을 이동.
· SecurityService
에디터의 연령대를 릴레이
GET /members/{id}/range에 대한 Passthrough, 기간 그래프의 읽기. 에서/ TimecardService가 회원의 급여를 해결할 수 있도록 만 전달 period — forwarding "?from=&to=" 은 공백 문자열 다운스트림과 바인딩합니다. 침묵으로 모든 org에 대한 기본을 지불 달력. Identity는 resolveRole로 확인하고 /day로 정확히 맞지 않습니다. 두 가지 요구 사항이 반대 방향과 오른쪽 기반 게이트에 잡아 그들 중 한 명 : 동료의 시간을 읽는 방법이되지 않아야합니다. 주의를 기울여야 한다. RESTRICTED tier는 전혀 권리가 없습니다. 자주 묻는 질문 TimecardRangeAuthTest는 쿼리 건물과 두 방향을 다룹니다. 이 서비스는 anyRequest().permitAll() 을 실행합니다. 잊을 수없는 맵핑은 공공 인터넷에서 볼 수있는 APIService의 와일드 카드 전달.
· kamo-internal
누군가가 그것에 응답 할 때 지원 대화를 올리십시오
지원 창을 닫지 않고 대화를 떠나지 만 처리되었습니다. 그것이 있다면. ChatNotificationListener는 모든 SUPPORT TICKET에 일찍 돌아갑니다. 알림 - 올바르게, 티켓이 일반 채팅 창을 열지 않기 때문에, 그것은 전혀 살아있는 re-open 없이 지원을 떠났습니다. 누구든지 패널을 닫았고, 대부분 자주 묻는 질문들 한 번 그들은 물었다, 단순히 결코 본 적이 이름 * 대신 지원 창을 열고, 티켓 ID에 의해 주소 알림 운반; 도구 저장소 dedupes 에 ticketId, 그래서 창은 이미 업 중복이 아닌 초점입니다. AutoOpenUnreadSupportChats는 내구성이 절반이며, 도착한 답변을 위해 그들은 서명했다 - 라이브 푸시는 재생이없는 핵심 NATS입니다. 수정하기 AssignedTicketOpener에서 분리 : 하나의 답변 "이 작업은 이제 당신의 것입니다", 이 하나의 답변 "somebody는 당신에게 무언가를 말했다",그리고 요청에 대한 첫 번째 전혀 일어나지 않습니다. 둘 다 동일한 자동 열려있는 기록을 통해 인식하십시오 채팅 경로 사용, 그래서 두 번째 장치는 첫 번째가 보이는 것을 재생하지 않습니다. ChatsList는 이제 TicketId가 활동 프레임을 바로 제거합니다. 관련 기사 열릴 수없는 행을 생산하지 않고도 지원 행, 그래서 목록이 있었다 프레임을 던져서 전체 페이지를 다시 읽습니다.
· MediaService
한 대화, 많은 손 - 열려있는에 가입, 모든 메시지, 회신에 다시 열
지원 티켓은 누구든지 돕고, 누구든지에 의해서만 일합니다 현재 스탬프. Assignment는 작업이 제공하는 것을 결정합니다. 목록에서 그것을 보여줍니다; 그것은 결코 대화에 잠금을 의미하지 않았다. 이제 티켓 열기는 미디어 세션에 참여합니다. 전, 개설한 대리인 그들에게 할당되지 않은 큐에서 티켓은 그것을 입력 할 수 없습니다 — 아무것도 메시지 거부 - 그러나 그들은 세션의 구성원이 아니었다, 그래서 대화는 채팅에 결코 등장하지 않습니다 -> 지원, 도달하지 않는 대답 그들에게는 요청자의 "내 에이전트는 여기에"그들을 계산하지 않았다. 그들은 방에 이야기하지 않았다. 누가 참여할 수 있습니다 같은 인구는 이미 queue에서 티켓을 볼 수 있습니다 : 사람들이 이미 대화에서, 추가 ACCEPT SUPPORT TICKETS 또는 MANAGE SUPPORT 할당된 org. 다른 사람 이제 거부 -이 엔드포인트 이전에 플랫폼에서 티켓을 제공 UUID를 추측 할 수있는 정통 회원, 조직의 맞은편, 문에 가입하면 낯선 대화를 읽는 것이 넓어지고 있습니다. 그것을 썼다. 모든 메시지는 현재 이름을 붙입니다. senderName이 읽은 직선 member.usernameAlias, 거의 모든 회원에 설정되지 않는 옵션 별명, 그래서 null로 serialized 및 채팅은 attribution없이 메시지를 렌더링 모두. 그것은 지원 표에서 최악, 어느 대리인이 될지도 모른다 대답하고 고객은 그(것)들을 말하는 다른 방법이 없습니다. memberDisplayNames — 이미 이 컨트롤러에서 다른 곳에서 사용했습니다. — 이름. 동일한 원시 읽기는 할당 된 시약 이름, 표 역사 배우, 체계 배출 배우, 대리인 가용성 고시 및 보고 테이블. 닫힌 창은 더 이상 분실한 대답을 의미합니다. 수신-메시지 알림 티켓 ID를 운반하므로 고객은 대화를 제기 할 수 있습니다. 당신에 관하여, 및 /sessions/support/autoopen는 대답을 위한 튼튼한 반입니다 서명 한 동안 도착했습니다. — 메시지 사이드 카운터 할당되지 않는, 어느 단지 일 변화 손을 덮고 그래서 결코 도움을 요청한 사람을 위해 화재. 테스트 : ChatListNativeAliasCaseTest는 피드 쿼리의 열의 인용을 핀 aliases, 아무것도 다른 잡을 수 없다 - 실패 모드는 침묵하는 null, 아니 유형 오류 또는 예외. SupportAutoOpenHqlTest는 새로운 쿼리를 구합니다. Spring Data가 부팅 및 @Query를 유효하게 검증한 이후로 실제 엔티티티 모델 이 책은 공유 라이브러리에 살고, 태풍이 모든 서비스를 중단.
· kamo-internal
Linkable 탭, 작업 추가 회원 및 전체 역사 탭
/account/view/{id}의 모든 탭은 실제 경로입니다 — /members, /history and 나머지는 누군가가 보낼 수 있습니다, bookmark, 또는 땅에. 늙은 ?tab= 링크 리디렉션 일치하는 것. 각 탭은 자체 데이터를로드하므로 계정을 더 이상 열 수 없습니다. 모든 탭의 데이터를 기다립니다. 회원 추가는 "곧 도착"을 토스트. 이제 동일한 Picker 관리자를 엽니 다. 필드 사용, 단지 직원보다 조직의 모든 구성원을 검색 — 계정을 지불하는 사람은 payroll에 자주 있지 않습니다. 현재 위치 계정이 눈에 띄지 만 이유가없는 경우, 그 이름은 자주 묻는 질문 Set-as-primary 및 제거 작업 너무, 제거 뒤에 확인 그 말한다 무엇 그것 고 삭제 하지 않습니다. 테이블과 피커 마크는 각 행의 종류입니다. 그것 없이 회원과 팀 구성원은 동일하게 읽고 목록은 조용히 모든 사람에게 의존합니다. 그것은 여기에 작동합니다. 회원 행은 이제 모두 렌더링됩니다. 유형은 키 주장 끝점은 결코 보내지 않았다, 그래서 모든 이름은 "---"를 보여주고 아무것도 제거될 수 있었습니다 — 행 id 제거 호출은 발명 된 필드 중 하나였다. 리드 뷰의 역사 패널이 EntityHistoryPanel, 새로운 공유 계정 기록 탭: 동일한 필터, 같은 paging, 같은 빈 상태. 자주 묻는 질문 각 콜러는 피드가 어디에서나 ids가 의미하는 것뿐입니다.
· InitializerService
ACCOUNT HISTORY 만들기
Kamo-shared-library의 accountHistory entity를 미러링합니다. 견적 요청 기본적으로 ID와 DATE CREATED 때문에 ddl-auto로 왼쪽 데이터베이스를 기본적으로 수행하므로 일반 SQL 인서트는 naming하지 않고 작동합니다. Hibernate의 생성된 DDL는 하지 않습니다. 외국 키, 목적에 - 로그는 무엇을 설명합니다. 계정은 org를 삭제할 수 있습니다. 그들은 그들과 함께 사라진 것들의 기록.
· SecurityService
계정 역사 엔드포인트, 실제 회원 행, 모든 회원 디렉토리
계정보기는 이제 계정과 그에 무슨 일이 있었는지 말할 수 있습니다. - 계정 표면 기록 기록에 대한 모든 돌연변이: 생성, 필드 편집, soft delete, 병합 (잃어버린의 timeline을 survivor로 이동) 그것을 떨어뜨리기 보다는), 주소, 주 및 일원 add/remove/primary 경로. 고객/{uid}/history 및 /history/filters를 사용하여 리드 엔드포인트를 미러링하십시오. 내부 사이트의 한 구성 요소가 모두 읽기 때문에 요청. - getCustomerMembers는 회원 행이 렌더링되어야하는 것을 반환합니다. 표시 이름, 아바타, 직업 제목 및 isTeamMember. 온갖 사람에 속합니다 계정 - 한 지불은 자주 payroll에 - 및 플래그없이 둘은 똑같이 읽습니다. - updateCustomerMembers는 문자열로 ids를 받아들입니다 (a unique rowid) 과거 MAX SAFE INTEGER는 다른 곳에서 도착합니다), 1 차 회원이 될 때 행이 제거되고 더 이상 orphanRemoval-mapped mutates 저장소 쓰기와 함께 컬렉션. - 디렉토리 검색은 org의 모든 구성원이 아닌 range=all이 걸립니다. 직원 목록, 그리고 모든 행은 어떤 종류의 말한다. endpoint ratchet는 denyUnless를 배웁니다. 세션을로드하고 401을 돌려줍니다. 오른쪽없이 하나, 또는 403없이, 그래서 그것이 수행 한 핸들러 콜러를 해결하는 것보다 엄격하게. 20 개의 기본 항목 만 나열되었습니다. 검사는 이미 거기 있는 감시를 볼 수 없기 때문에.
· kamo-shared-library
계정의 감사 트레일, 그리고 비 사고를 포함하는 디렉토리
ACCOUNT HISTORY는 LEAD HISTORY 레코드를 계정으로 보내는 것을 기록합니다. 리드에 무슨 일이 발생 — deliberately 같은 열, 내부 때문에 사이트는 이제 하나의 구성 요소와 두 번째 모양을 통해 모두 강제 될 것입니다. 두 번째. - AccountHistory + repository + AccountHistoryService: 현장에 스냅샷/디프 레지스트리, 필드 편집되지 않은 것들에 대한 하나의 오프 이벤트 (회원 가입, 납 또는 주문 도착, 합병). 기록 결코 던지기: 감사 실패가 가동을 내리지 않도록 작성하십시오. - AccountHistoryFieldRegistry는 트랙 필드를 선언 한 단일 장소입니다. 총을 실행하는 것은 deliberately absent - 그들은 주문의 부작용으로 이동, 이미 자신의 이벤트를 얻을. - LeadService는 이제 리드 링크의 절반을 작성합니다. 연결하기 계정은 두 번의 행동이며, 한 가지 방법으로 기록 당신이 찾고있는 페이지는 언급하지 않는 한 것입니다. 지도는 사이 이동했습니다 계정은 둘 다에 씁니다. - CommerceService 레코드 ORDER PLACED / LINKED / UNLINKED / STATUS CHANGED 구매 계좌에 대하여 주문이 구매자가없는 때 침묵. * * * * * * 비밀번호 찾기 org의 모든 구성원에게 널리, colleague를 선택하지 않는 픽업. TeamMemberRepo.searchDirectory 용어를 사용하여 단계에 Kept, 포함 LEFT JOIN 팀직원에게 직무 제목과 부서 검색을 유지 결과에. activeOnly는 고용 상태가 있는 행만 말할 수 있습니다. 대신 한 패스를 통해 회원은 "필수"로 읽지 않습니다. - member.getPhoneExtension: getPhone() 확장을 떠나는 번호로 평평하게 클래스 밖에서 사용할 수 없습니다.
· kamo-internal
펀치를 쓰기 전에 시계 in/out 확인
Nav 시계 펀치 똑 바른 떨어져서 클릭. 그 막대기에 있는 다른 통제 idempotent 또는 trivially undoable입니다; 펀치는 뒤에 오는 임금 기록입니다 필수 작성된 이유를 가진 HR 관리자만 수정할 수 있습니다 — and the button Logout에서 하나의 픽셀에 앉아. 그것은 이제 TimecardPunchConfirmDialog, 표준에 내장 NewSupportRequestPopup 및 deliberately의 사본이 아닙니다. 그 카드는 경고입니다. 그 중단, 그래서 그것은 숨, 그것의 배경을 거부하고 그 버튼을 늦게 팔. 이것은 클릭에 의해 물었다, 그래서 한 번에 팔과 탈출에 닫기 백드롭에. 녹색에 대 한, 밖으로에 대 한 amber, 2 outcomes 해야 하기 때문에 단어가 읽기 전에 apart에 말했다. 그것의 centerpiece는 SECOND에 시계 ticking이고, 사본은 outright를 말합니다 기록된 시간은 순간보다 오히려 확인의 순간입니다 화면을 결정하는 동안 - hesitating는 무료이며 아무것도 없습니다. 이렇게 말할 때까지 작성. 첫 번째 진드기는 두 번째 경계로 정렬됩니다. readout은 회원의 화면 대신에 다른 모든 시계에 동의합니다. 클릭을 실행하는 착륙. 그것으로 바뀌는 Behaviour: - idempotency 키는 대화 상자가 열릴 때 축소되고 재발을 재사용합니다. Per-attempt 키는 버그가 발생했습니다. 시간이 많이 걸리는 요청은 잘 수 있습니다. 신선한 열쇠의 밑에 착륙하고 retrying는 임금 기록에 두번째 펀치입니다. - 동작은 개방 시간에 얼어붙습니다, 그래서 60s는 시계 underneath를 플립합니다 카드 (그 휴대 전화에서 펀치)는 의문을 변경할 수 없습니다. - 최적화 플립이 사라집니다. 펀치가 클릭을 해제하기 때문에 존재; 회원은 이제 서버 답변까지 유지되는 카드가 표시됩니다. 그래서 추측 된 상태는 잘못된 것을 보여줄 수있는 기회입니다. - 실패한 펀치는 카드를 열고 이렇게 말합니다. 아이콘을 완전히 반전하는 것은 일이 일어나지 못한 펀치에 대해 배울 수있는 방법이 없습니다. — 그 표면은 나중에 timecard에 누락된 예외로 합니다. - 전환 ID (god-mode sudo, 세션 스위치)는 열려있는 확인을 삭제합니다, 그렇지 않으면 이전 회원의 펀치를 새 사람에 씁니다.
· kamo-internal
선택의 장소에 있는 Segmented 상태 필터
Pending/Complete/All는 1개의 선에 적합했던 3개의 짧은 동료입니다, 그래서 드롭다운 클릭 뒤에 두 가지를 숨기고 라벨과 170px를 보냈다. 아무것도 말하지 않는다. 닫히는 선택은 또한 대답할 수 없습니다 "나는 봐 모두?"그것을 열지 않고. 관련 기사 필터 공유: 독점적인 ToggleButtonGroup, 악센트로 촬영 CSS var 그래서 각 표면은 정체성을 유지하고, 독점 null 선택된 세그먼트가 다시 클릭될 때 모드 손 - 필터는 항상 값이 있습니다. 할당된 훈련은 너무, in --training-brand: 2개의 패널은 1개의 탭 지구를 공유하고, 그들 중 하나 드롭다운을 유지하면 두 가지 다른 제품으로 읽을 수 있습니다.
· kamo-internal
옵션 분쇄 대신 군중 nav를 슬라이드
Nav 보다는 더 많은 선택권을 핀으로 꼿는 모양에서 도와를 밖으로 짜낼 수 있습니다: 두 개의 스트립은 익지않는 오버 플로우 상자이고 타일은 코드 아이들이 없습니다 그들의 자신의 flex-shrink, 그래서 상단 바는 그들을 파괴 (그리고 숨겨 scrollbar outright, 그들은 존재하지 않는 기호와 삼키기 옵션) 동안 철도는 12px의 scrollbar를 자체의 gradient에 흘렸습니다. navs 둘 다 이제 NavOverflowScroller를 통해 움직일 수 있는 선택권을 만듭니다: 타일은 발자국, 끝 화살표 및 부드러운 가장자리 퇴색을 유지 아직도 도달하는 무언가가 있고, 지구는, 붙들 수 있습니다, 바퀴를 씌우고, 순간에 던지는, 또는 끌기. 현재 페이지의 옵션은 도착에 대한 전망으로 스크롤, 상단 바의 고정 크롬 없음 더 이상 그것을 흡수 할 수있는 한 아이와 함께 부족을 공유합니다. 옵션을 걸고 스트립을 슬라이딩하는 것은 군중에 동일한 제스처입니다. nav, 그래서 군중 nav는 짧은 홀딩 뒤에 후방을 넣어. 그 런치 dnd-kit에서 마우스 다운을 붙이고, `delay`를 사용하는 것보다 constraint: 지연 constraint는 타이머에 혼자와 dnd-kit 활성화합니다 활성화에 도달하는 모든 보도의 클릭을 억제, 어느 것 navigating에서 약간의 클릭을 중지.
· kamo-marketing
19개 언어의 수집 세부 페이지
Sync가 완료되었으므로 ~2,400 개의 세부 페이지가 없습니다. English body copy now have real translations and can be indexed. 연구분야 모든 21 지역 전역: 0.0%와 8.8% 사이의 모든 토지 수집 영어와 동일한 값, sw 및 ta를 정확히 100.0% - 그 2 제공 업체가 없으므로 TranslateService는 소스 텍스트와 실행을 반환 성공의 외관 아래 영어를 썼습니다. COLLECTION CONTENT LOCALES는 그러므로, 목록이 아닙니다: 모든 광고 locale minus the no-provider 세트. sw는 세부 페이지에만 noindex를 유지 — 그것의 기본적인 뭉치는 진짜 Swahili, 그래서 그것의 정체되는 페이지는 색인을 붙이고 — ta 영어에 이미 canonicals이기 때문에 모든 로봇 지침을 얻지 마십시오. 원본과 겹쳐 쌓이는 noindex에 관하여 2개의 금기 신호를 보낼 것입니다 내용의 한 조각.
· kamo-shared-library
Per-member는 수락 matrix를 위한 rollup를 초과했습니다
HR 개요의 'row.overdue > 0'에 행렬 지점이지만 법적 및 교육 롤업은 그 필드가 하드 코딩 0 - 할 수있는 지점 결코, 그래서 두 개의 도메인은 amber 또는 녹색을 보여줄 수 "sorted 최악의 첫 번째"절감. (회원, 상태) histogram은 대답할 수 없습니다. 그것은 dueAt를 운반하지 않습니다. 그래서 각 repository는 그룹화 된 수를 얻는다. countOverdueForOrg에서 하나, 플러스 그룹 팀MemberId. predicate 공유 위의 org-level count에 대한 per-member 수치가 요약됩니다. 그들. Query 메서드만. 법인 변경 없음, DDL 없음, 버전은 1.5.0을 유지합니다. Callers는 열린 집합을 소유하고, 둘은 동일하지 않습니다: 법적인 통행 OPEN STATES, 훈련은 REMINDABLE STATES를 통과합니다. AWAITING GRADING은 오픈하지만 회원이 아니고, 과잉을 계산하는 것은 법적을 재현합니다. module's AWAITING OTHERS 버그가 주가 늦었을 때, 모든 제품.
· kamo-internal
개요 탭을 다른 네 위에 보고하십시오
전체 폭 보고 콘솔: 돛대head readout, 4개의 탭 기둥, needs-attention ledger, 인력 준수 매트릭스 및 활동 철도. read-only — 모든 행동은 자기 탭에 깊은 링크입니다.
· kamo-internal
개요 주의 ledger, 준수 매트릭스 및 활동 레일
useMemberNames 소스 /api/security/members/names 오히려 간단한 것 보다는 짐작 .../org-config 모양: org-config는 회원 목록을 반환하지 않습니다 (읽기에 의해 확인 됨) LegalPackageDialog.tsx 및 TrainingAssignDialog.tsx는 부서/jobTitles만 파는 그것에서), /members/names는 id-to-name 해결책을 위해 이미 건설한 endpoint이고 이미 mortgageAppsApi.memberNames()에 의해 동일한 방법을 사용.
· kamo-internal
개요 masthead와 4 개의 탭 기둥

당신의 우주는 기다리고 있습니다.
몇 분 안에 무료로 시작하세요. 준비가 되면 언제든지 제품을 추가할 수 있습니다.
영원히 무료 - 신용 카드 필요 없음