チェンジログ
何が新しいの?
プラットフォームのすべての改良 それが出荷される
· kamo-shared-library
タイムカードエンジンの背後にあるPayroll-providerドメイン
組織のタイムカードを組織のタイムカードに接続するための永続スピンを追加 サードパーティのペイロールシステム:接続と暗号化された per-org config、 OAuth 助成金、会員対プロダクター・エンプロイヤーリンク、収益コードマップ、 と2つの追加レコード(ディスパッチの試みと同期の問題)は、 その後の説明可能な同期。 新しいパッケージではなく、com.kamo.z.shared.hr.timecard内のKept 目的:新しい共有ライブラリパッケージは、3つの別々の明示に追加する必要があります @EnableJpaRepositories は、サービスコンテキストを一元化し、または、 KamoInitializerでは、まだBUILD SUCCESSを報告しながら実行を中止します。 形状のノート: - PayrollProviderType は、既に文書化されたトークンの語彙を再利用します。 メニュー (ADP WFN、PAYCHEX、GUSTO、...)。 秒数 同じベンダーのスペルは、エクスポート履歴をエラーなしで分割します どこでも。 ADP RUN と QUICKBOOKS はペイロールのエクスポート画面で保存されます。 発送したので、ライブ行を運ぶことができます。 - 従業員のリンクは関係によって、そう転換しない提供者によってキーを、です 提供者および転換の背部はマッピングの仕事を捨てません。 ツイート ユニークな制約: 1 つは 2 つのリンクを保持するメンバーを停止します。 1つのプロバイダの従業員を主張する2人のメンバーは、その1つは二重賃金を防止します。 - PayrollDispatchとPayrollSyncIsueはWORMです。 ペイロール伝送 試みはお金のでき事です;「私達はそれを送りました、それから私達は再びそれを送られました」事実です 調整の必要性。 - Credentials は 1 の暗号化された config json の blob ではなく 1 のカラムの 1 つに住んでいます フィールドは、ベンダーを追加すると、すべてのサービスを再監視するスキーマの変更ではありません。 RoleRightType は MANAGE PAYROLL PROVIDER (199) を獲得しています。 レガシーMANAGE PAYROLL(40)は、今日何も門っていないし、既に保持されている 会員の未知数; 再使用は、第三者の給与を手渡しする それを出荷したブーツですべてのレートビューの権利所有者への資格情報。 PlatformOAuthProviderType は、Kamo が 1 つを保持する 7 つのペイロールベンダーを獲得 パートナー登録(ID 11-17) Dayforce、Workday、UKGの問題の資格情報 顧客ごとのそして意図的に定数を得ません: プラットホーム スクリーンはレンダリングします すべての定数のためのカード、従ってそれらのための1つは形態ですオペレータはできます お問い合わせ また、BillingDelegationModeTest でストールアサーションを修正:コミット 9276487 意図的に作られたREQUIRES APPROVALはグループを許可します(除外は作られた 承認パスが到達できない)が、古い動作を主張するテストを残しているので、 スイートはメインに赤くなっています。 このプッシュの前にYugabyteで適用され、検証されたスキーマ.
· kamo-internal
「今」の壁、キャンセルされたパンチを説明するカード
未就業時間を記録できない エッジをドラッグし、滑ります 全体のスパン、矢印キー、磁石、右クリックブロックでnudging、 マニュアルは、今日の行の現在の分にすべての停止ダイアログを追加します。 未来の日は、すべてで何も受け入れません。 起こっていない今日の部分は 「ここに丸薬をドラッグできない」ので、孵化した人は誰にも見える ルールではなく、制御します。 サーバは、現在、過去にインサートまたは修正されたパンチを拒否しました。 クライアントがこれを要求した理由: 壁なしでドラッグが成功し、 丸薬は段階的に見ているそこに置き、全体の保存は端で失敗しました メンバーが見つけられないパンチについてのメッセージ。 磁石は同じ壁を取得します。 間違った装置によって未来に残されたパンチ 時計は正当なスナップターゲットだったので、エッジはそれを先に引き渡すことができます 保存場所を落とすと、保存が拒否されます。 そして、確認カードは、パンチのCANCELSがそれの前に1つを出すとき開いたままになりました、 TimecardServiceは、この朝にどんな逆転をしても、この朝から始まりました ツイート メンバーがボタンを押さなければ、状態のスナップバックを監視します ボタンをひっくり返し、ボタンが切れる。 インスタグラム カードがピッカーとそのアクションコピーをドロップすると、1つの文が表示されます。 そして1つのボタンは、バックドロップで却下を停止します - ストレイはそれをクリック 多くの場合、確認に従うと、何が起こったのかだけの説明を閉じてはいけません.
· kamo-internal
会員のチャットのコンポーザーをサポートし、ソーシャル ウィンドウに
サポートチケットとソーシャルDMは、メンバーチャットと同じことです。 それにメッセージを持つメディアセッション — しかし、彼らはベアを通して答えた テキストフィールド。 エージェントは、顧客によってスクリーンショットを送信することができ、方法がなかった 1つの背部を送るため: 付加ボタン無し、ドラッグ・ドロップ無し、り無し、絵文字無しおよびa 1行を過ぎて成長しない入力 どちらもメンバーのチャットのコンポーザーをレンダーするので、アップロード機械、 アタッチメントトレイ、トランスファーパネル、絵文字ピッカー、エンターツーエンド 3つすべてで一つの実装。 受信および送信された添付ファイル レンダリングで 同じAttachmentChip を介してバブル。 タブベッドサポートウィンドウが開くように強制される2つのこと: - Draftsは会話(useDraftParking)ごとに駐車されます。 1つのコンポーサーが機能する 複数枚のチケットと、誰が画面上にある投稿を送るので、左記 箱に入れると、もうひとつの顧客の言葉です。 送信後退散 送信が始まり、またはタブのミッドフライトを切り替えるキーをとります 他の人にタイプされている応答。 - ステージドアタッチメントは、セッションごとに保持されます。 フラットリストは1つの顧客の 別のトレイにファイルをアップロードし、それをアップロードします。 UploadAllは今アドレスをアドレスします ファイルがステージングされたとき、どのタブがランドスケープされているか。 社会的な返信は10 MBの1つのファイルで捕捉されます:メッセージは1つの MediaObjSocialRef では、2つ目の添付ファイルが保存されず、中継されることはありません。 そして10 MBは私達が送る最も堅い提供者の天井です。 お問い合わせ サイレントに負けない作曲家。 失敗した投稿は、失敗したアップロードとは別に報告されます。 とりあえず、メッセージはそうでず、ドラフトもまた試してみる.
· kamo-internal
Speed ダイヤルは org の部門の拡張子をリストします
タブは6つの発明されたエントリを出荷 — 1001のセールスチーム、会議室 永続的に鳴る - そのため、ダイヤルは、その答えに何が起こったか到達しました エクステンション、BLFバッジは、何も購読されていないと報告しました。 /api/security/departments を読み込み、org が持つすべての部門をリストします。 タイトルで並べ替えられた拡張子を与えられたときの外側の番号で 1セットです。 ローディング、空および再試行可能な状態はタイルを取り替えます 決して空にすることはできません。 GET は org-scoped で、正しい必要はありません。 タブが最初に開いているだけ.
· kamo-internal
チャット、ソーシャル、AIチャット、サポートサイズにウィンドウを構成
会員のチャット、ソーシャルチャット、AIチャット中にサポートチケットウィンドウが460pxで開きます そして、メールコンポーザーは360-420で全土。 同じドック、同じ種類のコンテンツ サポートウィンドウの460pxのデフォルト(および再利用可能な420pxの床)を共有します ), なので、オープン ツールのウィンドウの行は、階段の代わりに行いません.
· kamo-internal
すべてのキュー行にメッセージを表示し、参加するだけでなく、
バッジと行の小ロットは既にここにありました — それらは単にポップアップしませんでした リストのほとんどについて。 getUnreadFor は、ライブパーセッションの未読マップのみを読み込みます。 視聴者の会員列から派生するので、チケットは未だ 決して光ることができません。 この列では、そのほとんどが 誰もピックアップされていないチケットは、大半と行の両方である フラグが最も必要です。 今、視聴者の会話のために権威あるライブマップを好む 読み込まれた瞬間や返信の土地をSTOMPにアップデートし、落ちる サーバの1枚あたりのチケット数に戻ります。 2つはできない 目隠しをマージ:ライブマップは、まだ未読のセッションのみを運ぶ メッセージは「2年前に読み込む」と「数え切れない」は、 それ — この訪問中に開かれた会話の小さなセットなので、 会員は、現在、次のリロードまでリットするから読み込まれています。 また、サポート終了カウントが移動したときにリストも再読み込みます。 お問い合わせ 視聴者が今までにないライブチャンネルがない会話 スナップショットを修正 — 未読のトピックは、セッションの人々にのみ到達します。 キューに誰もいない - と pendingCount は、到達するシグナルです。 組織のあらゆるサポート可能なメンバー.
· MediaService
チケットリストにアンティーンカウントをスタンプし、キューをライブに保つ
getTickets は、呼び出し側は、呼び出し側のための行ごとのメッセージのカウントを一括読み込み 訪問者行はすでにその方法を読み込んでおり、getTicketDetail は自分自身を計算します 読者のMarkAsReadの土地の前に — そのため、ウィンドウはしばらく到着したものを表示することができます すでにゼロに開くという行為は、数よりも消えていました。 また、キューのストールを残した信号ギャップを閉じます。 サポートメッセージ 会話は、orgのすべてのサポート可能なメンバーのためのキューを移動します。 そのセッションの人々だけ - セッションが未読の人である トピックは到達しません。 保留中のカウント放送は、すでに火災時に放送 公開チャットの訪問者が送信され、エージェントが読み込まれたとき。 から返信するメンバー アプリ内はホールだったので、アプリ内サポートの会話が得られる エージェントの画面が再び見えることを何も伝えていないメッセージ。 SupportUnseenCountSqlTest はクエリの形状をピンにします。 すべての条項は ロードベアリングとそれらのうちどれも渡るビルドで見られます: 1つの間違いをとり、 キューはまだレンダーします。, ちょうど静かな偽のカウントで.
· kamo-shared-library
会話にない視聴者のメッセージのカウント
常にビューアの MediaSessionMember 行から派生しているので、 数え切れない会話を全てプロデュース。 サポートキューで そのほとんどは、37枚のライブチケットの27枚が割り当てられず、そのうち26枚 丁度1つのセッションメンバー、助けを求める人がいます。 お問い合わせ ほとんどのフラグが必要となる行を正確に把握し、その行は 構造的にフラグを運ぶことができませんでした:誰も参加しなかったので、誰も持っていませんでした 読まれない読者。 countUnseenBySessionForViewer は、代わりにキューを尋ねる質問に答えます。 ザ・オブ・ザ・ 会員へのLEFT JOINは、全体的にトリックです: メンバーシップの行がないと、 ポインタを読んで、すべてのインバウンドメッセージが真実であるように、ビューア 何も見ていない。 1ページあたりの1つのクエリ、訪問者の行を横に一致させる それは既に積み過ぎです。 システムイベントは除外されます。 ステータス変更または再委託は、簿記 会話について、実際に誰も持っていない行を照らすとカウント 何も言う - 仕事を決定している画面上のすべてのバッジよりも悪い お問い合わせ SupportTicketDTO.unseenCount はリストと詳細の読み込みと左にポップアップ表示されます。 "unseen" はビューアと番号についての事実であるため、他の場所で null です。 誰も尋ねなかった発信者のために発明されただけでは間違っている.
· kamo-internal
削除, 磁石, 右クリックメニュー, 誰に尋ねる時計
期間グラフとNavクロックの6つの追加。 DELETEは、集中した丸薬を取り除きます。 バックスペースも、Macでキーをキーに "delete" は Backspace であり、 Delete のみを提供するため、ショートカットは ノートパソコンには存在しません。 スパンのパンチを外すので、食事を取り消す 作業の両側を連続で残します。つまり、 食事が起こらない 他のすべての編集のように段階的に:何も書かれていません 保存まで。 ガイドラインは、すべての行にポインタを追従し、その分は、 上部の破片。 その仕事は、クリックが土地になる場所を言うことです。 期間中に毎日同じ分。 トラック要素をではなく測定 コンテナよりも、そのボックスには、日名と合計の列が含まれます。 会員が見えない幅で分を報告する 一日中どこでもRIGHT-CLICKは、15分のブロックをドロップするメニューを開きます ポインターがいた時間、食事、休憩。 2つのパンチ、ない1:スパン ペアで、一人のオープナーが真夜中に動く丸薬を描きます。 お食事をお願いする OPENS with MEAL OUT - 食事は、仕事や背中の時計として記録されます で、その対の後方は日を反転します。 MAGNETS:別のパンチの5分以内にドラッグされたエッジは、その上にスナップします 正確に分、意図的にクランプが保持する1分のギャップをバイパスします。 お問い合わせ 端が隣接するのを止めます。ここに全体の意図は2のためです 満たすために、そして分だけに上陸できるエッジはギャップを閉じることはできません。 昨日のズームで5分はピクセル数なので磁石なし 「次のいずれかが始まると、このブレイクエンドを作る」タスクは誰も完了できません ポインタを使って。 そして磁石がSAMEの親切な端の2つのスパンを端に造るとき、それらはマージ 同じジェスチャーで:クロックアウトとクロックインは、今分停止を共有します 真理であり、両方とも無視されます。 異なる種類は決してマージしません - シフトエンディング 食事が始まったとき、それは実際に2つのことです 起きた。 これにより、toGraphPunches で元のtie-breakに並べ替えが必要 分: 2 つの偶然の端は chronological 順序かペアリングを保つ必要があります それらを交換し、ゼロ幅のスパンとストライオーナを生成し、丸薬は消えます 2つの出会いの瞬間に。 THREE PILL COLOURS は、Hue よりも明確で、ブランドに固執する プライマリ、HRSのアンバーでバンドルされた食事は、紫外で細かく剥離します。 カラー 単独では、赤緑色の欠乏で男性の~8%が失敗し、誰もが失敗します プロジェクター; 誰かが有料の休憩から未払いの食事を伝えることができるはずです 黒と白のプリントアウト。 ナフ・ロック・ASKS WHICH PUNCH。 「ロックアウト」は3つの異なる行為であり、何 会員が立っている場所によって異なります。 シフト、食事に行くか、休憩を取る;食事や休憩に、戻ってくる デフォルトでシフトを終わらせることは、人々がまっすぐに残っているので、まだそこにあります ランチから そのボタンを1つにまとめると、いつ誰かが自分の日を終わらせるか 彼らは昼食に行くことを意味しました - 彼らは戻って取得しない未払いの時間と 途中で欠落した例外。 カードは選択したアクションに再スキン グラフが使用する3色と同じ3色は、グラフのどの位にいたっているかを言います。 現在の状態と nav の点は 3 つの状態のどれかを報告します。 サーバからの absent `state` は "boolean is all we have", not" として読み込まれます。 オフとして: OFF でそれを読むと、誰かのミッドシフトに "クロックイン" を提供 デプロイウィンドウの長さ.
· SecurityService
パンチの無効を中継して下さい
POST /punches/{id}/void 用のパススルー、エディタの削除キーと 2つの隣接するスパンを結合する背後にある機械。 EMPLOYEE は /correct と同じ権限で、同じ理由で EMPLOYEE が無効になる可能性があります。 自分のパンチは、「ダブルタップが起こらない」と言うことができないメンバーは、 彼らが唯一の証人であるレコードを修正する方法はありません。 できないことは それをカウントする — 未だに動くタイムカードの土地を 承認チェーン、および理由は、すべてのパスに必須です。 俳優がスタンプ SESSION から、体から決してない。身体に優しい俳優は、 他人の賃金記録に身体を補完する署名。 このサービスが実行されるので、2つのテスト、反対の方向で引きます anyRequest().permitAll() は、ハンド・ロール・パー・ハンドラーのauthでハンド・ロール・パー・ハンド・ハンド・ロート・パー・ハンドラーのauthでハンド・ロール・ロール・パー・ハンド・ロート・パー・ハンド・オースで行います。 リレーに到達することなく、同僚のパンチは、 権利を一切保持しない.
· kamo-shared-library
削除せずにパンチを無効にすることができます
4つの無効な列とTimecardPunchの2番目の書き込みオンス遷移。 ツイート void は、パンチは存在してはならないと述べています - クロックをダブルタップし、 放棄された壊れ目、または2つのスパン間の継ぎ目は、タイムカードエディタがちょうど持っている 1 つに結合される。 修正は不可能です(これは別の方法で起こった) 置換行を離れる時間", 削除: supersedByPunchId は "この他の行を代わりに読みます"、ここで他の行はありません。 行は、その著者とそれの隣にその理由で、無効に、生き残ります。 ワッジ パンチを忘れるために作ることができるレコードは正確にシフトする不十分です アンダーソンv. クレメンス・ポタリのアンダーワーカーへの負担がかかるので、 void は、計算に対するパンチの効果です。 enforceWorm() は supersedByPunchId と同じ条件で voidedAt を許可します — null 値に、一度 — なしの void。 所定の場所の不在 意図的に不可能:パンチを再指示すると、パンチを1つ入れることを意味します。 独自の行と独自の説明。 ******************** は、 便利。 unfiltered バリアントは、クロックの状態の決定に間違っています: a 重ねられた列は ORIGINAL の即刻を保ちます、従ってクロックアウトは後方に訂正しました wasAtUtc でデッド行を最新に残し、無効な行が最新の状態に保つ 何か新しいものがパンチされるまで。 「時計に頼る?」という答えはどれですか? もはや存在しないレコードから。 組織変更ルールごとにシーケンス: ローカルにインストールされた共有ライブラリ、KI 192.168.4.22:5433 にすべての 4 つの ALTER と書かれ、RUN を移行 アプリケーションは、このプッシュされただけなので、サービスは構築できません。 不要なスキーマ.
· InitializerService
Hr timecard punchのvoid カラム
TimecardPunchエンティティティティで4つの新しい無効な列をミラーリングします。 無効は 削除も修正もしない: パンチは存在してはならないと言う — 2つのスパン間の時計、放棄された壊れ目、または継ぎ目をタップ エディタは1つに統合しました。 SUPERSEDED BY PUNCH ID は表現できません。 そのカラムは「代わりにこの他の行を読み込む」という意味で、他にはない 行。 すべての 4 つは、NULLABLE です。これは、この安全をポップステーブルにすることです。 CockroachDB は ADD COLUMN を拒否します... NULL を空でないテーブルに置き、ロールします 全文は戻ってくるので、NOT NULL void マーカーは WARN として記録されるので、 捨てられた、そして静かに不在。 このランナーで FIRST を行く, 先のインデックスと REVOKEs 既に は、@Order(0) という理由で、共有lib が列をマップする瞬間、 パンチのエンティティティティをSELECTにロードするすべてのランナー、 column-add は「列」で以前のリーダーが死ぬことは全く実行しません 存在しません」とイニタイザーを取り下げます。 192.168.4.22:5433、すべての4つの適用に対して動かして下さい.
· kamo-internal
CRM市場が存在しない場合、市場オンボーディングパネルを表示
/leads は org 用の空の無効なマーケットタブバーでリードグリッドをレンダリングしました 決してCRM市場を構成しませんでした. 今、同じオンボーディングパネルが表示されます /商取引は欠落している商取引市場を示しています — 抽出された MarketOnboardingEmptyStateは、CRMリードによって駆動される2つの滞在が同一であるため、 商取引市場ではなく、設定 > クライアント・リレーション・マネージャーからの市場 CRMマーケット&フィールドタブでポイント. 手順と設定CTAは、CRMを管理することができるメンバーにのみ表示されます 設定; 他の誰もが既存のチェックバックレイターコピーを取得します.
· kamo-internal
期間グラフ、編集したタイムカードをドラフトとして
1日のタイムラインを****************************で置き換えます 有料期間全体で、どのような編集が感じているかを変更します。 丸薬はテキストを運びません。 自分の時間を運ぶのに使われ、ラベルは 60px の幅が広がりますが、説明したのは長かったので、10分間の休憩と 4時間シフトは同じ丸薬を引いて、1つのプロパティはタイムラインがそれを持っている テーブルは(幅は時間を意味します)、引き離されたプロパティでした。 両方とも 開始、終了、スパンを名前付けるツールチップに住んでいます。 それらを、そしてそれを更新する読み出しとドラッグされている端に続く 動きます。 コーナーは2.5pxです:機械的な硬度を取らないために十分に 5分の丸薬をロゼンジに丸めるのに十分。 時間ヘッダーは毎時ラベルを置き、それぞれは四半期の回転を反時計回り回しました とても20種類あります。 4つのラベルは6時間離れて誰にでも言うことができません 丸薬は9または10で始まり、唯一の質問はヘッダーがそこにある 錠剤が解明されていないことを今答えてください。 期間中に毎日行を取得し、まだ起こっていない日を取り入れます。 データの日だけを描画するグラフは、欠落したパンチを表示できず、 欠落したパンチは、タイムカードで間違っている最も一般的なことです。ギャップは、 発見し、発見は、上に表示される行を必要とします。 未来の日はむしろ孵化 単なる薄暗くならず、“まだ”と“誰も何も記録されていない”とは違う 事実。 MINUTEにスナップをドラッグします。 5分は9:02を表現できないので、 2 分が切れたクロックは、修正されず、すべての修正された時間がない 見積もりとして読み込まれた丸みを手に入れました。 ラウンドは給与方針です エンジンはそれの背後にある中性報告と適用します;スライダーは適用しません 第二に、目に見えないもの。 矢印キーは1分単位でnudgeを、15fteenによるシフト、Alt 1つの端を自分で取る — ポインタはトラックで分を表現できない ピクセル以下です。 そして、編集はドラフトです。 必須領域ダイアログを開くために使用されるドラッグ すべてのリリースで: 3 個の間違ったパンチで 1 日を固定して 3 を書くことを意味しました 説明、各々の「時計が間違っていた」と、実際の保護 アンダーソンv. マウントクレメンズ 陶器は、タイプされたボックスの人々に変換 「間違い」を離れる 誰もが倒すために学ぶ保護 誰も保護しません。 ステージを自由に編集し、1つの説明をまとめました 保存 — 必須であり、すべてのパンチに記録されたまま保存のタッチが、 誰かが実際に自分が何をしたか知っているとき、一度尋ねました。 何も書いていません それまで。 支持の変更: - app/lib/timecardGraph.ts は、グラフが作成するすべての決定を保持しています。 クランプ、スナップ、DST 安全な即刻シフト — 純粋な機能として、 何かをドラッグするだけでチェックできる賃金記録の決定 マウスで誰もチェックしない決定です。 34テスト。 - fetchRange は 404 で 1 日単位の読み込みに戻り、タブが壊れていない SecurityService のデプロイとこのデプロイ間で読み込みます。 - ローカルウォールクロックを介してアドオンタイムフィールド往復。 UTC をレンダリング datetime-local 入力にスライスし、結果をローカルにパースしたので、 フィールドへの訪問は、サイレンスのゾーンオフセットで時間を動かしました.
· SecurityService
エディタの期間範囲を中継
GET /members/{id}/range の期間グラフの読み込みのパススルー。 から TimecardServiceが会員自身の支払いを解決できるように、現在だけ転送 期間 — "?from=&to=" は空白の文字列を下流にバインドし、 サイレントは、すべての org のデフォルトをペイ カレンダーで破棄します。 Identity は resolveRole でチェックされ、/day が既に行っているのと同じです。 反対方向の2つの条件の引きおよび右ベースのゲートは得ます そのうちの1つだけ:同僚の時間を読む方法ではなく、 会員は、NOTHING を保持する主体自身を認めなければならない。 RESTRICTED tier は、すべての権利を持ち、まだ彼らの権利に法定を持っていません 自身の記録。 TimecardRangeAuthTest は、両方の方向とクエリビルをカバーしています。 このサービスは、ハンドロールされたパーハンドラのauthで、anyRequest().permitAll() を実行します。 チェックを忘れたマッピングは、公共のインターネットからアクセス可能 APIServiceのワイルドカードを転送します.
· kamo-internal
誰かに返信する時にサポート会話を上げる
サポートウィンドウを閉じると会話を離れませんが、そのまま扱いました お問い合わせ ChatNotificationListener は、すべてのサポートで早期に返されます。 通知 — 正しく、チケットがプレーンチャットウィンドウを開く必要がないため、 ライブを再開することなくサポートを残しました。 誰がパネルを閉じ、最も 頼まれに助けを求めた人は、単に見たことがない お問い合わせ 代わりにサポートウィンドウを開き、チケット ID で指定された 通知は運びます; ツールストアは、ticketId の dupes に保存されます。 重複するのではなく焦点を当てます。 AutoOpenUnreadSupportChatsは、しばらく到着した応答のために、耐久性の半分です 彼らは署名された — ライブプッシュは、再生せずにNATSコアです。 意図的に AssignedTicketOpenerとは別々です。その1つは「この作品は今あなたのものです」と答えています。 この1つは「誰かがあなたに何かを言った」と答え、そして最初に要求する 決して起こらない。 両方同じ自動開いた記録を通して認めて下さい チャットパスが使われるので、2番目のデバイスは最初に表示したものを再生しません。 ChatsList は、アクティビティのフレームをまっすぐオフする ticketId を取るようになりました。 シンセサイジング 開いたことができない行を生成せずにサポート行, そのため、リストは持っていました フレームを離れて投げ、それを得るために全ページを読んで下さい.
· MediaService
1つの会話、多くの手 — 開いている、すべてのメッセージに名前を付け、応答で再オープン
サポートチケットは、誰がサポートしているかだけでなく、誰がサポートしているかによって機能します 現在スタンピングされています。 委託は、仕事が提供され、その人を決定する で表示されているリスト。それは会話にロックされることを意味しなかった。 チケットを開くと、メディアセッションに参加できます。 以前は、開いたエージェント それらに割り当てられなかったキューからのチケットは、それにタイプすることができます - 何も メッセージを拒否したが、セッションのメンバーではないので、 チャットに現れない会話 -> サポート、連絡無し 達される これらは、要求者の「ここに私のエージェントです」がそれらをカウントしませんでした。 彼らは、 室内に話せなかった。 誰が参加できるかは同じ人口で、 すでに会話中の人、キュー内のチケットを見ることができます。 加えて ACCEPT SUPPORT TICKETS または MANAGE SUPPORT を割り当てられた org. 詳しくはこちら 今は拒否されました。このエンドポイントは、以前にプラットフォームでチケットを受け取りました。 UUID、組織全体、および組織全体で推測できる認証されたメンバー 参加ゲートは、見知らぬ人の会話を読んで、 それに書かれている。 すべてのメッセージが名前を運ぶようになりました。 senderName は直接読み直しました Member.usernameAlias、ほとんどすべてのメンバーで設定されていないオプションのニックネーム、 なので、null やチャットのレンダリングされたメッセージをアトリビューションなしでシリアライズします。 お問い合わせ サポートチケットが最悪で、複数のエージェントが1つある場合 答えると、顧客は誰が彼らに話しているかを伝えるための他の方法はありません。 MemberDisplayNames — 既にこのコントローラーで他の場所で使われています。 実際の名前。 同じ読み物は、割り当てられたエージェント名、チケットを空白にしていました 歴史の俳優、システム・イベントの俳優、エージェント・アベイラビリティの通知および レポートテーブル。 閉じたウィンドウは、失われた返信を意味しません。 着信メッセージ通知 チケットIDを運ぶので、クライアントはそれが伝えている会話を上げることができます あなたと /sessions/support/auto-open は、応答の耐久性の半分です 署名された時に到着 — メッセージ側のカウンター 今まで手を変えた仕事だけを覆った仕事だけを非開い、そう決して 助けを求める人のために火をつけました。 テスト: ChatListNativeAliasCaseTest はフィードクエリの列の引用をピン留めします エイリアス、他の何もキャッチできない - 失敗モードはサイレントヌルで、 エラーか例外をタイプして下さい。 SupportAutoOpenHqlTest は新しいクエリをパースします Spring Data は、起動時に @Query を検証し、 これは共有ライブラリに住んでいます.
· kamo-internal
リンク可能なタブ、作業の追加メンバー、および完全な履歴タブ
/account/view/{id} の各タブは実際のルートです。 /members, /history と 残りは、誰かに送ることができるリンクです, ブックマーク, または上陸. 古い?tab=リンクリダイレクト マッチングに。 各タブは独自のデータを読み込むので、アカウントを開かずに どのタブのデータも表示する前に待機します。 会員は「近日公開」トーストをオープンしました。 マネージャーと同じピッカーを開くようになりました フィールドの使用、スタッフではなく、組織のすべてのメンバーを検索する 口座に支払われる人は、ペイロールに頻繁にはありません。 すでに アカウントに表示されているが、理由で選択不能であるので、 単に検索から欠落して壊れたピッカーとして読みます. プライマリをセットして削除 あまりにも機能します。, それが何を言って、削除しないことを確認してください確認の後ろを削除します。. それぞれの列が1つあるテーブルとピッカーマークの両方。 それなしで メンバーとチームメンバーは同じように読み、リストは静かにみんなを意味します 作品紹介 メンバーの行は、現在でもレンダリングされます: 型はキーを主張しました エンドポイントは送信されず、すべての名前が "---" を示し、削除できません。 行 ID は、除去コールのニーズは発明されたフィールドの 1 つでした。 リードビューの履歴パネルは、EntityHistoryPanel になります。 アカウント履歴タブ:同じフィルタ、同じピアジング、同じ空の状態。 どんな滞在も 各発信者は、フィードがどこから来るか、その ID が意味するところだけです.
· InitializerService
アカウントを作成する
Kamo-shared-library の AccountHistory のエンティティティティティティティティをミラーリングします。 明示的に書かれた デフォルトの問題: ID と DATE CREATED データベースのデフォルトを運ぶので、単純な SQL インサートはそれらを命名することなく動作します。 Hibernate の生成された DDL は行いません。 外部キーがない、目的上 — ログは記述するものを生きます。 口座名義 結合され、メンバーは削除が失敗するか、または失敗することなく、orgを残すことができます 彼らと消えたものの記録.
· SecurityService
口座履歴エンドポイント、実際のメンバー行、全メンバーディレクトリ
アカウントビューは、アカウントに何が起こったのか、誰がそれを上回っているかを言うことができます。 - アカウント表面の記録履歴のすべての変異:作成、フィールド編集、 ソフト削除、マージ(敗北者のタイムラインをむしろ生存者に動かす) それをドロップするよりも)、アドレス、メモ、およびメンバーのadd/remove/primaryパス。 顧客/{uid}/history および /history/filters は鉛のエンドポイントを映します 内部サイト内の1つのコンポーネントが両方読み込まれているため、リクエストを要求します。 - getCustomerMembers は、メンバーの行がレンダリングする必要があるものを返します: 表示 名前、アバター、仕事のタイトル、およびisTeamMember。 どちらの人にも所属しています アカウント — 支払いはペイロールではなく、フラグなしで頻繁に行われます。 2 つは同じ読みます。 - updateCustomerMembers は id を文字列 (a unique rowid() として受け付けます。 MAX SAFE INTEGERは他の方法で丸みを帯びたに到着します)、プライマリメンバーをクリアします 削除される行は自分のものであり、もはやorphanRemoval-mappedをミュートしません リポジトリの書き込みと一緒にコレクション。 - ディレクトリの検索はスコープ=all ではなく、オーガニのすべてのメンバーに スタッフリスト、各行はどの様なかと言う。 エンドポイントラチェットはdenyUnlessを学びます。セッションをロードして401を返します。 右なしでも403か、それで開くハンドラは完了しました 呼び出し者を解決するよりも厳密に。 20代のベースラインエントリーのみ スキャンが既にあったガードが見られないため.
· kamo-shared-library
アカウントの監査経路と、非スタッフを含むディレクトリ
IDCOUNT HISTORY は、LEAD HISTORY レコードのアカウントに何が起こるかを記録します。 リードに何が起こるか — 意図的に同じ列が、内部だから 1つのコンポーネントと2番目の形状の両方が強制的にレンダリングされるようになりました 2秒目です。 - AccountHistory + リポジトリ + AccountHistoryService: フィールド上のスナップショット/差分 レジストリ、フィールド編集されていないもののワンオフイベント(メンバー) 参加、リードまたは到着、マージ) 録音は決して投げません:監査 監査していた操作を取らないと失敗する書き込み。 - AccountHistoryFieldRegistryは、追跡されたフィールドが宣言される単一の場所です。 実行合計は意図的に不在です — 彼らは注文の副作用として移動します, すでに自分のイベントを受け取ります。 - リードサービスは現在、リードリンクのアカウントの半分を書きます。 リードを攻撃する アカウントは2つのタイムラインで1つの行動であり、1つだけに記録する あなたが見ているページは、それを言及しない1です。 間を移動するリード 口座は両方に書き込みます。 - コマースサービスレコードORDER PLACED / LINKED / UNLINKED / STATUS CHANGED 購入口座から。 注文が購入者を持っていないとき無声。 メニュー スタッフ専用のディレクトリ検索 同僚を選ばないピッカーのために、orgのすべてのメンバーに広まっています。 TeamMemberRepo.searchDirectory の用語のステップで Kept を含む LEFT JOIN チームメンバーは、仕事のタイトルと部署をスタッフに検索できるようにします。 結果で。 ActiveOnly は、雇用状況を持つ行のみを話すことができます。 そのため、「採用されていない」として読み込まれるのではなく、1つのパスを使わずにメンバーを通します。 - Member.getPhoneExtension: getPhone() は番号に平らになり、拡張子を残します 外部からの到達不能.
· kamo-internal
パンチを書く前にクロックイン/アウトを確認します
Nav時計は、クリックをすぐにパンチしました。 そのバーの他のすべての制御 意図的または些細な不可解性である; パンチは、その後の賃金記録である 必須の書面による理由を持つHR管理者だけは正しいことができます — ボタン ログアウトから1つのピクセルを置きます。 現在はTimecardPunchConfirmDialogを標準に構築しました NewSupportRequestPopup と deliberately はそれのコピーではありません: そのカードはアラートです その割込みは、呼吸するので、そのバックドロップを拒否し、そのボタンを遅らせます。 ワンクリックで聞かれましたので、一度に腕を振ってエスケープを閉じて、 バックドロップ 2つの結果がなければならないので、イン、アンバーのために緑 単語が読み込まれる前には別々に言われます。 そのセンターピースはSECONDに刻まれている時計であり、コピーは直立していると言います 記録された時間は、時刻ではなく確認の瞬間である 決定中に画面 — 躊躇するポイントは自由であり、何もありません 言うまで書いてあります。 最初のティックは2番目の境界線に整列されますので、 readout は、メンバーの画面の他のすべてのクロックと一致します。 クリックが行なった場所を着陸する。 それを変更した行動: - ダイアログがOpenSを開き、再試行のために再利用すると、 idempotency キーがマイナスされます。 Per-attempt キーがバグだったので、このバグが防ぎます。期限切れのリクエストはうまくいくかもしれません。 新鮮なキーの下に着陸し、再試してみると、賃金の記録に2番目のパンチです。 - アクションはオープンタイムで凍結するので、60秒のポールは下に時計を反転します カード(電話からのパンチ)は、質問の途中で変更できません。 - 楽観的なフリップは消えます。 パンチがクリックを消火したため存在します。 会員は、サーバーの回答まで滞在するカードを閲覧できるようになりました。 推測された状態は、間違ったものだけを示すチャンスです。 - 失敗したパンチはカードを開いた握り、そう言う。 アイコンを無声に反転させる 起こらないパンチについて学ぶ方法なし — 後日表面 タイムカードの欠如例外として。 - ID(god-mode sudo、セッションスイッチ)の切り替えは、オープン確認をドロップします。 それ以外の場合は、前のメンバーのパンチを新しいものに書きます.
· kamo-internal
選択の場所にセグメンテーションされたステータスフィルタ
Pending/Complete/All は 1 行に合致する 3 つの短い仲間なので、 クリックの背後にある2つをドロップダウンし、ラベルと170pxを費やしました 何も言わない。 クローズドセレクションも「お探しの午前」には答えできません。 すべて? 開かずに。 セグメント別 フィルターは共有されます:排他的なToggleButtonGroupのアクセントとして取られる 各表面がそのアイデンティティを維持し、排他的なnullが保持するCSS var 選択したセグメントが再クリックされると、モードのハンズが破棄されます。 フィルターは常に値を持っています。 割り当てられた訓練はそれも、で得ます --training-brand:2つのパネルは1つのタブのストリップを共有し、そのうちの1つ ドロップダウンを2つの異なる製品として読み続ける.
· kamo-internal
オプションをクラッシュするのではなく、混雑した nav をスライドさせる
ナブよりも多くのオプションをピニングは、形状からタイルを絞り込むことができます。 両方のストリップは未加工流出箱であり、タイルは非屈曲の子供です 自分自身の柔軟な収縮、トップバーはそれらを歪めました(そして、その scrollbar outright, 署名なしでオプションを飲み込む) 一方、 レールは12pxのスクロールバーを独自のグラデーションの上に書きます。 navs は、NavOverflowScroller を通して、移動可能なオプションをレンダーできるようになりました。 タイルは足跡、端の矢および柔らかい端だけに衰退させます まだ到達する何かを持っている側面, ストリップは、ページを張ることができます, 保持, 車輪をつけられて、勢いと投げられて、またはドラッグされて。 現在のページのオプションは 到着時に戻ってスクロールし、トップバーの固定クロムなし 吸収できる子でショートフォールを共有します。 オプションをドラッグし、ストリップをスライドさせることは、混雑した上で同じジェスチャーです nav, ので、混雑した nav は、ショートホールドの後ろにリアランを置きます. それを保持する dnd-kit のマウスダウンを `delay` ではなく呼びます。 制約: 遅延制約はタイマー単独で起動し、dnd-kit アクティベーションに到達する任意のプレスのクリックを抑制します。, 持っているだろう ナビゲーションから nav オプションをクリックするだけで、毎晩停止します.
· kamo-marketing
より多くの言語でコレクションの詳細ページをインデックス化
同期が終了したので ~2,400 の詳細なページは、 英語のボディコピーは現在、実際の翻訳があり、インデックス化できます。 測定される 全21ヶ所に渡る:0.0%と8.8%のコレクションの間のすべての土地 数値は英語と同一で、sw と ta を正確に 100.0% で指定します。 プロバイダーがないので、TranslateService はソーステキストと実行を返しました 成功の出現の下にある英語を書いて下さい。 コレクション CONTENT LOCALES は、したがって、リストされていない: 広告されるすべての locale は no provider セットをマイナスします。 sw は noindex を詳細ページだけに保つ — そのベースバンドルは本物スワヒリなので、静的なページはインデックス化されます。 すでに英語にキャニオナルスがあるので、ロボットの指示をまったく取得しません 先頭に noindex をスタックすると、2 つの矛盾信号が送信されます コンテンツの1つ.
· kamo-shared-library
コンプライアンス・マトリクスのオンデュー・ロールアップ
HR 概要の行列ブランチは `row.overdue > 0` ではなく、 トレーニングは、そのフィールドにハードコードされた0に出荷 - できるブランチ 決して取らないので、これらの2つのドメインは、アンバーやグリーンしか表示できません。 "sorted bottom-first" が生成されました。 (member, status) のヒストグラムは答えません: これは、fairAt を実行しません。 お問い合わせ リポジトリは、述語がキャラクター・フォー・キャラクタであるグループ化されたカウントを獲得します。 1 で countOverdueForOrg, プラス グループ バイ チーム メンバーID. 述語を共有することは パーメンバーの図は、上にレンダリングされた org レベルのカウントにまとめるもの お問い合わせ クエリメソッドのみ。 組織変更なし、DDL なし、バージョンは 1.5.0 を維持します。 開いているセットを所有し、2つは同じではありません:法的パス OPEN STATES, トレーニングパスREMINDABLE STATES. AWAITING GRADINGはオープンしていますが、 会員が何もしず、それをカウントすると、法的を再現する モジュールの AWAITING OTHERS のバグは、数週間遅れたオンタイムメンバーに伝えました。 永遠に.
· kamo-internal
概要タブを他の4つのレポートとして作成する
全角レポーティングコンソール:マスヘッドの読み出し、4つのタブの柱、 必要性保持のledger、労働力の承諾のマトリックスおよび活動 レール。 読み取り専用 — すべてのアクションは、所有するタブに深いリンクです.
· kamo-internal
概要の注意のledger、承諾のマトリックスおよび活動の柵
useMemberNames ソース /api/security/members/names ではなく、ブリーフの推測 .../org-config シェイプ: org-config は、メンバーリストを返さない(読むことで確認) LegalPackageDialog.tsx と TrainingAssignDialog.tsx は、部署/jobTitles のみを解析します。 から)、/members/name は id-to-name の解像度のために既に構築されているエンドポイントであり、 mortgageAppsApi.memberNames() と同じ方法で既に使用しました.
· kamo-internal
概要 マストヘッドと4つのタブの柱
· kamo-internal
概要データホックと共有されたビジュアルプリミティブ
useHrOverview fetches の出席 + docs allSettled の要約 デッドサービスは独自のセクションだけを劣化させます。フェッチを完全にスキップします。 セクション可視OverviewSections() は、メンバーが見えないと言います。 ザ・オブ・ザ・ プリミティブ (countUp, ProgressRing, StackedBar, StatePip, 図) SectionShell は共有ビルドブロックで、概要セクションのレンダーをブロックします。 と、使用によってガードされるすべての動きReducedMotionおよびEASE HOUSE.
